From 108693ef01eae5d924bce27c76a5a238cd541e9c Mon Sep 17 00:00:00 2001 From: fusionate Date: Tue, 2 Sep 2025 12:46:22 -0600 Subject: [PATCH] Extensions - List, Edit, Copy, Delete, Toggle: Maintain list sorting and page state. --- app/extensions/extension_copy.php | 9 +++++++-- app/extensions/extension_edit.php | 26 +++++++++++++++++--------- app/extensions/extensions.php | 23 +++++++++++++++-------- 3 files changed, 39 insertions(+), 19 deletions(-) diff --git a/app/extensions/extension_copy.php b/app/extensions/extension_copy.php index 0aeca685a4..17c11fa391 100644 --- a/app/extensions/extension_copy.php +++ b/app/extensions/extension_copy.php @@ -45,6 +45,11 @@ $language = new text; $text = $language->get(); +//get order and order by, page + $order_by = preg_replace('#[^a-zA-Z0-9_\-]#', '', ($_REQUEST["order_by"] ?? 'extension')); + $order = $_REQUEST["order"] ?? 'asc'; + $page = isset($_REQUEST['page']) && is_numeric($_REQUEST['page']) ? $_REQUEST['page'] : 0; + //set the http get/post variable(s) to a php variable if (is_uuid($_REQUEST["id"]) && $_REQUEST["ext"] != '') { $extension_uuid = $_REQUEST["id"]; @@ -59,7 +64,7 @@ $extension = new extension; if ($extension->exists($_SESSION['domain_uuid'], $extension_new)) { message::add($text['message-duplicate'], 'negative'); - header("Location: extensions.php".(is_numeric($page) ? '?page='.$page : null)); + header("Location: extensions.php?".(!empty($order_by) ? '&order_by='.$order_by.'&order='.$order : null).(is_numeric($page) ? '&page='.$page : null)); exit; } @@ -193,7 +198,7 @@ //redirect the user message::add($text['message-copy']); - header("Location: extensions.php".(is_numeric($page) ? '?page='.$page : null)); + header("Location: extensions.php?".(!empty($order_by) ? '&order_by='.$order_by.'&order='.$order : null).(is_numeric($page) ? '&page='.$page : null)); exit; ?> \ No newline at end of file diff --git a/app/extensions/extension_edit.php b/app/extensions/extension_edit.php index 7ad970934e..0a5041c346 100644 --- a/app/extensions/extension_edit.php +++ b/app/extensions/extension_edit.php @@ -47,6 +47,11 @@ $language = new text; $text = $language->get(); +//get order and order by, page + $order_by = preg_replace('#[^a-zA-Z0-9_\-]#', '', ($_REQUEST["order_by"] ?? 'extension')); + $order = $_REQUEST["order"] ?? 'asc'; + $page = isset($_REQUEST['page']) && is_numeric($_REQUEST['page']) ? $_REQUEST['page'] : 0; + //return the first item if data type = array, returns value if data type = text function get_first_item($value) { return is_array($value) ? $value[0] : $value; @@ -96,7 +101,6 @@ if (!empty($_REQUEST["id"]) && is_uuid($_REQUEST["id"])) { $action = "update"; $extension_uuid = $_REQUEST["id"]; - $page = $_REQUEST['page'] ?? null; } else { $action = "add"; @@ -114,7 +118,7 @@ if ($total_extensions >= $limit_extensions) { message::add($text['message-maximum_extensions'].' '.$limit_extensions, 'negative'); - header('Location: extensions.php'.(isset($page) && is_numeric($page) ? '?page='.$page : null)); + header('Location: extensions.php?'.(!empty($order_by) ? '&order_by='.$order_by.'&order='.$order : null).(isset($page) && is_numeric($page) ? '&page='.$page : null)); exit; } } @@ -320,7 +324,7 @@ $p->delete('extension_user_delete', 'temp'); //redirect - header("Location: extension_edit.php?id=".$extension_uuid); + header("Location: extension_edit.php?id=".$extension_uuid.(!empty($order_by) ? '&order_by='.$order_by.'&order='.$order : null).(isset($page) && is_numeric($page) ? '&page='.$page : null)); exit; } @@ -347,7 +351,7 @@ $p->delete('device_line_delete', 'temp'); //redirect - header("Location: extension_edit.php?id=".$extension_uuid); + header("Location: extension_edit.php?id=".$extension_uuid.(!empty($order_by) ? '&order_by='.$order_by.'&order='.$order : null).(isset($page) && is_numeric($page) ? '&page='.$page : null)); exit; } } @@ -890,10 +894,10 @@ message::add($text['message-update']); } if ($range > 1) { - header("Location: extensions.php"); + header("Location: extensions.php?".(!empty($order_by) ? '&order_by='.$order_by.'&order='.$order : null).(isset($page) && is_numeric($page) ? '&page='.$page : null)); } else { - header("Location: extension_edit.php?id=".$extension_uuid.(isset($page) && is_numeric($page) ? '&page='.$page : null)); + header("Location: extension_edit.php?id=".$extension_uuid.(!empty($order_by) ? '&order_by='.$order_by.'&order='.$order : null).(isset($page) && is_numeric($page) ? '&page='.$page : null)); } exit; } @@ -1144,13 +1148,13 @@ echo " var new_ext = prompt('".$text['message-extension']."');\n"; echo " if (new_ext != null) {\n"; echo " if (!isNaN(new_ext)) {\n"; - echo " document.location.href='extension_copy.php?id=".escape($extension_uuid ?? '')."&ext=' + new_ext".(!empty($page) && is_numeric($page) ? " + '&page=".$page."'" : null).";\n"; + echo " document.location.href='extension_copy.php?id=".escape($extension_uuid ?? '')."&ext=' + new_ext + '".(!empty($order_by) ? '&order_by='.$order_by.'&order='.$order : null).(!empty($page) && is_numeric($page) ? '&page='.$page : null)."';\n"; echo " }\n"; echo " else {\n"; echo " var new_number_alias = prompt('".$text['message-number_alias']."');\n"; echo " if (new_number_alias != null) {\n"; echo " if (!isNaN(new_number_alias)) {\n"; - echo " document.location.href='extension_copy.php?id=".escape($extension_uuid ?? '')."&ext=' + new_ext + '&alias=' + new_number_alias".(!empty($page) && is_numeric($page) ? " + '&page=".$page."'" : null).";\n"; + echo " document.location.href='extension_copy.php?id=".escape($extension_uuid ?? '')."&ext=' + new_ext + '&alias=' + new_number_alias + '".(!empty($order_by) ? '&order_by='.$order_by.'&order='.$order : null).(!empty($page) && is_numeric($page) ? '&page='.$page : null)."';\n"; echo " }\n"; echo " }\n"; echo " }\n"; @@ -1170,7 +1174,7 @@ } echo "\n"; echo "
\n"; - echo button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>$settings->get('theme', 'button_icon_back'),'id'=>'btn_back','link'=>'extensions.php'.(isset($page) && is_numeric($page) ? '?page='.$page : null)]); + echo button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>$settings->get('theme', 'button_icon_back'),'id'=>'btn_back','link'=>'extensions.php?'.(!empty($order_by) ? '&order_by='.$order_by.'&order='.$order : null).(isset($page) && is_numeric($page) ? '&page='.$page : null)]); if ($action == 'update') { $button_margin = 'margin-left: 15px;'; if (permission_exists('xml_cdr_view')) { @@ -2351,6 +2355,10 @@ echo "
\n"; echo "

"; + if (!empty($order_by)) { + echo "\n"; + echo "\n"; + } if (isset($page) && is_numeric($page)) { echo "\n"; } diff --git a/app/extensions/extensions.php b/app/extensions/extensions.php index 32a7508626..3d37a9366b 100644 --- a/app/extensions/extensions.php +++ b/app/extensions/extensions.php @@ -46,6 +46,12 @@ $language = new text; $text = $language->get(); +//get order and order by, page, sort + $order_by = preg_replace('#[^a-zA-Z0-9_\-]#', '', ($_REQUEST["order_by"] ?? 'extension')); + $order = $_REQUEST["order"] ?? 'asc'; + $page = isset($_REQUEST['page']) && is_numeric($_REQUEST['page']) ? $_REQUEST['page'] : 0; + $sort = $order_by == 'extension' ? 'natural' : null; + //get posted data if (!empty($_POST['extensions']) && is_array($_POST['extensions'])) { $action = $_POST['action']; @@ -74,15 +80,10 @@ break; } - header('Location: extensions.php'.($search != '' ? '?search='.urlencode($search) : null)); + header('Location: extensions.php?'.(!empty($order_by) ? '&order_by='.$order_by.'&order='.$order : null).(is_numeric($page) ? '&page='.urlencode($page) : null).($search != '' ? '&search='.urlencode($search) : null)); exit; } -//get order and order by - $order_by = $_GET["order_by"] ?? 'extension'; - $order = $_GET["order"] ?? 'asc'; - $sort = $order_by == 'extension' ? 'natural' : null; - //get total extension count for domain if (isset($_SESSION['limit']['extensions']['numeric'])) { $sql = "select count(*) from v_extensions "; @@ -141,7 +142,6 @@ $param .= "&order=".$order; $param .= "&order_by=".$order_by; } - $page = isset($_GET['page']) && is_numeric($_GET['page']) ? $_GET['page'] : 0; list($paging_controls, $rows_per_page) = paging($num_rows, $param.$query_string, $rows_per_page); //bottom list($paging_controls_mini, $rows_per_page) = paging($num_rows, $param.$query_string, $rows_per_page, true); //top $offset = $rows_per_page * $page; @@ -308,6 +308,13 @@ echo "
\n"; echo "\n"; + if (!empty($order_by)) { + echo "\n"; + echo "\n"; + } + if (isset($page) && is_numeric($page)) { + echo "\n"; + } echo "\n"; echo "
\n"; @@ -357,7 +364,7 @@ foreach($extensions as $row) { $list_row_url = ''; if (permission_exists('extension_edit')) { - $list_row_url = "extension_edit.php?id=".urlencode($row['extension_uuid']).(is_numeric($page) ? '&page='.urlencode($page) : null); + $list_row_url = "extension_edit.php?id=".urlencode($row['extension_uuid']).(!empty($order_by) ? '&order_by='.$order_by.'&order='.$order : null).(is_numeric($page) ? '&page='.urlencode($page) : null); if ($row['domain_uuid'] != $_SESSION['domain_uuid'] && permission_exists('domain_select')) { $list_row_url .= '&domain_uuid='.urlencode($row['domain_uuid']).'&domain_change=true'; }