diff --git a/application/config/navigation.php b/application/config/navigation.php index e0bf33348..86dc3bdde 100644 --- a/application/config/navigation.php +++ b/application/config/navigation.php @@ -61,21 +61,13 @@ $config['navigation_menu']['Vilesci/index'] = array( $config['navigation_menu']['system/infocenter/InfoCenter/index'] = array( 'Freigegeben' => array( - 'link' => base_url('index.ci.php/system/infocenter/InfoCenter/infocenterFreigegeben'), + 'link' => base_url('index.ci.php/system/infocenter/InfoCenter/freigegeben'), 'description' => 'Freigegeben', 'icon' => 'thumbs-up' ) ); -$config['navigation_menu']['system/infocenter/InfoCenter/showDetails'] = array( - 'Freigegeben' => array( - 'link' => base_url('index.ci.php/system/infocenter/InfoCenter/infocenterFreigegeben'), - 'description' => 'Freigegeben', - 'icon' => 'thumbs-up' - ) -); - -$config['navigation_menu']['system/infocenter/InfoCenter/infocenterFreigegeben'] = array( +$config['navigation_menu']['system/infocenter/InfoCenter/freigegeben'] = array( 'Zurück' => array( 'link' => base_url('index.ci.php/system/infocenter/InfoCenter/index'), 'description' => 'Home', diff --git a/application/controllers/system/Navigation.php b/application/controllers/system/Navigation.php index 65f311c66..d463017e7 100644 --- a/application/controllers/system/Navigation.php +++ b/application/controllers/system/Navigation.php @@ -3,178 +3,82 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); /** - * + * This controller operates between (interface) the JS (GUI) and the NavigationLib (back-end) + * Provides data to the ajax get calls about the filter + * This controller works with JSON calls on the HTTP GET or POST and the output is always JSON */ -class Navigation extends VileSci_Controller +class Navigation extends FHC_Controller { - const SESSION_NAME = 'NAVIGATION_MENU'; + const NAVIGATION_PAGE_PARAM = 'navigation_page'; // Navigation page parameter name /** - * Constructor + * Loads the NavigationLib where the used logic lies */ public function __construct() { - parent::__construct(); + parent::__construct(); // parents constructor - $this->config->load('navigation'); - - // Load session library - $this->load->library('session'); - $this->load->library('ExtensionsLib'); + $this->_loadNavigationLib(); // Loads the NavigationLib with parameters } + //------------------------------------------------------------------------------------------------------------------ + // Public methods + /** * This function creates the left Menu for each Page - * @param navigation_widget_called GET Parameter witch holds the currently called Page + * @param NAVIGATION_PAGE_PARAM GET Parameter witch holds the currently called Page * @return JSON object with the Menu Entries */ public function menu() { - $navigation_widget_called = $this->input->get('navigation_widget_called'); - $json = array(); + $menuArray = $this->navigationlib->getMenuArray($this->input->get(self::NAVIGATION_PAGE_PARAM)); - if (isset($navigation_widget_called)) - { - // Get Menu Entries of the Core - $navigationMenuArray = $this->config->item('navigation_menu'); - $json = $this->wildcardsearch($navigationMenuArray, $navigation_widget_called); - - // Load Menu Entries of Extensions - $extensions = $this->extensionslib->getInstalledExtensions(); - if(hasData($extensions)) - { - $json_extension = array(); - foreach($extensions->retval as $ext) - { - $filename = APPPATH.'config/'.ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$ext->name.'/navigation.php'; - if (file_exists($filename)) - { - unset($config); - include($filename); - if(isset($config['navigation_menu']) && is_array($config['navigation_menu'])) - { - $json_extension = array_merge_recursive($json_extension, $this->wildcardsearch($config['navigation_menu'], $navigation_widget_called)); - } - } - } - // Merge Extension Menuentries with the Core Entries - $json = array_merge_recursive($json, $json_extension); - } - - // Load dynamic Menu Entries from Session - if (isset($_SESSION['navigation_menu'])) - { - $navigationMenuSessionArray = $_SESSION['navigation_menu']; - - if (isset($navigationMenuSessionArray) && is_array($navigationMenuSessionArray)) - { - if (isset($navigationMenuSessionArray[$navigation_widget_called])) - { - $json = array_merge_recursive($json, $navigationMenuSessionArray[$navigation_widget_called]); - } - } - } - } - - $this->output->set_content_type('application/json')->set_output(json_encode($json)); + $this->outputJsonSuccess($menuArray); } /** * This function creates the Top Menu for each Page - * @param navigation_widget_called GET Parameter witch holds the currently called Page + * @param NAVIGATION_PAGE_PARAM GET Parameter witch holds the currently called Page * @return JSON object with the Menu Entries */ public function header() { - $navigation_widget_called = $this->input->get('navigation_widget_called'); - $json = array(); + $headerArray = $this->navigationlib->getHeaderArray($this->input->get(self::NAVIGATION_PAGE_PARAM)); - if (isset($navigation_widget_called)) - { - // Load Header Entries of Core - $navigationHeaderArray = $this->config->item('navigation_header'); - $json = $this->wildcardsearch($navigationHeaderArray, $navigation_widget_called); - - // Load Header Entries of Extensions - $extensions = $this->extensionslib->getInstalledExtensions(); - if(hasData($extensions)) - { - $json_extension = array(); - foreach($extensions->retval as $ext) - { - $filename = APPPATH.'config/'.ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$ext->name.'/navigation.php'; - if (file_exists($filename)) - { - unset($config); - include($filename); - if(isset($config['navigation_header']) && is_array($config['navigation_header'])) - { - $json_extension = array_merge_recursive($json_extension, $this->wildcardsearch($config['navigation_header'], $navigation_widget_called)); - } - } - } - $json = array_merge_recursive($json, $json_extension); - } - - // Load dynamic Header Entries from Session - if (isset($_SESSION['navigation_header'])) - { - $navigationHeaderSessionArray = $_SESSION['navigation_header']; - - if (isset($navigationHeaderSessionArray) && is_array($navigationHeaderSessionArray)) - { - if (isset($navigationHeaderSessionArray[$navigation_widget_called])) - { - $jsontmp = $this->wildcardsearch($navigationHeaderSessionArray, $navigation_widget_called); - $json = array_merge_recursive($json, $jsontmp); - } - } - } - } - - $this->output->set_content_type('application/json')->set_output(json_encode($json)); + $this->outputJsonSuccess($headerArray); } + //------------------------------------------------------------------------------------------------------------------ + // Private methods + /** - * Searches a Menuentry. If there is no exact entry it searches for Wildcard Entries with a Star - * Example: - * Searching for /system/foo/index will Match the following Menuentries: - * /system/foo/index - * /system/foo/* - * /system/* - * * - * - * @param $navigationArray Array to Search in. - * @param $navigation_widget_called Navigation to search for. - * @return Navigation Array if found, empty array otherwise + * Loads the FiltersLib with the NAVIGATION_PAGE_PARAM parameter + * If the parameter NAVIGATION_PAGE_PARAM is not given then the execution of the controller is terminated and + * an error message is printed */ - private function wildcardsearch($navigationArray, $navigation_widget_called) + private function _loadNavigationLib() { - // Sort Navigation to have them in correct order - krsort($navigationArray); - - // 100% match found - if(isset($navigationArray[$navigation_widget_called])) + // If the parameter NAVIGATION_PAGE_PARAM is present in the HTTP GET or POST + if (isset($_GET[self::NAVIGATION_PAGE_PARAM]) || isset($_POST[self::NAVIGATION_PAGE_PARAM])) { - return $navigationArray[$navigation_widget_called]; - } - else - { - foreach($navigationArray as $key=>$row) + // If it is present in the HTTP GET + if (isset($_GET[self::NAVIGATION_PAGE_PARAM])) { - // Search for * Entries - if(mb_strpos($key, '*') === 0 || mb_strpos($key, '*') === mb_strlen($key) - 1) - { - // Take * Entry if Matches - $search = mb_substr($key, 0, -1); - if($search == '' || mb_strpos($navigation_widget_called, $search) === 0) - { - return $row; - } - } + $navigationPage = $this->input->get(self::NAVIGATION_PAGE_PARAM); // is retrived from the HTTP GET + } + elseif (isset($_POST[self::NAVIGATION_PAGE_PARAM])) // Else if it is present in the HTTP POST + { + $navigationPage = $this->input->post(self::NAVIGATION_PAGE_PARAM); // is retrived from the HTTP POST } - } - return array(); + // Loads the FiltersLib that contains all the used logic + $this->load->library('NavigationLib', array(self::NAVIGATION_PAGE_PARAM => $navigationPage)); + } + else // Otherwise an error will be written in the output + { + // NOTE: Used echo to speed up the output before the exit otherwise it's not shown + echo 'Parameter "'.self::NAVIGATION_PAGE_PARAM.'" not provided!'; + exit; + } } } diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index ed1f1d37d..285208e51 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -3,7 +3,7 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); /** - * Also shows infocenter-related data for a person and its prestudents, enables document and zgv checks, + * Shows infocenter-related data for a person and its prestudents, enables document and zgv checks, * displays and saves Notizen for a person, logs infocenter-related actions for a person */ class InfoCenter extends FHC_Controller @@ -11,10 +11,10 @@ class InfoCenter extends FHC_Controller // App and Verarbeitungstaetigkeit name for logging const APP = 'infocenter'; const TAETIGKEIT = 'bewerbung'; - const FILTER_ID = 'filter_id'; - // URL prefix for this controller - const URL_PREFIX = '/system/infocenter/InfoCenter'; + const URL_PREFIX = '/system/infocenter/InfoCenter'; // URL prefix for this controller + + private $_uid; // contains the UID of the logged user // Used to log with PersonLogLib private $logparams = array( @@ -53,7 +53,6 @@ class InfoCenter extends FHC_Controller 'success' => null ) ); - private $uid; // contains the UID of the logged user /** * Constructor @@ -74,7 +73,6 @@ class InfoCenter extends FHC_Controller $this->load->model('system/personLock_model', 'PersonLockModel'); // Loads libraries - $this->load->library('DmsLib'); $this->load->library('PersonLogLib'); $this->load->library('WidgetLib'); @@ -96,10 +94,6 @@ class InfoCenter extends FHC_Controller show_error('You have no Permission! You need Infocenter Role'); $this->setControllerId(); // sets the controller id - - $this->fhc_controller_id = $this->getControllerId(); - - $this->setNavigationMenuArray(); // sets property navigationMenuArray } // ----------------------------------------------------------------------------------------------------------------- @@ -110,20 +104,28 @@ class InfoCenter extends FHC_Controller */ public function index() { - $this->load->view('system/infocenter/infocenter.php', array('fhc_controller_id' => $this->fhc_controller_id)); + $this->setNavigationMenuIndex(); // define the navigation menu for this page + + $this->load->view('system/infocenter/infocenter.php'); } - public function infocenterFreigegeben() + public function freigegeben() { - $this->load->view('system/infocenter/infocenterFreigegeben.php', array('fhc_controller_id' => $this->fhc_controller_id)); + $this->setNavigationMenuFreigegeben(); // define the navigation menu for this page + + $this->load->view('system/infocenter/infocenterFreigegeben.php'); } /** * Initialization function, gets person and prestudent data and loads the view with the data * @param $person_id */ - public function showDetails($person_id) + public function showDetails() { + $this->setNavigationMenuShowDetails(); + + $person_id = $this->input->get('person_id'); + if (!is_numeric($person_id)) show_error('person id is not numeric!'); @@ -135,13 +137,11 @@ class InfoCenter extends FHC_Controller if (empty($personexists->retval)) show_error('person does not exist!'); - $show_lock_link_get = $this->input->get('show_lock_link'); - $show_lock_link = !isset($show_lock_link_get) || $show_lock_link_get === '1'; - - if ($show_lock_link) + $origin_page = $this->input->get('origin_page'); + if ($origin_page == 'index') { - //mark person as locked for editing - $result = $this->PersonLockModel->lockPerson($person_id, $this->uid, self::APP); + // mark person as locked for editing + $result = $this->PersonLockModel->lockPerson($person_id, $this->_uid, self::APP); if (isError($result)) show_error($result->retval); @@ -152,11 +152,11 @@ class InfoCenter extends FHC_Controller $data = array_merge( $persondata, - $prestudentdata, - array('show_lock_link' => $show_lock_link) + $prestudentdata ); - $data['fhc_controller_id'] = $this->fhc_controller_id; + $data['fhc_controller_id'] = $this->getControllerId(); + $data['origin_page'] = $origin_page; $this->load->view('system/infocenter/infocenterDetails.php', $data); } @@ -172,7 +172,7 @@ class InfoCenter extends FHC_Controller if (isError($result)) show_error($result->retval); - redirect(self::URL_PREFIX.'?fhc_controller_id='.$this->fhc_controller_id); + redirect(self::URL_PREFIX.'?fhc_controller_id='.$this->getControllerId()); } /** @@ -318,7 +318,6 @@ class InfoCenter extends FHC_Controller public function saveAbsage($prestudent_id) { $statusgrund = $this->input->post('statusgrund'); - $this->fhc_controller_id = $this->input->post('fhc_controller_id'); $lastStatus = $this->PrestudentstatusModel->getLastStatus($prestudent_id); @@ -340,7 +339,7 @@ class InfoCenter extends FHC_Controller 'studienplan_id' => $lastStatus->retval[0]->studienplan_id, 'status_kurzbz' => 'Abgewiesener', 'statusgrund_id' => $statusgrund, - 'insertvon' => $this->uid, + 'insertvon' => $this->_uid, 'insertamum' => date('Y-m-d H:i:s') ) ); @@ -396,9 +395,9 @@ class InfoCenter extends FHC_Controller 'ausbildungssemester' => $lastStatus->ausbildungssemester ), array( - 'bestaetigtvon' => $this->uid, + 'bestaetigtvon' => $this->_uid, 'bestaetigtam' => date('Y-m-d'), - 'updatevon' => $this->uid, + 'updatevon' => $this->_uid, 'updateamum' => date('Y-m-d H:i:s') ) ); @@ -454,7 +453,7 @@ class InfoCenter extends FHC_Controller $text = $this->input->post('notiz'); $erledigt = false; - $result = $this->NotizModel->addNotizForPerson($person_id, $titel, $text, $erledigt, $this->uid); + $result = $this->NotizModel->addNotizForPerson($person_id, $titel, $text, $erledigt, $this->_uid); if (isSuccess($result)) { @@ -482,9 +481,9 @@ class InfoCenter extends FHC_Controller array( 'titel' => $titel, 'text' => $text, - 'verfasser_uid' => $this->uid, + 'verfasser_uid' => $this->_uid, "updateamum" => 'NOW()', - "updatevon" => $this->uid + "updatevon" => $this->_uid ) ); @@ -531,6 +530,8 @@ class InfoCenter extends FHC_Controller */ public function outputAkteContent($akte_id) { + $this->load->library('DmsLib'); + $akte = $this->AkteModel->load($akte_id); if (isError($akte)) @@ -574,7 +575,7 @@ class InfoCenter extends FHC_Controller $person_id = $this->input->post('person_id'); $date = $this->input->post('parkdate'); - $result = $this->personloglib->park($person_id, date_format(date_create($date), 'Y-m-d'), self::TAETIGKEIT, self::APP, null, $this->uid); + $result = $this->personloglib->park($person_id, date_format(date_create($date), 'Y-m-d'), self::TAETIGKEIT, self::APP, null, $this->_uid); $this->output ->set_content_type('application/json') @@ -624,18 +625,21 @@ class InfoCenter extends FHC_Controller */ private function _setAuthUID() { - $this->uid = getAuthUID(); + $this->_uid = getAuthUID(); - if (!$this->uid) show_error('User authentification failed'); + if (!$this->_uid) show_error('User authentification failed'); } /** - * + * Define the navigation menu for the index page */ - public function setNavigationMenuArray() + public function setNavigationMenuIndex() { + $this->load->library('NavigationLib', array('navigation_page' => 'system/infocenter/InfoCenter/index')); + $listFiltersSent = array(); $listFiltersNotSent = array(); + $listCustomFilters = array(); $filtersSent = $this->FiltersModel->getFilterList('infocenter', 'PersonActions', '%InfoCenterSentApplication%'); if (hasData($filtersSent)) @@ -659,7 +663,7 @@ class InfoCenter extends FHC_Controller } } - $customFilters = $this->FiltersModel->getCustomFiltersList('infocenter', 'PersonActions', $this->uid); + $customFilters = $this->FiltersModel->getCustomFiltersList('infocenter', 'PersonActions', $this->_uid); if (hasData($customFilters)) { for ($filtersCounter = 0; $filtersCounter < count($customFilters->retval); $filtersCounter++) @@ -670,58 +674,139 @@ class InfoCenter extends FHC_Controller } } - $filtersarray = array( - 'abgeschickt' => array( - 'link' => '#', - 'description' => ucfirst($this->p->t('global', 'abgeschickt')), - 'expand' => true, - 'children' => array() - ), - 'nichtabgeschickt' => array( - 'link' => '#', - 'description' => ucfirst($this->p->t('global', 'nichtAbgeschickt')), - 'expand' => true, - 'children' => array() - ) + $filtersArray = array(); + + $filtersArray['abgeschickt'] = $this->navigationlib->oneLevel( + ucfirst($this->p->t('global', 'abgeschickt')), // description + '#', // link + array(), // children + '', // icon + true // expand ); - $this->_fillFilters($listFiltersSent, $filtersarray['abgeschickt']); - $this->_fillFilters($listFiltersNotSent, $filtersarray['nichtabgeschickt']); + $filtersArray['nichtabgeschickt'] = $this->navigationlib->oneLevel( + ucfirst($this->p->t('global', 'nichtAbgeschickt')), // description + '#', // link + array(), // children + '', // icon + true // expand + ); - if (isset($listCustomFilters) && is_array($listCustomFilters) && count($listCustomFilters) > 0) + $this->_fillFilters($listFiltersSent, $filtersArray['abgeschickt']); + $this->_fillFilters($listFiltersNotSent, $filtersArray['nichtabgeschickt']); + + if (count($listCustomFilters) > 0) { - $filtersarray['personal'] = array( - 'link' => '#', - 'description' => 'Personal filters', - 'expand' => true, - 'children' => array() + $filtersArray['personal'] = $this->navigationlib->oneLevel( + 'Personal filters', // description + '#', // link + array(), // children + '', // icon + true // expand ); - $this->_fillCustomFilters($listCustomFilters, $filtersarray['personal']); + $this->_fillCustomFilters($listCustomFilters, $filtersArray['personal']); } - if (!isset($_SESSION['navigation_menu'])) - { - $_SESSION['navigation_menu'] = array(); - } - - $_SESSION['navigation_menu']['system/infocenter/InfoCenter/index'] = array( - 'filters' => array( - 'link' => '#', - 'description' => 'Filter', - 'icon' => 'filter', - 'expand' => true, - 'children' => $filtersarray + $this->navigationlib->setSessionMenu( + array( + 'filters' => $this->navigationlib->oneLevel( + 'Filter', // description + '#', // link + $filtersArray, // children + '', // icon + true // expand + ) ) ); + } - $_SESSION['navigation_menu']['system/infocenter/InfoCenter/showDetails'] = array( - 'filters' => array( - 'link' => '#', - 'description' => 'Filter', - 'icon' => 'filter', - 'expand' => true, - 'children' => $filtersarray + /** + * Define the navigation menu for the showDetails page + */ + public function setNavigationMenuShowDetails() + { + $this->load->library('NavigationLib', array('navigation_page' => 'system/infocenter/InfoCenter/showDetails')); + + $origin_page = $this->input->get('origin_page'); + + $link = base_url('index.ci.php/system/infocenter/InfoCenter/index'); + if ($origin_page == 'freigegeben') + { + $link = base_url('index.ci.php/system/infocenter/InfoCenter/freigegeben'); + } + + $this->navigationlib->setSessionMenu( + array( + 'back' => $this->navigationlib->oneLevel( + '<< Züruck', // description + $link, // link + array(), // children + '', // icon + true // expand + ) + ) + ); + } + + /** + * Define the navigation menu for the freigegeben page + */ + public function setNavigationMenuFreigegeben() + { + $this->load->library('NavigationLib', array('navigation_page' => 'system/infocenter/InfoCenter/freigegeben')); + + $listFilters = array(); + $listCustomFilters = array(); + + $filters = $this->FiltersModel->getFilterList('infocenter', 'PersonActions', '%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', 'PersonActions', $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(); + + $this->_fillFiltersFreigegeben($listFilters, $filtersArray); + + if (count($listCustomFilters) > 0) + { + $filtersArray['children']['personal'] = $this->navigationlib->oneLevel( + 'Personal filters', // description + '#', // link + array(), // children + '', // icon + true // expand + ); + + $this->_fillCustomFilters($listCustomFilters, $filtersArray['children']['personal']); + } + + $this->navigationlib->setSessionMenu( + array( + 'filters' => $this->navigationlib->oneLevel( + 'Filter', // description + '#', // link + $filtersArray['children'], // children + '', // icon + true // expand + ) ) ); } @@ -731,21 +816,51 @@ class InfoCenter extends FHC_Controller */ public function setNavigationMenuArrayJson() { - $this->setNavigationMenuArray(); + $navigation_page = $this->input->get('navigation_page'); - $this->output - ->set_content_type('application/json') - ->set_output(json_encode(success('success'))); + if (strpos($navigation_page, 'index') !== false) + { + $this->setNavigationMenuIndex(); + } + else + { + $this->setNavigationMenuFreigegeben(); + } + + $this->outputJsonSuccess('success'); } private function _fillFilters($filters, &$tofill) { + $toPrint = "%s?%s=%s&%s=%s"; + foreach ($filters as $filterId => $description) { - $toPrint = "%s?%s=%s"; - $tofill['children'][] = array( - 'link' => sprintf($toPrint, site_url('system/infocenter/InfoCenter'), 'filter_id', $filterId), + 'link' => sprintf( + $toPrint, + site_url('system/infocenter/InfoCenter'), 'filter_id', $filterId, + FHC_Controller::FHC_CONTROLLER_ID, + $this->getControllerId() + ), + 'description' => $description + ); + } + } + + private function _fillFiltersFreigegeben($filters, &$tofill) + { + $toPrint = "%s?%s=%s&%s=%s"; + + foreach ($filters as $filterId => $description) + { + $tofill['children'][] = array( + 'link' => sprintf( + $toPrint, + site_url('system/infocenter/InfoCenter/freigegeben'), 'filter_id', $filterId, + FHC_Controller::FHC_CONTROLLER_ID, + $this->getControllerId() + ), 'description' => $description ); } @@ -753,12 +868,17 @@ class InfoCenter extends FHC_Controller private function _fillCustomFilters($filters, &$tofill) { + $toPrint = "%s?%s=%s&%s=%s"; + foreach ($filters as $filterId => $description) { - $toPrint = "%s?%s=%s"; - $tofill['children'][] = array( - 'link' => sprintf($toPrint, site_url('system/infocenter/InfoCenter'), 'filter_id', $filterId), + 'link' => sprintf( + $toPrint, + site_url('system/infocenter/InfoCenter'), 'filter_id', $filterId, + FHC_Controller::FHC_CONTROLLER_ID, + $this->getControllerId() + ), 'description' => $description, 'subscriptDescription' => 'Remove', 'subscriptLinkClass' => 'remove-custom-filter', @@ -789,7 +909,7 @@ class InfoCenter extends FHC_Controller if (isset($locked->retval[0]->uid)) { $lockedby = $locked->retval[0]->uid; - if ($lockedby !== $this->uid) + if ($lockedby !== $this->_uid) $lockedbyother = true; } @@ -840,7 +960,7 @@ class InfoCenter extends FHC_Controller show_error($notizen_bewerbung->retval); } - $user_person = $this->PersonModel->getByUid($this->uid); + $user_person = $this->PersonModel->getByUid($this->_uid); if (isError($user_person)) { @@ -949,7 +1069,7 @@ class InfoCenter extends FHC_Controller $this->PrestudentModel->addSelect('person_id'); $person_id = $this->PrestudentModel->load($prestudent_id)->retval[0]->person_id; - redirect(self::URL_PREFIX.'/showDetails/'.$person_id.'?fhc_controller_id='.$this->fhc_controller_id.'#'.$section); + redirect(self::URL_PREFIX.'/showDetails/'.$person_id.'?fhc_controller_id='.$this->getControllerId().'#'.$section); } /** @@ -1000,7 +1120,7 @@ class InfoCenter extends FHC_Controller self::TAETIGKEIT, self::APP, null, - $this->uid + $this->_uid ); } diff --git a/application/libraries/NavigationLib.php b/application/libraries/NavigationLib.php new file mode 100644 index 000000000..4d2187e04 --- /dev/null +++ b/application/libraries/NavigationLib.php @@ -0,0 +1,353 @@ +_ci =& get_instance(); // get code igniter instance + + // Loads navigation configs + $this->_ci->config->load('navigation'); + + // Loads helper message to manage returning messages + $this->_ci->load->helper('message'); + // Loads helper session to manage the php session + $this->_ci->load->helper('session'); + + // Loads library ExtensionsLib + $this->_ci->load->library('ExtensionsLib'); + + $this->_navigationPage = $this->_getNavigationtPage($params); // sets the id for the related navigation widget + } + + //------------------------------------------------------------------------------------------------------------------ + // Public methods + + /** + * Creates the left Menu for each Page + * @param navigation_widget_called GET Parameter witch holds the currently called Page + * @return array with the Menu Entries + */ + public function getMenuArray($navigationPage) + { + $menuArray = array(); + + if (isset($navigationPage)) + { + // Get Menu Entries of the Core + $navigationMenuArray = $this->_ci->config->item(self::CONFIG_MENU_NAME); + $menuArray = $this->_wildcardsearch($navigationMenuArray, $navigationPage); + + // Load Menu Entries of Extensions + $extensions = $this->_ci->extensionslib->getInstalledExtensions(); + if(hasData($extensions)) + { + $json_extension = array(); + foreach($extensions->retval as $ext) + { + $filename = APPPATH.'config/'.ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$ext->name.'/'.self::CONFIG_NAVIGATION_FILENAME; + if (file_exists($filename)) + { + unset($config); + include($filename); + if(isset($config[self::CONFIG_MENU_NAME]) && is_array($config[self::CONFIG_MENU_NAME])) + { + $json_extension = array_merge_recursive( + $json_extension, + $this->_wildcardsearch($config[self::CONFIG_MENU_NAME], + $navigationPage) + ); + } + } + } + // Merge Extension Menuentries with the Core Entries + $menuArray = array_merge_recursive($menuArray, $json_extension); + } + + // Load dynamic Menu Entries from Session + if (($navigationMenuSessionArray = $this->getSessionMenu()) != null) + { + if (isset($navigationMenuSessionArray) && is_array($navigationMenuSessionArray)) + { + $menuArray = array_merge_recursive($menuArray, $navigationMenuSessionArray); + } + } + } + + return $menuArray; + } + + /** + * Creates the Top Menu for each Page + * @param navigation_widget_called GET Parameter witch holds the currently called Page + * @return array with the Menu Entries + */ + public function getHeaderArray($navigationPage) + { + $headerArray = array(); + + if (isset($navigationPage)) + { + // Load Header Entries of Core + $navigationHeaderArray = $this->_ci->config->item(self::CONFIG_HEADER_NAME); + $headerArray = $this->_wildcardsearch($navigationHeaderArray, $navigationPage); + + // Load Header Entries of Extensions + $extensions = $this->_ci->extensionslib->getInstalledExtensions(); + if(hasData($extensions)) + { + $headerArray_extension = array(); + foreach($extensions->retval as $ext) + { + $filename = APPPATH.'config/'.ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$ext->name.'/'.self::CONFIG_NAVIGATION_FILENAME; + if (file_exists($filename)) + { + unset($config); + include($filename); + if(isset($config[self::CONFIG_HEADER_NAME]) && is_array($config[self::CONFIG_HEADER_NAME])) + { + $headerArray_extension = array_merge_recursive( + $json_extension, + $this->_wildcardsearch($config[self::CONFIG_HEADER_NAME], + $navigationPage) + ); + } + } + } + $headerArray = array_merge_recursive($headerArray, $headerArray_extension); + } + + // Load dynamic Header Entries from Session + if (($navigationHeaderSessionArray = $this->getSessionHeader()) != null) + { + if (isset($navigationHeaderSessionArray) && is_array($navigationHeaderSessionArray)) + { + $headerArray = array_merge_recursive($headerArray, $navigationHeaderSessionArray); + } + } + } + + return $headerArray; + } + + /** + * Returns the structure for one level of the menu + */ + public function oneLevel( + $description, $link = '#', $children = null, $icon = '', $expand = false, + $subscriptDescription = null, $subscriptLinkClass = null, $subscriptLinkValue = null) + { + return array( + 'description' => $description, + 'link' => $link, + 'children'=> $children, + 'icon' => $icon, + 'expand' => $expand, + 'subscriptDescription' => $subscriptDescription, + 'subscriptLinkClass' => $subscriptLinkClass, + 'subscriptLinkValue' => $subscriptLinkValue + ); + } + + /** + * Wrapper method to the session helper funtions to retrive the whole session for this navigation widget + */ + public function getSessionMenu() + { + $session = getElementSession(self::SESSION_NAME, self::SESSION_MENU_NAME); + + if (isset($session[$this->_navigationPage])) + { + return $session[$this->_navigationPage]; + } + + return null; + } + + /** + * Wrapper method to the session helper funtions to retrive the whole session for this navigation widget + */ + public function getSessionHeader() + { + $session = getElementSession(self::SESSION_NAME, self::SESSION_HEADER_NAME); + + if (isset($session[$this->_navigationPage])) + { + return $session[$this->_navigationPage]; + } + + return null; + } + + /** + * Wrapper method to the session helper funtions to retrive one element from the session of this navigation widget + */ + public function getElementSessionMenu($name) + { + $session = $this->getSessionMenu(); + + if (isset($session[$name])) + { + return $session[$name]; + } + + return null; + } + + /** + * Wrapper method to the session helper funtions to retrive one element from the session of this navigation widget + */ + public function getElementSessionHeader($name) + { + $session = $this->getSessionHeader(); + + if (isset($session[$name])) + { + return $session[$name]; + } + + return null; + } + + /** + * Wrapper method to the session helper funtions to set the whole session for this navigation widget + */ + public function setSessionMenu($data) + { + setElementSession(self::SESSION_NAME, self::SESSION_MENU_NAME, array($this->_navigationPage => $data)); + } + + /** + * Wrapper method to the session helper funtions to set the whole session for this navigation widget + */ + public function setSessionHeader($data) + { + setElementSession(self::SESSION_NAME, self::SESSION_HEADER_NAME, array($this->_navigationPage => $data)); + } + + /** + * Wrapper method to the session helper funtions to set one element in the session for this navigation widget + */ + public function setElementSessionMenu($name, $value) + { + $session = $this->getSessionMenu(); + + if (!isset($session[$this->_navigationPage])) + { + $session[$this->_navigationPage] = array(); + } + + $session[$this->_navigationPage][$name] = $value; + + setElementSession(self::SESSION_NAME, self::SESSION_MENU_NAME, $session); // stores the single value + } + + /** + * Wrapper method to the session helper funtions to set one element in the session for this navigation widget + */ + public function setElementSessionHeader($name, $value) + { + $session = $this->getSessionHeader(); + + if (!isset($session[$this->_navigationPage])) + { + $session[$this->_navigationPage] = array(); + } + + $session[$this->_navigationPage][$name] = $value; + + setElementSession(self::SESSION_NAME, self::SESSION_HEADER_NAME, $session); // stores the single value + } + + //------------------------------------------------------------------------------------------------------------------ + // Private methods + + /** + * Searches a Menuentry. If there is no exact entry it searches for Wildcard Entries with a Star + * Example: + * Searching for /system/foo/index will Match the following Menuentries: + * /system/foo/index + * /system/foo/* + * /system/* + * * + * + * @param $navigationArray Array to Search in. + * @param $navigationPage Navigation to search for. + * @return Navigation Array if found, empty array otherwise + */ + private function _wildcardsearch($navigationArray, $navigationPage) + { + // Sort Navigation to have them in correct order + krsort($navigationArray); + + // 100% match found + if(isset($navigationArray[$navigationPage])) + { + return $navigationArray[$navigationPage]; + } + else + { + foreach($navigationArray as $key=>$row) + { + // Search for * Entries + if(mb_strpos($key, '*') === 0 || mb_strpos($key, '*') === mb_strlen($key) - 1) + { + // Take * Entry if Matches + $search = mb_substr($key, 0, -1); + if($search == '' || mb_strpos($navigationPage, $search) === 0) + { + return $row; + } + } + } + } + + return array(); + } + + /** + * Return an unique string that identify this navigation widget + * NOTE: The default value is the URI where the NavigationWidget is called + */ + private function _getNavigationtPage($params) + { + // + if ($params != null + && is_array($params) + && isset($params[self::NAVIGATION_PAGE_PARAM]) + && !empty(trim($params[self::NAVIGATION_PAGE_PARAM]))) + { + $navigationPage = $params[self::NAVIGATION_PAGE_PARAM]; + } + else + { + // Gets the current page URI + $navigationPage = $this->_ci->router->directory.$this->_ci->router->class.'/'.$this->_ci->router->method; + } + + return $navigationPage; + } +} diff --git a/application/views/system/infocenter/infocenter.php b/application/views/system/infocenter/infocenter.php index 80534c800..f92658fc7 100644 --- a/application/views/system/infocenter/infocenter.php +++ b/application/views/system/infocenter/infocenter.php @@ -5,18 +5,18 @@ 'title' => 'Info Center', 'jquery' => true, 'jqueryui' => true, - 'ajaxlib' => true, 'bootstrap' => true, 'fontawesome' => true, 'sbadmintemplate' => true, 'tablesorter' => true, + 'ajaxlib' => true, 'filterwidget' => true, + 'navigationwidget' => true, 'phrases' => array( 'person' => array('vorname', 'nachname'), 'global' => array('mailAnXversandt'), 'ui' => array('bitteEintragWaehlen') ), - 'navigationwidget' => true, 'customCSSs' => 'public/css/sbadmin2/tablesort_bootstrap.css', 'customJSs' => array('public/js/bootstrapper.js', 'public/js/infocenter/infocenterPersonDataset.js') ) @@ -32,18 +32,13 @@