diff --git a/app/destinations/resources/classes/destinations.php b/app/destinations/resources/classes/destinations.php deleted file mode 100644 index bb2738df61..0000000000 --- a/app/destinations/resources/classes/destinations.php +++ /dev/null @@ -1,686 +0,0 @@ - - Portions created by the Initial Developer are Copyright (C) 2017 - 2020 - the Initial Developer. All Rights Reserved. - - Contributor(s): - Mark J Crane -*/ - -/** - * destinations - * - * @method get_array get the destinations - * @method select build the html select - */ -if (!class_exists('destinations')) { - class destinations { - - /** - * destinations array - */ - public $destinations; - public $db; - - /** - * declare private variables - */ - private $app_name; - private $app_uuid; - private $permission_prefix; - private $list_page; - private $table; - private $uuid_prefix; - - /** - * 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 private variables - $this->app_name = 'destinations'; - $this->app_uuid = '5ec89622-b19c-3559-64f0-afde802ab139'; - $this->permission_prefix = 'destination_'; - $this->list_page = 'destinations.php'; - $this->table = 'destinations'; - $this->uuid_prefix = 'destination_'; - } - - /** - * Called when there are no references to a particular object - * unset the variables used in the class - */ - public function __destruct() { - foreach ($this as $key => $value) { - unset($this->$key); - } - } - - /** - * Build the destination select list - * @var string $destination_type can be ivr, dialplan, call_center_contact or bridge - * @var string $destination_name - current name - * @var string $destination_value - current value - */ - public function select($destination_type, $destination_name, $destination_value) { - - //set the global variables - global $db_type; - - //get the destinations - if (!is_array($this->destinations)) { - - //get the array from the app_config.php files - $config_list = glob($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH . "/*/*/app_config.php"); - $x = 0; - foreach ($config_list as &$config_path) { - include($config_path); - $x++; - } - $i = 0; - foreach ($apps as $x => &$app) { - if (isset($app['destinations'])) foreach ($app['destinations'] as &$row) { - if (permission_exists($this->singular($row["name"])."_destinations")) { - $this->destinations[] = $row; - } - } - } - //put the array in order - if ($this->destinations !== null && is_array($this->destinations)) { - foreach ($this->destinations as $row) { - $option_groups[] = $row['label']; - } - array_multisort($option_groups, SORT_ASC, $this->destinations); - } - //add the sql and data to the array - if ($this->destinations !== null && is_array($this->destinations)) { - $x = 0; - foreach ($this->destinations as $row) { - if ($row['type'] = 'sql') { - $table_name = preg_replace('#[^a-zA-Z0-9_]#', '', $row['name']); - if (isset($row['sql'])) { - if (is_array($row['sql'])) { - $sql = trim($row['sql'][$db_type])." "; - } - else { - $sql = trim($row['sql'])." "; - } - } - else { - $field_count = count($row['field']); - $fields = ''; - $c = 1; - foreach ($row['field'] as $key => $value) { - $key = preg_replace('#[^a-zA-Z0-9_]#', '', $key); - $value = preg_replace('#[^a-zA-Z0-9_]#', '', $value); - if ($field_count != $c) { $delimiter = ','; } else { $delimiter = ''; } - $fields .= $value." as ".$key.$delimiter." "; - $c++; - } - $sql = "select ".$fields; - $sql .= " from v_".$table_name." "; - } - if (isset($row['where'])) { - $sql .= trim($row['where'])." "; - } - $sql .= "order by ".trim($row['order_by']); - $sql = str_replace("\${domain_uuid}", $_SESSION['domain_uuid'], $sql); - $database = new database; - $result = $database->select($sql, null, 'all'); - - $this->destinations[$x]['result']['sql'] = $sql; - $this->destinations[$x]['result']['data'] = $result; - } - $x++; - } - } - - $this->destinations[$x]['type'] = 'array'; - $this->destinations[$x]['label'] = 'other'; - $this->destinations[$x]['name'] = 'dialplans'; - $this->destinations[$x]['field']['name'] = "name"; - $this->destinations[$x]['field']['destination'] = "destination"; - $this->destinations[$x]['select_value']['dialplan'] = "transfer:\${destination}"; - $this->destinations[$x]['select_value']['ivr'] = "menu-exec-app:transfer \${destination}"; - $this->destinations[$x]['select_label'] = "\${name}"; - $y = 0; - $this->destinations[$x]['result']['data'][$y]['label'] = 'check_voicemail'; - $this->destinations[$x]['result']['data'][$y]['name'] = '*98'; - $this->destinations[$x]['result']['data'][$y]['destination'] = '*98 XML ${context}'; - $y++; - $this->destinations[$x]['result']['data'][$y]['label'] = 'company_directory'; - $this->destinations[$x]['result']['data'][$y]['name'] = '*411'; - $this->destinations[$x]['result']['data'][$y]['destination'] = '*411 XML ${context}'; - $y++; - $this->destinations[$x]['result']['data'][$y]['label'] = 'hangup'; - $this->destinations[$x]['result']['data'][$y]['name'] = 'hangup'; - $this->destinations[$x]['result']['data'][$y]['application'] = 'hangup'; - $this->destinations[$x]['result']['data'][$y]['destination'] = ''; - $y++; - $this->destinations[$x]['result']['data'][$y]['label'] = 'record'; - $this->destinations[$x]['result']['data'][$y]['name'] = '*732'; - $this->destinations[$x]['result']['data'][$y]['destination'] = '*732 XML ${context}'; - $y++; - } - - //remove special characters from the name - $destination_id = str_replace("]", "", $destination_name); - $destination_id = str_replace("[", "_", $destination_id); - - //set the css style - $select_style = 'width: 200px;'; - - //add additional - if (if_group("superadmin")) { - $response = "\n"; - $response .= "\n"; - } - - //set default to false - $select_found = false; - - $response .= " \n"; - if (if_group("superadmin")) { - $response .= ""; - } - - //return the formatted destinations - return $response; - } - - /** - * Get all the destinations - * @var string $destination_type can be ivr, dialplan, call_center_contact or bridge - */ - public function all($destination_type) { - - //set the global variables - global $db_type; - - //get the destinations - if (!is_array($this->destinations)) { - - //get the array from the app_config.php files - $config_list = glob($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH . "/*/*/app_config.php"); - $x = 0; - foreach ($config_list as &$config_path) { - include($config_path); - $x++; - } - $i = 0; - foreach ($apps as $x => &$app) { - if (isset($app['destinations'])) { - foreach ($app['destinations'] as &$row) { - $this->destinations[] = $row; - } - } - } - - //put the array in order - foreach ($this->destinations as $row) { - $option_groups[] = $row['label']; - } - array_multisort($option_groups, SORT_ASC, $this->destinations); - - //add the sql and data to the array - $x = 0; - foreach ($this->destinations as $row) { - if ($row['type'] = 'sql') { - $table_name = preg_replace('#[^a-zA-Z0-9_]#', '', $row['name']); - if (isset($row['sql'])) { - if (is_array($row['sql'])) { - $sql = trim($row['sql'][$db_type])." "; - } - else { - $sql = trim($row['sql'])." "; - } - } - else { - $field_count = count($row['field']); - $fields = ''; - $c = 1; - foreach ($row['field'] as $key => $value) { - $key = preg_replace('#[^a-zA-Z0-9_]#', '', $key); - $value = preg_replace('#[^a-zA-Z0-9_]#', '', $value); - if ($field_count != $c) { $delimiter = ','; } else { $delimiter = ''; } - $fields .= $value." as ".$key.$delimiter." "; - $c++; - } - $sql = "select ".$fields; - $sql .= " from v_".$table_name." "; - } - if (isset($row['where'])) { - $sql .= trim($row['where'])." "; - } - $sql .= "order by ".trim($row['order_by']); - $sql = str_replace("\${domain_uuid}", $_SESSION['domain_uuid'], $sql); - $database = new database; - $result = $database->select($sql, null, 'all'); - - $this->destinations[$x]['result']['sql'] = $sql; - $this->destinations[$x]['result']['data'] = $result; - } - $x++; - } - $this->destinations[$x]['type'] = 'array'; - $this->destinations[$x]['label'] = 'other'; - $this->destinations[$x]['name'] = 'dialplans'; - $this->destinations[$x]['field']['name'] = "name"; - $this->destinations[$x]['field']['destination'] = "destination"; - $this->destinations[$x]['select_value']['dialplan'] = "transfer:\${destination}"; - $this->destinations[$x]['select_value']['ivr'] = "menu-exec-app:transfer \${destination}"; - $this->destinations[$x]['select_label'] = "\${name}"; - $y = 0; - $this->destinations[$x]['result']['data'][$y]['label'] = 'check_voicemail'; - $this->destinations[$x]['result']['data'][$y]['name'] = '*98'; - $this->destinations[$x]['result']['data'][$y]['destination'] = '*98 XML ${context}'; - $y++; - $this->destinations[$x]['result']['data'][$y]['label'] = 'company_directory'; - $this->destinations[$x]['result']['data'][$y]['name'] = '*411'; - $this->destinations[$x]['result']['data'][$y]['destination'] = '*411 XML ${context}'; - $y++; - $this->destinations[$x]['result']['data'][$y]['label'] = 'hangup'; - $this->destinations[$x]['result']['data'][$y]['name'] = 'hangup'; - $this->destinations[$x]['result']['data'][$y]['application'] = 'hangup'; - $this->destinations[$x]['result']['data'][$y]['destination'] = ''; - $y++; - $this->destinations[$x]['result']['data'][$y]['label'] = 'record'; - $this->destinations[$x]['result']['data'][$y]['name'] = '*732'; - $this->destinations[$x]['result']['data'][$y]['destination'] = '*732 XML ${context}'; - $y++; - } - - //remove special characters from the name - $destination_id = str_replace("]", "", $destination_name); - $destination_id = str_replace("[", "_", $destination_id); - - //set default to false - $select_found = false; - - foreach ($this->destinations as $row) { - - $name = $row['name']; - $label = $row['label']; - $destination = $row['field']['destination']; - - //add multi-lingual support - if (file_exists($_SERVER["PROJECT_ROOT"]."/app/".$name."/app_languages.php")) { - $language2 = new text; - $text2 = $language2->get($_SESSION['domain']['language']['code'], 'app/'.$name); - } - - if (count($row['result']['data']) > 0 and strlen($row['select_value'][$destination_type]) > 0) { - $label2 = $label; - foreach ($row['result']['data'] as $data) { - $select_value = $row['select_value'][$destination_type]; - $select_label = $row['select_label']; - foreach ($row['field'] as $key => $value) { - if ($key == 'destination' and is_array($value)){ - if ($value['type'] == 'csv') { - $array = explode($value['delimiter'], $data[$key]); - $select_value = str_replace("\${destination}", $array[0], $select_value); - $select_label = str_replace("\${destination}", $array[0], $select_label); - } - } - else { - if (strpos($value,',') !== false) { - $keys = explode(",", $value); - foreach ($keys as $k) { - if (strlen($data[$k]) > 0) { - $select_value = str_replace("\${".$key."}", $data[$k], $select_value); - if (strlen($data['label']) == 0) { - $select_label = str_replace("\${".$key."}", $data[$k], $select_label); - } - else { - $label = $data['label']; - $select_label = str_replace("\${".$key."}", $text2['option-'.$label], $select_label); - } - } - } - } - else { - $select_value = str_replace("\${".$key."}", $data[$key], $select_value); - if (strlen($data['label']) == 0) { - $select_label = str_replace("\${".$key."}", $data[$key], $select_label); - } - else { - $label = $data['label']; - $select_label = str_replace("\${".$key."}", $text2['option-'.$label], $select_label); - } - } - //application: hangup - if (strlen($data['application']) > 0) { - $select_value = str_replace("transfer", $data['application'], $select_value); - } - } - } - - $select_value = str_replace("\${domain_name}", $_SESSION['domain_name'], $select_value); - $select_value = str_replace("\${context}", $_SESSION['domain_name'], $select_value); - $select_label = str_replace("\${domain_name}", $_SESSION['domain_name'], $select_label); - $select_label = str_replace("\${context}", $_SESSION['domain_name'], $select_label); - $select_label = str_replace("✉", 'email-icon', $select_label); - $select_label = escape(trim($select_label)); - $select_label = str_replace('email-icon', '✉', $select_label); - if ($select_value == $destination_value) { $selected = "selected='selected' "; $select_found = true; } else { $selected = ''; } - if ($label2 == 'destinations') { $select_label = format_phone($select_label); } - $array[$label][$select_label] = $select_value; - } - unset($text); - } - } - if (!$select_found) { - $destination_label = str_replace(":", " ", $destination_value); - $destination_label = str_replace("menu-exec-app", "", $destination_label); - $destination_label = str_replace("transfer", "", $destination_label); - $destination_label = str_replace("XML ".$_SESSION['domain_name'], "", $destination_label); - $array[$label][$destination_label] = $destination_value; - } - - //return the formatted destinations - return $array; - } - - /** - * valid destination - */ - public function valid($destination) { - $destinations = $this->all('dialplan'); - foreach($destinations as $category => $array) { - if (is_array($array)) { - foreach ($array as $key => $value) { - if ($destination == $value) { - return true; - } - } - } - } - return false; - } - - /** - * delete records - */ - public function delete($records) { - if (permission_exists($this->permission_prefix.'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->list_page); - exit; - } - - //delete multiple records - if (is_array($records) && @sizeof($records) != 0) { - - //build the delete array - foreach ($records as $x => $record) { - if ($record['checked'] == 'true' && is_uuid($record['uuid'])) { - - //build delete array - $array[$this->table][$x][$this->uuid_prefix.'uuid'] = $record['uuid']; - - //get the dialplan uuid and context - $sql = "select dialplan_uuid, destination_context from v_destinations "; - $sql .= "where destination_uuid = :destination_uuid "; - $parameters['destination_uuid'] = $record['uuid']; - $database = new database; - $row = $database->select($sql, $parameters, 'row'); - unset($sql, $parameters); - - //include dialplan in array - if (is_uuid($row['dialplan_uuid'])) { - $array['dialplan_details'][$x]['dialplan_uuid'] = $row["dialplan_uuid"]; - $array['dialplans'][$x]['dialplan_uuid'] = $row["dialplan_uuid"]; - $destination_contexts[] = $row['destination_context']; - } - - } - } - - //delete the checked rows - if (is_array($array) && @sizeof($array) != 0) { - - //grant temporary permissions - $p = new permissions; - $p->add('dialplan_delete', 'temp'); - $p->add('dialplan_detail_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('dialplan_delete', 'temp'); - $p->delete('dialplan_detail_delete', 'temp'); - - //synchronize the xml config - save_dialplan_xml(); - - //clear the cache - if (is_array($destination_contexts) && @sizeof($destination_contexts) != 0) { - $destination_contexts = array_unique($destination_contexts); - $cache = new cache; - foreach ($destination_contexts as $destination_context) { - $cache->delete("dialplan:".$destination_context); - } - } - - //set message - message::add($text['message-delete']); - - } - unset($records); - - } - } - } //method - - /** - * define singular function to convert a word in english to singular - */ - public function singular($word) { - //"-es" is used for words that end in "-x", "-s", "-z", "-sh", "-ch" in which case you add - if (substr($word, -2) == "es") { - if (substr($word, -4) == "sses") { // eg. 'addresses' to 'address' - return substr($word,0,-2); - } - elseif (substr($word, -3) == "ses") { // eg. 'databases' to 'database' (necessary!) - return substr($word,0,-1); - } - elseif (substr($word, -3) == "ies") { // eg. 'countries' to 'country' - return substr($word,0,-3)."y"; - } - elseif (substr($word, -3, 1) == "x") { - return substr($word,0,-2); - } - elseif (substr($word, -3, 1) == "s") { - return substr($word,0,-2); - } - elseif (substr($word, -3, 1) == "z") { - return substr($word,0,-2); - } - elseif (substr($word, -4, 2) == "sh") { - return substr($word,0,-2); - } - elseif (substr($word, -4, 2) == "ch") { - return substr($word,0,-2); - } - else { - return rtrim($word, "s"); - } - } - else { - return rtrim($word, "s"); - } - } //method - - } //class -} -/* -$obj = new destinations; -//$destinations = $obj->destinations; -echo $obj->select('ivr', 'example1', 'menu-exec-app:transfer 32 XML voip.fusionpbx.com'); -echo $obj->select('ivr', 'example2', ''); -echo $obj->select('ivr', 'example3', ''); -echo $obj->select('ivr', 'example4', ''); -echo $obj->select('ivr', 'example5', ''); -echo $obj->select('ivr', 'example6', ''); -*/ - -?>