summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin McCarthy <kmccarth@redhat.com>2007-09-17 15:24:11 -0700
committerKevin McCarthy <kmccarth@redhat.com>2007-09-17 15:24:11 -0700
commit8190404706252774394110c4375633721df08641 (patch)
treed487fe5d312a338c5ff8cbe4cda975417a8f3b5f
parentcc1585daff35398f198cf2e398b8187ca990bf5e (diff)
downloadfreeipa-8190404706252774394110c4375633721df08641.tar.gz
freeipa-8190404706252774394110c4375633721df08641.tar.xz
freeipa-8190404706252774394110c4375633721df08641.zip
Prevent members from being added added twice.
Display search message while in progress. Correctly calculate number of search results after filtering.
-rw-r--r--ipa-server/ipa-gui/ipagui/templates/groupeditform.kid36
-rw-r--r--ipa-server/ipa-gui/ipagui/templates/userlistajax.kid29
2 files changed, 54 insertions, 11 deletions
diff --git a/ipa-server/ipa-gui/ipagui/templates/groupeditform.kid b/ipa-server/ipa-gui/ipagui/templates/groupeditform.kid
index b9b5df2b4..df0095d9d 100644
--- a/ipa-server/ipa-gui/ipagui/templates/groupeditform.kid
+++ b/ipa-server/ipa-gui/ipagui/templates/groupeditform.kid
@@ -11,6 +11,15 @@
// the hidden fields only contain uids.
var uid_to_cn_hash = new Hash();
+ // used to filter search results.
+ // records uids already in the group
+ var member_hash = new Hash();
+
+ // used to prevent double adding
+ // records uid to be added
+ var added_hash = new Hash();
+
+
function toggleProtectedFields(checkbox) {
var gidnumberField = $('form_gidnumber');
if (checkbox.checked) {
@@ -30,6 +39,11 @@
function adduser(uid, cn) {
uid_to_cn_hash[uid] = cn;
+ if ((added_hash[uid] == 1) || (member_hash[uid] == 1)) {
+ return null;
+ }
+ added_hash[uid] = 1;
+
var newdiv = document.createElement('div');
newdiv.appendChild(document.createTextNode(
cn.escapeHTML() + " (" + uid.escapeHTML() + ") "));
@@ -38,6 +52,7 @@
undolink.setAttribute('href', '');
undolink.setAttribute('onclick',
'new Effect.Fade(Element.up(this), {afterFinish: removeElement});' +
+ 'added_hash.remove("' + uid + '");' +
'return false;');
undolink.appendChild(document.createTextNode("undo"));
newdiv.appendChild(undolink);
@@ -56,9 +71,11 @@
function adduserHandler(element, uid, cn) {
var newdiv = adduser(uid, cn)
- new Effect.Fade(Element.up(element));
- new Effect.Appear(newdiv);
- /* Element.up(element).remove(); */
+ if (newdiv != null) {
+ new Effect.Fade(Element.up(element));
+ new Effect.Appear(newdiv);
+ /* Element.up(element).remove(); */
+ }
}
function removeuser(uid, cn) {
@@ -112,10 +129,12 @@
}
function doSearch() {
+ $('searchresults').update("Searching...");
new Ajax.Updater('searchresults',
'${searchurl}',
{ asynchronous:true,
- parameters: { uid: $('uid').value } });
+ parameters: { uid: $('uid').value },
+ evalScripts: true });
return false;
}
@@ -192,11 +211,14 @@
member_name = "%s %s" % (member.get('givenname', ''),
member.get('sn', ''))
?>
- ${member_name}
+ ${member_name} (${member_uid})
<a href="#"
onclick="removeuserHandler(this, '${member_uid}', '${member_name}');
return false;"
>remove</a>
+ <script type="text/javascript">
+ member_hash["${member_uid}"] = 1;
+ </script>
</div>
</div>
@@ -267,7 +289,9 @@
var uid = "${uidadd}";
var cn = uid_to_cn_hash[uid];
var newdiv = adduser(uid, cn);
- newdiv.style.display = 'block';
+ if (newdiv != null) {
+ newdiv.style.display = 'block';
+ }
</script>
<script py:for="uiddel in uiddels">
diff --git a/ipa-server/ipa-gui/ipagui/templates/userlistajax.kid b/ipa-server/ipa-gui/ipagui/templates/userlistajax.kid
index ebfb879bc..a2d6a921d 100644
--- a/ipa-server/ipa-gui/ipagui/templates/userlistajax.kid
+++ b/ipa-server/ipa-gui/ipagui/templates/userlistajax.kid
@@ -1,14 +1,33 @@
<div xmlns:py="http://purl.org/kid/ns#">
+ <div id="search-results-count">
+ </div>
+ <script type="text/javascript">
+ search_string = "${uid}";
+ results_counter = 0;
+ </script>
<div py:if='(users != None) and (len(users) > 0)'>
- <div>${len(users)} results returned:</div>
- <div py:for="user in users">
+ <div py:for="user in users" id="search-${user.uid}">
+ <script type="text/javascript">
+ if ((added_hash["${user.uid}"] == 1) ||
+ (member_hash["${user.uid}"] == 1)) {
+ $("search-${user.uid}").style.display = 'none';
+ } else {
+ results_counter = results_counter + 1;
+ }
+ </script>
${user.givenName} ${user.sn} (${user.uid})
<a href=""
onclick="adduserHandler(this, '${user.uid}', '${user.cn}'); return false;"
>add</a>
</div>
</div>
- <div py:if='(users != None) and (len(users) == 0)'>
- No results found for "${uid}"
- </div>
+ <script type="text/javascript">
+ if (results_counter == 0) {
+ $('search-results-count').appendChild(document.createTextNode(
+ "No results found for " + search_string));
+ } else {
+ $('search-results-count').appendChild(document.createTextNode(
+ "" + results_counter + " results found:"));
+ }
+ </script>
</div>