diff --git a/addons/portal/portal.py b/addons/portal/portal.py index a04f974743c..b166373e39a 100644 --- a/addons/portal/portal.py +++ b/addons/portal/portal.py @@ -21,13 +21,12 @@ from osv import osv, fields from tools.translate import _ -import random class portal(osv.osv): _name = 'res.portal' _description = 'Portal' + _rec_name = 'group_id' _columns = { - 'name': fields.char(string='Name', size=64, required=True), 'group_id': fields.many2one('res.groups', required=True, string='Portal Group', help=_('This group defines the users associated to this portal')), @@ -42,20 +41,17 @@ class portal(osv.osv): help=_('The menu action opens the submenus of this menu item')), } _sql_constraints = [ - ('unique_name', 'UNIQUE(name)', _('Portals must have different names.')) + ('unique_group', 'UNIQUE(group_id)', _('Portals must have distinct groups.')) ] - def copy(self, cr, uid, id, defaults, context=None): - """ override copy(): pick a different name and menu_action_id """ - # find an unused name of the form "name [N]" for some random N - old_name = self.browse(cr, uid, id, context).name - new_name = copy_random(old_name) - while self.search(cr, uid, [('name', '=', new_name)], limit=1, context=context): - new_name = copy_random(old_name) - - defaults['name'] = new_name - defaults['menu_action_id'] = None - return super(portal, self).copy(cr, uid, id, defaults, context) + def copy(self, cr, uid, id, default={}, context=None): + """ override copy(): group_id and menu_action_id must be different """ + # copy the former group_id + groups_obj = self.pool.get('res.groups') + group_id = self.browse(cr, uid, id, context).group_id.id + default['group_id'] = groups_obj.copy(cr, uid, group_id, {}, context) + default['menu_action_id'] = None + return super(portal, self).copy(cr, uid, id, default, context) def create(self, cr, uid, values, context=None): """ extend create() to assign the portal group and menu to users """ @@ -63,11 +59,12 @@ class portal(osv.osv): assert not values.get('menu_action_id') values['menu_action_id'] = self._create_menu_action(cr, uid, values, context) - # set menu action of users - user_values = {'menu_id': values['menu_action_id']} - # values['user_ids'] should match [(6, 0, IDs)] - for id in get_many2many(values['user_ids']): - values['user_ids'].append((1, id, user_values)) + if 'user_ids' in values: + # set menu action of users + user_values = {'menu_id': values['menu_action_id']} + # values['user_ids'] should match [(6, 0, IDs)] + for id in get_many2many(values['user_ids']): + values['user_ids'].append((1, id, user_values)) return super(portal, self).create(cr, uid, values, context) @@ -94,9 +91,11 @@ class portal(osv.osv): def _create_menu_action(self, cr, uid, values, context=None): # create a menu action that opens the menu items below parent_menu_id + groups_obj = self.pool.get('res.groups') + group_name = groups_obj.browse(cr, uid, values['group_id'], context).name actions_obj = self.pool.get('ir.actions.act_window') action_values = { - 'name': values['name'] + ' Menu', + 'name': group_name + ' Menu', 'type': 'ir.actions.act_window', 'usage': 'menu', 'res_model': 'ir.ui.menu', @@ -114,7 +113,7 @@ class portal(osv.osv): for p in self.browse(cr, uid, ids, context): # create a menuitem under 'portal.portal_menu' menu_values = { - 'name': p.name + ' Menu', + 'name': p.group_id.name + ' Menu', 'parent_id': menu_root, 'groups_id': [(6, 0, [p.group_id.id])], } @@ -174,7 +173,3 @@ def get_many2many(arg): assert len(arg) == 1 and arg[0][0] == 6 # arg = [(6, _, IDs)] return arg[0][2] -def copy_random(name): - """ return "name [N]" for some random integer N """ - return "%s [%s]" % (name, random.choice(xrange(1000000))) - diff --git a/addons/portal/portal_view.xml b/addons/portal/portal_view.xml index 3577e21697a..c3ed6106821 100644 --- a/addons/portal/portal_view.xml +++ b/addons/portal/portal_view.xml @@ -28,9 +28,8 @@ portal's users.
- - +