diff --git a/resources/classes/groups.php b/resources/classes/groups.php index 69b3e4249b..f9c5be02ab 100644 --- a/resources/classes/groups.php +++ b/resources/classes/groups.php @@ -17,41 +17,46 @@ The Initial Developer of the Original Code is Mark J Crane - Portions created by the Initial Developer are Copyright (C) 2016-2019 + Portions created by the Initial Developer are Copyright (C) 2016-2021 the Initial Developer. All Rights Reserved. Contributor(s): Mark J Crane */ - /** * groups class provides methods for add, delete groups, and add default groups * - * @method string add - * @method boolean delete - * @method boolean defaults + * @method null delete + * @method null toggle + * @method null copy */ if (!class_exists('groups')) { class groups { - public $db; + /** + * declare the variables + */ + private $app_name; + private $app_uuid; + private $name; + private $table; + private $toggle_field; + private $toggle_values; + private $location; + public $group_uuid; /** - * Called when the object is created + * called when the object is created */ public function __construct() { - //connect to the database if not connected - if (!$this->db) { - require_once "resources/classes/database.php"; - $database = new database; - $database->connect(); - $this->db = $database->db; - } + //assign the variables + $this->app_name = 'groups'; + $this->app_uuid = '2caf27b0-540a-43d5-bb9b-c9871a1e4f84'; } /** - * Called when there are no references to a particular object + * called when there are no references to a particular object * unset the variables used in the class */ public function __destruct() { @@ -61,21 +66,293 @@ if (!class_exists('groups')) { } /** - * add a group + * delete rows from the database */ - public function add() { - $id = uuid(); - //return $id; - return false; + public function delete($records) { + //assign the variables + $this->name = 'group'; + $this->table = 'groups'; + $this->location = 'groups.php'; + + if (permission_exists($this->name.'_delete')) { + + //add multi-lingual support + $language = new text; + $text = $language->get(); + + //validate the token + $token = new token; + if (!$token->validate($_SERVER['PHP_SELF'])) { + message::add($text['message-invalid_token'],'negative'); + header('Location: '.$this->location); + exit; + } + + //delete multiple records + if (is_array($records) && @sizeof($records) != 0) { + //build array of checked records + foreach ($records as $x => $record) { + if ($record['checked'] == 'true' && is_uuid($record['uuid'])) { + $array[$this->table][$x][$this->name.'_uuid'] = $record['uuid']; + $array['group_permissions'][$x][$this->name.'_uuid'] = $record['uuid']; + } + } + + //delete the checked rows + if (is_array($array) && @sizeof($array) != 0) { + + //grant temporary permissions + $p = new permissions; + $p->add('group_permission_delete', 'temp'); + + //execute delete + $database = new database; + $database->app_name = $this->app_name; + $database->app_uuid = $this->app_uuid; + $database->delete($array); + unset($array); + + //revoke temporary permissions + $p->delete('group_permission_delete', 'temp'); + + //set message + message::add($text['message-delete']); + } + unset($records); + } + } + } + + public function delete_members($records) { + //assign the variables + $this->name = 'group_member'; + $this->table = 'user_groups'; + $this->location = 'group_members.php?group_uuid='.$this->group_uuid; + + if (permission_exists($this->name.'_delete')) { + + //add multi-lingual support + $language = new text; + $text = $language->get(); + + //validate the token + $token = new token; + if (!$token->validate($_SERVER['PHP_SELF'])) { + message::add($text['message-invalid_token'],'negative'); + header('Location: '.$this->location); + exit; + } + + //delete multiple records + if (is_array($records) && @sizeof($records) != 0) { + //build array of checked records + foreach ($records as $x => $record) { + if ($record['checked'] == 'true' && is_uuid($record['uuid'])) { + $array[$this->table][$x]['user_uuid'] = $record['uuid']; + $array[$this->table][$x]['group_uuid'] = $this->group_uuid; + } + } + + //delete the checked rows + if (is_array($array) && @sizeof($array) != 0) { + + //grant temporary permissions + $p = new permissions; + $p->add('user_group_delete', 'temp'); + + //execute delete + $database = new database; + $database->app_name = $this->app_name; + $database->app_uuid = $this->app_uuid; + $database->delete($array); + unset($array); + + //revoke temporary permissions + $p->delete('user_group_delete', 'temp'); + + //set message + message::add($text['message-delete']); + } + unset($records); + } + } } /** - * delete a group + * toggle a field between two values */ - public function delete($id) { - return false; + public function toggle($records) { + //assign the variables + $this->name = 'group'; + $this->table = 'groups'; + $this->toggle_field = 'group_protected'; + $this->toggle_values = ['true','false']; + $this->location = 'groups.php'; + + if (permission_exists($this->name.'_edit')) { + + //add multi-lingual support + $language = new text; + $text = $language->get(); + + //validate the token + $token = new token; + if (!$token->validate($_SERVER['PHP_SELF'])) { + message::add($text['message-invalid_token'],'negative'); + header('Location: '.$this->location); + exit; + } + + //toggle the checked records + if (is_array($records) && @sizeof($records) != 0) { + //get current toggle state + foreach($records as $record) { + if ($record['checked'] == 'true' && is_uuid($record['uuid'])) { + $uuids[] = "'".$record['uuid']."'"; + } + } + if (is_array($uuids) && @sizeof($uuids) != 0) { + $sql = "select ".$this->name."_uuid as uuid, ".$this->toggle_field." as toggle from v_".$this->table." "; + $sql .= "where (domain_uuid = :domain_uuid or domain_uuid is null) "; + $sql .= "and ".$this->name."_uuid in (".implode(', ', $uuids).") "; + $parameters['domain_uuid'] = $_SESSION['domain_uuid']; + $database = new database; + $rows = $database->select($sql, $parameters, 'all'); + if (is_array($rows) && @sizeof($rows) != 0) { + foreach ($rows as $row) { + $states[$row['uuid']] = $row['toggle']; + } + } + unset($sql, $parameters, $rows, $row); + } + + //build update array + $x = 0; + foreach($states as $uuid => $state) { + //create the array + $array[$this->table][$x][$this->name.'_uuid'] = $uuid; + $array[$this->table][$x][$this->toggle_field] = $state == $this->toggle_values[0] ? $this->toggle_values[1] : $this->toggle_values[0]; + + //increment the id + $x++; + } + + //save the changes + if (is_array($array) && @sizeof($array) != 0) { + //save the array + $database = new database; + $database->app_name = $this->app_name; + $database->app_uuid = $this->app_uuid; + $database->save($array); + unset($array); + + //set message + message::add($text['message-toggle']); + } + unset($records, $states); + } + } } + /** + * copy rows from the database + */ + public function copy($records) { + //assign the variables + $this->name = 'group'; + $this->table = 'groups'; + $this->location = 'groups.php'; + + if (permission_exists($this->name.'_add')) { + + //add multi-lingual support + $language = new text; + $text = $language->get(); + + //validate the token + $token = new token; + if (!$token->validate($_SERVER['PHP_SELF'])) { + message::add($text['message-invalid_token'],'negative'); + header('Location: '.$this->location); + exit; + } + + //copy the checked records + if (is_array($records) && @sizeof($records) != 0) { + + //get checked records + foreach($records as $record) { + if ($record['checked'] == 'true' && is_uuid($record['uuid'])) { + $uuids[] = "'".$record['uuid']."'"; + } + } + + //create the array from existing data + if (is_array($uuids) && @sizeof($uuids) != 0) { + + //primary table + $sql = "select * from v_".$this->table." "; + $sql .= "where (domain_uuid = :domain_uuid or domain_uuid is null) "; + $sql .= "and ".$this->name."_uuid in (".implode(', ', $uuids).") "; + $parameters['domain_uuid'] = $_SESSION['domain_uuid']; + $database = new database; + $rows = $database->select($sql, $parameters, 'all'); + if (is_array($rows) && @sizeof($rows) != 0) { + $y = 0; + foreach ($rows as $x => $row) { + $primary_uuid = uuid(); + + //copy data + $array[$this->table][$x] = $row; + + //overwrite + $array[$this->table][$x][$this->name.'_uuid'] = $primary_uuid; + $array[$this->table][$x][$this->name.'_description'] = trim($row[$this->name.'_description']).' ('.$text['label-copy'].')'; + + //permissions sub table + $sql_2 = "select * from v_group_permissions where group_uuid = :group_uuid"; + $parameters_2['group_uuid'] = $row['group_uuid']; + $database = new database; + $rows_2 = $database->select($sql_2, $parameters_2, 'all'); + if (is_array($rows_2) && @sizeof($rows_2) != 0) { + foreach ($rows_2 as $row_2) { + + //copy data + $array['group_permissions'][$y] = $row_2; + + //overwrite + $array['group_permissions'][$y]['group_permission_uuid'] = uuid(); + $array['group_permissions'][$y]['group_uuid'] = $primary_uuid; + + //increment + $y++; + + } + } + unset($sql_2, $parameters_2, $rows_2, $row_2); + } + } + unset($sql, $parameters, $rows, $row); + } + + //save the changes and set the message + if (is_array($array) && @sizeof($array) != 0) { + //save the array + $database = new database; + $database->app_name = $this->app_name; + $database->app_uuid = $this->app_uuid; + $database->save($array); + unset($array); + + //set message + message::add($text['message-copy']); + } + unset($records); + } + } + } + + /** * add defaults groups */ @@ -94,6 +371,7 @@ if (!class_exists('groups')) { $array['groups'][$x]['group_level'] = '80'; $array['groups'][$x]['group_description'] = 'Super Administrator Group'; $array['groups'][$x]['group_protected'] = 'false'; + $group_uuids[$array['groups'][$x]['group_name']] = $array['groups'][$x]['group_uuid']; $x++; $array['groups'][$x]['group_uuid'] = uuid(); $array['groups'][$x]['domain_uuid'] = null; @@ -101,6 +379,7 @@ if (!class_exists('groups')) { $array['groups'][$x]['group_level'] = '50'; $array['groups'][$x]['group_description'] = 'Administrator Group'; $array['groups'][$x]['group_protected'] = 'false'; + $group_uuids[$array['groups'][$x]['group_name']] = $array['groups'][$x]['group_uuid']; $x++; $array['groups'][$x]['group_uuid'] = uuid(); $array['groups'][$x]['domain_uuid'] = null; @@ -108,6 +387,7 @@ if (!class_exists('groups')) { $array['groups'][$x]['group_level'] = '30'; $array['groups'][$x]['group_description'] = 'User Group'; $array['groups'][$x]['group_protected'] = 'false'; + $group_uuids[$array['groups'][$x]['group_name']] = $array['groups'][$x]['group_uuid']; $x++; $array['groups'][$x]['group_uuid'] = uuid(); $array['groups'][$x]['domain_uuid'] = null; @@ -115,6 +395,7 @@ if (!class_exists('groups')) { $array['groups'][$x]['group_level'] = '20'; $array['groups'][$x]['group_description'] = 'Call Center Agent Group'; $array['groups'][$x]['group_protected'] = 'false'; + $group_uuids[$array['groups'][$x]['group_name']] = $array['groups'][$x]['group_uuid']; $x++; $array['groups'][$x]['group_uuid'] = uuid(); $array['groups'][$x]['domain_uuid'] = null; @@ -122,6 +403,7 @@ if (!class_exists('groups')) { $array['groups'][$x]['group_level'] = '10'; $array['groups'][$x]['group_description'] = 'Public Group'; $array['groups'][$x]['group_protected'] = 'false'; + $group_uuids[$array['groups'][$x]['group_name']] = $array['groups'][$x]['group_uuid']; //add the temporary permissions $p = new permissions; @@ -130,8 +412,8 @@ if (!class_exists('groups')) { //save the data to the database $database = new database; - $database->app_name = 'groups'; - $database->app_uuid = '2caf27b0-540a-43d5-bb9b-c9871a1e4f84'; + $database->app_name = $this->app_name; + $database->app_uuid = $this->app_uuid; $database->save($array); unset($array); @@ -148,7 +430,7 @@ if (!class_exists('groups')) { $num_rows = $database->select($sql, null, 'column'); if ($num_rows == 0) { //build the apps array - $config_list = glob($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH . "/*/*/app_config.php"); + $config_list = glob($_SERVER["DOCUMENT_ROOT"].PROJECT_PATH."/*/*/app_config.php"); $x = 0; foreach ($config_list as &$config_path) { include($config_path); @@ -163,10 +445,14 @@ if (!class_exists('groups')) { $array['group_permissions'][$x]['group_permission_uuid'] = uuid(); $array['group_permissions'][$x]['domain_uuid'] = null; $array['group_permissions'][$x]['permission_name'] = $row['name']; + $array['group_permissions'][$x]['permission_protected'] = 'false'; + $array['group_permissions'][$x]['permission_assigned'] = 'true'; $array['group_permissions'][$x]['group_name'] = $group; + $array['group_permissions'][$x]['group_uuid'] = $group_uuids[$group]; } } } + unset($group_uuids); //add the temporary permissions $p = new permissions; @@ -175,8 +461,8 @@ if (!class_exists('groups')) { //save the data to the database $database = new database; - $database->app_name = 'groups'; - $database->app_uuid = '2caf27b0-540a-43d5-bb9b-c9871a1e4f84'; + $database->app_name = $this->app_name; + $database->app_uuid = $this->app_uuid; $database->save($array); unset($array); @@ -185,11 +471,8 @@ if (!class_exists('groups')) { $p->delete("group_permission_edit", "temp"); } } - } //end scripts class + + } } -/* -//example use - $group = new groups; - $group->defaults(); -*/ + ?>