Prevent members from being added added twice.

Display search message while in progress.
Correctly calculate number of search results after filtering.
This commit is contained in:
Kevin McCarthy 2007-09-17 15:24:11 -07:00
parent cc1585daff
commit 8190404706
2 changed files with 54 additions and 11 deletions

View File

@ -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">

View File

@ -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>