Portions created by the Initial Developer are Copyright (C) 2008-2021 the Initial Developer. All Rights Reserved. Contributor(s): Mark J Crane */ //set default $is_included = false; //includes files require_once dirname(__DIR__, 2) . "/resources/require.php"; require_once "resources/check_auth.php"; require_once "resources/paging.php"; //check permissions if (permission_exists('follow_me') || permission_exists('call_forward') || permission_exists('do_not_disturb')) { //access granted } else { echo "access denied"; exit; } //add multi-lingual support $language = new text; $text = $language->get($_SESSION['domain']['language']['code'], 'app/call_forward'); //get posted data and set defaults $action = $_POST['action'] ?? ''; $search = $_POST['search'] ?? ''; $extensions = $_POST['extensions'] ?? []; //process the http post data by action if (!empty($action) && count($extensions) > 0) { switch ($action) { case 'toggle_call_forward': if (permission_exists('call_forward')) { $obj = new call_forward; $obj->toggle($extensions); } break; case 'toggle_follow_me': if (permission_exists('follow_me')) { $obj = new follow_me; $obj->toggle($extensions); } break; case 'toggle_do_not_disturb': if (permission_exists('do_not_disturb')) { $obj = new do_not_disturb; $obj->toggle($extensions); } break; } header('Location: call_forward.php' . ($search != '' ? '?search=' . urlencode($search) : null)); exit; } //get order and order by $order_by = $_GET["order_by"] ?? ''; $order = $_GET["order"] ?? ''; //get the search $search = strtolower($_GET["search"] ?? ''); //set the show variable $show = $_GET['show'] ?? ''; //define select count query $sql = "select count(*) from v_extensions "; if ($show === "all" && permission_exists('call_forward_all')) { $sql .= "where true "; } else { $sql .= "where domain_uuid = :domain_uuid "; $parameters['domain_uuid'] = $_SESSION['domain_uuid']; } if (!empty($search)) { $sql .= "and ( "; $sql .= "extension like :search "; $sql .= "or lower(description) like :search "; $sql .= ") "; $parameters['search'] = '%' . $search . '%'; } $sql .= "and enabled = 'true' "; if (!permission_exists('extension_edit')) { if (!empty($_SESSION['user']['extension']) && count($_SESSION['user']['extension']) > 0) { $sql .= "and ("; $x = 0; foreach ($_SESSION['user']['extension'] as $row) { if ($x > 0) { $sql .= "or "; } $sql .= "extension = '" . $row['user'] . "' "; $x++; } $sql .= ")"; } else { //used to hide any results when a user has not been assigned an extension $sql .= "and extension = 'disabled' "; } } $database = new database; $num_rows = $database->select($sql, $parameters ?? null, 'column'); unset($parameters); //prepare the paging $rows_per_page = !empty($_SESSION['domain']['paging']['numeric']) ? $_SESSION['domain']['paging']['numeric'] : 50; if ($search) { $params[] = "search=" . $search; } if ($order_by) { $params[] = "order_by=" . $order_by; } if ($order) { $params[] = "order=" . $order; } if ($show == "all" && permission_exists('call_forward_all')) { $params[] = "show=all"; } $param = !empty($params) ? implode('&', $params) : ''; unset($params); $page = $_GET['page'] ?? ''; if (empty($page)) { $page = 0; $_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; //get the list $sql = "select * from v_extensions "; if ($show == "all" && permission_exists('call_forward_all')) { $sql .= "where true "; } else { $sql .= "where domain_uuid = :domain_uuid "; $parameters['domain_uuid'] = $_SESSION['domain_uuid']; } if (!empty($search)) { $sql .= "and ( "; $sql .= "extension like :search "; $sql .= "or lower(description) like :search "; $sql .= ") "; $parameters['search'] = '%' . $search . '%'; } $sql .= "and enabled = 'true' "; if (!permission_exists('extension_edit')) { if (!empty($_SESSION['user']['extension']) && count($_SESSION['user']['extension']) > 0) { $sql .= "and ("; $x = 0; foreach ($_SESSION['user']['extension'] as $row) { if ($x > 0) { $sql .= "or "; } $sql .= "extension = '" . $row['user'] . "' "; $x++; } $sql .= ")"; } else { //used to hide any results when a user has not been assigned an extension $sql .= "and extension = 'disabled' "; } } $sql .= order_by($order_by, $order, 'extension', 'asc'); $sql .= limit_offset($rows_per_page, $offset); $database = new database; $extensions = $database->select($sql, $parameters ?? null, 'all'); unset($parameters); //if there are no extensions then set to empty array if($extensions === false) { $extensions = []; } //create token $object = new token; $token = $object->create($_SERVER['PHP_SELF']); //include header if (!$is_included) { $document['title'] = $text['title-call_forward']; } require_once "resources/header.php"; //show the content if ($is_included) { echo "
\n"; echo "
" . $text['header-call_forward'] . "
\n"; echo "
\n"; if ($num_rows > 10) { echo button::create(['type' => 'button', 'label' => $text['button-view_all'], 'icon' => 'project-diagram', 'collapse' => false, 'link' => PROJECT_PATH . '/app/call_forward/call_forward.php']); } echo "
\n"; echo "
\n"; echo "
\n"; } else { echo "
\n"; echo "
" . $text['header-call_forward'] . " (" . $num_rows . ")
\n"; echo "
\n"; if (count($extensions) > 0) { if (permission_exists('call_forward')) { echo button::create(['type' => 'button', 'label' => $text['label-call_forward'], 'icon' => $_SESSION['theme']['button_icon_toggle'], 'collapse' => false, 'name' => 'btn_toggle_cfwd', 'onclick' => "list_action_set('toggle_call_forward'); modal_open('modal-toggle','btn_toggle');"]); } if (permission_exists('follow_me')) { echo button::create(['type' => 'button', 'label' => $text['label-follow_me'], 'icon' => $_SESSION['theme']['button_icon_toggle'], 'collapse' => false, 'name' => 'btn_toggle_follow', 'onclick' => "list_action_set('toggle_follow_me'); modal_open('modal-toggle','btn_toggle');"]); } if (permission_exists('do_not_disturb')) { echo button::create(['type' => 'button', 'label' => $text['label-dnd'], 'icon' => $_SESSION['theme']['button_icon_toggle'], 'collapse' => false, 'name' => 'btn_toggle_dnd', 'onclick' => "list_action_set('toggle_do_not_disturb'); modal_open('modal-toggle','btn_toggle');"]); } } if ($show !== 'all' && permission_exists('call_forward_all')) { echo button::create(['type' => 'button', 'label' => $text['button-show_all'], 'icon' => $_SESSION['theme']['button_icon_all'], 'link' => '?show=all' . $param]); } echo "\n"; echo "
\n"; echo "
\n"; echo "
\n"; if (count($extensions) > 0) { echo modal::create(['id' => 'modal-toggle', 'type' => 'toggle', 'actions' => button::create(['type' => 'button', 'label' => $text['button-continue'], 'icon' => 'check', 'id' => 'btn_toggle', 'style' => 'float: right; margin-left: 15px;', 'collapse' => 'never', 'onclick' => "modal_close(); list_form_submit('form_list');"])]); } echo $text['description-call_routing'] . "\n"; echo "

\n"; echo "
\n"; if ($show == 'all' && permission_exists('call_forward_all')) { echo " "; } echo "\n"; echo "\n"; } echo "\n"; echo "\n"; if (!$is_included) { echo " \n"; if ($show == "all" && permission_exists('call_forward_all')) { echo "\n"; } } echo " \n"; if (permission_exists('call_forward')) { echo " \n"; } if (permission_exists('follow_me')) { echo " \n"; } if (permission_exists('do_not_disturb')) { echo " \n"; } echo " \n"; $list_row_edit_button = $_SESSION['theme']['list_row_edit_button']['boolean'] ?? 'false'; if ( $list_row_edit_button === 'true') { echo " \n"; } echo "\n"; if (!empty($extensions)) { $x = 0; foreach ($extensions as $row) { $list_row_url = PROJECT_PATH . "/app/call_forward/call_forward_edit.php?id=" . $row['extension_uuid'] . "&return_url=" . urlencode($_SERVER['REQUEST_URI']); echo "\n"; if (!$is_included && $extensions) { echo " \n"; if ($show == "all" && permission_exists('call_forward_all')) { if (!empty($_SESSION['domains'][$row['domain_uuid']]['domain_name'])) { $domain = $_SESSION['domains'][$row['domain_uuid']]['domain_name']; } else { $domain = $text['label-global']; } echo " \n"; } } echo " \n"; if (permission_exists('call_forward')) { //-- inline toggle ----------------- //$button_label = $row['forward_all_enabled'] == 'true' ? ($row['forward_all_destination'] != '' ? escape(format_phone($row['forward_all_destination'])) : '('.$text['label-invalid'].')') : null; //if (!$is_included) { // echo " \n"; //} //else { // echo " "; //} //unset($button_label); //---------------------------------- echo " \n"; } if (permission_exists('follow_me')) { //-- inline toggle ----------------- //get destination count //if ($row['follow_me_enabled'] == 'true' && is_uuid($row['follow_me_uuid'])) { // $sql = "select count(*) from v_follow_me_destinations "; // $sql .= "where follow_me_uuid = :follow_me_uuid "; // $sql .= "and domain_uuid = :domain_uuid "; // $parameters['follow_me_uuid'] = $row['follow_me_uuid']; // $parameters['domain_uuid'] = $_SESSION['domain_uuid']; // $database = new database; // $follow_me_destination_count = $database->select($sql, $parameters, 'column'); // $button_label = $follow_me_destination_count ? $text['label-enabled'].' ('.$follow_me_destination_count.')' : $text['label-invalid']; // unset($sql, $parameters); //} //if (!$is_included) { // echo " \n"; //} //else { // echo " "; //} //unset($button_label); //---------------------------------- //get destination count $follow_me_destination_count = 0; if ($row['follow_me_enabled'] == 'true' && is_uuid($row['follow_me_uuid'])) { $sql = "select count(*) from v_follow_me_destinations "; $sql .= "where follow_me_uuid = :follow_me_uuid "; $sql .= "and domain_uuid = :domain_uuid "; $parameters['follow_me_uuid'] = $row['follow_me_uuid']; $parameters['domain_uuid'] = $_SESSION['domain_uuid']; $database = new database; $follow_me_destination_count = $database->select($sql, $parameters ?? null, 'column'); unset($sql, $parameters); } echo " \n"; } if (permission_exists('do_not_disturb')) { //-- inline toggle ----------------- //$button_label = $row['do_not_disturb'] == 'true' ? $text['label-enabled'] : null; //if (!$is_included) { // echo " \n"; //} //else { // echo " "; //} //---------------------------------- echo " \n"; } echo " \n"; if ($list_row_edit_button === 'true') { echo " \n"; } echo "\n"; $x++; } unset($extensions); } echo "
\n"; echo " \n"; echo " " . $text['label-domain'] . "" . $text['label-extension'] . "" . $text['label-call_forward'] . "" . $text['label-follow_me'] . "" . $text['label-dnd'] . "" . $text['label-description'] . " 
\n"; echo " \n"; echo " \n"; echo " " . escape($domain) . "" . escape($row['extension']) . "".$button_label."\n"; echo $row['forward_all_enabled'] == 'true' ? escape(format_phone($row['forward_all_destination'])) : ' '; echo " ".$button_label."\n"; echo $follow_me_destination_count ? $text['label-enabled'] . ' (' . $follow_me_destination_count . ')' : ' '; echo " ".$button_label."\n"; echo $row['do_not_disturb'] == 'true' ? $text['label-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 (!$is_included) { echo "
\n"; echo "
" . $paging_controls . "
\n"; echo "\n"; echo "
\n"; require_once "resources/footer.php"; } ?>