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 -*-
|
||||
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('<body>(.*)</body>',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:
|
||||
|
|
|
@ -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."),
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -7,7 +7,8 @@
|
|||
<field name="arch" type="xml">
|
||||
<xpath expr="//group[@name='account_grp']" position="after">
|
||||
<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>
|
||||
</xpath>
|
||||
</field>
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -12,9 +12,6 @@
|
|||
</t>
|
||||
<t t-name="FieldPad.unconfigured">
|
||||
Please configure your etherpad server.<br/>
|
||||
OpenERP Entreprise customers may safely use pad.openerp.com as a server using the following template:<br/>
|
||||
<blockquote>
|
||||
http://pad.openerp.com/p/%(db)s-%(model)s-%(salt)s
|
||||
</blockquote>
|
||||
OpenERP Entreprise customers may safely use pad.openerp.com<br/>
|
||||
</t>
|
||||
</templates>
|
||||
|
|
|
@ -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')
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue