From 779d0e5920bf28784c6cf6c2d8643de425741223 Mon Sep 17 00:00:00 2001 From: Nate Jones Date: Wed, 1 Apr 2015 08:17:51 +0000 Subject: [PATCH] Groups: Better DB record management on Group rename and Group Domain change. --- core/users/groupdelete.php | 4 ++ core/users/groupedit.php | 132 +++++++++++++++++++++++++++++++++---- 2 files changed, 123 insertions(+), 13 deletions(-) diff --git a/core/users/groupdelete.php b/core/users/groupdelete.php index ba9d58a801..861642acb3 100644 --- a/core/users/groupdelete.php +++ b/core/users/groupdelete.php @@ -36,6 +36,10 @@ require_once "resources/require.php"; return; } +//add multi-lingual support + $language = new text; + $text = $language->get(); + //get the http value and set as a variable $group_uuid = check_str($_GET["id"]); diff --git a/core/users/groupedit.php b/core/users/groupedit.php index 4d4e2106b6..5af3540d14 100644 --- a/core/users/groupedit.php +++ b/core/users/groupedit.php @@ -45,7 +45,9 @@ require_once "resources/require.php"; //set the variables $group_uuid = check_str($_POST['group_uuid']); $group_name = check_str($_POST['group_name']); + $group_name_previous = check_str($_POST['group_name_previous']); $domain_uuid = check_str($_POST["domain_uuid"]); + $domain_uuid_previous = check_str($_POST["domain_uuid_previous"]); $group_description = check_str($_POST["group_description"]); //check for global/domain duplicates @@ -64,7 +66,7 @@ require_once "resources/require.php"; } unset($sql, $prep_statement, $row); - //insert group + //update group if (!$group_exists) { $sql = "update v_groups "; $sql .= "set "; @@ -73,13 +75,115 @@ require_once "resources/require.php"; $sql .= "group_description = '".$group_description."' "; $sql .= "where group_uuid = '".$group_uuid."' "; if (!$db->exec(check_sql($sql))) { - //echo $db->errorCode() . "
"; - $info = $db->errorInfo(); - echo "
".print_r($info, true)."
"; + $error = $db->errorInfo(); + echo "
".print_r($error, true)."
"; exit; - // $info[0] == $db->errorCode() unified error code - // $info[1] is the driver specific error code - // $info[2] is the driver specific error string + } + + //group changed from global to domain-specific + if ($domain_uuid_previous == '' && $domain_uuid != '') { + //remove any users assigned to the group from the old domain + $sql = "delete from v_group_users where group_uuid = '".$group_uuid."' and domain_uuid <> '".$domain_uuid."' "; + if (!$db->exec(check_sql($sql))) { + $error = $db->errorInfo(); + //echo "
".print_r($error, true)."
"; exit; + } + //update permissions to use new domain uuid + $sql = "update v_group_permissions set domain_uuid = '".$domain_uuid."' where group_name = '".$group_name_previous."' and domain_uuid is null "; + if (!$db->exec(check_sql($sql))) { + $error = $db->errorInfo(); + //echo "
".print_r($error, true)."
"; exit; + } + //change group name + if ($group_name != $group_name_previous && $group_name != '') { + //change group name in group users + $sql = "update v_group_users set group_name = '".$group_name."' where group_uuid = '".$group_uuid."' and group_name = '".$group_name_previous."' "; + if (!$db->exec(check_sql($sql))) { + $error = $db->errorInfo(); + //echo "
".print_r($error, true)."
"; exit; + } + //change group name in permissions + $sql = "update v_group_permissions set group_name = '".$group_name."' where domain_uuid = '".$domain_uuid."' and group_name = '".$group_name_previous."' "; + if (!$db->exec(check_sql($sql))) { + $error = $db->errorInfo(); + //echo "
".print_r($error, true)."
"; exit; + } + } + } + + //group changed from one domain to another + else if ($domain_uuid_previous != '' && $domain_uuid != '' && $domain_uuid_previous != $domain_uuid) { + //remove any users assigned to the group from the old domain + $sql = "delete from v_group_users where group_uuid = '".$group_uuid."' and domain_uuid = '".$domain_uuid_previous."' "; + if (!$db->exec(check_sql($sql))) { + $error = $db->errorInfo(); + //echo "
".print_r($error, true)."
"; exit; + } + //update permissions to use new domain uuid + $sql = "update v_group_permissions set domain_uuid = '".$domain_uuid."' where group_name = '".$group_name_previous."' and domain_uuid = '".$domain_uuid_previous."' "; + if (!$db->exec(check_sql($sql))) { + $error = $db->errorInfo(); + //echo "
".print_r($error, true)."
"; exit; + } + //change group name + if ($group_name != $group_name_previous && $group_name != '') { + //change group name in group users + $sql = "update v_group_users set group_name = '".$group_name."' where group_uuid = '".$group_uuid."' and group_name = '".$group_name_previous."' "; + if (!$db->exec(check_sql($sql))) { + $error = $db->errorInfo(); + //echo "
".print_r($error, true)."
"; exit; + } + //change group name in permissions + $sql = "update v_group_permissions set group_name = '".$group_name."' where domain_uuid = '".$domain_uuid."' and group_name = '".$group_name_previous."' "; + if (!$db->exec(check_sql($sql))) { + $error = $db->errorInfo(); + //echo "
".print_r($error, true)."
"; exit; + } + } + } + + //group changed from domain-specific to global + else if ($domain_uuid_previous != '' && $domain_uuid == '') { + //change group name + if ($group_name != $group_name_previous && $group_name != '') { + //change group name in group users + $sql = "update v_group_users set group_name = '".$group_name."' where group_uuid = '".$group_uuid."' and group_name = '".$group_name_previous."' "; + if (!$db->exec(check_sql($sql))) { + $error = $db->errorInfo(); + //echo "
".print_r($error, true)."
"; exit; + } + //change group name in permissions + $sql = "update v_group_permissions set group_name = '".$group_name."' where domain_uuid = '".$domain_uuid_previous."' and group_name = '".$group_name_previous."' "; + if (!$db->exec(check_sql($sql))) { + $error = $db->errorInfo(); + //echo "
".print_r($error, true)."
"; exit; + } + } + //update permissions to not use a domain uuid + $sql = "update v_group_permissions set domain_uuid = null where group_name = '".$group_name."' and domain_uuid = '".$domain_uuid_previous."' "; + if (!$db->exec(check_sql($sql))) { + $error = $db->errorInfo(); + //echo "
".print_r($error, true)."
"; exit; + } + } + + //domain didn't change, but name may still + else { + //change group name + if ($group_name != $group_name_previous && $group_name != '') { + //change group name in group users + $sql = "update v_group_users set group_name = '".$group_name."' where group_uuid = '".$group_uuid."' and group_name = '".$group_name_previous."' "; + if (!$db->exec(check_sql($sql))) { + $error = $db->errorInfo(); + //echo "
".print_r($error, true)."
"; exit; + } + //change group name in permissions + $sql = "update v_group_permissions set group_name = '".$group_name."' where domain_uuid ".(($domain_uuid != '') ? " = '".$domain_uuid."' " : " is null ")." and group_name = '".$group_name_previous."' "; + if (!$db->exec(check_sql($sql))) { + $error = $db->errorInfo(); + //echo "
".print_r($error, true)."
"; exit; + } + } } $_SESSION["message"] = $text['message-update']; @@ -140,6 +244,7 @@ require_once "resources/require.php"; echo $text['label-group_name']."\n"; echo "\n"; echo "\n"; + echo " \n"; echo " \n"; echo "\n"; echo "\n"; @@ -150,14 +255,15 @@ require_once "resources/require.php"; echo " ".$text['label-domain']."\n"; echo "\n"; echo "\n"; - echo " \n"; + echo " \n"; - echo "
\n"; - echo $text['description-domain_name']."\n"; + echo " \n"; + echo "
\n"; + echo $text['description-domain_name']."\n"; echo "\n"; echo "\n"; }