[geeklog-cvs] geeklog: Optimized version of savegroupusers() (from feature req...
geeklog-cvs at lists.geeklog.net
geeklog-cvs at lists.geeklog.net
Sat Jan 2 11:31:01 EST 2010
changeset 7577:ee6d25ffcfb4
url: http://project.geeklog.net/cgi-bin/hgwebdir.cgi/geeklog/rev/ee6d25ffcfb4
user: Dirk Haun <dirk at haun-online.de>
date: Sat Jan 02 15:29:13 2010 +0100
description:
Optimized version of savegroupusers() (from feature request #0001053, provided by Blaine)
diffstat:
public_html/admin/group.php | 45 ++++++++++++++++++++++++++++++++++++++-------
1 files changed, 38 insertions(+), 7 deletions(-)
diffs (55 lines):
diff -r 8ee64e267b94 -r ee6d25ffcfb4 public_html/admin/group.php
--- a/public_html/admin/group.php Sat Jan 02 13:22:20 2010 +0100
+++ b/public_html/admin/group.php Sat Jan 02 15:29:13 2010 +0100
@@ -1001,13 +1001,44 @@
$retval = '';
- // Delete all the current buddy records for this user and add all the selected ones
- $sql = "DELETE FROM {$_TABLES['group_assignments']} WHERE ug_main_grp_id={$groupid} AND ug_uid IS NOT NULL";
- DB_query($sql);
- $adduser = explode('|', $groupmembers);
- for ($i = 0; $i < count($adduser); $i++) {
- $adduser[$i] = COM_applyFilter($adduser[$i], true);
- DB_query("INSERT INTO {$_TABLES['group_assignments']} (ug_main_grp_id, ug_uid) VALUES ('$groupid', '$adduser[$i]')");
+ $updateUsers = explode("|", $groupmembers);
+ $updateCount = count($updateUsers);
+ if ($updateCount > 0) {
+
+ // Retrieve all existing users in group so we can determine if changes
+ // are needed
+ $activeUsers = array();
+ $query = DB_query("SELECT ug_uid FROM {$_TABLES['group_assignments']} WHERE ug_main_grp_id = $groupid");
+ if (DB_numRows($query) > 0) {
+ while ($A = DB_fetchArray($query, false)) {
+ array_push($activeUsers, $A['ug_uid']);
+ }
+ $deleteGroupUsers = array_diff($activeUsers, $updateUsers);
+ $addGroupUsers = array_diff($updateUsers, $activeUsers);
+ if (is_array($deleteGroupUsers) AND count($deleteGroupUsers) > 0) {
+ foreach ($deleteGroupUsers as $uid) {
+ $uid = COM_applyFilter($uid, true);
+ DB_query("DELETE FROM {$_TABLES['group_assignments']} WHERE ug_main_grp_id = $groupid AND ug_uid = $uid");
+ }
+ }
+ if (is_array($addGroupUsers) AND count($addGroupUsers) > 0) {
+ foreach ($addGroupUsers as $uid) {
+ $uid = COM_applyFilter($uid, true);
+ DB_query("INSERT INTO {$_TABLES['group_assignments']} (ug_main_grp_id, ug_uid) VALUES ('$groupid', $uid)");
+ }
+ }
+
+ } else {
+
+ // No active users which should never occur as Root users
+ // are always members
+ for ($i = 0; $i < $updateCount; $i++) {
+ $updateUsers[$i] = COM_applyFilter($updateUsers[$i], true);
+ DB_query("INSERT INTO {$_TABLES['group_assignments']} (ug_main_grp_id, ug_uid) VALUES ('$groupid', '$updateUsers[$i]')");
+ }
+
+ }
+
}
if (isset($_REQUEST['chk_showall']) && ($_REQUEST['chk_showall'] == 1)) {
More information about the geeklog-cvs
mailing list