From 7a9eda3912862044b49e9abf2a572470152fa389 Mon Sep 17 00:00:00 2001 From: Paolo Date: Fri, 30 Nov 2018 14:58:38 +0100 Subject: [PATCH] - Added new public method setNavigationMenu to controller system/Filters.php - Method _setNavigationMenuFreigegeben of system/infocenter/InfoCenter controller now generate only the menu entry "Home" - Added new const CUSTOM_MENU to FiltersLib to represent new FilterWidget parameter to specify if the menu for this filter is custom - Added new consts NAV_MENU_FILTER_KEY, NAV_MENU_FILTER_NAME, NAV_MENU_CUSTOM_FILTER_KEY and NAV_MENU_CUSTOM_FILTER_NAME to FiltersLib as name and array keys of the filters menu array - Added new const NAVIGATION_PAGE to FiltersLib which represents the navigation page parameter name - Added new public method generateFilterMenu to FiltersLib to generate the filters menu structure array and stores it into the session - Fixed methods setElementSessionMenu and setElementSessionHeader in NavigationLib - Added new public method getFiltersByAppDatasetName to Filters_model to load all filters by their app and dataset_name - Added new private property _customMenu to FilterWidget - If _customMenu is NOT true then the new private method _setFilterMenu is called - View infocenter/infocenterData.php: arranged the code differently and set customMenu as true - View infocenter/infocenterFreigegebenData.php: arranged the code differently - Added new global function refreshSideMenuHook to FilterWidget.js - Renamed private method _getNavigationWidgetCalled to getNavigationPage in NavigationWidget.js - Method refreshSideMenuHook of NavigationWidget.js now can accept parameters to give them to the ajax call - In infocenterPersonDataset.js the function refreshSideMenuHook is declared only if the page is the index page --- application/controllers/system/Filters.php | 12 + .../system/infocenter/InfoCenter.php | 91 +--- application/libraries/FiltersLib.php | 104 +++++ application/libraries/NavigationLib.php | 18 +- application/models/system/Filters_model.php | 23 + .../system/infocenter/infocenterData.php | 399 +++++++++--------- .../infocenter/infocenterFreigegebenData.php | 216 +++++----- application/widgets/FilterWidget.php | 27 +- public/js/FilterWidget.js | 17 + public/js/NavigationWidget.js | 34 +- .../js/infocenter/infocenterPersonDataset.js | 8 +- 11 files changed, 539 insertions(+), 410 deletions(-) diff --git a/application/controllers/system/Filters.php b/application/controllers/system/Filters.php index 64626f8db..f649563d0 100644 --- a/application/controllers/system/Filters.php +++ b/application/controllers/system/Filters.php @@ -201,6 +201,18 @@ class Filters extends FHC_Controller } } + + /** + * Define the navigation menu for the current filter widget + */ + public function setNavigationMenu() + { + // Generates the filters structure array + $filterMenu = $this->filterslib->generateFilterMenu($this->input->get(FiltersLib::NAVIGATION_PAGE)); + + $this->outputJsonSuccess('Success'); + } + //------------------------------------------------------------------------------------------------------------------ // Private methods diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index d30f4bd36..fdc0db7d0 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -856,89 +856,30 @@ class InfoCenter extends Auth_Controller */ private function _setNavigationMenuFreigegeben() { + // Loads NavigationLib $this->load->library('NavigationLib', array(self::NAVIGATION_PAGE => self::INFOCENTER_URI.'/'.self::FREIGEGEBEN_PAGE)); - $listFilters = array(); - $listCustomFilters = array(); - - $filters = $this->FiltersModel->getFilterList('infocenter', 'freigegeben', '%InfoCenterFreigegeben%'); - if (hasData($filters)) - { - for ($filtersCounter = 0; $filtersCounter < count($filters->retval); $filtersCounter++) - { - $filter = $filters->retval[$filtersCounter]; - - $listFilters[$filter->filter_id] = $filter->description[0]; - } - } - - $customFilters = $this->FiltersModel->getCustomFiltersList('infocenter', 'freigegeben', $this->_uid); - if (hasData($customFilters)) - { - for ($filtersCounter = 0; $filtersCounter < count($customFilters->retval); $filtersCounter++) - { - $filter = $customFilters->retval[$filtersCounter]; - - $listCustomFilters[$filter->filter_id] = $filter->description[0]; - } - } - - $filtersArray = array(); - $filtersArray['children'] = array(); - - $this->_fillFiltersFreigegeben($listFilters, $filtersArray); - - if (count($listCustomFilters) > 0) - { - $filtersArray['children']['personal'] = $this->navigationlib->oneLevel( - 'Personal filters', // description - '#', // link - array(), // children - '', // icon - true, // expand - null, // subscriptDescription - null, // subscriptLinkClass - null, // subscriptLinkValue - '', // target - 15 // sort - ); - - $this->_fillCustomFilters($listCustomFilters, $filtersArray['children']['personal']); - } - - $homeLink = site_url('system/infocenter/InfoCenter/index'); + // Generate the home link with the eventually loaded filter + $homeLink = site_url(self::INFOCENTER_URI.'/'.self::INDEX_PAGE); $prevFilterId = $this->input->get(self::PREV_FILTER_ID); if (isset($prevFilterId)) { $homeLink .= '?'.self::FILTER_ID.'='.$prevFilterId; } - $this->navigationlib->setSessionMenu( - array( - 'freigegeben' => $this->navigationlib->oneLevel( - 'Home', // description - $homeLink, // link - null, // children - 'angle-left', // icon - null, // subscriptDescription - false, // expand - null, // subscriptLinkClass - null, // subscriptLinkValue - '', // target - 1 // sort - ), - 'filters' => $this->navigationlib->oneLevel( - 'Filter', // description - '#', // link - (isset($filtersArray['children']) ? $filtersArray['children'] : ''), // children - '', // icon - true, // expand - null, // subscriptDescription - null, // subscriptLinkClass - null, // subscriptLinkValue - '', // target - 10 // sort - ) + $this->navigationlib->setElementSessionMenu( + self::FREIGEGEBEN_PAGE, + $this->navigationlib->oneLevel( + 'Home', // description + $homeLink, // link + null, // children + 'angle-left', // icon + null, // subscriptDescription + false, // expand + null, // subscriptLinkClass + null, // subscriptLinkValue + '', // target + 1 // sort ) ); } diff --git a/application/libraries/FiltersLib.php b/application/libraries/FiltersLib.php index 5d9fb5b26..0875716d1 100644 --- a/application/libraries/FiltersLib.php +++ b/application/libraries/FiltersLib.php @@ -53,6 +53,8 @@ class FiltersLib const HIDE_HEADER = 'hideHeader'; const HIDE_SAVE = 'hideSave'; + const CUSTOM_MENU = 'customMenu'; // ...to specify if the menu for this filter is custom (true) or not (false) + // Filter operations values const OP_EQUAL = 'equal'; const OP_NOT_EQUAL = 'nequal'; @@ -76,6 +78,15 @@ class FiltersLib const PERMISSION_FILTER_METHOD = 'FilterWidget'; // Name for fake method to be checked by the PermissionLib const PERMISSION_TYPE = 'rw'; + // Name and array keys of the filters menu array + const NAV_MENU_FILTER_KEY = 'filters'; + const NAV_MENU_FILTER_NAME = 'Filters'; + const NAV_MENU_CUSTOM_FILTER_KEY = 'personal_filters'; + const NAV_MENU_CUSTOM_FILTER_NAME = 'Personal filters'; + + // Navigation page parameter name + const NAVIGATION_PAGE = 'navigation_page'; + private $_ci; // Code igniter instance private $_filterUniqueId; // unique id for this filter widget @@ -668,6 +679,99 @@ class FiltersLib return $removeCustomFilter; } + /** + * Generates the filters menu structure array and stores it into the session + */ + public function generateFilterMenu($navigationPage) + { + // Loads the NavigationLib for the current page (given as parameter) + $this->_ci->load->library('NavigationLib', array(FiltersLib::NAVIGATION_PAGE => $navigationPage)); + + $filterMenu = null; + $currentMenu = $this->_ci->navigationlib->getSessionMenu(); // The navigation menu currently stored in session + + $session = $this->getSession(); // The filter currently stored in session (the one that is currently used) + if ($session != null) + { + // Loads the Fitlers model + $this->_ci->load->model('system/Filters_model', 'FiltersModel'); + + // Loads all the filters related to this page (same dataset_name and same app name) + $filters = $this->_ci->FiltersModel->getFiltersByAppDatasetName( + $session[self::APP_PARAMETER], $session[self::DATASET_NAME_PARAMETER] + ); + + // If filters were loaded + if (hasData($filters)) + { + $childrenArray = array(); // contains all the children elements in a menu entry + $childrenPersonalArray = array(); // contains all the children elements in menu enty for personal filters + + // Loops through loaded filters + foreach ($filters->retval as $filter) + { + // Generate a menu entry + $menuEntry = $this->_ci->navigationlib->oneLevel( + $filter->description[0], // description + sprintf( + '%s?%s=%s', + site_url($this->_ci->router->directory.$this->_ci->router->class.'/'.$this->_ci->router->method), + self::FILTER_ID, + $filter->filter_id + ) // link + ); + + // If it is NOT a personal filter + if ($filter->person_id == null) + { + $childrenArray[] = $menuEntry; // adds to filters menu array + } + else // otherwise + { + $menuEntry['subscriptDescription'] = 'Remove'; + $menuEntry['subscriptLinkClass'] = 'remove-custom-filter'; + $menuEntry['subscriptLinkValue'] = $filter->filter_id; + $childrenPersonalArray[] = $menuEntry; // adds to personal filters menu array + } + } + + // If personal filters are present then add the menu entry for them + if (count($childrenPersonalArray) > 0) + { + $childrenArray[self::NAV_MENU_CUSTOM_FILTER_KEY] = $this->_ci->navigationlib->oneLevel( + self::NAV_MENU_CUSTOM_FILTER_NAME, // description + '#', // link + $childrenPersonalArray, // children + '', // icon + true, // expand + null, // subscriptDescription + null, // subscriptLinkClass + null, // subscriptLinkValue + '', // target + 20 // sort + ); + } + + // Adds menu entry for all the filters + $filterMenu = $this->_ci->navigationlib->oneLevel( + self::NAV_MENU_FILTER_NAME, // description + '#', // link + $childrenArray, // children + '', // icon + true, // expand + null, // subscriptDescription + null, // subscriptLinkClass + null, // subscriptLinkValue + '', // target + 10 // sort + ); + + // Sets in the session only the element related to the filters menu + $this->_ci->navigationlib->setElementSessionMenu(FiltersLib::NAV_MENU_FILTER_KEY, $filterMenu); + } + } + } + //------------------------------------------------------------------------------------------------------------------ // Private methods diff --git a/application/libraries/NavigationLib.php b/application/libraries/NavigationLib.php index 812467c78..7cf23267e 100644 --- a/application/libraries/NavigationLib.php +++ b/application/libraries/NavigationLib.php @@ -170,14 +170,11 @@ class NavigationLib { $session = $this->getSessionMenu(); - if (!isset($session[$this->_navigationPage])) - { - $session[$this->_navigationPage] = array(); - } + if ($session == null) $session = array(); - $session[$this->_navigationPage][$name] = $value; + $session[$name] = $value; - setElementSession(self::SESSION_NAME, self::SESSION_MENU_NAME, $session); // stores the single value + setElementSession(self::SESSION_NAME, self::SESSION_MENU_NAME, array($this->_navigationPage => $session)); // stores the single value } /** @@ -187,14 +184,11 @@ class NavigationLib { $session = $this->getSessionHeader(); - if (!isset($session[$this->_navigationPage])) - { - $session[$this->_navigationPage] = array(); - } + if ($session == null) $session = array(); - $session[$this->_navigationPage][$name] = $value; + $session[$name] = $value; - setElementSession(self::SESSION_NAME, self::SESSION_HEADER_NAME, $session); // stores the single value + setElementSession(self::SESSION_NAME, self::SESSION_HEADER_NAME, array($this->_navigationPage => $session)); // stores the single value } //------------------------------------------------------------------------------------------------------------------ diff --git a/application/models/system/Filters_model.php b/application/models/system/Filters_model.php index 20ab6419e..20394b36d 100644 --- a/application/models/system/Filters_model.php +++ b/application/models/system/Filters_model.php @@ -17,6 +17,8 @@ class Filters_model extends DB_Model */ public function getFilterList($app, $dataset_name, $filter_kurzbz) { + $this->resetQuery(); // reset any previous built query + $this->addSelect('filter_id, description'); $this->addOrder('sort', 'ASC'); @@ -36,6 +38,8 @@ class Filters_model extends DB_Model */ public function getCustomFiltersList($app, $dataset_name, $uid) { + $this->resetQuery(); // reset any previous built query + $this->addSelect('filter_id, description'); $this->addJoin('public.tbl_benutzer', 'person_id'); $this->addOrder('sort', 'ASC'); @@ -49,4 +53,23 @@ class Filters_model extends DB_Model return $this->loadWhere($filterParametersArray); } + + /** + * Loads all filters by their app and dataset_name + */ + public function getFiltersByAppDatasetName($app, $dataset_name) + { + $this->resetQuery(); // reset any previous built query + + $this->addSelect('filter_id, person_id, description'); + $this->addOrder('person_id', 'DESC'); // sort descending on column person_id + $this->addOrder('sort', 'ASC'); // sort on column sort + + $filterParametersArray = array( + 'app' => $app, + 'dataset_name' => $dataset_name + ); + + return $this->loadWhere($filterParametersArray); + } } diff --git a/application/views/system/infocenter/infocenterData.php b/application/views/system/infocenter/infocenterData.php index 5b10927dc..f2903aa22 100755 --- a/application/views/system/infocenter/infocenterData.php +++ b/application/views/system/infocenter/infocenterData.php @@ -10,202 +10,208 @@ $LOGTYPE_KURZBZ = '\'Processstate\''; $STATUS_KURZBZ = '\'Wartender\', \'Bewerber\', \'Aufgenommener\', \'Student\''; - $filterWidgetArray = array( - 'query' => ' - WITH currentOrNextStudiensemester AS ( - SELECT ss.studiensemester_kurzbz - FROM public.tbl_studiensemester ss - WHERE ss.ende > NOW() - ORDER BY ss.ende - LIMIT 3 - ) + $query = ' + WITH currentOrNextStudiensemester AS ( + SELECT ss.studiensemester_kurzbz + FROM public.tbl_studiensemester ss + WHERE ss.ende > NOW() + ORDER BY ss.ende + LIMIT 3 + ) - SELECT - p.person_id AS "PersonId", - p.vorname AS "Vorname", - p.nachname AS "Nachname", - p.gebdatum AS "Gebdatum", - p.staatsbuergerschaft AS "Nation", - pl.zeitpunkt AS "LockDate", - pl.lockuser AS "LockUser", - pd.parkdate AS "ParkDate", - ( - SELECT l.zeitpunkt - FROM system.tbl_log l - WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.') - AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') - AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC - LIMIT 1 - ) AS "LastAction", - ( - SELECT l.insertvon - FROM system.tbl_log l - WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.') - AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') - AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC - LIMIT 1 - ) AS "User/Operator", - ( - SELECT pss.studiensemester_kurzbz - FROM public.tbl_prestudentstatus pss - JOIN public.tbl_prestudent ps USING(prestudent_id) - JOIN public.tbl_studiengang sg USING(studiengang_kz) - WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' - AND pss.bestaetigtam IS NULL - AND ps.person_id = p.person_id - AND sg.typ IN ('.$STUDIENGANG_TYP.') - AND pss.studiensemester_kurzbz IN (SELECT cnss.studiensemester_kurzbz FROM currentOrNextStudiensemester cnss) - ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC - LIMIT 1 - ) AS "Studiensemester", - ( - SELECT pss.bewerbung_abgeschicktamum - FROM public.tbl_prestudentstatus pss - JOIN public.tbl_prestudent ps USING(prestudent_id) - JOIN public.tbl_studiengang sg USING(studiengang_kz) - WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' - AND pss.bewerbung_abgeschicktamum IS NOT NULL - AND pss.bestaetigtam IS NULL - AND ps.person_id = p.person_id - AND sg.typ IN ('.$STUDIENGANG_TYP.') - AND pss.studiensemester_kurzbz IN (SELECT cnss.studiensemester_kurzbz FROM currentOrNextStudiensemester cnss) - AND NOT EXISTS ( - SELECT 1 - FROM tbl_prestudentstatus spss - WHERE spss.prestudent_id = pss.prestudent_id - AND spss.status_kurzbz = '.$REJECTED_STATUS.' - AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW()) - ) - ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC - LIMIT 1 - ) AS "SendDate", - ( - SELECT COUNT(*) - FROM public.tbl_prestudentstatus pss - JOIN public.tbl_prestudent ps USING(prestudent_id) - JOIN public.tbl_studiengang sg USING(studiengang_kz) - WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' - AND pss.bewerbung_abgeschicktamum IS NOT NULL - AND pss.bestaetigtam IS NULL - AND ps.person_id = p.person_id - AND sg.typ IN ('.$STUDIENGANG_TYP.') - AND pss.studiensemester_kurzbz IN (SELECT cnss.studiensemester_kurzbz FROM currentOrNextStudiensemester cnss) - AND NOT EXISTS ( - SELECT 1 - FROM tbl_prestudentstatus spss - WHERE spss.prestudent_id = pss.prestudent_id - AND spss.status_kurzbz = '.$REJECTED_STATUS.' - AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW()) - ) - LIMIT 1 - ) AS "AnzahlAbgeschickt", - ( - SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz) || \':\' || sp.orgform_kurzbz), \', \') - FROM public.tbl_prestudentstatus pss - JOIN public.tbl_prestudent ps USING(prestudent_id) - JOIN public.tbl_studiengang sg USING(studiengang_kz) - JOIN lehre.tbl_studienplan sp USING(studienplan_id) - WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' - AND pss.bewerbung_abgeschicktamum IS NOT NULL - AND pss.bestaetigtam IS NULL - AND ps.person_id = p.person_id - AND sg.typ IN ('.$STUDIENGANG_TYP.') - AND pss.studiensemester_kurzbz IN (SELECT cnss.studiensemester_kurzbz FROM currentOrNextStudiensemester cnss) - AND NOT EXISTS ( - SELECT 1 - FROM tbl_prestudentstatus spss - WHERE spss.prestudent_id = pss.prestudent_id - AND spss.status_kurzbz = '.$REJECTED_STATUS.' - AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW()) - ) - LIMIT 1 - ) AS "StgAbgeschickt", - ( - SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz) || \':\' || sp.orgform_kurzbz), \', \') - FROM public.tbl_prestudentstatus pss - JOIN public.tbl_prestudent ps USING(prestudent_id) - JOIN public.tbl_studiengang sg USING(studiengang_kz) - JOIN lehre.tbl_studienplan sp USING(studienplan_id) - WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' - AND pss.bewerbung_abgeschicktamum IS NULL - AND pss.bestaetigtam IS NULL - AND ps.person_id = p.person_id - AND sg.typ IN ('.$STUDIENGANG_TYP.') - AND pss.studiensemester_kurzbz IN (SELECT cnss.studiensemester_kurzbz FROM currentOrNextStudiensemester cnss) - AND NOT EXISTS ( - SELECT 1 - FROM tbl_prestudentstatus spss - WHERE spss.prestudent_id = pss.prestudent_id - AND spss.status_kurzbz = '.$REJECTED_STATUS.' - AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW()) - ) - LIMIT 1 - ) AS "StgNichtAbgeschickt", - ( - SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz) || \':\' || sp.orgform_kurzbz), \', \') - FROM public.tbl_prestudentstatus pss - JOIN public.tbl_prestudent ps USING(prestudent_id) - JOIN public.tbl_studiengang sg USING(studiengang_kz) - JOIN lehre.tbl_studienplan sp USING(studienplan_id) - WHERE pss.status_kurzbz IN ('.$STATUS_KURZBZ.') - AND pss.bewerbung_abgeschicktamum IS NULL - AND ps.person_id = p.person_id - AND sg.typ IN ('.$STUDIENGANG_TYP.') - AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.start >= NOW()) - AND NOT EXISTS ( - SELECT 1 - FROM tbl_prestudentstatus spss - WHERE spss.prestudent_id = pss.prestudent_id - AND spss.status_kurzbz = '.$REJECTED_STATUS.' - AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW()) - ) - LIMIT 1 - ) AS "StgAktiv" - FROM public.tbl_person p - LEFT JOIN ( - SELECT tpl.person_id, - tpl.zeitpunkt, - tpl.uid AS lockuser - FROM system.tbl_person_lock tpl - WHERE tpl.app = '.$APP.' - ) pl USING(person_id) - LEFT JOIN ( - SELECT l.person_id, - l.zeitpunkt AS parkdate - FROM system.tbl_log l - WHERE l.logtype_kurzbz = '.$LOGTYPE_KURZBZ.' - AND l.logdata->>\'name\' = '.$LOGDATA_NAME_PARKED.' - AND l.zeitpunkt >= NOW() - ) pd USING(person_id) - WHERE - EXISTS ( - SELECT 1 - FROM public.tbl_prestudent sps - JOIN public.tbl_studiengang ssg USING(studiengang_kz) - WHERE sps.person_id = p.person_id - AND ssg.typ IN ('.$STUDIENGANG_TYP.') - AND '.$INTERESSENT_STATUS.' = ( - SELECT spss.status_kurzbz - FROM public.tbl_prestudentstatus spss - WHERE spss.prestudent_id = sps.prestudent_id - ORDER BY spss.datum DESC, spss.insertamum DESC, spss.ext_id DESC - LIMIT 1 - ) - AND EXISTS ( - SELECT 1 - FROM public.tbl_prestudentstatus spss - WHERE spss.prestudent_id = sps.prestudent_id - AND spss.status_kurzbz = '.$INTERESSENT_STATUS.' - AND spss.bestaetigtam IS NULL - AND spss.bewerbung_abgeschicktamum IS NOT NULL - AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW()) - ) - ) - ORDER BY "LastAction" ASC - ', + SELECT + p.person_id AS "PersonId", + p.vorname AS "Vorname", + p.nachname AS "Nachname", + p.gebdatum AS "Gebdatum", + p.staatsbuergerschaft AS "Nation", + pl.zeitpunkt AS "LockDate", + pl.lockuser AS "LockUser", + pd.parkdate AS "ParkDate", + ( + SELECT l.zeitpunkt + FROM system.tbl_log l + WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.') + AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') + AND l.person_id = p.person_id + ORDER BY l.zeitpunkt DESC + LIMIT 1 + ) AS "LastAction", + ( + SELECT l.insertvon + FROM system.tbl_log l + WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.') + AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') + AND l.person_id = p.person_id + ORDER BY l.zeitpunkt DESC + LIMIT 1 + ) AS "User/Operator", + ( + SELECT pss.studiensemester_kurzbz + FROM public.tbl_prestudentstatus pss + JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang sg USING(studiengang_kz) + WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' + AND pss.bestaetigtam IS NULL + AND ps.person_id = p.person_id + AND sg.typ IN ('.$STUDIENGANG_TYP.') + AND pss.studiensemester_kurzbz IN (SELECT cnss.studiensemester_kurzbz FROM currentOrNextStudiensemester cnss) + ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC + LIMIT 1 + ) AS "Studiensemester", + ( + SELECT pss.bewerbung_abgeschicktamum + FROM public.tbl_prestudentstatus pss + JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang sg USING(studiengang_kz) + WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' + AND pss.bewerbung_abgeschicktamum IS NOT NULL + AND pss.bestaetigtam IS NULL + AND ps.person_id = p.person_id + AND sg.typ IN ('.$STUDIENGANG_TYP.') + AND pss.studiensemester_kurzbz IN (SELECT cnss.studiensemester_kurzbz FROM currentOrNextStudiensemester cnss) + AND NOT EXISTS ( + SELECT 1 + FROM tbl_prestudentstatus spss + WHERE spss.prestudent_id = pss.prestudent_id + AND spss.status_kurzbz = '.$REJECTED_STATUS.' + AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW()) + ) + ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC + LIMIT 1 + ) AS "SendDate", + ( + SELECT COUNT(*) + FROM public.tbl_prestudentstatus pss + JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang sg USING(studiengang_kz) + WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' + AND pss.bewerbung_abgeschicktamum IS NOT NULL + AND pss.bestaetigtam IS NULL + AND ps.person_id = p.person_id + AND sg.typ IN ('.$STUDIENGANG_TYP.') + AND pss.studiensemester_kurzbz IN (SELECT cnss.studiensemester_kurzbz FROM currentOrNextStudiensemester cnss) + AND NOT EXISTS ( + SELECT 1 + FROM tbl_prestudentstatus spss + WHERE spss.prestudent_id = pss.prestudent_id + AND spss.status_kurzbz = '.$REJECTED_STATUS.' + AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW()) + ) + LIMIT 1 + ) AS "AnzahlAbgeschickt", + ( + SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz) || \':\' || sp.orgform_kurzbz), \', \') + FROM public.tbl_prestudentstatus pss + JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang sg USING(studiengang_kz) + JOIN lehre.tbl_studienplan sp USING(studienplan_id) + WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' + AND pss.bewerbung_abgeschicktamum IS NOT NULL + AND pss.bestaetigtam IS NULL + AND ps.person_id = p.person_id + AND sg.typ IN ('.$STUDIENGANG_TYP.') + AND pss.studiensemester_kurzbz IN (SELECT cnss.studiensemester_kurzbz FROM currentOrNextStudiensemester cnss) + AND NOT EXISTS ( + SELECT 1 + FROM tbl_prestudentstatus spss + WHERE spss.prestudent_id = pss.prestudent_id + AND spss.status_kurzbz = '.$REJECTED_STATUS.' + AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW()) + ) + LIMIT 1 + ) AS "StgAbgeschickt", + ( + SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz) || \':\' || sp.orgform_kurzbz), \', \') + FROM public.tbl_prestudentstatus pss + JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang sg USING(studiengang_kz) + JOIN lehre.tbl_studienplan sp USING(studienplan_id) + WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' + AND pss.bewerbung_abgeschicktamum IS NULL + AND pss.bestaetigtam IS NULL + AND ps.person_id = p.person_id + AND sg.typ IN ('.$STUDIENGANG_TYP.') + AND pss.studiensemester_kurzbz IN (SELECT cnss.studiensemester_kurzbz FROM currentOrNextStudiensemester cnss) + AND NOT EXISTS ( + SELECT 1 + FROM tbl_prestudentstatus spss + WHERE spss.prestudent_id = pss.prestudent_id + AND spss.status_kurzbz = '.$REJECTED_STATUS.' + AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW()) + ) + LIMIT 1 + ) AS "StgNichtAbgeschickt", + ( + SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz) || \':\' || sp.orgform_kurzbz), \', \') + FROM public.tbl_prestudentstatus pss + JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang sg USING(studiengang_kz) + JOIN lehre.tbl_studienplan sp USING(studienplan_id) + WHERE pss.status_kurzbz IN ('.$STATUS_KURZBZ.') + AND pss.bewerbung_abgeschicktamum IS NULL + AND ps.person_id = p.person_id + AND sg.typ IN ('.$STUDIENGANG_TYP.') + AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.start >= NOW()) + AND NOT EXISTS ( + SELECT 1 + FROM tbl_prestudentstatus spss + WHERE spss.prestudent_id = pss.prestudent_id + AND spss.status_kurzbz = '.$REJECTED_STATUS.' + AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW()) + ) + LIMIT 1 + ) AS "StgAktiv" + FROM public.tbl_person p + LEFT JOIN ( + SELECT tpl.person_id, + tpl.zeitpunkt, + tpl.uid AS lockuser + FROM system.tbl_person_lock tpl + WHERE tpl.app = '.$APP.' + ) pl USING(person_id) + LEFT JOIN ( + SELECT l.person_id, + l.zeitpunkt AS parkdate + FROM system.tbl_log l + WHERE l.logtype_kurzbz = '.$LOGTYPE_KURZBZ.' + AND l.logdata->>\'name\' = '.$LOGDATA_NAME_PARKED.' + AND l.zeitpunkt >= NOW() + ) pd USING(person_id) + WHERE + EXISTS ( + SELECT 1 + FROM public.tbl_prestudent sps + JOIN public.tbl_studiengang ssg USING(studiengang_kz) + WHERE sps.person_id = p.person_id + AND ssg.typ IN ('.$STUDIENGANG_TYP.') + AND '.$INTERESSENT_STATUS.' = ( + SELECT spss.status_kurzbz + FROM public.tbl_prestudentstatus spss + WHERE spss.prestudent_id = sps.prestudent_id + ORDER BY spss.datum DESC, spss.insertamum DESC, spss.ext_id DESC + LIMIT 1 + ) + AND EXISTS ( + SELECT 1 + FROM public.tbl_prestudentstatus spss + WHERE spss.prestudent_id = sps.prestudent_id + AND spss.status_kurzbz = '.$INTERESSENT_STATUS.' + AND spss.bestaetigtam IS NULL + AND spss.bewerbung_abgeschicktamum IS NOT NULL + AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW()) + ) + ) + ORDER BY "LastAction" ASC'; + + $filterWidgetArray = array( + 'query' => $query, + 'app' => 'infocenter', + 'datasetName' => 'overview', + 'filterKurzbz' => 'InfoCenterSentApplicationAll', + 'filter_id' => $this->input->get('filter_id'), 'requiredPermissions' => 'infocenter', + 'customMenu' => true, 'checkboxes' => 'PersonId', 'additionalColumns' => array('Details'), 'columnsAliases' => array( @@ -317,10 +323,5 @@ } ); - $filterWidgetArray['app'] = 'infocenter'; - $filterWidgetArray['datasetName'] = 'overview'; - $filterWidgetArray['filterKurzbz'] = 'InfoCenterSentApplicationAll'; - $filterWidgetArray['filter_id'] = $this->input->get('filter_id'); - echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray); ?> diff --git a/application/views/system/infocenter/infocenterFreigegebenData.php b/application/views/system/infocenter/infocenterFreigegebenData.php index 997745e59..6f3339660 100644 --- a/application/views/system/infocenter/infocenterFreigegebenData.php +++ b/application/views/system/infocenter/infocenterFreigegebenData.php @@ -6,110 +6,115 @@ $TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\''; $LOGDATA_NAME = '\'Login with code\', \'New application\''; - $filterWidgetArray = array( - 'query' => ' - SELECT - p.person_id AS "PersonId", - p.vorname AS "Vorname", - p.nachname AS "Nachname", - p.gebdatum AS "Gebdatum", - p.staatsbuergerschaft AS "Nation", - pl.zeitpunkt AS "LockDate", - pl.lockuser AS "LockUser", - ( - SELECT l.zeitpunkt - FROM system.tbl_log l - WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.') - AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') - AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC - LIMIT 1 - ) AS "LastAction", - ( - SELECT l.insertvon - FROM system.tbl_log l - WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.') - AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') - AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC - LIMIT 1 - ) AS "User/Operator", - ( - SELECT pss.studiensemester_kurzbz - FROM public.tbl_prestudentstatus pss - JOIN public.tbl_prestudent ps USING(prestudent_id) - JOIN public.tbl_studiengang sg USING(studiengang_kz) - WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' - AND ps.person_id = p.person_id - AND sg.typ IN ('.$STUDIENGANG_TYP.') - AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende >= NOW()) - ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC - LIMIT 1 - ) AS "Studiensemester", - ( - SELECT pss.bewerbung_abgeschicktamum - FROM public.tbl_prestudentstatus pss - JOIN public.tbl_prestudent ps USING(prestudent_id) - JOIN public.tbl_studiengang sg USING(studiengang_kz) - WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' - AND pss.bewerbung_abgeschicktamum IS NOT NULL - AND ps.person_id = p.person_id - AND sg.typ IN ('.$STUDIENGANG_TYP.') - AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende >= NOW()) - ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC - LIMIT 1 - ) AS "SendDate", - ( - SELECT COUNT(*) - FROM public.tbl_prestudentstatus pss - JOIN public.tbl_prestudent ps USING(prestudent_id) - JOIN public.tbl_studiengang sg USING(studiengang_kz) - WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' - AND pss.bewerbung_abgeschicktamum IS NOT NULL - AND ps.person_id = p.person_id - AND sg.typ IN ('.$STUDIENGANG_TYP.') - AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende >= NOW()) - LIMIT 1 - ) AS "AnzahlAbgeschickt", - ( - SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz)), \', \') - FROM public.tbl_prestudentstatus pss - JOIN public.tbl_prestudent ps USING(prestudent_id) - JOIN public.tbl_studiengang sg USING(studiengang_kz) - WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' - AND pss.bewerbung_abgeschicktamum IS NOT NULL - AND ps.person_id = p.person_id - AND sg.typ IN ('.$STUDIENGANG_TYP.') - AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende >= NOW()) - LIMIT 1 - ) AS "StgAbgeschickt" - FROM public.tbl_person p - LEFT JOIN ( - SELECT tpl.person_id, - tpl.zeitpunkt, - tpl.uid AS lockuser - FROM system.tbl_person_lock tpl - WHERE tpl.app = '.$APP.' - ) pl USING(person_id) - WHERE - EXISTS ( - SELECT 1 - FROM public.tbl_prestudent ps - JOIN public.tbl_studiengang sg USING(studiengang_kz) - WHERE ps.person_id = p.person_id - AND sg.typ IN ('.$STUDIENGANG_TYP.') - AND EXISTS ( - SELECT 1 - FROM public.tbl_prestudentstatus pss - WHERE pss.prestudent_id = ps.prestudent_id - AND pss.status_kurzbz = '.$INTERESSENT_STATUS.' - AND pss.bestaetigtam IS NOT NULL - AND pss.bewerbung_abgeschicktamum IS NOT NULL - AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende >= NOW()) - ) + $query = ' + SELECT + p.person_id AS "PersonId", + p.vorname AS "Vorname", + p.nachname AS "Nachname", + p.gebdatum AS "Gebdatum", + p.staatsbuergerschaft AS "Nation", + pl.zeitpunkt AS "LockDate", + pl.lockuser AS "LockUser", + ( + SELECT l.zeitpunkt + FROM system.tbl_log l + WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.') + AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') + AND l.person_id = p.person_id + ORDER BY l.zeitpunkt DESC + LIMIT 1 + ) AS "LastAction", + ( + SELECT l.insertvon + FROM system.tbl_log l + WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.') + AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') + AND l.person_id = p.person_id + ORDER BY l.zeitpunkt DESC + LIMIT 1 + ) AS "User/Operator", + ( + SELECT pss.studiensemester_kurzbz + FROM public.tbl_prestudentstatus pss + JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang sg USING(studiengang_kz) + WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' + AND ps.person_id = p.person_id + AND sg.typ IN ('.$STUDIENGANG_TYP.') + AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende >= NOW()) + ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC + LIMIT 1 + ) AS "Studiensemester", + ( + SELECT pss.bewerbung_abgeschicktamum + FROM public.tbl_prestudentstatus pss + JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang sg USING(studiengang_kz) + WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' + AND pss.bewerbung_abgeschicktamum IS NOT NULL + AND ps.person_id = p.person_id + AND sg.typ IN ('.$STUDIENGANG_TYP.') + AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende >= NOW()) + ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC + LIMIT 1 + ) AS "SendDate", + ( + SELECT COUNT(*) + FROM public.tbl_prestudentstatus pss + JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang sg USING(studiengang_kz) + WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' + AND pss.bewerbung_abgeschicktamum IS NOT NULL + AND ps.person_id = p.person_id + AND sg.typ IN ('.$STUDIENGANG_TYP.') + AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende >= NOW()) + LIMIT 1 + ) AS "AnzahlAbgeschickt", + ( + SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz)), \', \') + FROM public.tbl_prestudentstatus pss + JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang sg USING(studiengang_kz) + WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' + AND pss.bewerbung_abgeschicktamum IS NOT NULL + AND ps.person_id = p.person_id + AND sg.typ IN ('.$STUDIENGANG_TYP.') + AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende >= NOW()) + LIMIT 1 + ) AS "StgAbgeschickt" + FROM public.tbl_person p + LEFT JOIN ( + SELECT tpl.person_id, + tpl.zeitpunkt, + tpl.uid AS lockuser + FROM system.tbl_person_lock tpl + WHERE tpl.app = '.$APP.' + ) pl USING(person_id) + WHERE + EXISTS ( + SELECT 1 + FROM public.tbl_prestudent ps + JOIN public.tbl_studiengang sg USING(studiengang_kz) + WHERE ps.person_id = p.person_id + AND sg.typ IN ('.$STUDIENGANG_TYP.') + AND EXISTS ( + SELECT 1 + FROM public.tbl_prestudentstatus pss + WHERE pss.prestudent_id = ps.prestudent_id + AND pss.status_kurzbz = '.$INTERESSENT_STATUS.' + AND pss.bestaetigtam IS NOT NULL + AND pss.bewerbung_abgeschicktamum IS NOT NULL + AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende >= NOW()) ) - ORDER BY "LastAction" DESC - ', + ) + ORDER BY "LastAction" DESC'; + + $filterWidgetArray = array( + 'query' => $query, + 'app' => 'infocenter', + 'datasetName' => 'freigegeben', + 'filterKurzbz' => 'InfoCenterFreigegeben5days', + 'filter_id' => $this->input->get('filter_id'), 'requiredPermissions' => 'infocenter', 'checkboxes' => 'PersonId', 'additionalColumns' => array('Details'), @@ -194,10 +199,5 @@ } ); - $filterWidgetArray['app'] = 'infocenter'; - $filterWidgetArray['datasetName'] = 'freigegeben'; - $filterWidgetArray['filterKurzbz'] = 'InfoCenterFreigegeben5days'; - $filterWidgetArray['filter_id'] = $this->input->get('filter_id'); - echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray); ?> diff --git a/application/widgets/FilterWidget.php b/application/widgets/FilterWidget.php index 68b92dc9a..b8e55b587 100644 --- a/application/widgets/FilterWidget.php +++ b/application/widgets/FilterWidget.php @@ -43,6 +43,8 @@ class FilterWidget extends Widget private $_hideHeader; private $_hideSave; + private $_customMenu; // if true then method _setFilterMenu is NOT called + private static $_FilterWidgetInstance; // static property that contains the instance of itself /** @@ -60,7 +62,13 @@ class FilterWidget extends Widget // Let's start if it's allowed // NOTE: If it is NOT allowed then no data are loaded - if ($this->filterslib->isAllowed($this->_requiredPermissions)) $this->_startFilterWidget(); + if ($this->filterslib->isAllowed($this->_requiredPermissions)) + { + $this->_startFilterWidget(); + + // If a custom menu is not used, then default menu is used + if ($this->_customMenu != true) $this->_setFilterMenu(); + } } //------------------------------------------------------------------------------------------------------------------ @@ -144,6 +152,7 @@ class FilterWidget extends Widget $this->_checkboxes = null; $this->_hideHeader = null; $this->_hideSave = null; + $this->_customMenu = null; // Retrived the required permissions parameter if present if (isset($args[FiltersLib::REQUIRED_PERMISSIONS_PARAMETER])) @@ -224,6 +233,11 @@ class FilterWidget extends Widget { $this->_hideSave = $args[FiltersLib::HIDE_SAVE]; } + + if (isset($args[FiltersLib::CUSTOM_MENU]) && is_bool($args[FiltersLib::CUSTOM_MENU])) + { + $this->_customMenu = $args[FiltersLib::CUSTOM_MENU]; + } } /** @@ -364,6 +378,17 @@ class FilterWidget extends Widget $this->filterslib->setElementSession(FiltersLib::REQUIRED_PERMISSIONS_PARAMETER, $this->_requiredPermissions); } + /** + * + */ + private function _setFilterMenu() + { + // Generates the filters structure array + $filterMenu = $this->filterslib->generateFilterMenu( + $this->router->directory.$this->router->class.'/'.$this->router->method + ); + } + /** * Calls the method _markRow and _formatRow to marks rows using markRow and format rowns using formatRow * NOTE: this method operates directly on the retrived dataset: parameter passed by reference diff --git a/public/js/FilterWidget.js b/public/js/FilterWidget.js index 0015f6f75..a727a9a19 100644 --- a/public/js/FilterWidget.js +++ b/public/js/FilterWidget.js @@ -9,6 +9,23 @@ * @since Version 1.0.0 */ + /** + * Global function used by FilterWidget JS to refresh the side menu + * NOTE: it is called from the FilterWidget JS therefore must be a global function + * It may be overwritten by a custom refreshSideMenuHook included in a javascript which will be loaded after this one + * The given parameters, filter_page and navigation_page, are required + */ +function refreshSideMenuHook() +{ + FHC_NavigationWidget.refreshSideMenuHook( + 'system/Filters/setNavigationMenu', + { + filter_page: FHC_FilterWidget.getFilterPage(), + navigation_page: FHC_NavigationWidget.getNavigationPage() + } + ); +} + /** * Global function used by NavigationWidget JS to bind events to side menu elements * NOTE: it is called from the NavigationWidget JS therefore must be a global function diff --git a/public/js/NavigationWidget.js b/public/js/NavigationWidget.js index 58abf1c8b..f4c0f9f9d 100644 --- a/public/js/NavigationWidget.js +++ b/public/js/NavigationWidget.js @@ -25,7 +25,7 @@ var FHC_NavigationWidget = { FHC_AjaxClient.ajaxCallGet( 'system/Navigation/header', { - navigation_page: FHC_NavigationWidget._getNavigationWidgetCalled() + navigation_page: FHC_NavigationWidget.getNavigationPage() }, { successCallback: function(data, textStatus, jqXHR) { @@ -54,7 +54,7 @@ var FHC_NavigationWidget = { FHC_AjaxClient.ajaxCallGet( 'system/Navigation/menu', { - navigation_page: FHC_NavigationWidget._getNavigationWidgetCalled() + navigation_page: FHC_NavigationWidget.getNavigationPage() }, { successCallback: function(data, textStatus, jqXHR) { @@ -87,13 +87,20 @@ var FHC_NavigationWidget = { /** * Calls URL to retrive a refreshed menu array */ - refreshSideMenuHook: function(url) { + refreshSideMenuHook: function(url, params = null) { + + var callParameters = {}; + + if (params != null && typeof params == "object") + { + callParameters = params; + } + + callParameters.navigation_page = FHC_NavigationWidget.getNavigationPage(); FHC_AjaxClient.ajaxCallGet( url, - { - navigation_page: FHC_NavigationWidget._getNavigationWidgetCalled() - }, + callParameters, { successCallback: function(data, textStatus, jqXHR) { FHC_NavigationWidget.renderSideMenu(); @@ -105,6 +112,14 @@ var FHC_NavigationWidget = { ); }, + /** + * Returns the URI of the caller + */ + getNavigationPage: function() { + + return FHC_JS_DATA_STORAGE_OBJECT.called_path + "/" + FHC_JS_DATA_STORAGE_OBJECT.called_method; + }, + //------------------------------------------------------------------------------------------------------------------ // Private methods @@ -266,13 +281,6 @@ var FHC_NavigationWidget = { return strLeftMenu; }, - /** - * Returns the URI of the caller - */ - _getNavigationWidgetCalled: function() { - return FHC_JS_DATA_STORAGE_OBJECT.called_path + "/" + FHC_JS_DATA_STORAGE_OBJECT.called_method; - }, - /** * Generates the menu entry link within the fhc_controller_id if present */ diff --git a/public/js/infocenter/infocenterPersonDataset.js b/public/js/infocenter/infocenterPersonDataset.js index 2eb1eeb76..bcbca4152 100644 --- a/public/js/infocenter/infocenterPersonDataset.js +++ b/public/js/infocenter/infocenterPersonDataset.js @@ -5,10 +5,14 @@ /** * Global function used by FilterWidget JS to refresh the side menu * NOTE: it is called from the FilterWidget JS therefore must be a global function +* To be called only if the page has a customized menu (currently only index) */ -function refreshSideMenuHook() +if (FHC_JS_DATA_STORAGE_OBJECT.called_method == 'index') { - FHC_NavigationWidget.refreshSideMenuHook('system/infocenter/InfoCenter/setNavigationMenuArrayJson'); + function refreshSideMenuHook() + { + FHC_NavigationWidget.refreshSideMenuHook('system/infocenter/InfoCenter/setNavigationMenuArrayJson'); + } } /**