From 588f233f15ce47e6ce381ed137ff8eefaa9f5ffc Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Wed, 29 Aug 2012 14:38:33 +0200 Subject: [PATCH] wip part1 (no setHTML) working bzr revid: al@openerp.com-20120829123833-4b9kp33d9ne2gyom --- addons/pad/pad.py | 58 ++++++++++++++++++++---------- addons/pad/res_company.py | 9 ++--- addons/pad/res_company.xml | 3 +- addons/pad/static/src/js/pad.js | 10 ++---- addons/pad/static/src/xml/pad.xml | 5 +-- addons/pad_project/project_task.py | 3 +- 6 files changed, 47 insertions(+), 41 deletions(-) diff --git a/addons/pad/pad.py b/addons/pad/pad.py index 3431e196b59..6f6b435cf3c 100644 --- a/addons/pad/pad.py +++ b/addons/pad/pad.py @@ -1,42 +1,62 @@ # -*- coding: utf-8 -*- from osv import fields, osv import random +import re import string import urllib2 from tools.translate import _ class pad_common(osv.osv_memory): _name = 'pad.common' - _pad_fields = [] - - def pad_content(self, cr, uid, url ,context=None): - content = urllib2.urlopen('%s/export/html'%url).read() - return content def pad_generate_url(self, cr, uid, context=None): - pad_url_template = self.pool.get('res.users').browse(cr,uid, uid, context).company_id.pad_url_template + pad_server = self.pool.get('res.users').browse(cr, uid, uid, context).company_id.pad_server + # make sure pad server in the form of http://hostname + if not pad_server.startswith('http'): + pad_server = 'http://' + pad_server + pad_server = pad_server.rstrip('/') + # generate a salt s = string.ascii_uppercase + string.digits - salt = ''.join([s[random.randint(0, len(s) - 1)] for i in range(8)]) - template_vars = { - 'db' : cr.dbname, - 'model' : self._name, - 'salt' : salt, - } - url = pad_url_template % template_vars + salt = ''.join([s[random.randint(0, len(s) - 1)] for i in range(10)]) + # contruct the url + url = '%s/p/%s-%s-%s' % (pad_server, cr.dbname, self._name, salt) return url + def pad_get_content(self, cr, uid, url, context=None): + content = '' + if url: + page = urllib2.urlopen('%s/export/html'%url).read() + mo = re.search('(.*)',page) + if mo: + content = mo.group(1) + return content + # TODO - # add attribute on columns pad_content_field = - # override default write to load the content at write and store it in the field # reverse engineer protocol to be setHtml without using the api key - # override default get to generate urls - # override read to generate url and store the content if empty + # override read and copy to generate url and store the content if empty + + def default_get(self, cr, uid, fields, context=None): + data = super(pad_common, self).default_get(cr, uid, fields, context) + for k in fields: + field = self._all_columns[k].column + if hasattr(field,'pad_content_field'): + data[k] = self.pad_generate_url(cr, uid, context=context) + return data + + def write(self, cr, uid, ids, vals, context=None): + for k,v in vals.items(): + field = self._all_columns[k].column + if hasattr(field,'pad_content_field'): + vals[field.pad_content_field] = self.pad_get_content(cr, uid, v, context=context) + return super(pad_common, self).write(cr, uid, ids, vals, context=context) def copy(self, cr, uid, id, default=None, context=None): if not default: default = {} - update = [(field,self.pad_generate_url(cr, uid, context)) for field in self._pad_fields] - default.update(update) + for k,v in self._all_columns: + field = v.column + if hasattr(field,'pad_content_field'): + default[k] = self.pad_generate_url(cr, uid, context) return super(pad_common, self).copy(cr, uid, id, default, context) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/pad/res_company.py b/addons/pad/res_company.py index 703e655219b..fcf8bc97e91 100644 --- a/addons/pad/res_company.py +++ b/addons/pad/res_company.py @@ -1,16 +1,11 @@ # -*- coding: utf-8 -*- from osv import fields, osv -DEFAULT_PAD_TEMPLATE = 'http://pad.openerp.com/p/%(db)s-%(model)s-%(salt)s' -DEFAULT_PAD_TEMPLATE = '' - class company_pad(osv.osv): _inherit = 'res.company' _columns = { - 'pad_url_template': fields.char('Pad URL Template', size=128, required=True, help="Template used to generate pad URL."), - } - _defaults = { - 'pad_url_template': DEFAULT_PAD_TEMPLATE, + 'pad_server': fields.char('Pad Server', help="Etherpad lite server. Example: beta.primarypad.com"), + 'pad_key': fields.char('Pad Api Key', help="Etherpad lite api key."), } diff --git a/addons/pad/res_company.xml b/addons/pad/res_company.xml index 017561aaec3..5a9164db2f4 100644 --- a/addons/pad/res_company.xml +++ b/addons/pad/res_company.xml @@ -7,7 +7,8 @@ - + + diff --git a/addons/pad/static/src/js/pad.js b/addons/pad/static/src/js/pad.js index a295e860a51..511400bcede 100644 --- a/addons/pad/static/src/js/pad.js +++ b/addons/pad/static/src/js/pad.js @@ -16,14 +16,8 @@ instance.web.form.FieldPad = instance.web.form.AbstractField.extend({ var self = this; var _super = self._super; _super.apply(self,[val]); - if (val === false || val === "") { - self.field_manager.dataset.call('pad_generate_url').then(function(r) { - _super.apply(self,[r]); - self.render_value(); - }); - } else { - self.render_value(); - } + this._dirty_flag = true; + self.render_value(); }, render_value: function() { console.log("display"); diff --git a/addons/pad/static/src/xml/pad.xml b/addons/pad/static/src/xml/pad.xml index 58266a2594a..e84414dd4e8 100644 --- a/addons/pad/static/src/xml/pad.xml +++ b/addons/pad/static/src/xml/pad.xml @@ -12,9 +12,6 @@ Please configure your etherpad server.
- OpenERP Entreprise customers may safely use pad.openerp.com as a server using the following template:
-
- http://pad.openerp.com/p/%(db)s-%(model)s-%(salt)s -
+ OpenERP Entreprise customers may safely use pad.openerp.com
diff --git a/addons/pad_project/project_task.py b/addons/pad_project/project_task.py index 513fc3fef5d..6ebebae97fd 100644 --- a/addons/pad_project/project_task.py +++ b/addons/pad_project/project_task.py @@ -5,7 +5,6 @@ from osv import fields, osv class task(osv.osv): _name = "project.task" _inherit = ["project.task",'pad.common'] - _pad_fields = ['description_pad'] _columns = { - 'description_pad': fields.char('Description PAD', size=250) + 'description_pad': fields.char('Description PAD', pad_content_field='description') }