From ccbea3d20a994ca833dd8aa642aa25ca922bb7fd Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Mon, 23 Sep 2019 12:34:28 +0200 Subject: [PATCH] SortableTable: clean URL params when changing student/teacher view BT#16150 --- main/inc/lib/sortable_table.class.php | 39 +++++++++++++++++++++++---- main/inc/local.inc.php | 8 ++++++ 2 files changed, 42 insertions(+), 5 deletions(-) diff --git a/main/inc/lib/sortable_table.class.php b/main/inc/lib/sortable_table.class.php index c1af351fd0..75363b3842 100755 --- a/main/inc/lib/sortable_table.class.php +++ b/main/inc/lib/sortable_table.class.php @@ -105,6 +105,8 @@ class SortableTable extends HTML_Table */ private $columnsToHide = []; private $dataFunctionParams; + private $defaultColumn; + private $defaultItemsPerPage; /** * Create a new SortableTable. @@ -145,17 +147,24 @@ class SortableTable extends HTML_Table $this->table_name = $table_name; $this->additional_parameters = []; $this->param_prefix = $table_name.'_'; + $this->defaultColumn = (int) $default_column; + $this->defaultItemsPerPage = $default_items_per_page; + + $defaultRow = api_get_configuration_value('table_default_row'); + if (!empty($defaultRow)) { + $this->defaultItemsPerPage = $default_items_per_page = $defaultRow; + } + + $cleanSessionData = Session::read('clean_sortable_table'); + if ($cleanSessionData === true) { + $this->cleanUrlSessionParams(); + } $this->page_nr = Session::read($this->param_prefix.'page_nr', 1); $this->page_nr = isset($_GET[$this->param_prefix.'page_nr']) ? (int) $_GET[$this->param_prefix.'page_nr'] : $this->page_nr; $this->column = Session::read($this->param_prefix.'column', $default_column); $this->column = isset($_GET[$this->param_prefix.'column']) ? (int) $_GET[$this->param_prefix.'column'] : $this->column; - $defaultRow = api_get_configuration_value('table_default_row'); - if (!empty($defaultRow)) { - $default_items_per_page = $defaultRow; - } - // Default direction. if (in_array(strtoupper($default_order_direction), ['ASC', 'DESC'])) { $this->direction = $default_order_direction; @@ -212,6 +221,26 @@ class SortableTable extends HTML_Table $this->dataFunctionParams = []; } + /** + * Clean URL params when changing student view + */ + public function cleanUrlSessionParams() + { + Session::erase('clean_sortable_table'); + + $prefix = $this->param_prefix; + + Session::erase($prefix.'page_nr'); + Session::erase($prefix.'column'); + Session::erase($prefix.'direction'); + Session::erase($prefix.'per_page'); + + $_GET[$this->param_prefix.'per_page'] = $this->default_items_per_page; + $_GET[$this->param_prefix.'page_nr'] = 1; + $_GET[$this->param_prefix.'column'] = $this->defaultColumn; + $_GET[$this->param_prefix.'direction'] = $this->direction; + } + /** * @return array */ diff --git a/main/inc/local.inc.php b/main/inc/local.inc.php index 90d4bf085d..ca4dc8952c 100755 --- a/main/inc/local.inc.php +++ b/main/inc/local.inc.php @@ -1541,12 +1541,14 @@ if ((isset($uidReset) && $uidReset) || $cidReset) { //set variable according to student_view_enabled choices if (api_get_setting('student_view_enabled') == "true") { + $changed = false; if (isset($_GET['isStudentView'])) { if ($_GET['isStudentView'] == 'true') { if (isset($_SESSION['studentview'])) { if (!empty($_SESSION['studentview'])) { // switching to studentview $_SESSION['studentview'] = 'studentview'; + $changed = true; } } } elseif ($_GET['isStudentView'] == 'false') { @@ -1554,6 +1556,7 @@ if (api_get_setting('student_view_enabled') == "true") { if (!empty($_SESSION['studentview'])) { // switching to teacherview $_SESSION['studentview'] = 'teacherview'; + $changed = true; } } } @@ -1562,6 +1565,11 @@ if (api_get_setting('student_view_enabled') == "true") { } elseif (empty($_SESSION['studentview'])) { // We are in teacherview here $_SESSION['studentview'] = 'teacherview'; + $changed = true; + } + + if ($changed) { + Session::write('clean_sortable_table', true); } }