diff --git a/app/bridges/bridges.php b/app/bridges/bridges.php index b48c7ba937..cad7da81f9 100644 --- a/app/bridges/bridges.php +++ b/app/bridges/bridges.php @@ -86,7 +86,7 @@ } } -//get order and order by and sanatize the values +//get order and order by $order_by = $_GET["order_by"]; $order = $_GET["order"]; @@ -124,8 +124,7 @@ if ($_GET['show'] == "all" && permission_exists('bridge_all')) { $param .= "&show=all"; } - $page = $_GET['page']; - if (strlen($page) == 0) { $page = 0; $_GET['page'] = 0; } + $page = is_numeric($_GET['page']) ? $_GET['page'] : 0; list($paging_controls, $rows_per_page) = paging($num_rows, $param, $rows_per_page); list($paging_controls_mini, $rows_per_page) = paging($num_rows, $param, $rows_per_page, true); $offset = $rows_per_page * $page; @@ -225,10 +224,10 @@ } echo " "; if (permission_exists('bridge_edit')) { - echo " ".escape($row['bridge_name'])."\n"; + echo "".escape($row['bridge_name']).""; } else { - echo " ".escape($row['bridge_name'])."\n"; + echo escape($row['bridge_name']); } echo " \n"; echo " ".escape($row['bridge_destination'])."\n"; diff --git a/app/email_templates/email_templates.php b/app/email_templates/email_templates.php index fde317d9dd..343e664a7f 100644 --- a/app/email_templates/email_templates.php +++ b/app/email_templates/email_templates.php @@ -123,8 +123,10 @@ //prepare to page the results $rows_per_page = ($_SESSION['domain']['paging']['numeric'] != '') ? $_SESSION['domain']['paging']['numeric'] : 50; $param = "&search=".$search; - $page = $_GET['page']; - if (strlen($page) == 0) { $page = 0; $_GET['page'] = 0; } + if ($_GET['show'] == "all" && permission_exists('email_template_all')) { + $param .= "&show=all"; + } + $page = is_numeric($_GET['page']) ? $_GET['page'] : 0; list($paging_controls, $rows_per_page) = paging($num_rows, $param, $rows_per_page); list($paging_controls_mini, $rows_per_page) = paging($num_rows, $param, $rows_per_page, true); $offset = $rows_per_page * $page; diff --git a/app/extensions/app_languages.php b/app/extensions/app_languages.php index 03e365d8aa..7c83a68d14 100644 --- a/app/extensions/app_languages.php +++ b/app/extensions/app_languages.php @@ -841,6 +841,26 @@ $text['label-outbound_caller_id_name']['ru-ru'] = "Идентификатор (C $text['label-outbound_caller_id_name']['sv-se'] = "Utgående Namnpresentation"; $text['label-outbound_caller_id_name']['uk-ua'] = ""; +$text['label-outbound_cid_name']['en-us'] = "Outbound CID Name"; +$text['label-outbound_cid_name']['ar-eg'] = ""; +$text['label-outbound_cid_name']['de-at'] = "Ausgehende Anruferkennung (Name)"; //copied from de-de +$text['label-outbound_cid_name']['de-ch'] = "Ausgehende Anruferkennung (Name)"; //copied from de-de +$text['label-outbound_cid_name']['de-de'] = "Ausgehende Anruferkennung (Name)"; +$text['label-outbound_cid_name']['es-cl'] = "Nombre de Caller ID Saliente"; +$text['label-outbound_cid_name']['es-mx'] = "Nombre de Caller ID Saliente"; //copied from es-cl +$text['label-outbound_cid_name']['fr-ca'] = "Nom de l'appelant sortant"; //copied from fr-fr +$text['label-outbound_cid_name']['fr-fr'] = "Nom de l'appelant sortant"; +$text['label-outbound_cid_name']['he-il'] = ""; +$text['label-outbound_cid_name']['it-it'] = "ID Nome Chiamante Esterno"; +$text['label-outbound_cid_name']['nl-nl'] = ""; +$text['label-outbound_cid_name']['pl-pl'] = "Nazwa prezentowana w rozmowach wychodzacych"; +$text['label-outbound_cid_name']['pt-br'] = "Nome público"; //copied from pt-pt +$text['label-outbound_cid_name']['pt-pt'] = "Nome público"; +$text['label-outbound_cid_name']['ro-ro'] = ""; +$text['label-outbound_cid_name']['ru-ru'] = "Идентификатор (Caller ID) имени вызывающего абонента"; +$text['label-outbound_cid_name']['sv-se'] = "Utgående Namnpresentation"; +$text['label-outbound_cid_name']['uk-ua'] = ""; + $text['label-number_alias']['en-us'] = "Number Alias"; $text['label-number_alias']['ar-eg'] = ""; $text['label-number_alias']['de-at'] = "Alternative Nummer"; //copied from de-de @@ -1121,6 +1141,26 @@ $text['label-effective_caller_id_name']['ru-ru'] = "Эффективный ид $text['label-effective_caller_id_name']['sv-se'] = "Effektiv Namnpresentation"; $text['label-effective_caller_id_name']['uk-ua'] = ""; +$text['label-effective_cid_name']['en-us'] = "Effective CID Name"; +$text['label-effective_cid_name']['ar-eg'] = "إسم المتصل الفعال"; +$text['label-effective_cid_name']['de-at'] = "Tatsächliche Anruferkennung (Name)"; //copied from de-de +$text['label-effective_cid_name']['de-ch'] = "Tatsächliche Anruferkennung (Name)"; //copied from de-de +$text['label-effective_cid_name']['de-de'] = "Tatsächliche Anruferkennung (Name)"; +$text['label-effective_cid_name']['es-cl'] = "Nombre de Caller ID Efectivo"; +$text['label-effective_cid_name']['es-mx'] = "Nombre de Caller ID Efectivo"; //copied from es-cl +$text['label-effective_cid_name']['fr-ca'] = "Nom interne"; //copied from fr-fr +$text['label-effective_cid_name']['fr-fr'] = "Nom interne"; +$text['label-effective_cid_name']['he-il'] = ""; +$text['label-effective_cid_name']['it-it'] = "ID Nome Chiamante Effettivo"; +$text['label-effective_cid_name']['nl-nl'] = ""; +$text['label-effective_cid_name']['pl-pl'] = "Prezentacja nazwy dzwoniącego (rozmowy wew)"; +$text['label-effective_cid_name']['pt-br'] = "Nome interno"; +$text['label-effective_cid_name']['pt-pt'] = "Nome Interno"; +$text['label-effective_cid_name']['ro-ro'] = ""; +$text['label-effective_cid_name']['ru-ru'] = "Эффективный идентификатор (Caller ID) имени вызывающего абонента"; +$text['label-effective_cid_name']['sv-se'] = "Effektiv Namnpresentation"; +$text['label-effective_cid_name']['uk-ua'] = ""; + $text['label-domain']['en-us'] = "Domain"; $text['label-domain']['ar-eg'] = "النطاق"; $text['label-domain']['de-at'] = "Domäne"; //copied from de-de diff --git a/app/extensions/extensions.php b/app/extensions/extensions.php index ffe73b3f04..8dfff3fe58 100644 --- a/app/extensions/extensions.php +++ b/app/extensions/extensions.php @@ -28,6 +28,7 @@ include "root.php"; require_once "resources/require.php"; require_once "resources/check_auth.php"; + require_once "resources/paging.php"; //check permissions if (permission_exists('extension_view')) { @@ -38,64 +39,100 @@ exit; } -//get the registrations - if (permission_exists('extension_registered')) { - $obj = new registrations; - $registrations = $obj->get('all'); - } - //add multi-lingual support $language = new text; $text = $language->get(); -//get the http values and set them as variables - $search = $_GET["search"]; +//get posted data + if (is_array($_POST['extensions'])) { + $action = $_POST['action']; + $search = $_POST['search']; + $extensions = $_POST['extensions']; + } + +//toggle the extensions + if (permission_exists('extension_enabled')) { + if ($action == 'toggle' && is_array($extensions) && @sizeof($extensions) != 0) { + //toggle + $obj = new extension; + $obj->toggle($extensions); + //redirect + header('Location: extensions.php'.($search != '' ? '?search='.urlencode($search) : null)); + exit; + } + } + +//delete the extensions + if (permission_exists('extension_delete')) { + if ($action == 'delete' && is_array($extensions) && @sizeof($extensions) != 0) { + //delete + $obj = new extension; + $obj->delete($extensions); + //redirect + header('Location: extensions.php'.($search != '' ? '?search='.urlencode($search) : null)); + exit; + } + } + +//get order and order by $order_by = $_GET["order_by"]; $order = $_GET["order"]; -//handle search term - $search = $_GET["search"]; +//add the search term + $search = strtolower($_GET["search"]); if (strlen($search) > 0) { - $search = strtolower($search); - $sql_search = "and ( "; - $sql_search .= " lower(extension) like :search "; - $sql_search .= " or lower(call_group) like :search "; - $sql_search .= " or lower(user_context) like :search "; - $sql_search .= " or lower(enabled) like :search "; - $sql_search .= " or lower(description) like :search "; + $sql_search = " and ( "; + $sql_search .= "lower(extension) like :search "; + $sql_search .= "or lower(number_alias) like :search "; + $sql_search .= "or lower(effective_caller_id_name) like :search "; + $sql_search .= "or lower(effective_caller_id_number) like :search "; + $sql_search .= "or lower(outbound_caller_id_name) like :search "; + $sql_search .= "or lower(outbound_caller_id_number) like :search "; + $sql_search .= "or lower(emergency_caller_id_name) like :search "; + $sql_search .= "or lower(emergency_caller_id_number) like :search "; + $sql_search .= "or lower(directory_first_name) like :search "; + $sql_search .= "or lower(directory_last_name) like :search "; + $sql_search .= "or lower(call_group) like :search "; + $sql_search .= "or lower(user_context) like :search "; + $sql_search .= "or lower(enabled) like :search "; + $sql_search .= "or lower(description) like :search "; $sql_search .= ") "; $parameters['search'] = '%'.$search.'%'; } -//get total extension count - $sql = "select count(extension_uuid) from v_extensions "; - if (!($_GET['show'] == "all" && permission_exists('extension_all'))) { +//get total extension count for domain + if (is_numeric($_SESSION['limit']['extensions']['numeric'])) { + $sql = "select count(*) from v_extensions "; $sql .= "where domain_uuid = :domain_uuid "; $parameters['domain_uuid'] = $_SESSION['domain_uuid']; + $database = new database; + $total_extensions = $database->select($sql, $parameters, 'column'); + unset($sql, $parameters); + } + +//get total extension count + $sql = "select count(*) from v_extensions where true "; + if (!($_GET['show'] == "all" && permission_exists('extension_all'))) { + $sql .= "and domain_uuid = :domain_uuid "; + $parameters['domain_uuid'] = $_SESSION['domain_uuid']; } $sql .= $sql_search; $database = new database; - $total_extensions = $database->select($sql, $parameters, 'column'); - -//additional includes - $document['title'] = $text['title-extensions']; - require_once "resources/paging.php"; + $num_rows = $database->select($sql, $parameters, 'column'); //prepare to page the results $rows_per_page = ($_SESSION['domain']['paging']['numeric'] != '') ? $_SESSION['domain']['paging']['numeric'] : 50; - $param = "&search=".urlencode($search); + $param = "&search=".$search; + if ($_GET['show'] == "all" && permission_exists('extension_all')) { + $param .= "&show=all"; + } $page = is_numeric($_GET['page']) ? $_GET['page'] : 0; - list($paging_controls_mini, $rows_per_page, $var_3) = paging($total_extensions, $param, $rows_per_page, true); //top - list($paging_controls, $rows_per_page, $var_3) = paging($total_extensions, $param, $rows_per_page); //bottom + list($paging_controls, $rows_per_page) = paging($num_rows, $param, $rows_per_page); //bottom + list($paging_controls_mini, $rows_per_page) = paging($num_rows, $param, $rows_per_page, true); //top $offset = $rows_per_page * $page; //get the extensions - $sql = "select * from v_extensions "; - if (!($_GET['show'] == "all" && permission_exists('extension_all'))) { - $sql .= "where domain_uuid = :domain_uuid "; - $parameters['domain_uuid'] = $_SESSION['domain_uuid']; - } - $sql .= $sql_search; + $sql = str_replace('count(*)', '*', $sql); if ($order_by == '' || $order_by == 'extension') { if ($db_type == 'pgsql') { $sql .= 'order by natural_sort(extension) '.$order; //function in app_defaults.php @@ -112,115 +149,131 @@ $extensions = $database->select($sql, $parameters, 'all'); unset($sql, $parameters); -//set the alternating styles - $c = 0; - $row_style["0"] = "row_style0"; - $row_style["1"] = "row_style1"; +//get the registrations + if (permission_exists('extension_registered')) { + $obj = new registrations; + $registrations = $obj->get('all'); + } + +//create token + $object = new token; + $token = $object->create($_SERVER['PHP_SELF']); //include the header + $document['title'] = $text['title-extensions']; require_once "resources/header.php"; //show the content - echo "\n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo "
\n"; - echo " ".$text['header-extensions']." (".$total_extensions.")
\n"; - echo "
\n"; - if (permission_exists('extension_all')) { - if ($_GET['show'] == 'all') { - echo " "; - } - else { - echo " \n"; - } - } - if (permission_exists('extension_import')) { - echo "\n"; + echo "
\n"; + echo "
".$text['header-extensions']." (".$num_rows.")
\n"; + echo "
\n"; + if (permission_exists('extension_import') && (!is_numeric($_SESSION['limit']['extensions']['numeric']) || $total_extensions < $_SESSION['limit']['extensions']['numeric'])) { + echo button::create(['type'=>'button','label'=>$text['button-import'],'icon'=>$_SESSION['theme']['button_icon_import'],'link'=>'extension_imports.php']); } if (permission_exists('extension_export')) { - echo " \n"; + echo button::create(['type'=>'button','label'=>$text['button-export'],'icon'=>$_SESSION['theme']['button_icon_export'],'link'=>'extension_download.php']); } - echo " "; - echo " "; + $margin_left = permission_exists('extension_import') || permission_exists('extension_export') ? "margin-left: 15px;" : null; + if (permission_exists('extension_add') && (!is_numeric($_SESSION['limit']['extensions']['numeric']) || $total_extensions < $_SESSION['limit']['extensions']['numeric'])) { + echo button::create(['type'=>'button','label'=>$text['button-add'],'icon'=>$_SESSION['theme']['button_icon_add'],'style'=>$margin_left,'link'=>'extension_edit.php']); + unset($margin_left); + } + if (permission_exists('extension_enabled') && $extensions) { + echo button::create(['type'=>'button','label'=>$text['button-toggle'],'icon'=>$_SESSION['theme']['button_icon_toggle'],'style'=>$margin_left,'onclick'=>"if (confirm('".$text['confirm-toggle']."')) { list_action_set('toggle'); list_form_submit('form_list'); } else { this.blur(); return false; }"]); + unset($margin_left); + } + if (permission_exists('extension_delete') && $extensions) { + echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'style'=>$margin_left,'onclick'=>"if (confirm('".$text['confirm-delete']."')) { list_action_set('delete'); list_form_submit('form_list'); } else { this.blur(); return false; }"]); + unset($margin_left); + } + echo "\n"; + if (permission_exists('extension_all')) { + if ($_GET['show'] == 'all') { + echo " "; + } + else { + echo button::create(['type'=>'button','label'=>$text['button-show_all'],'icon'=>$_SESSION['theme']['button_icon_all'],'link'=>'?show=all']); + } + } + echo ""; + echo button::create(['label'=>$text['button-search'],'icon'=>$_SESSION['theme']['button_icon_search'],'type'=>'submit','id'=>'btn_search','style'=>($search != '' ? 'display: none;' : null)]); + echo button::create(['label'=>$text['button-reset'],'icon'=>$_SESSION['theme']['button_icon_reset'],'type'=>'button','id'=>'btn_reset','link'=>'extensions.php','style'=>($search == '' ? 'display: none;' : null)]); if ($paging_controls_mini != '') { - echo "".$paging_controls_mini."\n"; + echo "".$paging_controls_mini.""; } - echo "
\n"; - echo " ".$text['description-extensions']."\n"; - echo "
\n"; - echo "
"; + echo " \n"; + echo "
\n"; + echo "\n"; - echo "
\n"; - echo "\n"; - echo "\n"; - if (permission_exists('extension_delete') && is_array($extensions)) { - echo ""; + echo $text['description-extensions']."\n"; + echo "

\n"; + + echo "\n"; + echo "\n"; + echo "\n"; + + echo "
\n"; + echo "\n"; + if (permission_exists('extension_enabled') || permission_exists('extension_delete')) { + echo " \n"; } if ($_GET['show'] == "all" && permission_exists('extension_all')) { - echo th_order_by('domain_name', $text['label-domain'], $order_by, $order, $param); + echo "\n"; + //echo th_order_by('domain_name', $text['label-domain'], $order_by, $order); } echo th_order_by('extension', $text['label-extension'], $order_by, $order); + echo th_order_by('effective_caller_id_name', $text['label-effective_cid_name'], $order_by, $order, null, "class='hide-xs'"); + echo th_order_by('outbound_caller_id_name', $text['label-outbound_cid_name'], $order_by, $order, null, "class='hide-sm-dn'"); echo th_order_by('call_group', $text['label-call_group'], $order_by, $order); - //echo th_order_by('voicemail_mail_to', $text['label-voicemail_mail_to'], $order_by, $order); if (permission_exists("extension_user_context")) { echo th_order_by('user_context', $text['label-user_context'], $order_by, $order); } if (permission_exists('extension_registered')) { echo "\n"; } - echo th_order_by('enabled', $text['label-enabled'], $order_by, $order); - echo th_order_by('description', $text['label-description'], $order_by, $order); - - echo "\n"; } - if (permission_exists('extension_delete') && is_array($extensions)) { - echo "".$v_link_label_delete.""; - } - echo "\n"; echo "\n"; if (is_array($extensions) && @sizeof($extensions) != 0) { + $x = 0; foreach($extensions as $row) { if (permission_exists('extension_edit')) { - $tr_link = "href='extension_edit.php?id=".urlencode($row['extension_uuid']).(is_numeric($page) ? '&page='.$page : null)."'"; + $list_row_url = "extension_edit.php?id=".urlencode($row['extension_uuid']).(is_numeric($page) ? '&page='.urlencode($page) : null); } - echo "\n"; - if (permission_exists('extension_delete')) { - echo " "; - $ext_ids[] = 'checkbox_'.$row['extension_uuid']; + echo "\n"; + if (permission_exists('extension_enabled') || permission_exists('extension_delete')) { + echo " \n"; } if ($_GET['show'] == "all" && permission_exists('extension_all')) { - echo " \n"; + echo " \n"; } - echo " \n"; - echo " \n"; - //echo " \n"; + echo " \n"; + + echo " \n"; + echo " \n"; + echo " \n"; if (permission_exists("extension_user_context")) { - echo " \n"; + echo " \n"; } if (permission_exists('extension_registered')) { - echo " \n"; } - - echo " \n"; - echo " \n"; - - echo " \n"; + echo " \n"; + if (permission_exists('extension_edit') && $_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') { + echo " \n"; } - echo "\n"; echo "\n"; - $c = ($c) ? 0 : 1; + $x++; } } - if (is_array($extensions) && @sizeof($extensions) != 0) { - echo "\n"; - echo " \n"; - echo "\n"; - } + echo "
\n"; + echo " \n"; + echo " ".$text['label-domain']."".$text['label-is_registered']."\n"; - if (permission_exists('extension_add')) { - if ($_SESSION['limit']['extensions']['numeric'] == '' || ($_SESSION['limit']['extensions']['numeric'] != '' && $total_extensions < $_SESSION['limit']['extensions']['numeric'])) { - echo "".$v_link_label_add.""; - } + echo th_order_by('enabled', $text['label-enabled'], $order_by, $order, null, "class='center'"); + echo th_order_by('description', $text['label-description'], $order_by, $order, null, "class='hide-sm-dn'"); + if (permission_exists('extension_edit') && $_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') { + echo "  
\n"; + echo " \n"; + echo " \n"; + echo " ".escape($_SESSION['domains'][$row['domain_uuid']]['domain_name'])."".escape($_SESSION['domains'][$row['domain_uuid']]['domain_name']).""; + echo " "; if (permission_exists('extension_edit')) { - echo "".escape($row['extension']).""; + echo "".escape($row['extension']).""; } else { echo escape($row['extension']); } - echo "".escape($row['call_group'])." ".$row['voicemail_mail_to']." ".escape($row['effective_caller_id_name'])." ".escape($row['outbound_caller_id_name'])." ".escape($row['call_group'])." ".escape($row['user_context'])."".escape($row['user_context']).""; + echo " "; $extension_number = $row['extension'].'@'.$_SESSION['domain_name']; $extension_number_alias = $row['number_alias']; if(strlen($extension_number_alias) > 0) { @@ -229,88 +282,61 @@ $found_count = 0; if (is_array($registrations)) { foreach ($registrations as $array) { - if ( - ($extension_number == $array['user']) || - ($extension_number_alias != '' && - $extension_number_alias == $array['user'] - ) - ) { + if ($extension_number == $array['user'] || ($extension_number_alias != '' && $extension_number_alias == $array['user'])) { $found_count++; } } } if ($found_count > 0) { - echo "Yes ($found_count)"; - } else { - echo "No"; + echo $text['label-true']." (".$found_count.")"; + } + else { + echo $text['label-false']; } unset($extension_number, $extension_number_alias, $found_count, $array); echo " ".($row['enabled'] == 'true' ? $text['label-true'] : $text['label-false'])."".escape($row['description'])." "; - if (permission_exists('extension_edit')) { - echo "$v_link_label_edit"; + if (permission_exists('extension_enabled')) { + echo " "; + echo $text['label-'.$row['enabled']]; + } + echo " ".escape($row['description']).""; + echo button::create(['type'=>'button','title'=>$text['button-edit'],'icon'=>$_SESSION['theme']['button_icon_edit'],'link'=>$list_row_url]); + echo "
\n"; - if (permission_exists('extension_add')) { - if ($_SESSION['limit']['extensions']['numeric'] == '' || ($_SESSION['limit']['extensions']['numeric'] != '' && $total_extensions < $_SESSION['limit']['extensions']['numeric'])) { - echo "".$v_link_label_add.""; - } - } - if (permission_exists('extension_delete')) { - echo "".$v_link_label_delete.""; - } - echo "
\n"; + echo "
\n"; + echo "
".$paging_controls."
\n"; - unset($extensions, $row); + echo "\n"; - echo ""; - echo "
"; + echo "\n"; - if (strlen($paging_controls) > 0) { - echo "
"; - echo $paging_controls."\n"; - } - - echo "

".((is_array($extensions)) ? "

" : null); - - // check or uncheck all checkboxes - if (is_array($ext_ids) && @sizeof($ext_ids) != 0) { - echo "\n"; - } - - if (is_array($extensions)) { - // check all checkboxes - key_press('ctrl+a', 'down', 'document', null, null, "check('all');", true); +//define keyboard shortcuts + if ($extensions) { + // check all + key_press('ctrl+a', 'down', 'document', null, null, "list_all_check();", true); // delete checked - key_press('delete', 'up', 'document', array('#search'), $text['confirm-delete'], 'document.forms.frm.submit();', true); + if (permission_exists('extension_delete')) { + key_press('delete', 'up', 'document', array('#search'), $text['confirm-delete'], "list_action_set('delete'); list_form_submit('form_list');", true); + } } + unset($extensions); + //show the footer require_once "resources/footer.php"; diff --git a/app/extensions/resources/classes/extension.php b/app/extensions/resources/classes/extension.php index fa6af67fcb..73b5e71170 100644 --- a/app/extensions/resources/classes/extension.php +++ b/app/extensions/resources/classes/extension.php @@ -1,35 +1,38 @@ - Copyright (C) 2010 - 2016 - All Rights Reserved. + The Initial Developer of the Original Code is + Mark J Crane + Portions created by the Initial Developer are Copyright (C) 2008-2019 + the Initial Developer. All Rights Reserved. - Contributor(s): - Mark J Crane + Contributor(s): + Mark J Crane */ //define the directory class if (!class_exists('extension')) { class extension { + + /** + * declare public variables + */ public $domain_uuid; public $domain_name; - private $app_uuid; public $extension_uuid; public $extension; public $voicemail_id; @@ -70,11 +73,39 @@ if (!class_exists('extension')) { public $enabled; public $description; + /** + * declare private variables + */ + private $app_name; + private $app_uuid; + private $permission_prefix; + private $list_page; + private $table; + private $uuid_prefix; + private $toggle_field; + private $toggle_values; + + /** + * called when the object is created + */ public function __construct() { - //set the application id + + //assign private variables + $this->app_name = 'extensions'; $this->app_uuid = 'e68d9689-2769-e013-28fa-6214bf47fca3'; + $this->permission_prefix = 'extension_'; + $this->list_page = 'extensions.php'; + $this->table = 'extensions'; + $this->uuid_prefix = 'extension_'; + $this->toggle_field = 'enabled'; + $this->toggle_values = ['true','false']; + } + /** + * 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); @@ -512,6 +543,221 @@ if (!class_exists('extension')) { $_SESSION["reload_xml"] = true; } } + + /** + * 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 + $y = @sizeof($records) + 1; + foreach ($records as $x => $record) { + if ($record['checked'] == 'true' && is_uuid($record['uuid'])) { + + //get the extension details + $sql = "select extension, number_alias, user_context, follow_me_uuid from v_extensions "; + $sql .= "where domain_uuid = :domain_uuid "; + $sql .= "and extension_uuid = :extension_uuid "; + $parameters['domain_uuid'] = $_SESSION['domain_uuid']; + $parameters['extension_uuid'] = $record['uuid']; + $database = new database; + $row = $database->execute($sql, $parameters, 'row'); + if (is_array($row) && @sizeof($row) != 0) { + + //for use below and to clear cache (bottom) + $extensions[$x] = $row; + + //build delete array + $array[$this->table][$x][$this->uuid_prefix.'uuid'] = $record['uuid']; + $array['extension_users'][$x]['extension_uuid'] = $record['uuid']; + $array['follow_me'][$x]['follow_me_uuid'] = $extensions[$x]['follow_me_uuid']; + $array['follow_me_destinations'][$x]['follow_me_uuid'] = $extensions[$x]['follow_me_uuid']; + + //include ring group destinations, if exists + if (file_exists($_SERVER["PROJECT_ROOT"]."/app/ring_groups/app_config.php")) { + $array['ring_group_destinations'][$x]['destination_number'] = $extensions[$x]['extension']; + $array['ring_group_destinations'][$x]['domain_uuid'] = $_SESSION['domain_uuid']; + if ($extensions[$x]['number_alias'] != '') { + $array['ring_group_destinations'][$y]['destination_number'] = $extensions[$x]['number_alias']; + $array['ring_group_destinations'][$y]['domain_uuid'] = $_SESSION['domain_uuid']; + } + $y++; + } + + } + unset($sql, $parameters, $row); + + } + } + + //delete the checked rows + if (is_array($array) && @sizeof($array) != 0) { + + //grant temporary permissions + $p = new permissions; + $p->add('extension_user_delete', 'temp'); + $p->add('follow_me_delete', 'temp'); + $p->add('follow_me_destination_delete', 'temp'); + $p->add('ring_group_destination_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('extension_user_delete', 'temp'); + $p->delete('follow_me_delete', 'temp'); + $p->delete('follow_me_destination_delete', 'temp'); + $p->delete('ring_group_destination_delete', 'temp'); + + //clear the cache + foreach ($extensions as $x => $extension) { + $cache = new cache; + $cache->delete("directory:".$extension['extension']."@".$extension['user_context']); + if (permission_exists('number_alias') && strlen($extension['number_alias']) > 0) { + $cache->delete("directory:".$extension['number_alias']."@".$extension['user_context']); + } + } + unset($extensions); + + //synchronize configuration + if (is_writable($_SESSION['switch']['extensions']['dir'])) { + $this->xml(); + } + + //set message + message::add($text['message-delete']); + + } + unset($records); + } + } + } + + /** + * toggle records + */ + public function toggle($records) { + if (permission_exists($this->permission_prefix.'enabled')) { + + //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; + } + + //toggle the checked records + if (is_array($records) && @sizeof($records) != 0) { + + //get current toggle state + foreach($records as $x => $record) { + if ($record['checked'] == 'true' && is_uuid($record['uuid'])) { + $record_uuids[] = $this->uuid_prefix."uuid = '".$record['uuid']."'"; + } + } + if (is_array($record_uuids) && @sizeof($record_uuids) != 0) { + $sql = "select ".$this->uuid_prefix."uuid as uuid, ".$this->toggle_field." as toggle, extension, number_alias, user_context from v_".$this->table." "; + $sql .= "where domain_uuid = :domain_uuid "; + $sql .= "and ( ".implode(' or ', $record_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) { + //for use below and to clear cache (bottom) + $extensions[$row['uuid']]['state'] = $row['toggle']; + $extensions[$row['uuid']]['extension'] = $row['extension']; + $extensions[$row['uuid']]['number_alias'] = $row['number_alias']; + $extensions[$row['uuid']]['user_context'] = $row['user_context']; + } + } + unset($sql, $parameters, $rows, $row); + } + + //build update array + $x = 0; + foreach($extensions as $uuid => $extension) { + $array[$this->table][$x][$this->uuid_prefix.'uuid'] = $uuid; + $array[$this->table][$x][$this->toggle_field] = $extension['state'] == $this->toggle_values[0] ? $this->toggle_values[1] : $this->toggle_values[0]; + $x++; + } + + //save the changes + if (is_array($array) && @sizeof($array) != 0) { + + //grant temporary permissions + $p = new permissions; + $p->add('extension_edit', 'temp'); + + //save the array + $database = new database; + $database->app_name = $this->app_name; + $database->app_uuid = $this->app_uuid; + $database->save($array); + unset($array); + + //revoke temporary permissions + $p->delete('extension_edit', 'temp'); + + //synchronize configuration + if (is_writable($_SESSION['switch']['extensions']['dir'])) { + $this->xml(); + } + + //write the provision files + if (strlen($_SESSION['provision']['path']['text']) > 0) { + if (is_dir($_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/app/provision')) { + $prov = new provision; + $prov->domain_uuid = $_SESSION['domain_uuid']; + $response = $prov->write(); + } + } + + //clear the cache + foreach ($extensions as $uuid => $extension) { + $cache = new cache; + $cache->delete("directory:".$extension['extension']."@".$extension['user_context']); + if (permission_exists('number_alias') && strlen($extension['number_alias']) > 0) { + $cache->delete("directory:".$extension['number_alias']."@".$extension['user_context']); + } + } + unset($extensions); + + //set message + message::add($text['message-toggle']); + + } + unset($records); + } + + } + } + } } diff --git a/themes/default/template.php b/themes/default/template.php index 7bb2e9502e..903ca4c71c 100644 --- a/themes/default/template.php +++ b/themes/default/template.php @@ -429,6 +429,16 @@ echo "