[ADD] pad: server module with web addon component

bzr revid: xmo@openerp.com-20101021111330-9loqx0lht8noi5bp
This commit is contained in:
Xavier Morel
2010-10-21 13:13:30 +02:00
10 changed files with 156 additions and 0 deletions
+15
View File
@@ -0,0 +1,15 @@
OpenERP, Open Source Management Solution
Copyright © 2010 OpenERP SA (<http://openerp.com>).
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public Lice
along with this program. If not, see <http://www.gnu.org/licenses/>.
+2
View File
@@ -0,0 +1,2 @@
# -*- coding: utf-8 -*-
import company_pad
+20
View File
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
{
'name': 'Enhanced support for (Ether)Pad attachments',
'version': '1.0',
'category': 'Generic Modules/Others',
'description': """
Adds enhanced support for (Ether)Pad attachments in the web client, lets the
company customize which Pad installation should be used to link to new pads
(by default, pad.openerp.com)
""",
'author': 'OpenERP SA',
'website': 'http://openerp.com',
'depends': ['base'],
'update_xml': [
'company_pad.xml'
],
'installable': True,
'active': False,
'web': True,
}
+15
View File
@@ -0,0 +1,15 @@
# -*- coding: utf-8 -*-
from osv import fields, osv
class company_pad(osv.osv):
_inherit = 'res.company'
_columns = {
'pad_index': fields.char('Pad root URL', size=64, required=True,
help="The root URL of the company's pad "
"instance"),
}
_defaults = {
'pad_index': 'http://pad.openerp.com'
}
company_pad()
+16
View File
@@ -0,0 +1,16 @@
<openerp>
<data>
<record id="view_company_form_with_pad" model="ir.ui.view">
<field name="name">res.company.form.pad</field>
<field name="model">res.company</field>
<field name="type">form</field>
<field name="inherit_id" ref="base.view_company_form"/>
<field name="arch" type="xml">
<xpath expr="//page[@string='Configuration']" position="inside">
<separator string="Pad" colspan="4"/>
<field name="pad_index"/>
</xpath>
</field>
</record>
</data>
</openerp>
+2
View File
@@ -0,0 +1,2 @@
import controllers
import editors
+34
View File
@@ -0,0 +1,34 @@
import urlparse
import cherrypy
from openobject.tools import expose
import openerp.controllers
from openerp.utils import rpc, TinyDict
class Piratepad(openerp.controllers.SecuredController):
_cp_path = "/piratepad"
def get_root(self):
return rpc.RPCProxy('res.company').read(
[rpc.session.company_id], ['pad_index'])[0]['pad_index']
def make_url(self, pad_name):
return urlparse.urljoin(
self.get_root(), '-'.join(pad_name.split())
)
@expose('json', methods=('POST',))
def link(self, pad_name):
params, data = TinyDict.split(cherrypy.session['params'])
ctx = dict(rpc.session.context,
default_res_model=params.model, default_res_id=params.id,
active_id=False, active_ids=[])
pad_link = self.make_url(pad_name)
attachment_id = rpc.RPCProxy('ir.attachment').create({
'name': pad_name,
'url': pad_link,
}, ctx)
return {'id': attachment_id, 'name': pad_name, 'url': pad_link}
+46
View File
@@ -0,0 +1,46 @@
# -*- coding: utf-8 -*-
import openobject.templating
class SidebarTemplateEditor(openobject.templating.TemplateEditor):
templates = ['/openerp/widgets/templates/sidebar.mako']
ADD_ATTACHMENT_BUTTON = u'id="add-attachment"'
BINARY_ATTACHMENTS_FORM = u'<form id="attachment-box"'
def insert_pad_link(self, output):
# Insert the link on the line right after the link to open the
# attachment form
form_opener_insertion = output.index(
'\n',
output.index(self.ADD_ATTACHMENT_BUTTON)) + 1
output = output[:form_opener_insertion] + \
'''<a href="#" id="add-pad" class="button-a"
style="right: 44px;"
>${_("Pad")}</a>\n''' + \
output[form_opener_insertion:]
return output
def edit(self, template, template_text):
output = super(SidebarTemplateEditor, self).edit(template, template_text)
output = self.insert_pad_link(output)
form_insertion_point = output.index(self.BINARY_ATTACHMENTS_FORM)
return output[:form_insertion_point] + '''
<form id="pad-form" action="/piratepad/link" method="post">
<label for="sidebar_pad_datas">${_("Name")}:</label>
<input id="sidebar_pad_datas"
name="pad_name" size="5" />
<button>${_("Ok")}</button>
</form>
<script type="text/javascript">
jQuery(document).ready(function() {
var $padForm = jQuery('#pad-form')
.hide()
.submit(createAttachment);
jQuery('#add-pad').click(function(e){
$padForm.show();
e.preventDefault();
});
});
</script>
''' + output[form_insertion_point:]
+5
View File
@@ -31,6 +31,11 @@ class misc_tools_installer(osv.osv_memory):
'idea':fields.boolean('Ideas Box',help='Promote ideas of the employees, votes and discussion on best ideas.'),
'share':fields.boolean('Share Data / Portals',help='This module allows you to easily give restricted access of any filtered list of objects to any customer or supplier.' \
'Just click on the share icon to give access to your customers on their project\'s tasks, support requests, invoices, etc.'),
'pad': fields.boolean('Native pad integration',
help="This module creates a tighter integration between a Pad "
"instance of your choosing and your OpenERP Web Client by "
"letting you easily link pads to OpenERP objects via "
"OpenERP attachments."),
}
_defaults = {
}
@@ -30,6 +30,7 @@
<field name="idea"/>
<field name="survey"/>
<field name="subscription" groups="base.group_extended"/>
<field name="pad"/>
</group>
</data>
</field>