diff --git a/app/conferences/conference_edit.php b/app/conferences/conference_edit.php index 05991d93a..418b9e788 100644 --- a/app/conferences/conference_edit.php +++ b/app/conferences/conference_edit.php @@ -17,7 +17,7 @@ The Initial Developer of the Original Code is Mark J Crane - Portions created by the Initial Developer are Copyright (C) 2008-2025 + Portions created by the Initial Developer are Copyright (C) 2008-2026 the Initial Developer. All Rights Reserved. Contributor(s): @@ -46,6 +46,32 @@ $conference_account_code = ''; $conference_description = ''; +// Set variables from http GET parameters + $page = is_numeric($_GET['page'] ?? '') ? $_GET['page'] : 0; + $order_by = preg_replace('#[^a-zA-Z0-9_\-]#', '', ($_GET['order_by'] ?? '')); + $order = ($_GET['order'] ?? '') === 'desc' ? 'desc' : 'asc'; + $search = $_GET['search'] ?? ''; + $show = $_GET['show'] ?? ''; + +// Build the query string + $param = []; + if (!empty($page)) { + $param['page'] = $page; + } + if (!empty($_GET['order_by'])) { + $param['order_by'] = $order_by; + } + if (!empty($_GET['order'])) { + $param['order'] = $order; + } + if (!empty($search)) { + $param['search'] = $search; + } + if (!empty($show) && $show == 'all' && permission_exists('conference_all')) { + $param['show'] = $show; + } + $query_string = http_build_query($param); + //action add or update if (!empty($_REQUEST["id"]) && is_uuid($_REQUEST["id"])) { $action = "update"; @@ -102,7 +128,7 @@ $p->delete('conference_user_delete', 'temp'); message::add($text['confirm-delete']); - header("Location: conference_edit.php?id=".$conference_uuid); + header("Location: conference_edit.php?id=".$conference_uuid.($query_string ? '&'.$query_string : '')); exit; } @@ -129,7 +155,7 @@ //send a message message::add($text['confirm-add']); - header("Location: conference_edit.php?id=".urlencode($conference_uuid)); + header("Location: conference_edit.php?id=".urlencode($conference_uuid).($query_string ? '&'.$query_string : '')); exit; } @@ -149,7 +175,7 @@ $token = new token; if (!$token->validate($_SERVER['PHP_SELF'])) { message::add($text['message-invalid_token'],'negative'); - header('Location: conferences.php'); + header('Location: conferences.php'.($query_string ? '?'.$query_string : '')); exit; } @@ -266,7 +292,7 @@ } //redirect the browser - header("Location: conferences.php"); + header("Location: conferences.php".($query_string ? '?'.$query_string : '')); exit; } @@ -361,7 +387,7 @@ echo " \n"; echo "
\n"; - echo button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>$settings->get('theme', 'button_icon_back'),'id'=>'btn_back','style'=>'margin-right: 15px;','link'=>'conferences.php']); + echo button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>$settings->get('theme', 'button_icon_back'),'id'=>'btn_back','style'=>'margin-right: 15px;','link'=>'conferences.php'.($query_string ? '?'.$query_string : '')]); if ($action == 'update') { if (permission_exists('conference_cdr_view')) { echo button::create(['type'=>'button','label'=>$text['button-cdr'],'icon'=>'list','link'=>PROJECT_PATH.'/app/conference_cdr/conference_cdr.php?id='.urlencode($conference_uuid)]); diff --git a/app/conferences/conferences.php b/app/conferences/conferences.php index 4e95d7b2d..f8b7e3251 100644 --- a/app/conferences/conferences.php +++ b/app/conferences/conferences.php @@ -17,7 +17,7 @@ The Initial Developer of the Original Code is Mark J Crane - Portions created by the Initial Developer are Copyright (C) 2008-2024 + Portions created by the Initial Developer are Copyright (C) 2008-2026 the Initial Developer. All Rights Reserved. Contributor(s): @@ -39,10 +39,35 @@ $language = new text; $text = $language->get(); +// Set variables from http GET parameters + $page = is_numeric($_GET['page'] ?? '') ? $_GET['page'] : 0; + $order_by = preg_replace('#[^a-zA-Z0-9_\-]#', '', ($_GET['order_by'] ?? '')); + $order = ($_GET['order'] ?? '') === 'desc' ? 'desc' : 'asc'; + $sort = $order_by == 'conference_extension' ? 'natural' : null; + $search = $_GET['search'] ?? ''; + $show = $_GET['show'] ?? ''; + +// Build the query string + $param = []; + if (!empty($page)) { + $param['page'] = $page; + } + if (!empty($_GET['order_by'])) { + $param['order_by'] = $order_by; + } + if (!empty($_GET['order'])) { + $param['order'] = $order; + } + if (!empty($search)) { + $param['search'] = $search; + } + if (!empty($show) && $show == 'all' && permission_exists('conference_all')) { + $param['show'] = $show; + } + $query_string = http_build_query($param); + //set additional variables - $show = $_REQUEST["show"] ?? ''; $action = $_REQUEST['action'] ?? ''; - $search = $_REQUEST['search'] ?? ''; //check if we are using websockets for the conference view if ($settings->get('active_conferences', 'websocket_enabled', true)) { @@ -83,27 +108,10 @@ break; } - header('Location: conferences.php'.($search != '' ? '?search='.urlencode($search) : '')); + header('Location: conferences.php'.($query_string ? '?'.$query_string : '')); exit; } -//get variables used to control the order - $order_by = $_GET["order_by"] ?? ''; - $order = $_GET["order"] ?? ''; - $sort = $order_by == 'conference_extension' ? 'natural' : null; - -//add the search term - $search = strtolower($_GET["search"] ?? ''); - if (!empty($search)) { - $sql_search = "and ("; - $sql_search .= "lower(conference_name) like :search "; - $sql_search .= "or lower(conference_extension) like :search "; - $sql_search .= "or lower(conference_pin_number) like :search "; - $sql_search .= "or lower(conference_description) like :search "; - $sql_search .= ") "; - $parameters['search'] = '%'.$search.'%'; - } - //prepare to page the results if (permission_exists('conference_view')) { //show all extensions @@ -122,19 +130,22 @@ $sql .= "and u.user_uuid = :user_uuid "; $parameters['user_uuid'] = $_SESSION['user_uuid']; } - $sql .= $sql_search ?? ''; + if (!empty($search)) { + $sql .= "and ("; + $sql .= " lower(conference_name) like :search "; + $sql .= " or lower(conference_extension) like :search "; + $sql .= " or lower(conference_pin_number) like :search "; + $sql .= " or lower(conference_description) like :search "; + $sql .= ") "; + $parameters['search'] = '%'.lower_case($search).'%'; + } $num_rows = $database->select($sql, $parameters ?? null, 'column'); + unset($sql, $parameters); //prepare to page the results $rows_per_page = $settings->get('domain', 'paging', 50); - $param = "&search=".urlencode($search); - if ($show == "all" && permission_exists('conference_all')) { - $param .= "&show=all"; - } - $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); + list($paging_controls, $rows_per_page) = paging($num_rows, $query_string, $rows_per_page); + list($paging_controls_mini, $rows_per_page) = paging($num_rows, $query_string, $rows_per_page, true); $offset = $rows_per_page * $page; //get the list @@ -170,7 +181,15 @@ $sql .= "and u.user_uuid = :user_uuid "; $parameters['user_uuid'] = $_SESSION['user_uuid']; } - $sql .= $sql_search ?? ''; + if (!empty($search)) { + $sql .= "and ("; + $sql .= " lower(conference_name) like :search "; + $sql .= " or lower(conference_extension) like :search "; + $sql .= " or lower(conference_pin_number) like :search "; + $sql .= " or lower(conference_description) like :search "; + $sql .= ") "; + $parameters['search'] = '%'.lower_case($search).'%'; + } $sql .= order_by($order_by, $order, null, null, $sort); $sql .= limit_offset($rows_per_page, $offset); $conferences = $database->select($sql, $parameters ?? null, 'all'); @@ -192,7 +211,7 @@ echo button::create(['type'=>'button','label'=>$text['button-view_active'],'icon'=>'comments','style'=>'margin-right: 15px;','link'=>PROJECT_PATH.$conference_view_page]); } if (permission_exists('conference_add')) { - echo button::create(['type'=>'button','label'=>$text['button-add'],'icon'=>$settings->get('theme', 'button_icon_add'),'id'=>'btn_add','link'=>'conference_edit.php']); + echo button::create(['type'=>'button','label'=>$text['button-add'],'icon'=>$settings->get('theme', 'button_icon_add'),'id'=>'btn_add','link'=>'conference_edit.php'.($query_string ? '?'.$query_string : '')]); } if (permission_exists('conference_add') && $conferences) { echo button::create(['type'=>'button','label'=>$text['button-copy'],'icon'=>$settings->get('theme', 'button_icon_copy'),'id'=>'btn_copy','name'=>'btn_copy','style'=>'display: none;','onclick'=>"modal_open('modal-copy','btn_copy');"]); @@ -203,20 +222,20 @@ if (permission_exists('conference_delete') && $conferences) { echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$settings->get('theme', 'button_icon_delete'),'id'=>'btn_delete','name'=>'btn_delete','style'=>'display: none;','onclick'=>"modal_open('modal-delete','btn_delete');"]); } - echo "\n"; echo "
\n"; @@ -238,7 +257,6 @@ echo "
\n"; echo "\n"; - echo "\n"; echo "
\n"; echo "\n"; @@ -249,15 +267,15 @@ echo " \n"; } if ($show == "all" && permission_exists('conference_all')) { - echo th_order_by('domain_name', $text['label-domain'], $order_by, $order, $param, "class='shrink'"); + echo th_order_by('domain_name', $text['label-domain'], $order_by, $order, null, "class='shrink'", $query_string); } - echo th_order_by('conference_name', $text['table-name'], $order_by, $order); - echo th_order_by('conference_extension', $text['table-extension'], $order_by, $order); - echo th_order_by('conference_profile', $text['table-profile'], $order_by, $order); - echo th_order_by('conference_order', $text['table-order'], $order_by, $order, null, "class='center'"); + echo th_order_by('conference_name', $text['table-name'], $order_by, $order, null, null, $query_string); + echo th_order_by('conference_extension', $text['table-extension'], $order_by, $order, null, null, $query_string); + echo th_order_by('conference_profile', $text['table-profile'], $order_by, $order, null, null, $query_string); + echo th_order_by('conference_order', $text['table-order'], $order_by, $order, null, "class='center'", $query_string); echo "\n"; - echo th_order_by('conference_enabled', $text['table-enabled'], $order_by, $order, null, "class='center'"); - echo th_order_by('conference_description', $text['table-description'], $order_by, $order, null, "class='hide-sm-dn'"); + echo th_order_by('conference_enabled', $text['table-enabled'], $order_by, $order, null, "class='center'", $query_string); + echo th_order_by('conference_description', $text['table-description'], $order_by, $order, null, "class='hide-sm-dn'", $query_string); if (permission_exists('conference_edit') && $list_row_edit_button) { echo " \n"; } @@ -268,7 +286,7 @@ foreach($conferences as $row) { $list_row_url = ''; if (permission_exists('conference_edit')) { - $list_row_url = "conference_edit.php?id=".urlencode($row['conference_uuid']); + $list_row_url = "conference_edit.php?id=".urlencode($row['conference_uuid']).($query_string ? '&'.$query_string : ''); if ($row['domain_uuid'] != $_SESSION['domain_uuid'] && permission_exists('domain_select')) { $list_row_url .= '&domain_uuid='.urlencode($row['domain_uuid']).'&domain_change=true'; } @@ -340,4 +358,3 @@ require_once "resources/footer.php"; ?> -
".$text['label-tools']."