Merge lp:~jfb-tempo-consulting/unifield-web/us-1519 into lp:unifield-web

Proposed by jftempo
Status: Merged
Merged at revision: 4802
Proposed branch: lp:~jfb-tempo-consulting/unifield-web/us-1519
Merge into: lp:unifield-web
Diff against target: 303 lines (+127/-28)
7 files modified
addons/openerp/controllers/database.py (+60/-18)
addons/openerp/controllers/preferences.py (+5/-3)
addons/openerp/controllers/root.py (+7/-0)
addons/openerp/controllers/templates/login.mako (+17/-4)
addons/openerp/controllers/utils.py (+4/-1)
openobject/widgets/_widgets.py (+2/-1)
openobject/widgets/templates/form.mako (+32/-1)
To merge this branch: bzr merge lp:~jfb-tempo-consulting/unifield-web/us-1519
Reviewer Review Type Date Requested Status
UniField Reviewer Team Pending
Review via email: mp+303673@code.launchpad.net
To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'addons/openerp/controllers/database.py'
2--- addons/openerp/controllers/database.py 2016-05-09 12:01:47 +0000
3+++ addons/openerp/controllers/database.py 2016-08-23 11:52:35 +0000
4@@ -50,20 +50,52 @@
5 except:
6 return []
7
8+class ReplacePasswordField(openobject.widgets.PasswordField):
9+ params = {
10+ 'autocomplete': 'Autocomplete field',
11+ }
12+ autocomplete = 'off'
13+ replace_for = False
14+
15+ def __init__(self, *arg, **kwargs):
16+ # disable form default submit action when user hits Enter in the field
17+ self.replace_for = kwargs['name']
18+ kwargs['name'] = 'show_%s' % kwargs['name']
19+ kwargs.setdefault('attrs', {}).update({
20+ 'onkeydown': 'if (event.keyCode == 13) replace_pass_submit()',
21+ 'class': 'requiredfield',
22+ })
23+ super(ReplacePasswordField, self).__init__(*arg, **kwargs)
24+
25+
26 class DBForm(openobject.widgets.Form):
27 strip_name = True
28
29 def __init__(self, *args, **kw):
30 super(DBForm, self).__init__(*args, **kw)
31+ to_add = []
32+ for field in self.fields:
33+ if isinstance(field, ReplacePasswordField):
34+ to_add.append(openobject.widgets.HiddenField(name=field.replace_for, attrs={'autocomplete':'off'}))
35+ self.replace_password_fields[field.name] = field.replace_for
36+ if to_add:
37+ self.hidden_fields += to_add
38 if self.validator is openobject.validators.DefaultValidator:
39 self.validator = openobject.validators.Schema()
40 for f in self.fields:
41 self.validator.add_field(f.name, f.validator)
42+ for add in to_add:
43+ self.validator.add_field(add.name, formencode.validators.NotEmpty())
44
45 def update_params(self, params):
46 super(DBForm, self).update_params(params)
47 params['attrs']['action'] = url(self.action)
48
49+ def error_for(self, item, error):
50+ if error and isinstance(item, ReplacePasswordField):
51+ return error.error_dict.get(item.replace_for)
52+ return super(DBForm, self).error_for(item, error)
53+
54 class FormCreate(DBForm):
55 name = "create"
56 string = _('Create database')
57@@ -71,31 +103,37 @@
58 submit_text = _('Create')
59 strip_name = True
60 form_attrs = {'onsubmit': 'return on_create()'}
61- fields = [openobject.widgets.PasswordField(name='password', label=_('Super admin password:'), validator=formencode.validators.NotEmpty(), help=_("This is the password of the user that have the rights to administer databases. This is not a OpenERP user, just a super administrator.")),
62- openobject.widgets.TextField(name='dbname', label=_('New database name:'), validator=formencode.validators.NotEmpty(), help=_("Choose the name of the database that will be created. The name must not contain any special character. Exemple: 'terp'.")),
63-# openobject.widgets.CheckBox(name='demo_data', label=_('Load Demonstration data:'), default=False, validator=validators.Bool(if_empty=False), help=_("Check this box if you want demonstration data to be installed on your new database. These data will help you to understand OpenERP, with predefined products, partners, etc.")),
64- openobject.widgets.SelectField(name='language', options=get_lang_list, validator=validators.String(), label=_('Default Language:'), help=_("Choose the default language that will be installed for this database. You will be able to install new languages after installation through the administration menu.")),
65- openobject.widgets.PasswordField(name='admin_password', label=_('Administrator password:'), validator=formencode.validators.NotEmpty(), help=_("This is the password of the 'admin' user that will be created in your new database.")),
66- openobject.widgets.PasswordField(name='confirm_password', label=_('Confirm password:'), validator=formencode.validators.NotEmpty(), help=_("This is the password of the 'admin' user that will be created in your new database. It has to be the same than the above field."))
67- ]
68+ fields = [
69+ ReplacePasswordField(name='password', label=_('Super admin password:'), help=_("This is the password of the user that have the rights to administer databases. This is not a OpenERP user, just a super administrator.")),
70+ openobject.widgets.TextField(name='dbname', label=_('New database name:'), validator=formencode.validators.NotEmpty(), help=_("Choose the name of the database that will be created. The name must not contain any special character. Exemple: 'terp'.")),
71+# openobject.widgets.CheckBox(name='demo_data', label=_('Load Demonstration data:'), default=False, validator=validators.Bool(if_empty=False), help=_("Check this box if you want demonstration data to be installed on your new database. These data will help you to understand OpenERP, with predefined products, partners, etc.")),
72+ openobject.widgets.SelectField(name='language', options=get_lang_list, validator=validators.String(), label=_('Default Language:'), help=_("Choose the default language that will be installed for this database. You will be able to install new languages after installation through the administration menu.")),
73+ ReplacePasswordField(name='confirm_password', label=_('Confirm password:'), help=_("This is the password of the 'admin' user that will be created in your new database. It has to be the same than the above field.")),
74+ ReplacePasswordField(name='admin_password', label=_('Administrator password:'), help=_("This is the password of the 'admin' user that will be created in your new database.")),
75+ ]
76 validator = openobject.validators.Schema(chained_validators=[formencode.validators.FieldsMatch("admin_password","confirm_password")])
77
78+
79 class FormDrop(DBForm):
80 name = "drop"
81 string = _('Drop database')
82 action = '/openerp/database/do_drop'
83 submit_text = _('Drop')
84 form_attrs = {'onsubmit': 'return window.confirm(_("Do you really want to drop the selected database?"))'}
85- fields = [openobject.widgets.SelectField(name='dbname', options=get_db_list, label=_('Database:'), validator=validators.String(not_empty=True)),
86- openobject.widgets.PasswordField(name='password', label=_('Drop password:'), validator=formencode.validators.NotEmpty())]
87+ fields = [
88+ openobject.widgets.SelectField(name='dbname', options=get_db_list, label=_('Database:'), validator=validators.String(not_empty=True)),
89+ ReplacePasswordField(name='password', label=_('Drop password:')),
90+ ]
91
92 class FormBackup(DBForm):
93 name = "backup"
94 string = _('Backup database')
95 action = '/openerp/database/do_backup'
96 submit_text = _('Backup')
97- fields = [openobject.widgets.SelectField(name='dbname', options=get_db_list, label=_('Database:'), validator=validators.String(not_empty=True)),
98- openobject.widgets.PasswordField(name='password', label=_('Backup password:'), validator=formencode.validators.NotEmpty())]
99+ fields = [
100+ openobject.widgets.SelectField(name='dbname', options=get_db_list, label=_('Database:'), validator=validators.String(not_empty=True)),
101+ ReplacePasswordField(name='password', label=_('Backup password:')),
102+ ]
103
104 class FileField(openobject.widgets.FileField):
105 def adjust_value(self, value, **params):
106@@ -106,9 +144,12 @@
107 string = _('Restore database')
108 action = '/openerp/database/do_restore'
109 submit_text = _('Restore')
110- fields = [FileField(name="filename", label=_('File:')),
111- openobject.widgets.PasswordField(name='password', label=_('Restore password:'), validator=formencode.validators.NotEmpty()),
112- openobject.widgets.TextField(name='dbname', label=_('New database name:'), validator=formencode.validators.NotEmpty(), readonly=1, attrs={'readonly': ''})]
113+ fields = [
114+ FileField(name="filename", label=_('File:')),
115+ ReplacePasswordField(name='password', label=_('Restore password:')),
116+ openobject.widgets.TextField(name='dbname', label=_('New database name:'), validator=formencode.validators.NotEmpty(), readonly=1, attrs={'readonly': ''})
117+ ]
118+
119 hidden_fields = [openobject.widgets.HiddenField(name='fpath', label=_('Path:'))]
120
121 class FormPassword(DBForm):
122@@ -116,10 +157,11 @@
123 string = _('Change Administrator Password')
124 action = '/openerp/database/do_password'
125 submit_text = _('Change Password')
126- fields = [openobject.widgets.PasswordField(name='old_password', label=_('Old super admin password:'), validator=formencode.validators.NotEmpty()),
127- openobject.widgets.PasswordField(name='new_password', label=_('New super admin password:'), validator=formencode.validators.NotEmpty()),
128- openobject.widgets.PasswordField(name='confirm_password', label=_('Confirm Password:'), validator=formencode.validators.NotEmpty())]
129-
130+ fields = [
131+ ReplacePasswordField(name='old_password', label=_('Old super admin password:')),
132+ ReplacePasswordField(name='new_password', label=_('New super admin password:')),
133+ ReplacePasswordField(name='confirm_password', label=_('Confirm Password:')),
134+ ]
135 validator = openobject.validators.Schema(chained_validators=[formencode.validators.FieldsMatch("new_password","confirm_password")])
136
137
138
139=== modified file 'addons/openerp/controllers/preferences.py'
140--- addons/openerp/controllers/preferences.py 2015-05-13 15:01:35 +0000
141+++ addons/openerp/controllers/preferences.py 2016-08-23 11:52:35 +0000
142@@ -34,9 +34,11 @@
143 class PrefsPassword(database.FormPassword):
144 action = "/openerp/pref/password"
145 string = _('Change your password')
146- fields = [openobject.widgets.PasswordField(name='old_password', label=_('Old Password:'), validator=formencode.validators.NotEmpty()),
147- openobject.widgets.PasswordField(name='new_password', label=_('New Password:'), validator=formencode.validators.NotEmpty()),
148- openobject.widgets.PasswordField(name='confirm_password', label=_('Confirm Password:'), validator=formencode.validators.NotEmpty())]
149+ fields = [
150+ database.ReplacePasswordField(name='old_password', label=_('Old Password:')),
151+ database.ReplacePasswordField(name='new_password', label=_('New Password:')),
152+ database.ReplacePasswordField(name='confirm_password', label=_('Confirm Password:')),
153+ ]
154
155 int_pattern = re.compile(r'^\d+$')
156 class Preferences(Form):
157
158=== modified file 'addons/openerp/controllers/root.py'
159--- addons/openerp/controllers/root.py 2014-01-10 17:12:18 +0000
160+++ addons/openerp/controllers/root.py 2016-08-23 11:52:35 +0000
161@@ -150,6 +150,13 @@
162 .get_controller('/openerp/widgets')\
163 .user_home_widgets(ctx))
164
165+ @expose()
166+ def do_login(self, *arg, **kw):
167+ target = kw.get('target') or '/'
168+ if target.startswith('/openerp/do_login'):
169+ target = '/'
170+ raise redirect(target)
171+
172 @expose(allow_json=True)
173 @unsecured
174 def login(self, db=None, user=None, password=None, style=None, location=None, message=None, **kw):
175
176=== modified file 'addons/openerp/controllers/templates/login.mako'
177--- addons/openerp/controllers/templates/login.mako 2016-03-04 16:58:44 +0000
178+++ addons/openerp/controllers/templates/login.mako 2016-08-23 11:52:35 +0000
179@@ -12,6 +12,15 @@
180 form.attr('action') + separator + jQuery.param({'next': url}));
181 })
182 }
183+ function disable_save() {
184+ var pass = $("#show_password").val()
185+ $("#password").val(pass);
186+ $("#show_password").val(false);
187+ $("#replace_password").show();
188+ $("#replace_password").val(Array(pass.length+1).join('\u2022'));
189+ $("#show_password").remove();
190+ $("#loginform").submit();
191+ }
192 </script>
193 </%def>
194
195@@ -51,11 +60,15 @@
196 </tr>
197 <tr>
198 <td class="label"><label for="user">${_("User:")}</label></td>
199- <td style="padding: 3px;"><input type="text" id="user" name="user" class="db_user_pass" value="${user}" autofocus="true"/></td>
200+ <td style="padding: 3px;"><input type="text" id="user" name="user" class="db_user_pass" value="${user}" autofocus="true" autocomplete="off"/></td>
201 </tr>
202 <tr>
203- <td class="label"><label for="password">${_("Password:")}</label></td>
204- <td style="padding: 3px;"><input type="password" value="${password}" id="password" name="password" class="db_user_pass" autocomplete="off"/></td>
205+ <td class="label"><label for="show_password">${_("Password:")}</label></td>
206+ <td style="padding: 3px;"><input type="password" id="show_password" name="show_password" class="db_user_pass" autocomplete="off" onkeydown = "if (event.keyCode == 13) disable_save()"/>
207+ <input id="replace_password" type="text" class="db_user_pass" style="display:none;"/>
208+ <input type="hidden" name="password" id="password" />
209+ </td>
210+
211 </tr>
212 <tr>
213 <td></td>
214@@ -64,7 +77,7 @@
215 <button type="button" class="static_boxes" tabindex="-1" onclick="location.href='${py.url('/openerp/database')}'">${_("Databases")}
216 </button>
217 % endif
218- <button type="submit" class="static_boxes">${_("Login")}</button>
219+ <button type="button" class="static_boxes" onclick="disable_save()">${_("Login")}</button>
220 </td>
221 </tr>
222 </table>
223
224=== modified file 'addons/openerp/controllers/utils.py'
225--- addons/openerp/controllers/utils.py 2016-07-18 12:51:46 +0000
226+++ addons/openerp/controllers/utils.py 2016-08-23 11:52:35 +0000
227@@ -94,7 +94,10 @@
228 info = rpc.session.execute_noauth('common', 'login_message') or ''
229 except:
230 pass
231- return dict(target=target, url=url, dblist=dblist, db=db, user=user, password=password,
232+ do_login_page = '/openerp/do_login'
233+ if target != do_login_page:
234+ origArgs['target'] = target
235+ return dict(target=do_login_page, url=url, dblist=dblist, db=db, user=user, password=password,
236 action=action, message=message, origArgs=origArgs, info=info, bad_regional=bad_regional, tz_offset=tz_offset)
237
238 def secured(fn):
239
240=== modified file 'openobject/widgets/_widgets.py'
241--- openobject/widgets/_widgets.py 2012-10-22 12:24:58 +0000
242+++ openobject/widgets/_widgets.py 2016-08-23 11:52:35 +0000
243@@ -226,7 +226,7 @@
244
245 template = "/openobject/widgets/templates/form.mako"
246
247- params = ['action', 'method', 'submit_text']
248+ params = ['action', 'method', 'submit_text', 'replace_password_fields']
249 member_widgets = ['hidden_fields', 'fields']
250
251 hidden_fields = []
252@@ -236,6 +236,7 @@
253 submit_text = "Submit"
254 form_attrs = {}
255 form = True
256+ replace_password_fields = {}
257
258 def __init__(self, name=None, **params):
259 super(Form, self).__init__(name, **params)
260
261=== modified file 'openobject/widgets/templates/form.mako'
262--- openobject/widgets/templates/form.mako 2010-12-03 06:06:41 +0000
263+++ openobject/widgets/templates/form.mako 2016-08-23 11:52:35 +0000
264@@ -32,7 +32,38 @@
265 % endfor
266 <tr>
267 <td>&nbsp;</td>
268- <td align="right" style="padding: 0px 5px 5px 0px;"><button type="submit" class="static_boxes">${submit_text}</button></td>
269+ <td align="right" style="padding: 0px 5px 5px 0px;">
270+ % if not replace_password_fields:
271+ <button type="submit" class="static_boxes">${submit_text}</button>
272+ % else:
273+ <script type="text/javascript">
274+ function replace_pass_submit() {
275+ var this_form = false;
276+ % for src_field, target_field in replace_password_fields.iteritems():
277+ if (!this_form) {
278+ this_form = $("#${target_field}").attr('form');
279+ var result = true;
280+ if (this_form.onsubmit) {
281+ result = this_form.onsubmit.call(this_form);
282+ }
283+ if (!result) {
284+ return false;
285+ }
286+ }
287+ var ${src_field}_val = $("#${src_field}").val()
288+ var fake_${src_field} = jQuery('<input type="text"/>');
289+ fake_${src_field}.addClass($("#${src_field}").attr('class'));
290+ fake_${src_field}.val(Array(${src_field}_val.length+1).join('\u2022'));
291+ $("#${target_field}").val(${src_field}_val);
292+ $("#${src_field}").val(false);
293+ $("#${src_field}").replaceWith(fake_${src_field});
294+ % endfor
295+ this_form.submit();
296+ }
297+ </script>
298+ <button type="button" class="static_boxes" onclick="replace_pass_submit()">${submit_text}</button>
299+ % endif
300+ </td>
301 </tr>
302 </table>
303 </form>

Subscribers

People subscribed via source and target branches