diff --git a/app/ring_groups/ring_group_edit.php b/app/ring_groups/ring_group_edit.php index d5307436b..74a99e4eb 100644 --- a/app/ring_groups/ring_group_edit.php +++ b/app/ring_groups/ring_group_edit.php @@ -67,6 +67,33 @@ $destination_delay_max = $settings->get('ring_group', 'destination_delay_max', ''); $destination_timeout_max = $settings->get('ring_group', 'destination_timeout_max', ''); +// 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'] ?? 'ring_group_name')); + $order = ($_GET['order'] ?? '') === 'desc' ? 'desc' : 'asc'; + $sort = $order_by == 'ring_group_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('ring_group_all')) { + $param['show'] = $show; + } + $query_string = http_build_query($param); + //get the domain_uuid $domain_uuid = $_SESSION['domain_uuid']; $domain_name = $_SESSION['domain_name']; @@ -132,7 +159,7 @@ message::add($text['message-delete']); //redirect the browser - header("Location: ring_group_edit.php?id=$ring_group_uuid"); + header("Location: ring_group_edit.php?id=".$ring_group_uuid.($query_string ? '&'.$query_string : '')); exit; } @@ -146,7 +173,7 @@ if (is_numeric($settings->get('limit', 'ring_groups', '')) && $total_ring_groups >= $settings->get('limit', 'ring_groups', '')) { message::add($text['message-maximum_ring_groups'].' '.$settings->get('limit', 'ring_groups', ''), 'negative'); - header('Location: ring_groups.php'); + header('Location: ring_groups.php'.($query_string ? '?'.$query_string : '')); exit; } } @@ -174,7 +201,7 @@ break; } - header('Location: ring_groups.php'); + header('Location: ring_groups.php'.($query_string ? '?'.$query_string : '')); exit; } @@ -269,7 +296,7 @@ message::add($text['message-add']); //redirect the browser - header("Location: ring_group_edit.php?id=".urlencode($ring_group_uuid)); + header("Location: ring_group_edit.php?id=".urlencode($ring_group_uuid).($query_string ? '&'.$query_string : '')); exit; } @@ -280,7 +307,7 @@ $token = new token; if (!$token->validate($_SERVER['PHP_SELF'])) { message::add($text['message-invalid_token'],'negative'); - header('Location: ring_groups.php'); + header('Location: ring_groups.php'.($query_string ? '?'.$query_string : '')); exit; } @@ -544,7 +571,7 @@ } //redirect the browser - header("Location: ring_group_edit.php?id=".urlencode($ring_group_uuid)); + header("Location: ring_group_edit.php?id=".urlencode($ring_group_uuid).($query_string ? '&'.$query_string : '')); exit; } @@ -746,7 +773,7 @@ echo "
\n"; echo "
".$text['title-ring_group']."
\n"; echo "
\n"; - echo button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>$settings->get('theme', 'button_icon_back'),'id'=>'btn_back','link'=>'ring_groups.php']); + echo button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>$settings->get('theme', 'button_icon_back'),'id'=>'btn_back','link'=>'ring_groups.php'.($query_string ? '?'.$query_string : '')]); if ($action == 'update') { $button_margin = 'margin-left: 15px;'; if (permission_exists('ring_group_add') && (empty($settings->get('limit', 'ring_groups', '')) || ($total_ring_groups < $settings->get('limit', 'ring_groups', '')))) { diff --git a/app/ring_groups/ring_groups.php b/app/ring_groups/ring_groups.php index 4dd009e4e..5ade46a3a 100644 --- a/app/ring_groups/ring_groups.php +++ b/app/ring_groups/ring_groups.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) 2010-2025 + Portions created by the Initial Developer are Copyright (C) 2010-2026 the Initial Developer. All Rights Reserved. Contributor(s): @@ -40,16 +40,36 @@ $language = new text; $text = $language->get(); -//set additional variables - $show = $_GET["show"] ?? ''; +// 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'] ?? 'ring_group_name')); + $order = ($_GET['order'] ?? '') === 'desc' ? 'desc' : 'asc'; + $sort = $order_by == 'ring_group_extension' ? 'natural' : null; + $search = $_GET['search'] ?? ''; + $show = $_GET['show'] ?? ''; -//set the defaults - $search = ''; +// 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('ring_group_all')) { + $param['show'] = $show; + } + $query_string = http_build_query($param); //get posted data if (!empty($_POST['ring_groups'])) { $action = $_POST['action']; - $search = $_POST['search'] ?? ''; $ring_groups = $_POST['ring_groups']; } @@ -63,7 +83,7 @@ if (is_numeric($settings->get('limit', 'ring_groups', '')) && $total_ring_groups >= $settings->get('limit', 'ring_groups', '')) { message::add($text['message-maximum_ring_groups'].' '.$settings->get('limit', 'ring_groups', ''), 'negative'); - header('Location: ring_groups.php'); + header('Location: ring_groups.php'.($query_string ? '?'.$query_string : '')); exit; } } @@ -85,20 +105,10 @@ break; } - header('Location: ring_groups.php'.($search != '' ? '?search='.urlencode($search) : '')); + header('Location: ring_groups.php'.($query_string ? '?'.$query_string : '')); exit; } -//get order and order by - $order_by = $_GET["order_by"] ?? 'ring_group_name'; - $order = $_GET["order"] ?? 'asc'; - $sort = $order_by == 'ring_group_extension' ? 'natural' : null; - -//add the search term - if (isset($_GET["search"])) { - $search = strtolower($_GET["search"]); - } - //get total domain ring group count $sql = "select count(ring_group_uuid) from v_ring_groups "; $sql .= "where domain_uuid = :domain_uuid "; @@ -132,18 +142,15 @@ $sql .= "or lower(ring_group_description) like :search "; $sql .= "or lower(ring_group_strategy) like :search "; $sql .= ") "; - $parameters['search'] = '%'.$search.'%'; + $parameters['search'] = '%'.lower_case($search).'%'; } $num_rows = $database->select($sql, $parameters, 'column'); unset($sql, $parameters); //prepare to page the results $rows_per_page = $settings->get('domain', 'paging', 50); - $param = $search ? "&search=".$search : null; - $param = ($show == "all" && permission_exists('ring_group_all')) ? "&show=all" : null; - $page = isset($_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); + 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 @@ -177,7 +184,7 @@ $sql .= "or lower(ring_group_description) like :search "; $sql .= "or lower(ring_group_strategy) like :search "; $sql .= ") "; - $parameters['search'] = '%'.$search.'%'; + $parameters['search'] = '%'.lower_case($search).'%'; } $sql .= order_by($order_by, $order, null, null, $sort); $sql .= limit_offset($rows_per_page, $offset); @@ -197,7 +204,7 @@ echo "
".$text['title-ring_groups']."
".number_format($num_rows)."
\n"; echo "
\n"; if (permission_exists('ring_group_add')) { - echo button::create(['type'=>'button','label'=>$text['button-add'],'icon'=>$settings->get('theme', 'button_icon_add'),'id'=>'btn_add','link'=>'ring_group_edit.php']); + echo button::create(['type'=>'button','label'=>$text['button-add'],'icon'=>$settings->get('theme', 'button_icon_add'),'id'=>'btn_add','link'=>'ring_group_edit.php'.($query_string ? '?'.$query_string : '')]); } if (permission_exists('ring_group_add') && $ring_groups) { 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');"]); @@ -208,20 +215,20 @@ if (permission_exists('ring_group_delete') && $ring_groups) { 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"; @@ -243,7 +250,6 @@ echo "
\n"; echo "\n"; - echo "\n"; echo "
\n"; echo "\n"; @@ -254,14 +260,14 @@ echo " \n"; } if ($show == "all" && permission_exists('ring_group_all')) { - echo th_order_by('domain_name', $text['label-domain'], $order_by, $order); + echo th_order_by('domain_name', $text['label-domain'], $order_by, $order, null, null, $query_string); } - echo th_order_by('ring_group_name', $text['label-name'], $order_by, $order); - echo th_order_by('ring_group_extension', $text['label-extension'], $order_by, $order); - echo th_order_by('ring_group_strategy', $text['label-strategy'], $order_by, $order); - echo th_order_by('ring_group_forward_enabled', $text['label-forwarding'], $order_by, $order); - echo th_order_by('ring_group_enabled', $text['label-enabled'], $order_by, $order, null, "class='center'"); - echo th_order_by('ring_group_description', $text['header-description'], $order_by, $order, null, "class='hide-sm-dn'"); + echo th_order_by('ring_group_name', $text['label-name'], $order_by, $order, null, null, $query_string); + echo th_order_by('ring_group_extension', $text['label-extension'], $order_by, $order, null, null, $query_string); + echo th_order_by('ring_group_strategy', $text['label-strategy'], $order_by, $order, null, null, $query_string); + echo th_order_by('ring_group_forward_enabled', $text['label-forwarding'], $order_by, $order, null, null, $query_string); + echo th_order_by('ring_group_enabled', $text['label-enabled'], $order_by, $order, null, "class='center'", $query_string); + echo th_order_by('ring_group_description', $text['header-description'], $order_by, $order, null, "class='hide-sm-dn'", $query_string); if (permission_exists('ring_group_edit') && $settings->get('theme', 'list_row_edit_button', false)) { echo " \n"; } @@ -272,7 +278,7 @@ foreach ($ring_groups as $row) { $list_row_url = ''; if (permission_exists('ring_group_edit')) { - $list_row_url = "ring_group_edit.php?id=".urlencode($row['ring_group_uuid']); + $list_row_url = "ring_group_edit.php?id=".urlencode($row['ring_group_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'; }