wip part1 (no setHTML) working
bzr revid: al@openerp.com-20120829123833-4b9kp33d9ne2gyom
This commit is contained in:
parent
2f81a1adc6
commit
588f233f15
|
@ -1,42 +1,62 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from osv import fields, osv
|
from osv import fields, osv
|
||||||
import random
|
import random
|
||||||
|
import re
|
||||||
import string
|
import string
|
||||||
import urllib2
|
import urllib2
|
||||||
from tools.translate import _
|
from tools.translate import _
|
||||||
|
|
||||||
class pad_common(osv.osv_memory):
|
class pad_common(osv.osv_memory):
|
||||||
_name = 'pad.common'
|
_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):
|
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
|
s = string.ascii_uppercase + string.digits
|
||||||
salt = ''.join([s[random.randint(0, len(s) - 1)] for i in range(8)])
|
salt = ''.join([s[random.randint(0, len(s) - 1)] for i in range(10)])
|
||||||
template_vars = {
|
# contruct the url
|
||||||
'db' : cr.dbname,
|
url = '%s/p/%s-%s-%s' % (pad_server, cr.dbname, self._name, salt)
|
||||||
'model' : self._name,
|
|
||||||
'salt' : salt,
|
|
||||||
}
|
|
||||||
url = pad_url_template % template_vars
|
|
||||||
return url
|
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('<body>(.*)</body>',page)
|
||||||
|
if mo:
|
||||||
|
content = mo.group(1)
|
||||||
|
return content
|
||||||
|
|
||||||
# TODO
|
# 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
|
# reverse engineer protocol to be setHtml without using the api key
|
||||||
# override default get to generate urls
|
# override read and copy to generate url and store the content if empty
|
||||||
# override read 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):
|
def copy(self, cr, uid, id, default=None, context=None):
|
||||||
if not default:
|
if not default:
|
||||||
default = {}
|
default = {}
|
||||||
update = [(field,self.pad_generate_url(cr, uid, context)) for field in self._pad_fields]
|
for k,v in self._all_columns:
|
||||||
default.update(update)
|
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)
|
return super(pad_common, self).copy(cr, uid, id, default, context)
|
||||||
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||||
|
|
|
@ -1,16 +1,11 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from osv import fields, osv
|
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):
|
class company_pad(osv.osv):
|
||||||
_inherit = 'res.company'
|
_inherit = 'res.company'
|
||||||
_columns = {
|
_columns = {
|
||||||
'pad_url_template': fields.char('Pad URL Template', size=128, required=True, help="Template used to generate pad URL."),
|
'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."),
|
||||||
_defaults = {
|
|
||||||
'pad_url_template': DEFAULT_PAD_TEMPLATE,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,8 @@
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<xpath expr="//group[@name='account_grp']" position="after">
|
<xpath expr="//group[@name='account_grp']" position="after">
|
||||||
<group string="Pads">
|
<group string="Pads">
|
||||||
<field name="pad_url_template" placeholder="e.g. http://beta.etherpad.org/p/%%(db)s-%%(model)s-%%(salt)s"/>
|
<field name="pad_server" placeholder="e.g. beta.primarypad.org"/>
|
||||||
|
<field name="pad_key"/>
|
||||||
</group>
|
</group>
|
||||||
</xpath>
|
</xpath>
|
||||||
</field>
|
</field>
|
||||||
|
|
|
@ -16,14 +16,8 @@ instance.web.form.FieldPad = instance.web.form.AbstractField.extend({
|
||||||
var self = this;
|
var self = this;
|
||||||
var _super = self._super;
|
var _super = self._super;
|
||||||
_super.apply(self,[val]);
|
_super.apply(self,[val]);
|
||||||
if (val === false || val === "") {
|
this._dirty_flag = true;
|
||||||
self.field_manager.dataset.call('pad_generate_url').then(function(r) {
|
self.render_value();
|
||||||
_super.apply(self,[r]);
|
|
||||||
self.render_value();
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
self.render_value();
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
render_value: function() {
|
render_value: function() {
|
||||||
console.log("display");
|
console.log("display");
|
||||||
|
|
|
@ -12,9 +12,6 @@
|
||||||
</t>
|
</t>
|
||||||
<t t-name="FieldPad.unconfigured">
|
<t t-name="FieldPad.unconfigured">
|
||||||
Please configure your etherpad server.<br/>
|
Please configure your etherpad server.<br/>
|
||||||
OpenERP Entreprise customers may safely use pad.openerp.com as a server using the following template:<br/>
|
OpenERP Entreprise customers may safely use pad.openerp.com<br/>
|
||||||
<blockquote>
|
|
||||||
http://pad.openerp.com/p/%(db)s-%(model)s-%(salt)s
|
|
||||||
</blockquote>
|
|
||||||
</t>
|
</t>
|
||||||
</templates>
|
</templates>
|
||||||
|
|
|
@ -5,7 +5,6 @@ from osv import fields, osv
|
||||||
class task(osv.osv):
|
class task(osv.osv):
|
||||||
_name = "project.task"
|
_name = "project.task"
|
||||||
_inherit = ["project.task",'pad.common']
|
_inherit = ["project.task",'pad.common']
|
||||||
_pad_fields = ['description_pad']
|
|
||||||
_columns = {
|
_columns = {
|
||||||
'description_pad': fields.char('Description PAD', size=250)
|
'description_pad': fields.char('Description PAD', pad_content_field='description')
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue