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) { $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 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; } /** * 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 } //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', ''); */ ?>