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
=== modified file 'addons/openerp/controllers/database.py'
--- addons/openerp/controllers/database.py 2016-05-09 12:01:47 +0000
+++ addons/openerp/controllers/database.py 2016-08-23 11:52:35 +0000
@@ -50,20 +50,52 @@
50 except:50 except:
51 return []51 return []
5252
53class ReplacePasswordField(openobject.widgets.PasswordField):
54 params = {
55 'autocomplete': 'Autocomplete field',
56 }
57 autocomplete = 'off'
58 replace_for = False
59
60 def __init__(self, *arg, **kwargs):
61 # disable form default submit action when user hits Enter in the field
62 self.replace_for = kwargs['name']
63 kwargs['name'] = 'show_%s' % kwargs['name']
64 kwargs.setdefault('attrs', {}).update({
65 'onkeydown': 'if (event.keyCode == 13) replace_pass_submit()',
66 'class': 'requiredfield',
67 })
68 super(ReplacePasswordField, self).__init__(*arg, **kwargs)
69
70
53class DBForm(openobject.widgets.Form):71class DBForm(openobject.widgets.Form):
54 strip_name = True72 strip_name = True
5573
56 def __init__(self, *args, **kw):74 def __init__(self, *args, **kw):
57 super(DBForm, self).__init__(*args, **kw)75 super(DBForm, self).__init__(*args, **kw)
76 to_add = []
77 for field in self.fields:
78 if isinstance(field, ReplacePasswordField):
79 to_add.append(openobject.widgets.HiddenField(name=field.replace_for, attrs={'autocomplete':'off'}))
80 self.replace_password_fields[field.name] = field.replace_for
81 if to_add:
82 self.hidden_fields += to_add
58 if self.validator is openobject.validators.DefaultValidator:83 if self.validator is openobject.validators.DefaultValidator:
59 self.validator = openobject.validators.Schema()84 self.validator = openobject.validators.Schema()
60 for f in self.fields:85 for f in self.fields:
61 self.validator.add_field(f.name, f.validator)86 self.validator.add_field(f.name, f.validator)
87 for add in to_add:
88 self.validator.add_field(add.name, formencode.validators.NotEmpty())
6289
63 def update_params(self, params):90 def update_params(self, params):
64 super(DBForm, self).update_params(params)91 super(DBForm, self).update_params(params)
65 params['attrs']['action'] = url(self.action)92 params['attrs']['action'] = url(self.action)
6693
94 def error_for(self, item, error):
95 if error and isinstance(item, ReplacePasswordField):
96 return error.error_dict.get(item.replace_for)
97 return super(DBForm, self).error_for(item, error)
98
67class FormCreate(DBForm):99class FormCreate(DBForm):
68 name = "create"100 name = "create"
69 string = _('Create database')101 string = _('Create database')
@@ -71,31 +103,37 @@
71 submit_text = _('Create')103 submit_text = _('Create')
72 strip_name = True104 strip_name = True
73 form_attrs = {'onsubmit': 'return on_create()'}105 form_attrs = {'onsubmit': 'return on_create()'}
74 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.")),106 fields = [
75 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'.")),107 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.")),
76# 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.")),108 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'.")),
77 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.")),109# 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.")),
78 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.")),110 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.")),
79 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."))111 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.")),
80 ]112 ReplacePasswordField(name='admin_password', label=_('Administrator password:'), help=_("This is the password of the 'admin' user that will be created in your new database.")),
113 ]
81 validator = openobject.validators.Schema(chained_validators=[formencode.validators.FieldsMatch("admin_password","confirm_password")])114 validator = openobject.validators.Schema(chained_validators=[formencode.validators.FieldsMatch("admin_password","confirm_password")])
82115
116
83class FormDrop(DBForm):117class FormDrop(DBForm):
84 name = "drop"118 name = "drop"
85 string = _('Drop database')119 string = _('Drop database')
86 action = '/openerp/database/do_drop'120 action = '/openerp/database/do_drop'
87 submit_text = _('Drop')121 submit_text = _('Drop')
88 form_attrs = {'onsubmit': 'return window.confirm(_("Do you really want to drop the selected database?"))'}122 form_attrs = {'onsubmit': 'return window.confirm(_("Do you really want to drop the selected database?"))'}
89 fields = [openobject.widgets.SelectField(name='dbname', options=get_db_list, label=_('Database:'), validator=validators.String(not_empty=True)),123 fields = [
90 openobject.widgets.PasswordField(name='password', label=_('Drop password:'), validator=formencode.validators.NotEmpty())]124 openobject.widgets.SelectField(name='dbname', options=get_db_list, label=_('Database:'), validator=validators.String(not_empty=True)),
125 ReplacePasswordField(name='password', label=_('Drop password:')),
126 ]
91127
92class FormBackup(DBForm):128class FormBackup(DBForm):
93 name = "backup"129 name = "backup"
94 string = _('Backup database')130 string = _('Backup database')
95 action = '/openerp/database/do_backup'131 action = '/openerp/database/do_backup'
96 submit_text = _('Backup')132 submit_text = _('Backup')
97 fields = [openobject.widgets.SelectField(name='dbname', options=get_db_list, label=_('Database:'), validator=validators.String(not_empty=True)),133 fields = [
98 openobject.widgets.PasswordField(name='password', label=_('Backup password:'), validator=formencode.validators.NotEmpty())]134 openobject.widgets.SelectField(name='dbname', options=get_db_list, label=_('Database:'), validator=validators.String(not_empty=True)),
135 ReplacePasswordField(name='password', label=_('Backup password:')),
136 ]
99137
100class FileField(openobject.widgets.FileField):138class FileField(openobject.widgets.FileField):
101 def adjust_value(self, value, **params):139 def adjust_value(self, value, **params):
@@ -106,9 +144,12 @@
106 string = _('Restore database')144 string = _('Restore database')
107 action = '/openerp/database/do_restore'145 action = '/openerp/database/do_restore'
108 submit_text = _('Restore')146 submit_text = _('Restore')
109 fields = [FileField(name="filename", label=_('File:')),147 fields = [
110 openobject.widgets.PasswordField(name='password', label=_('Restore password:'), validator=formencode.validators.NotEmpty()),148 FileField(name="filename", label=_('File:')),
111 openobject.widgets.TextField(name='dbname', label=_('New database name:'), validator=formencode.validators.NotEmpty(), readonly=1, attrs={'readonly': ''})]149 ReplacePasswordField(name='password', label=_('Restore password:')),
150 openobject.widgets.TextField(name='dbname', label=_('New database name:'), validator=formencode.validators.NotEmpty(), readonly=1, attrs={'readonly': ''})
151 ]
152
112 hidden_fields = [openobject.widgets.HiddenField(name='fpath', label=_('Path:'))]153 hidden_fields = [openobject.widgets.HiddenField(name='fpath', label=_('Path:'))]
113154
114class FormPassword(DBForm):155class FormPassword(DBForm):
@@ -116,10 +157,11 @@
116 string = _('Change Administrator Password')157 string = _('Change Administrator Password')
117 action = '/openerp/database/do_password'158 action = '/openerp/database/do_password'
118 submit_text = _('Change Password')159 submit_text = _('Change Password')
119 fields = [openobject.widgets.PasswordField(name='old_password', label=_('Old super admin password:'), validator=formencode.validators.NotEmpty()),160 fields = [
120 openobject.widgets.PasswordField(name='new_password', label=_('New super admin password:'), validator=formencode.validators.NotEmpty()),161 ReplacePasswordField(name='old_password', label=_('Old super admin password:')),
121 openobject.widgets.PasswordField(name='confirm_password', label=_('Confirm Password:'), validator=formencode.validators.NotEmpty())]162 ReplacePasswordField(name='new_password', label=_('New super admin password:')),
122163 ReplacePasswordField(name='confirm_password', label=_('Confirm Password:')),
164 ]
123 validator = openobject.validators.Schema(chained_validators=[formencode.validators.FieldsMatch("new_password","confirm_password")])165 validator = openobject.validators.Schema(chained_validators=[formencode.validators.FieldsMatch("new_password","confirm_password")])
124166
125167
126168
=== modified file 'addons/openerp/controllers/preferences.py'
--- addons/openerp/controllers/preferences.py 2015-05-13 15:01:35 +0000
+++ addons/openerp/controllers/preferences.py 2016-08-23 11:52:35 +0000
@@ -34,9 +34,11 @@
34class PrefsPassword(database.FormPassword):34class PrefsPassword(database.FormPassword):
35 action = "/openerp/pref/password"35 action = "/openerp/pref/password"
36 string = _('Change your password')36 string = _('Change your password')
37 fields = [openobject.widgets.PasswordField(name='old_password', label=_('Old Password:'), validator=formencode.validators.NotEmpty()),37 fields = [
38 openobject.widgets.PasswordField(name='new_password', label=_('New Password:'), validator=formencode.validators.NotEmpty()),38 database.ReplacePasswordField(name='old_password', label=_('Old Password:')),
39 openobject.widgets.PasswordField(name='confirm_password', label=_('Confirm Password:'), validator=formencode.validators.NotEmpty())]39 database.ReplacePasswordField(name='new_password', label=_('New Password:')),
40 database.ReplacePasswordField(name='confirm_password', label=_('Confirm Password:')),
41 ]
4042
41int_pattern = re.compile(r'^\d+$')43int_pattern = re.compile(r'^\d+$')
42class Preferences(Form):44class Preferences(Form):
4345
=== modified file 'addons/openerp/controllers/root.py'
--- addons/openerp/controllers/root.py 2014-01-10 17:12:18 +0000
+++ addons/openerp/controllers/root.py 2016-08-23 11:52:35 +0000
@@ -150,6 +150,13 @@
150 .get_controller('/openerp/widgets')\150 .get_controller('/openerp/widgets')\
151 .user_home_widgets(ctx))151 .user_home_widgets(ctx))
152152
153 @expose()
154 def do_login(self, *arg, **kw):
155 target = kw.get('target') or '/'
156 if target.startswith('/openerp/do_login'):
157 target = '/'
158 raise redirect(target)
159
153 @expose(allow_json=True)160 @expose(allow_json=True)
154 @unsecured161 @unsecured
155 def login(self, db=None, user=None, password=None, style=None, location=None, message=None, **kw):162 def login(self, db=None, user=None, password=None, style=None, location=None, message=None, **kw):
156163
=== modified file 'addons/openerp/controllers/templates/login.mako'
--- addons/openerp/controllers/templates/login.mako 2016-03-04 16:58:44 +0000
+++ addons/openerp/controllers/templates/login.mako 2016-08-23 11:52:35 +0000
@@ -12,6 +12,15 @@
12 form.attr('action') + separator + jQuery.param({'next': url}));12 form.attr('action') + separator + jQuery.param({'next': url}));
13 })13 })
14 }14 }
15 function disable_save() {
16 var pass = $("#show_password").val()
17 $("#password").val(pass);
18 $("#show_password").val(false);
19 $("#replace_password").show();
20 $("#replace_password").val(Array(pass.length+1).join('\u2022'));
21 $("#show_password").remove();
22 $("#loginform").submit();
23 }
15 </script>24 </script>
16</%def>25</%def>
1726
@@ -51,11 +60,15 @@
51 </tr>60 </tr>
52 <tr>61 <tr>
53 <td class="label"><label for="user">${_("User:")}</label></td>62 <td class="label"><label for="user">${_("User:")}</label></td>
54 <td style="padding: 3px;"><input type="text" id="user" name="user" class="db_user_pass" value="${user}" autofocus="true"/></td>63 <td style="padding: 3px;"><input type="text" id="user" name="user" class="db_user_pass" value="${user}" autofocus="true" autocomplete="off"/></td>
55 </tr>64 </tr>
56 <tr>65 <tr>
57 <td class="label"><label for="password">${_("Password:")}</label></td>66 <td class="label"><label for="show_password">${_("Password:")}</label></td>
58 <td style="padding: 3px;"><input type="password" value="${password}" id="password" name="password" class="db_user_pass" autocomplete="off"/></td>67 <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()"/>
68 <input id="replace_password" type="text" class="db_user_pass" style="display:none;"/>
69 <input type="hidden" name="password" id="password" />
70 </td>
71
59 </tr>72 </tr>
60 <tr>73 <tr>
61 <td></td>74 <td></td>
@@ -64,7 +77,7 @@
64 <button type="button" class="static_boxes" tabindex="-1" onclick="location.href='${py.url('/openerp/database')}'">${_("Databases")}77 <button type="button" class="static_boxes" tabindex="-1" onclick="location.href='${py.url('/openerp/database')}'">${_("Databases")}
65 </button>78 </button>
66 % endif79 % endif
67 <button type="submit" class="static_boxes">${_("Login")}</button>80 <button type="button" class="static_boxes" onclick="disable_save()">${_("Login")}</button>
68 </td>81 </td>
69 </tr>82 </tr>
70 </table>83 </table>
7184
=== modified file 'addons/openerp/controllers/utils.py'
--- addons/openerp/controllers/utils.py 2016-07-18 12:51:46 +0000
+++ addons/openerp/controllers/utils.py 2016-08-23 11:52:35 +0000
@@ -94,7 +94,10 @@
94 info = rpc.session.execute_noauth('common', 'login_message') or ''94 info = rpc.session.execute_noauth('common', 'login_message') or ''
95 except:95 except:
96 pass96 pass
97 return dict(target=target, url=url, dblist=dblist, db=db, user=user, password=password,97 do_login_page = '/openerp/do_login'
98 if target != do_login_page:
99 origArgs['target'] = target
100 return dict(target=do_login_page, url=url, dblist=dblist, db=db, user=user, password=password,
98 action=action, message=message, origArgs=origArgs, info=info, bad_regional=bad_regional, tz_offset=tz_offset)101 action=action, message=message, origArgs=origArgs, info=info, bad_regional=bad_regional, tz_offset=tz_offset)
99102
100def secured(fn):103def secured(fn):
101104
=== modified file 'openobject/widgets/_widgets.py'
--- openobject/widgets/_widgets.py 2012-10-22 12:24:58 +0000
+++ openobject/widgets/_widgets.py 2016-08-23 11:52:35 +0000
@@ -226,7 +226,7 @@
226226
227 template = "/openobject/widgets/templates/form.mako"227 template = "/openobject/widgets/templates/form.mako"
228228
229 params = ['action', 'method', 'submit_text']229 params = ['action', 'method', 'submit_text', 'replace_password_fields']
230 member_widgets = ['hidden_fields', 'fields']230 member_widgets = ['hidden_fields', 'fields']
231231
232 hidden_fields = []232 hidden_fields = []
@@ -236,6 +236,7 @@
236 submit_text = "Submit"236 submit_text = "Submit"
237 form_attrs = {}237 form_attrs = {}
238 form = True238 form = True
239 replace_password_fields = {}
239240
240 def __init__(self, name=None, **params):241 def __init__(self, name=None, **params):
241 super(Form, self).__init__(name, **params)242 super(Form, self).__init__(name, **params)
242243
=== modified file 'openobject/widgets/templates/form.mako'
--- openobject/widgets/templates/form.mako 2010-12-03 06:06:41 +0000
+++ openobject/widgets/templates/form.mako 2016-08-23 11:52:35 +0000
@@ -32,7 +32,38 @@
32 % endfor32 % endfor
33 <tr>33 <tr>
34 <td>&nbsp;</td>34 <td>&nbsp;</td>
35 <td align="right" style="padding: 0px 5px 5px 0px;"><button type="submit" class="static_boxes">${submit_text}</button></td>35 <td align="right" style="padding: 0px 5px 5px 0px;">
36 % if not replace_password_fields:
37 <button type="submit" class="static_boxes">${submit_text}</button>
38 % else:
39 <script type="text/javascript">
40 function replace_pass_submit() {
41 var this_form = false;
42 % for src_field, target_field in replace_password_fields.iteritems():
43 if (!this_form) {
44 this_form = $("#${target_field}").attr('form');
45 var result = true;
46 if (this_form.onsubmit) {
47 result = this_form.onsubmit.call(this_form);
48 }
49 if (!result) {
50 return false;
51 }
52 }
53 var ${src_field}_val = $("#${src_field}").val()
54 var fake_${src_field} = jQuery('<input type="text"/>');
55 fake_${src_field}.addClass($("#${src_field}").attr('class'));
56 fake_${src_field}.val(Array(${src_field}_val.length+1).join('\u2022'));
57 $("#${target_field}").val(${src_field}_val);
58 $("#${src_field}").val(false);
59 $("#${src_field}").replaceWith(fake_${src_field});
60 % endfor
61 this_form.submit();
62 }
63 </script>
64 <button type="button" class="static_boxes" onclick="replace_pass_submit()">${submit_text}</button>
65 % endif
66 </td>
36 </tr>67 </tr>
37 </table>68 </table>
38</form>69</form>

Subscribers

People subscribed via source and target branches