summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ipa-server/ipa-gui/ipagui/controllers.py76
-rw-r--r--ipa-server/ipa-gui/ipagui/templates/groupeditform.kid43
-rw-r--r--ipa-server/ipa-gui/ipagui/templates/groupeditsearch.kid59
-rw-r--r--ipa-server/ipa-gui/ipagui/templates/groupshow.kid15
-rw-r--r--ipa-server/ipa-gui/ipagui/templates/userlistajax.kid54
5 files changed, 139 insertions, 108 deletions
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) + "<br/>" + 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
?>
- <?python searchurl = tg.url('/userlist_ajax') ?>
+ <?python searchurl = tg.url('/groupedit_search') ?>
<script type="text/javascript">
// this is used for round-trip recontruction of the names.
@@ -47,7 +47,7 @@ from ipagui.helpers import ipahelper
Element.remove(effect.element);
}
- function adduser(dn, cn) {
+ function addmember(dn, cn) {
dn_to_cn_hash[dn] = cn;
if ((added_hash[dn] == 1) || (member_hash[dn] == 1)) {
@@ -80,8 +80,8 @@ from ipagui.helpers import ipahelper
return newdiv
}
- function adduserHandler(element, dn, cn) {
- var newdiv = adduser(dn, cn)
+ function addmemberHandler(element, dn, cn) {
+ var newdiv = addmember(dn, cn)
if (newdiv != null) {
new Effect.Fade(Element.up(element));
new Effect.Appear(newdiv);
@@ -89,7 +89,7 @@ from ipagui.helpers import ipahelper
}
}
- function removeuser(dn, cn) {
+ function removemember(dn, cn) {
dn_to_cn_hash[dn] = cn;
var newdiv = document.createElement('div');
@@ -118,8 +118,8 @@ from ipagui.helpers import ipahelper
return newdiv
}
- function removeuserHandler(element, dn, cn) {
- var newdiv = removeuser(dn, cn);
+ function removememberHandler(element, dn, cn) {
+ var newdiv = removemember(dn, cn);
new Effect.Fade(Element.up(element));
new Effect.Appear(newdiv);
/* Element.up(element).remove(); */
@@ -145,7 +145,7 @@ from ipagui.helpers import ipahelper
new Ajax.Updater('searchresults',
'${searchurl}',
{ asynchronous:true,
- parameters: { uid: $('uid').value },
+ parameters: { criteria: $('criteria').value },
evalScripts: true });
return false;
}
@@ -224,16 +224,17 @@ from ipagui.helpers import ipahelper
member_dn_esc = ipahelper.javascript_string_escape(member_dn)
member_uid = member.get('uid')
- member_uid_esc = ipahelper.javascript_string_escape(member_uid)
-
- member_name = "%s %s" % (member.get('givenname', ''),
- member.get('sn', ''))
- member_name_esc = ipahelper.javascript_string_escape(member_name)
+ if member_uid:
+ member_cn = "%s %s (%s)" % (member.get('givenName'),
+ member.get('sn'),
+ member.get('uid'))
+ else:
+ member_cn = "%s [group]" % member.get('cn')
+ member_cn_esc = ipahelper.javascript_string_escape(member_cn)
?>
- ${member_name} (${member_uid})
+ ${member_cn}
<a href="#"
- onclick="removeuserHandler(this, '${member_dn_esc}',
- '${member_name_esc} (${member_uid_esc})');
+ onclick="removememberHandler(this, '${member_dn_esc}', '${member_cn_esc}');
return false;"
>remove</a>
<script type="text/javascript">
@@ -249,7 +250,7 @@ from ipagui.helpers import ipahelper
</div>
<div style="clear:both">
- <div class="formsection">Add Persons</div>
+ <div class="formsection">Add Members</div>
<div class="floatlist">
<div class="floatheader">To Add:</div>
@@ -259,9 +260,9 @@ from ipagui.helpers import ipahelper
<div>
<div id="search">
- <input id="uid" type="text" name="uid"
+ <input id="criteria" type="text" name="criteria"
onkeypress="return enterDoSearch(event);" />
- <input type="button" value="Find Users"
+ <input type="button" value="Find"
onclick="return doSearch();"
/>
</div>
@@ -320,7 +321,7 @@ from ipagui.helpers import ipahelper
?>
var dn = "${dnadd_esc}";
var cn = dn_to_cn_hash[dn];
- var newdiv = adduser(dn, cn);
+ var newdiv = addmember(dn, cn);
if (newdiv != null) {
newdiv.style.display = 'block';
}
@@ -332,7 +333,7 @@ from ipagui.helpers import ipahelper
?>
var dn = "${dndel_esc}";
var cn = dn_to_cn_hash[dn];
- var newdiv = removeuser(dn, cn);
+ var newdiv = removemember(dn, cn);
newdiv.style.display = 'block';
orig_div_id = dn_to_member_div_id[dn]
$(orig_div_id).style.display = 'none';
diff --git a/ipa-server/ipa-gui/ipagui/templates/groupeditsearch.kid b/ipa-server/ipa-gui/ipagui/templates/groupeditsearch.kid
new file mode 100644
index 000000000..d8c20f191
--- /dev/null
+++ b/ipa-server/ipa-gui/ipagui/templates/groupeditsearch.kid
@@ -0,0 +1,59 @@
+<div xmlns:py="http://purl.org/kid/ns#">
+
+<?python
+from ipagui.helpers import ipahelper
+?>
+ <div id="search-results-count">
+ </div>
+ <?python
+ criteria_esc = ipahelper.javascript_string_escape(criteria)
+ ?>
+ <script type="text/javascript">
+ search_string = "${criteria_esc}";
+ results_counter = 0;
+ </script>
+ <?python search_div_counter = 1 ?>
+ <div py:for="entities in (users, groups)">
+ <div py:if='(entities != None) and (len(entities) > 0)'>
+ <div py:for="entity in entities" id="search-${search_div_counter}">
+ <?python
+ ent_dn_esc = ipahelper.javascript_string_escape(entity.dn)
+ ent_uid = entity.uid
+ if ent_uid:
+ ent_cn = "%s %s (%s)" % (entity.givenName, entity.sn, entity.uid)
+ else:
+ ent_cn = "%s [group]" % entity.cn
+ ent_cn_esc = ipahelper.javascript_string_escape(ent_cn)
+ ?>
+ <script type="text/javascript">
+ if ((added_hash["${ent_dn_esc}"] == 1) ||
+ (member_hash["${ent_dn_esc}"] == 1)) {
+ $("search-${search_div_counter}").style.display = 'none';
+ } else {
+ results_counter = results_counter + 1;
+ }
+ </script>
+ ${ent_cn}
+ <a href=""
+ onclick="addmemberHandler(this, '${ent_dn_esc}', '${ent_cn_esc}');
+ return false;"
+ >add</a>
+ <?python
+ search_div_counter = search_div_counter + 1
+ ?>
+ </div>
+ </div>
+ </div>
+ <script type="text/javascript">
+ if (results_counter == 0) {
+ var message = "No results found for " + search_string;
+ } else {
+ var message = results_counter + " results found:";
+ }
+ $('search-results-count').appendChild(document.createTextNode(message));
+ </script>
+ <script py:if="counter &lt; 0">
+ $('search-results-count').appendChild(document.createTextNode(
+ " (truncated)"));
+ </script>
+</div>
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 @@
<div class="formsection">Group Members</div>
<div py:for="member in members">
<?python
- member_name = "%s %s" % (member.get('givenname', ''),
- member.get('sn', ''))
+
member_uid = member.get('uid')
+ if member_uid:
+ member_cn = "%s %s" % (member.get('givenName'), member.get('sn'))
+ member_desc = "(%s)" % member_uid
+ view_url = tg.url('usershow', uid=member_uid)
+ else:
+ member_cn = "%s" % member.get('cn')
+ member_desc = "[group]"
+ view_url = tg.url('groupshow', cn=member_cn)
?>
- <a href="${tg.url('usershow', uid=member_uid)}"
- >${member_name}</a> (${member_uid})
+ <a href="${view_url}"
+ >${member_cn}</a> ${member_desc}
</div>
<br/>
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 @@
-<div xmlns:py="http://purl.org/kid/ns#">
-
-<?python
-from ipagui.helpers import ipahelper
-?>
- <div id="search-results-count">
- </div>
- <?python
- criteria_esc = ipahelper.javascript_string_escape(uid)
- ?>
- <script type="text/javascript">
- search_string = "${criteria_esc}";
- results_counter = 0;
- </script>
- <?python search_div_counter = 1 ?>
- <div py:if='(users != None) and (len(users) > 0)'>
- <div py:for="user in users" id="search-${search_div_counter}">
- <?python
- user_dn_esc = ipahelper.javascript_string_escape(user.dn)
- user_uid_esc = ipahelper.javascript_string_escape(user.uid)
- user_cn_esc = ipahelper.javascript_string_escape(user.cn)
- ?>
- <script type="text/javascript">
- if ((added_hash["${user_dn_esc}"] == 1) ||
- (member_hash["${user_dn_esc}"] == 1)) {
- $("search-${search_div_counter}").style.display = 'none';
- } else {
- results_counter = results_counter + 1;
- }
- </script>
- ${user.givenName} ${user.sn} (${user.uid})
- <a href=""
- onclick="adduserHandler(this, '${user_dn_esc}',
- '${user_cn_esc} (${user_uid_esc})');
- return false;"
- >add</a>
- <?python
- search_div_counter = search_div_counter + 1
- ?>
- </div>
- </div>
- <script type="text/javascript">
- if (results_counter == 0) {
- var message = "No results found for " + search_string;
- } else {
- var message = results_counter + " results found:";
- }
- $('search-results-count').appendChild(document.createTextNode(message));
- </script>
- <script py:if="counter &lt; 0">
- $('search-results-count').appendChild(document.createTextNode(
- " (truncated)"));
- </script>
-</div>