diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index c803520ed..3fb97f887 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -24,6 +24,8 @@ class InfoCenter extends Auth_Controller const FILTER_ID = 'filter_id'; const PREV_FILTER_ID = 'prev_filter_id'; + const RELOAD_DATASET = 'reloadDataset'; + const KEEP_TABLESORTER_FILTER = 'keepTsFilter'; private $_uid; // contains the UID of the logged user @@ -234,7 +236,7 @@ class InfoCenter extends Auth_Controller $redirectLink = '/'.self::INFOCENTER_URI.'?'.self::FHC_CONTROLLER_ID.'='.$this->getControllerId(); // Force reload of Dataset after Unlock - $redirectLink .= '&reloadDataset=true'; + $redirectLink .= '&'.self::RELOAD_DATASET.'=true&'.self::KEEP_TABLESORTER_FILTER.'=true'; $currentFilterId = $this->input->get(self::FILTER_ID); if (isset($currentFilterId)) @@ -894,10 +896,16 @@ class InfoCenter extends Auth_Controller $freigegebenLink = site_url(self::INFOCENTER_URI.'/'.self::FREIGEGEBEN_PAGE); $reihungstestAbsolviertLink = site_url(self::INFOCENTER_URI.'/'.self::REIHUNGSTESTABSOLVIERT_PAGE); $currentFilterId = $this->input->get(self::FILTER_ID); + $reloadDatasetParam = self::RELOAD_DATASET.'=true'; if (isset($currentFilterId)) { - $freigegebenLink .= '?'.self::PREV_FILTER_ID.'='.$currentFilterId; - $reihungstestAbsolviertLink .= '?'.self::PREV_FILTER_ID.'='.$currentFilterId; + $freigegebenLink .= '?'.self::PREV_FILTER_ID.'='.$currentFilterId.'&'.$reloadDatasetParam; + $reihungstestAbsolviertLink .= '?'.self::PREV_FILTER_ID.'='.$currentFilterId.'&'.$reloadDatasetParam; + } + else + { + $freigegebenLink .= '?'.$reloadDatasetParam; + $reihungstestAbsolviertLink .= '?'.$reloadDatasetParam; } $this->navigationlib->setSessionMenu( @@ -950,7 +958,7 @@ class InfoCenter extends Auth_Controller $origin_page = $this->input->get(self::ORIGIN_PAGE); - $link = site_url(self::INFOCENTER_URI.'/'.self::INDEX_PAGE); + $link = site_url(self::INFOCENTER_URI); if ($origin_page == self::FREIGEGEBEN_PAGE) { $link = site_url(self::INFOCENTER_URI.'/'.self::FREIGEGEBEN_PAGE); @@ -963,7 +971,7 @@ class InfoCenter extends Auth_Controller $prevFilterId = $this->input->get(self::PREV_FILTER_ID); if (isset($prevFilterId)) { - $link .= '?'.self::FILTER_ID.'='.$prevFilterId; + $link .= '?'.self::FILTER_ID.'='.$prevFilterId.'&'.self::RELOAD_DATASET.'=true&'.self::KEEP_TABLESORTER_FILTER.'=true'; } $this->navigationlib->setSessionMenu( @@ -993,13 +1001,14 @@ class InfoCenter extends Auth_Controller $this->load->library('NavigationLib', array(self::NAVIGATION_PAGE => self::INFOCENTER_URI.'/'.$page)); // Generate the home link with the eventually loaded filter - $homeLink = site_url(self::INFOCENTER_URI.'/'.self::INDEX_PAGE); - $freigegebenLink = site_url(self::INFOCENTER_URI.'/'.self::FREIGEGEBEN_PAGE); - $absolviertLink = site_url(self::INFOCENTER_URI.'/'.self::REIHUNGSTESTABSOLVIERT_PAGE); + $reloadDatasetParam = '?'.self::RELOAD_DATASET.'=true'; + $homeLink = site_url(self::INFOCENTER_URI.'/'.self::INDEX_PAGE.$reloadDatasetParam); + $freigegebenLink = site_url(self::INFOCENTER_URI.'/'.self::FREIGEGEBEN_PAGE.$reloadDatasetParam); + $absolviertLink = site_url(self::INFOCENTER_URI.'/'.self::REIHUNGSTESTABSOLVIERT_PAGE.$reloadDatasetParam); $prevFilterId = $this->input->get(self::PREV_FILTER_ID); if (isset($prevFilterId)) { - $homeLink .= '?'.self::FILTER_ID.'='.$prevFilterId; + $homeLink .= '&'.self::FILTER_ID.'='.$prevFilterId; } $this->navigationlib->setSessionElementMenu( diff --git a/application/views/system/infocenter/infocenterFreigegebenData.php b/application/views/system/infocenter/infocenterFreigegebenData.php index 89ba2ec38..13a2c0563 100644 --- a/application/views/system/infocenter/infocenterFreigegebenData.php +++ b/application/views/system/infocenter/infocenterFreigegebenData.php @@ -235,6 +235,7 @@ 'filter_id' => $this->input->get('filter_id'), 'requiredPermissions' => 'infocenter', 'datasetRepresentation' => 'tablesorter', + 'reloadDataset' => ($this->input->get('reloadDataset')=='true'?true:false), 'checkboxes' => 'PersonId', 'additionalColumns' => array('Details'), 'columnsAliases' => array( diff --git a/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php b/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php index 22b122bb0..652ab4887 100644 --- a/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php +++ b/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php @@ -204,6 +204,7 @@ 'filter_id' => $this->input->get('filter_id'), 'requiredPermissions' => 'infocenter', 'datasetRepresentation' => 'tablesorter', + 'reloadDataset' => ($this->input->get('reloadDataset')=='true'?true:false), 'checkboxes' => 'PersonId', 'additionalColumns' => array('Details'), 'columnsAliases' => array( diff --git a/public/js/FilterWidget.js b/public/js/FilterWidget.js index 6aad74562..a9e0f6cf9 100644 --- a/public/js/FilterWidget.js +++ b/public/js/FilterWidget.js @@ -84,7 +84,7 @@ var FHC_FilterWidget = { // Public methods /** - * To display the FilterWidget using the loaded data prenset in the session + * To display the FilterWidget using the loaded data present in the session */ display: function() { @@ -392,7 +392,6 @@ var FHC_FilterWidget = { }, { successCallback: function(data, textStatus, jqXHR) { - FHC_FilterWidget._cleanTablesorterLocalStorage(); FHC_FilterWidget._failOrRefresh(data, textStatus, jqXHR); } } @@ -453,7 +452,6 @@ var FHC_FilterWidget = { }, { successCallback: function(data, textStatus, jqXHR) { - FHC_FilterWidget._cleanTablesorterLocalStorage(); FHC_FilterWidget._failOrRefresh(data, textStatus, jqXHR); } } @@ -837,6 +835,14 @@ var FHC_FilterWidget = { */ _renderDatasetTablesorter: function(data) { + //clear tablesorter filter storage + var keepTsFilter = FHC_AjaxClient.getUrlParameter("keepTsFilter"); + + if (typeof keepTsFilter === "undefined" || keepTsFilter !== "true") + { + FHC_FilterWidget._clearTablesorterLocalStorage(); + } + if (data.hasOwnProperty("checkboxes") && data.checkboxes!=null && data.checkboxes.trim() != "") { $("#filterTableDataset > thead > tr").append("Select"); @@ -935,10 +941,6 @@ var FHC_FilterWidget = { } }); - // Reset filter storage if there is a filter id in url TODO: find better solution - var filter_id = FHC_AjaxClient.getUrlParameter("filter_id"); - if (typeof filter_id !== "undefined") FHC_FilterWidget._cleanTablesorterLocalStorage(); - $.tablesorter.updateAll($("#filterTableDataset")[0].config, true, null); } }, @@ -1057,9 +1059,8 @@ var FHC_FilterWidget = { /** * Tablesorter filter local storage clean */ - _cleanTablesorterLocalStorage: function() { - - $("#filterTableDataset").trigger("filterResetSaved"); + _clearTablesorterLocalStorage: function() { + localStorage.removeItem("tablesorter-filters"); }, /** diff --git a/public/js/infocenter/infocenterPersonDataset.js b/public/js/infocenter/infocenterPersonDataset.js index 54933165d..816dd2fda 100644 --- a/public/js/infocenter/infocenterPersonDataset.js +++ b/public/js/infocenter/infocenterPersonDataset.js @@ -148,6 +148,28 @@ var InfocenterPersonDataset = { trs.find("input[name=PersonId\\[\\]]").prop("checked", false); } ); + + //make sure tablesorter local storage for homepage url with and without "/index" shares same values + $("#filterTableDataset").bind('filterEnd', function() + { + if (FHC_JS_DATA_STORAGE_OBJECT.called_method === 'index') + { + var pathname = window.location.pathname; + var storageobj = localStorage.getItem("tablesorter-filters"); + var parsed = JSON.parse(storageobj); + var regex = new RegExp(/\/index(?!\.ci\.php)/); + if (regex.test(pathname)) + { + parsed[pathname.replace(regex, "")] = parsed[pathname]; + } + else + { + parsed[pathname + "/index"] = parsed[pathname]; + } + storageobj = JSON.stringify(parsed); + localStorage.setItem("tablesorter-filters", storageobj); + } + }); }, /**