Bladeren bron

Use fusionpbx/resources/classes/groups.php instead of fusionpbx/core/resources/classes/groups.php

FusionPBX 4 jaren geleden
bovenliggende
commit
89daddb92e
1 gewijzigde bestanden met toevoegingen van 317 en 34 verwijderingen
  1. 317 34
      resources/classes/groups.php

+ 317 - 34
resources/classes/groups.php

@@ -17,41 +17,46 @@
 
 	The Initial Developer of the Original Code is
 	Mark J Crane <[email protected]>
-	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 <[email protected]>
 */
 
-
 /**
  * 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 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);
+					}
+			}
+		}
+
+		/**
+		 * toggle a field between two values
 		 */
-		public function add() {
-			$id = uuid();
-			//return $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);
+					}
+			}
 		}
 
 		/**
-		 * delete a group
+		 * copy rows from the database
 		 */
-		public function delete($id) {
-			return false;
+		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();
-*/
+
 ?>