From d13c6efc40d0e94f056dca2b0869b7443afb6b39 Mon Sep 17 00:00:00 2001 From: Kevin McCarthy Date: Thu, 27 Sep 2007 14:51:35 -0700 Subject: Adds nested group handling to the view and edit group pages. Renames the ajax seach page, because it's tightly bound to the group edit page. This isn't super polished, but the basic functionality is there. --- ipa-server/ipa-gui/ipagui/controllers.py | 76 +++++++++++++--------- .../ipa-gui/ipagui/templates/groupeditform.kid | 43 ++++++------ .../ipa-gui/ipagui/templates/groupeditsearch.kid | 59 +++++++++++++++++ ipa-server/ipa-gui/ipagui/templates/groupshow.kid | 15 +++-- .../ipa-gui/ipagui/templates/userlistajax.kid | 54 --------------- 5 files changed, 139 insertions(+), 108 deletions(-) create mode 100644 ipa-server/ipa-gui/ipagui/templates/groupeditsearch.kid delete mode 100644 ipa-server/ipa-gui/ipagui/templates/userlistajax.kid diff --git a/ipa-server/ipa-gui/ipagui/controllers.py b/ipa-server/ipa-gui/ipagui/controllers.py index cd47da2fe..b72afdefb 100644 --- a/ipa-server/ipa-gui/ipagui/controllers.py +++ b/ipa-server/ipa-gui/ipagui/controllers.py @@ -224,26 +224,6 @@ class Root(controllers.RootController): return dict(users=users, uid=uid, fields=forms.user.UserFields()) - @expose("ipagui.templates.userlistajax") - @identity.require(identity.not_anonymous()) - def userlist_ajax(self, **kw): - """Searches for users and displays list of results in a table. - This method is used for ajax calls.""" - client.set_krbccache(os.environ["KRB5CCNAME"]) - users = [] - searchlimit = 100 - uid = kw.get('uid') - if uid != None and len(uid) > 0: - try: - users = client.find_users(uid.encode('utf-8'), None, searchlimit) - counter = users[0] - users = users[1:] - except ipaerror.IPAError, e: - turbogears.flash("User list failed: " + str(e)) - - return dict(users=users, uid=uid, fields=forms.user.UserFields(), - counter=counter) - @expose("ipagui.templates.usershow") @identity.require(identity.not_anonymous()) @@ -434,6 +414,40 @@ class Root(controllers.RootController): turbogears.flash("Group add failed: " + str(e) + "
" + str(e.detail)) return dict(form=group_new_form, tg_template='ipagui.templates.groupnew') + @expose("ipagui.templates.groupeditsearch") + @identity.require(identity.not_anonymous()) + def groupedit_search(self, **kw): + """Searches for users+groups and displays list of results in a table. + This method is used for the ajax search on the group edit page. + It's not re-usable because the ajax/dom manipulation is tightly + bound to the groupedit page""" + client.set_krbccache(os.environ["KRB5CCNAME"]) + users = [] + groups = [] + counter = 0 + searchlimit = 100 + criteria = kw.get('criteria') + if criteria != None and len(criteria) > 0: + try: + users = client.find_users(criteria.encode('utf-8'), None, searchlimit) + users_counter = users[0] + users = users[1:] + + groups = client.find_groups(criteria.encode('utf-8'), None, + searchlimit) + groups_counter = groups[0] + groups = groups[1:] + + if users_counter < 0 or groups_counter < 0: + counter = -1 + else: + counter = users_counter + groups_counter + except ipaerror.IPAError, e: + turbogears.flash("search failed: " + str(e)) + + return dict(users=users, groups=groups, criteria=criteria, + counter=counter) + @expose("ipagui.templates.groupedit") @identity.require(identity.not_anonymous()) @@ -461,13 +475,15 @@ class Root(controllers.RootController): member_dns = [member_dns] # TODO: convert this into an efficient (single) function call - member_users = map( - lambda dn: client.get_user_by_dn(dn, ['givenname', 'sn', 'uid']), + # Note: this isn't quite right, since it can be users and groups. + members = map( + lambda dn: client.get_user_by_dn(dn, ['dn', 'givenname', 'sn', + 'uid', 'cn']), member_dns) # Map users into an array of dicts, which can be serialized # (so we don't have to do this on each round trip) - member_dicts = map(lambda user: user.toDict(), member_users) + member_dicts = map(lambda member: member.toDict(), members) # store a copy of the original group for the update later group_data = b64encode(dumps(group_dict)) @@ -526,7 +542,7 @@ class Root(controllers.RootController): # kw['group_orig'] = b64encode(dumps(new_group.toDict())) except ipaerror.IPAError, e: - turbogears.flash("User update failed: " + str(e)) + turbogears.flash("Group update failed: " + str(e)) return dict(form=group_edit_form, group=kw, members=member_dicts, tg_template='ipagui.templates.groupedit') @@ -543,7 +559,7 @@ class Root(controllers.RootController): utf8_encode_values(dnadds), kw.get('cn')) kw['dnadd'] = failed_adds except ipaerror.IPAError, e: - turbogears.flash("User update failed: " + str(e)) + turbogears.flash("Group update failed: " + str(e)) return dict(form=group_edit_form, group=kw, members=member_dicts, tg_template='ipagui.templates.groupedit') @@ -560,7 +576,7 @@ class Root(controllers.RootController): utf8_encode_values(dndels), kw.get('cn')) kw['dndel'] = failed_dels except ipaerror.IPAError, e: - turbogears.flash("User update failed: " + str(e)) + turbogears.flash("Group update failed: " + str(e)) return dict(form=group_edit_form, group=kw, members=member_dicts, tg_template='ipagui.templates.groupedit') @@ -627,10 +643,12 @@ class Root(controllers.RootController): member_dns = [member_dns] # TODO: convert this into an efficient (single) function call - member_users = map( - lambda dn: client.get_user_by_dn(dn, ['givenname', 'sn', 'uid']), + # Note: this isn't quite right, since it can be users and groups. + members = map( + lambda dn: client.get_user_by_dn(dn, ['dn', 'givenname', 'sn', + 'uid', 'cn']), member_dns) - member_dicts = map(lambda user: user.toDict(), member_users) + member_dicts = map(lambda member: member.toDict(), members) return dict(group=group_dict, fields=forms.group.GroupFields(), members = member_dicts) diff --git a/ipa-server/ipa-gui/ipagui/templates/groupeditform.kid b/ipa-server/ipa-gui/ipagui/templates/groupeditform.kid index 0a48dbeb5..9f5549669 100644 --- a/ipa-server/ipa-gui/ipagui/templates/groupeditform.kid +++ b/ipa-server/ipa-gui/ipagui/templates/groupeditform.kid @@ -8,7 +8,7 @@ from ipagui.helpers import ipahelper ?> - + + +
+
+
+ + + ${ent_cn} + add + +
+
+
+ + + diff --git a/ipa-server/ipa-gui/ipagui/templates/groupshow.kid b/ipa-server/ipa-gui/ipagui/templates/groupshow.kid index 2df5b220f..776b63959 100644 --- a/ipa-server/ipa-gui/ipagui/templates/groupshow.kid +++ b/ipa-server/ipa-gui/ipagui/templates/groupshow.kid @@ -35,12 +35,19 @@
Group Members
- ${member_name} (${member_uid}) + ${member_cn} ${member_desc}

diff --git a/ipa-server/ipa-gui/ipagui/templates/userlistajax.kid b/ipa-server/ipa-gui/ipagui/templates/userlistajax.kid deleted file mode 100644 index 6c195b29f..000000000 --- a/ipa-server/ipa-gui/ipagui/templates/userlistajax.kid +++ /dev/null @@ -1,54 +0,0 @@ -
- - -
-
- - - -
-
- - - ${user.givenName} ${user.sn} (${user.uid}) - add - -
-
- - -
-- cgit