From 9c465bb106703569033b16fd1fc7b9282f96a53d Mon Sep 17 00:00:00 2001 From: vishmita Date: Fri, 19 Aug 2011 18:40:07 +0530 Subject: [PATCH 1/6] [IMP]Implement preferences functionality. bzr revid: vja@vja-desktop-20110819131007-0o2pxuvrvh9q5cc3 --- addons/base/controllers/main.py | 16 ++++- addons/base/static/src/js/chrome.js | 92 ++++++++++++++++++++++++++++- addons/base/static/src/js/form.js | 2 +- addons/base/static/src/xml/base.xml | 31 ++++++++++ 4 files changed, 137 insertions(+), 4 deletions(-) diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index d5eaafaecee..6a7f143776c 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -278,7 +278,7 @@ class Database(openerpweb.Controller): except xmlrpclib.Fault, e: if e.faultCode and e.faultCode.split(':')[0] == 'AccessDenied': return {'error': e.faultCode, 'title': 'Change Password'} - return {'error': 'Error, password not changed !', 'title': 'Change Password'} + return {'error': 'Error, password not changed !', 'title': 'Change Password'} class Session(openerpweb.Controller): _cp_path = "/base/session" @@ -293,7 +293,19 @@ class Session(openerpweb.Controller): "uid": req.session._uid, "context": ctx } - + @openerpweb.jsonrequest + def change_password (self,req,fields): + old_password, new_password,confirm_password = operator.itemgetter('old_pwd', 'new_pwd','confirm_pwd')( + dict(map(operator.itemgetter('name', 'value'), fields))) + try: + if req.session.model('res.users').change_password( + old_password, new_password): + req.session.password = new_password + return dict(changed=True) + raise redirect('/') + except xmlrpclib.Fault, e: + return {'error': 'Original password incorrect, your password was not changed.', 'title': 'Change Password'} + @openerpweb.jsonrequest def sc_list(self, req): return req.session.model('ir.ui.view_sc').get_sc( diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js index 3aff7b5e402..861a02cc49a 100644 --- a/addons/base/static/src/js/chrome.js +++ b/addons/base/static/src/js/chrome.js @@ -572,6 +572,7 @@ openerp.base.Header = openerp.base.Widget.extend({ do_update: function () { this.$element.html(QWeb.render("Header", this)); this.$element.find(".logout").click(this.on_logout); + this.$element.find("a.preferences").click(this.on_preferences); return this.shortcut_load(); }, shortcut_load :function(){ @@ -621,9 +622,98 @@ openerp.base.Header = openerp.base.Widget.extend({ }); }); }, + on_action: function(action) { }, - + on_preferences: function(){ + var self = this; + var action_manager = new openerp.base.ActionManager(this); + this.rpc('/base/dataset/call', {model: 'res.users',method:"action_get",args: []},function(result){ + self.rpc('/base/action/load', { action_id: result}, function(result){ + result['result']['res_id'] = self.session.uid; + result['result']['res_model']= 'res.users'; + result['result']['view_id']=result['result']['views'][0][0]; + result['result']['flags']['action_buttons']=false; + result['result']['flags']['search_view']=false; + result['result']['flags']['sidebar']=false; + result['result']['view_mode']="form"; + result['result']['flags']['views_switcher']=false; + result['result']['flags']['pager']=false; + action_manager.do_action(result['result']); + }); + }); + this.dialog = new openerp.base.Dialog(this,{ + modal: true, + title: 'Preferences', + width: 600, + height: 500, + buttons: { + "Change password": function(){ + self.change_password(); + }, + Cancel: function(){ + $(this).dialog('destroy'); + }, + Save: function(){ + var inner_viewmanager = action_manager.inner_viewmanager; + inner_viewmanager.views[inner_viewmanager.active_view].controller.do_save(function(){ + inner_viewmanager.start(); + }); + $(this).dialog('destroy'); + }, + }, + }); + this.dialog.start(); + this.dialog.open(); + action_manager.appendTo(this.dialog); + action_manager.render(this.dialog); + }, + + change_password :function() { + var self = this; + this.dialog = new openerp.base.Dialog(this,{ + modal : true, + title : 'Change Password', + width : 'auto', + height : 'auto', + }); + this.dialog.start(); + this.dialog.open(); + this.dialog.$element.html(QWeb.render("Change_Pwd", self)); + this.dialog.$element.find("form[name=change_password_form]").validate({ + messages: { + old_password: "Please enter your previous password", + new_password: "Please enter your new password", + confirm_password: { + required: "Please confirm your new password", + equalTo: "The confirmation does not match the password" + }, + }, + submitHandler: function (form) { + self.rpc("/base/session/change_password",{ + 'fields': $("form[name=change_password_form]").serializeArray() + }, function(result) { + if (result.error) { + self.display_error(result); + return; + } + self.notification.notify("Changed Password", "Password has been changed successfully"); + self.dialog.close(); + }); + }, + }); +}, + display_error: function (error) { + return $('
').dialog({ + modal: true, + title: error.title, + buttons: { + Ok: function() { + $(this).dialog("close"); + } + } + }).html(error.error); + }, on_logout: function() { this.$element.find('.oe-shortcuts ul').empty(); } diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index c85d1fd4cb2..66f41005c05 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -66,7 +66,6 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormVi var self = this; this.fields_view = data.fields_view; var frame = new (this.registry.get_object('frame'))(this, this.fields_view.arch); - this.$element.html(QWeb.render(this.template, { 'frame': frame, 'view': this })); _.each(this.widgets, function(w) { w.start(); @@ -578,6 +577,7 @@ openerp.base.form.Widget = openerp.base.Widget.extend({ this.$element = $('#' + this.element_id); }, stop: function() { + this.$element = $('#' + this.element_id); this.$element.remove(); }, process_modifiers: function() { diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index 81255fb3e75..7baf8d91c13 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -1307,4 +1307,35 @@ + +
+ + + + +
+ CHANGE PASSWORD +
+ + + + + + + + + + + + + + + + +
+
+
From 754205281d966d02f0014cbdd1fc438c869701e6 Mon Sep 17 00:00:00 2001 From: vishmita Date: Tue, 23 Aug 2011 10:36:07 +0530 Subject: [PATCH 2/6] [IMP]remove title in change password dialog. bzr revid: vja@vja-desktop-20110823050607-tdu2bzwrsfz04tvf --- addons/base/static/src/xml/base.xml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index 7baf8d91c13..31c5ac6693a 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -1309,13 +1309,6 @@
- - - - -
- CHANGE PASSWORD -
From 9d93821bae21cba47b9e7237af19c9d64cafa2d0 Mon Sep 17 00:00:00 2001 From: vishmita Date: Tue, 23 Aug 2011 14:47:21 +0530 Subject: [PATCH 3/6] [IMP]remove RPC method in Preferences. bzr revid: vja@vja-desktop-20110823091721-83v50nq5fhojkf7v --- addons/base/static/src/js/chrome.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js index 861a02cc49a..d0901e37d07 100644 --- a/addons/base/static/src/js/chrome.js +++ b/addons/base/static/src/js/chrome.js @@ -628,8 +628,8 @@ openerp.base.Header = openerp.base.Widget.extend({ on_preferences: function(){ var self = this; var action_manager = new openerp.base.ActionManager(this); - this.rpc('/base/dataset/call', {model: 'res.users',method:"action_get",args: []},function(result){ - self.rpc('/base/action/load', { action_id: result}, function(result){ + var dataset = new openerp.base.DataSet (this,'res.users',this.context); + dataset.call ('action_get','',function (result){self.rpc('/base/action/load', {action_id:result}, function(result){ result['result']['res_id'] = self.session.uid; result['result']['res_model']= 'res.users'; result['result']['view_id']=result['result']['views'][0][0]; @@ -641,7 +641,7 @@ openerp.base.Header = openerp.base.Widget.extend({ result['result']['flags']['pager']=false; action_manager.do_action(result['result']); }); - }); + }); this.dialog = new openerp.base.Dialog(this,{ modal: true, title: 'Preferences', From f2325382caf64e3021cd5c0df116180802b2f89e Mon Sep 17 00:00:00 2001 From: vishmita Date: Tue, 23 Aug 2011 18:28:02 +0530 Subject: [PATCH 4/6] [IMP]Improve code in change password. bzr revid: vja@vja-desktop-20110823125802-c4jhe4qqjn2ra7n4 --- addons/base/controllers/main.py | 13 ++++++++----- addons/base/static/src/js/chrome.js | 15 ++++----------- addons/base/static/src/xml/base.xml | 16 ++++++++-------- 3 files changed, 20 insertions(+), 24 deletions(-) diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index 6a7f143776c..9493620c1cb 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -295,15 +295,18 @@ class Session(openerpweb.Controller): } @openerpweb.jsonrequest def change_password (self,req,fields): - old_password, new_password,confirm_password = operator.itemgetter('old_pwd', 'new_pwd','confirm_pwd')( + old_password, new_password,confirm_password = operator.itemgetter('old_pwd', 'new_password','confirm_pwd')( dict(map(operator.itemgetter('name', 'value'), fields))) + if not (old_password.strip() and new_password.strip() and confirm_password.strip()): + return {'error':'All passwords have to be filled.','title': 'Change Password'} + if new_password != confirm_password: + return {'error': 'The new password and its confirmation must be identical.','title': 'Change Password'} try: if req.session.model('res.users').change_password( old_password, new_password): - req.session.password = new_password - return dict(changed=True) - raise redirect('/') - except xmlrpclib.Fault, e: + req.session.password = new_password; + return dict(changed=True) + except: return {'error': 'Original password incorrect, your password was not changed.', 'title': 'Change Password'} @openerpweb.jsonrequest diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js index d0901e37d07..1a3289457c3 100644 --- a/addons/base/static/src/js/chrome.js +++ b/addons/base/static/src/js/chrome.js @@ -459,7 +459,7 @@ openerp.base.Database = openerp.base.Widget.extend({ } self.notification.notify("Changed Password", "Password has been changed successfully"); }); - } + }, }); } }); @@ -681,22 +681,15 @@ openerp.base.Header = openerp.base.Widget.extend({ this.dialog.open(); this.dialog.$element.html(QWeb.render("Change_Pwd", self)); this.dialog.$element.find("form[name=change_password_form]").validate({ - messages: { - old_password: "Please enter your previous password", - new_password: "Please enter your new password", - confirm_password: { - required: "Please confirm your new password", - equalTo: "The confirmation does not match the password" - }, - }, submitHandler: function (form) { + console.log('form',form) self.rpc("/base/session/change_password",{ - 'fields': $("form[name=change_password_form]").serializeArray() + 'fields': $(form).serializeArray() }, function(result) { if (result.error) { self.display_error(result); return; - } + }; self.notification.notify("Changed Password", "Password has been changed successfully"); self.dialog.close(); }); diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index 31c5ac6693a..03257f7976b 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -1309,21 +1309,21 @@ -
+
- - - + + - + - + From 79e182a06f69bee51ea38476fec848677c1ff9b5 Mon Sep 17 00:00:00 2001 From: vishmita Date: Tue, 30 Aug 2011 16:46:49 +0530 Subject: [PATCH 5/6] [IMP] Need to change code in ChangePassword. bzr revid: vja@vja-desktop-20110830111649-p5yzyoh5i0221bxo --- addons/base/controllers/main.py | 5 ++- addons/base/static/src/js/chrome.js | 50 ++++++++++++++++------------- 2 files changed, 30 insertions(+), 25 deletions(-) diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index 9493620c1cb..8e65aad9982 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -304,11 +304,10 @@ class Session(openerpweb.Controller): try: if req.session.model('res.users').change_password( old_password, new_password): - req.session.password = new_password; - return dict(changed=True) + return {'new_password':new_password} except: return {'error': 'Original password incorrect, your password was not changed.', 'title': 'Change Password'} - + return {'error': 'Error, password not changed !', 'title': 'Change Password'} @openerpweb.jsonrequest def sc_list(self, req): return req.session.model('ir.ui.view_sc').get_sc( diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js index 1a3289457c3..ff95c72d1e2 100644 --- a/addons/base/static/src/js/chrome.js +++ b/addons/base/static/src/js/chrome.js @@ -630,16 +630,17 @@ openerp.base.Header = openerp.base.Widget.extend({ var action_manager = new openerp.base.ActionManager(this); var dataset = new openerp.base.DataSet (this,'res.users',this.context); dataset.call ('action_get','',function (result){self.rpc('/base/action/load', {action_id:result}, function(result){ - result['result']['res_id'] = self.session.uid; - result['result']['res_model']= 'res.users'; - result['result']['view_id']=result['result']['views'][0][0]; - result['result']['flags']['action_buttons']=false; - result['result']['flags']['search_view']=false; - result['result']['flags']['sidebar']=false; - result['result']['view_mode']="form"; - result['result']['flags']['views_switcher']=false; - result['result']['flags']['pager']=false; - action_manager.do_action(result['result']); + var action = result['result']; + action['res_id'] = self.session.uid; + action['res_model']= 'res.users'; + action['view_id']=result['result']['views'][0][0]; + action['flags']['action_buttons']=false; + action['flags']['search_view']=false; + action['flags']['sidebar']=false; + action['view_mode']="form"; + action['flags']['views_switcher']=false; + action['flags']['pager']=false; + action_manager.do_action(action); }); }); this.dialog = new openerp.base.Dialog(this,{ @@ -659,12 +660,11 @@ openerp.base.Header = openerp.base.Widget.extend({ inner_viewmanager.views[inner_viewmanager.active_view].controller.do_save(function(){ inner_viewmanager.start(); }); - $(this).dialog('destroy'); - }, - }, + $(this).dialog('destroy') + } + } }); - this.dialog.start(); - this.dialog.open(); + this.dialog.start().open(); action_manager.appendTo(this.dialog); action_manager.render(this.dialog); }, @@ -677,19 +677,25 @@ openerp.base.Header = openerp.base.Widget.extend({ width : 'auto', height : 'auto', }); - this.dialog.start(); - this.dialog.open(); + this.dialog.start().open(); this.dialog.$element.html(QWeb.render("Change_Pwd", self)); this.dialog.$element.find("form[name=change_password_form]").validate({ submitHandler: function (form) { - console.log('form',form) self.rpc("/base/session/change_password",{ 'fields': $(form).serializeArray() - }, function(result) { - if (result.error) { - self.display_error(result); + }, function(result) { + if (result.error) { + self.display_error(result); return; - }; + } + else { + if (result.new_password) { + self.session.password = result.new_password; + var session = new openerp.base.Session(self.session.server, self.session.port); + session.start(); + session.session_login(self.session.db, self.session.login, self.session.password) + } + } self.notification.notify("Changed Password", "Password has been changed successfully"); self.dialog.close(); }); From ec1316d3932aef6f81d02385b1a18febb1c5e07d Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 1 Sep 2011 15:33:55 +0200 Subject: [PATCH 6/6] [IMP] inline additions to user prefs action before executing it bzr revid: xmo@openerp.com-20110901133355-4s73qsvy02agqiw1 --- addons/base/static/src/js/chrome.js | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js index ff95c72d1e2..8f6e83db7a8 100644 --- a/addons/base/static/src/js/chrome.js +++ b/addons/base/static/src/js/chrome.js @@ -629,18 +629,19 @@ openerp.base.Header = openerp.base.Widget.extend({ var self = this; var action_manager = new openerp.base.ActionManager(this); var dataset = new openerp.base.DataSet (this,'res.users',this.context); - dataset.call ('action_get','',function (result){self.rpc('/base/action/load', {action_id:result}, function(result){ - var action = result['result']; - action['res_id'] = self.session.uid; - action['res_model']= 'res.users'; - action['view_id']=result['result']['views'][0][0]; - action['flags']['action_buttons']=false; - action['flags']['search_view']=false; - action['flags']['sidebar']=false; - action['view_mode']="form"; - action['flags']['views_switcher']=false; - action['flags']['pager']=false; - action_manager.do_action(action); + dataset.call ('action_get','',function (result){ + self.rpc('/base/action/load', {action_id:result}, function(result){ + action_manager.do_action(_.extend(result['result'], { + res_id: self.session.uid, + res_model: 'res.users', + flags: { + action_buttons: false, + search_view: false, + sidebar: false, + views_switcher: false, + pager: false + } + })); }); }); this.dialog = new openerp.base.Dialog(this,{