- Removed navigation left menu entry for page system/infocenter/InfoCenter/showDetails from navigation config

- Changed URI of path from system/infocenter/InfoCenter/infocenterFreigegeben to system/infocenter/InfoCenter/freigegeben in navigation config
- Moved the logic from Navigation controller to NavigationLib
- Added private method _loadNavigationLib to Navigation controller to load the NavigationLib with parameters
- Navigation controller now extends FHC_Controller
- Added NavigationLib to collect all the logic used by the NavigationWidget components
- Remove the handle of the fhc_controller_id from the NavigationWidget.js
- NavigationWidget.js now uses better tools that came from the AjaxLib
- Adapted InfoCenter controller to work with the new tools from NavigationWidget
- infocenterPersonDataset.js->refreshSideMenu now uses the parameter navigation_page in the ajax call
- Renamed InfoCenter controller method from infocenterFreigegeben to freigegeben
- Now methods index, freigegeben and showDetails generates their own left menu
- showDetails generate a left menu based on the origin page (index or freigegeben)
- freigegeben uses its own filters now
- Added view infocenterFreigegebenData.php
This commit is contained in:
Paolo
2018-06-14 18:36:21 +02:00
parent 8837083f10
commit 0f798faab5
15 changed files with 923 additions and 552 deletions
+42 -138
View File
@@ -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;
}
}
}