diff --git a/application/config/message.php b/application/config/message.php
index 8e7249feb..1dc1c67ea 100644
--- a/application/config/message.php
+++ b/application/config/message.php
@@ -7,8 +7,8 @@ $config['send_immediately'] = false;
$config['msg_delivery'] = true; // Default true
$config['system_person_id'] = 1; // Dummy sender, used for sending messages from the system
-$config['redirect_view_message_url'] = 'index.ci.php/Redirect/redirectByToken/'; //
-$config['message_html_view_url'] = 'index.ci.php/ViewMessage/toHTML/';
+$config['redirect_view_message_url'] = site_url('Redirect/redirectByToken/'); //
+$config['message_html_view_url'] = site_url('ViewMessage/toHTML/');
$config['message_server'] = 'http://www.fhcomplete.org/';
$config['assistent_function'] = 'ass';
@@ -65,4 +65,4 @@ define('MSG_ERR_INVALID_RECIPIENTS', 105);
define('MSG_ERR_INVALID_RECEIVER_ID', 106);
define('MSG_ERR_INVALID_OU', 107);
define('MSG_ERR_INVALID_TEMPLATE', 108);
-define('MSG_ERR_INVALID_TOKEN', 109);
\ No newline at end of file
+define('MSG_ERR_INVALID_TOKEN', 109);
diff --git a/application/config/navigation.php b/application/config/navigation.php
index 64397f681..ecdd5d9f7 100644
--- a/application/config/navigation.php
+++ b/application/config/navigation.php
@@ -1,81 +1,103 @@
array(
- 'FH-Complete' => site_url(''),
- 'Vilesci' => base_url('/vilesci'),
- 'CIS' => CIS_ROOT
+ 'fhcomplete' => array(
+ 'link' => site_url(''),
+ 'icon' => '',
+ 'description' => 'FH-Complete',
+ 'sort' => 1
+ ),
+ 'vilesci' => array(
+ 'link' => base_url('vilesci'),
+ 'icon' => '',
+ 'description' => 'Vilesci',
+ 'sort' => 2
+ ),
+ 'cis' => array(
+ 'link' => CIS_ROOT,
+ 'icon' => '',
+ 'description' => 'CIS',
+ 'sort' => 3
+ )
)
);
+// --------------------------------------------------------------------------------------------------------------------
+// Left side menu
+
$config['navigation_menu'] = array();
$config['navigation_menu']['Vilesci/index'] = array(
- 'Dashboard' => array(
+ 'dashboard' => array(
'link' => '#',
'description' => 'Dashboard',
- 'icon' => 'dashboard'
+ 'icon' => 'dashboard',
+ 'sort' => 1
),
- 'Lehre' => array(
+ 'lehre' => array(
'link' => '#',
'icon' => 'graduation-cap',
'description' => 'Lehre',
'expand' => true,
+ 'sort' => 2,
'children'=> array(
- 'CIS' => array(
+ 'cis' => array(
'link' => CIS_ROOT,
'icon' => '',
'description' => 'CIS',
- 'expand' => true
+ 'expand' => true,
+ 'sort' => 1
),
- 'Infocenter' => array(
- 'link' => site_url('/system/infocenter/InfoCenter'),
+ 'infocenter' => array(
+ 'link' => site_url('system/infocenter/InfoCenter'),
'icon' => 'info',
'description' => 'Infocenter',
- 'expand' => true
+ 'expand' => true,
+ 'sort' => 2
),
)
),
- 'Administration' => array(
+ 'administration' => array(
'link' => '#',
'icon' => 'gear',
'description' => 'Administration',
'expand' => false,
+ 'sort' => 3,
'children'=> array(
- 'Vilesci' => array(
- 'link' => base_url('vilesci/'),
+ 'vilesci' => array(
+ 'link' => base_url('vilesci'),
'icon' => '',
'description' => 'Vilesci',
- 'expand' => true
+ 'expand' => true,
+ 'sort' => 1
),
- 'Extensions' => array(
- 'link' => site_url('/system/extensions/Manager'),
+ 'extensions' => array(
+ 'link' => site_url('system/extensions/Manager'),
'icon' => 'cubes',
'description' => 'Extensions Manager',
- 'expand' => true
+ 'expand' => true,
+ 'sort' => 2
)
)
)
);
-
$config['navigation_menu']['system/infocenter/InfoCenter/index'] = array(
- 'Freigegeben' => array(
- 'link' => base_url('index.ci.php/system/infocenter/InfoCenter/infocenterFreigegeben'),
+ 'freigegeben' => array(
+ 'link' => site_url('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(
- 'Zurück' => array(
- 'link' => base_url('index.ci.php/system/infocenter/InfoCenter/index'),
- 'description' => 'Zurück',
+$config['navigation_menu']['system/infocenter/InfoCenter/freigegeben'] = array(
+ 'back' => array(
+ 'link' => site_url('system/infocenter/InfoCenter/index'),
+ 'description' => 'Home',
'icon' => 'angle-left'
- ));
+ )
+);
diff --git a/application/controllers/jobs/AmpelMail.php b/application/controllers/jobs/AmpelMail.php
new file mode 100644
index 000000000..fdc6ad405
--- /dev/null
+++ b/application/controllers/jobs/AmpelMail.php
@@ -0,0 +1,214 @@
+input->is_cli_request())
+ {
+ $cli = true;
+ }
+ else
+ {
+ $this->output->set_status_header(403, 'Jobs must be run from the CLI');
+ echo "Jobs must be run from the CLI";
+ exit;
+ }
+
+ // Load models
+ $this->load->model('content/Ampel_model', 'AmpelModel');
+ $this->load->model('person/Person_model', 'PersonModel');
+
+ // Load helpers
+ $this->load->helper('sancho');
+ }
+
+ /**
+ * Main function index as help
+ *
+ * @return void
+ */
+ public function index()
+ {
+ $result = "The following are the available command line interface commands\n\n";
+ $result .= "php index.ci.php jobs/AmpelMail generateAmpelMail";
+
+ echo $result. PHP_EOL;
+ }
+
+ /**
+ * Generates mail content for new and overdue Ampeln, which
+ * 1. are not confirmed by the user yet and
+ * 2. are marked to be sent by email
+ * Ampel is new when inserted within the last 7 days before the cronjob runs (as cronjob runs weekly)
+ * Ampel is overdue when the cronjob runs after the deadline date.
+ * @return void
+ */
+ public function generateAmpelMail()
+ {
+ // Get all notifications, that are not expired, not before vorlaufzeit AND email is true
+ $result_active_ampeln = $this->AmpelModel->active(true);
+
+ // Stores users, description, deadline and system-link of notifications
+ $new_ampel_data_arr = array(); // data of new notifications that are not confirmed
+ $overdue_ampel_data_arr = array(); // data of overdue notifications that are not confirmed
+
+ if (hasData($result_active_ampeln))
+ {
+ $ampel_arr = $result_active_ampeln->retval;
+
+ // Loop through ampeln
+ foreach ($ampel_arr as $ampel)
+ {
+ $ampel_id = $ampel->ampel_id;
+ $now = date_create(date('Y-m-d'));
+ $deadline = date_create($ampel->deadline);
+ $insert_date = date_create($ampel->insertamum);
+ $qry_all_ampel_user = $ampel->benutzer_select; // sql select to get all user who get this ampel
+ $new = false;
+ $overdue = false;
+
+ // get all user, who get this ampel
+ $result_ampel_user = $this->AmpelModel->execBenutzerSelect($qry_all_ampel_user);
+
+ if (hasData($result_ampel_user))
+ {
+ $ampel_user_arr = $result_ampel_user->retval;
+
+ // loop through all user, who get this ampel
+ foreach ($ampel_user_arr as $ampel_user)
+ {
+ $uid = $ampel_user->uid;
+
+ // break if ampel was almost confirmed by the user
+ if($this->AmpelModel->isConfirmed($ampel_id, $uid)) break;
+
+ // check if ampel is new (inserted within last week, as cronjob will run every week)
+ if ($now->diff($insert_date)->days <= 7) $new = true;
+
+ //check if ampel is overdue
+ if ($now > $deadline) $overdue = true;
+
+ // if ampel is new
+ if ($new)
+ {
+ $html_text = '
'. strtoupper($ampel->kurzbz). '
';
+
+ // create template-specific data array of new notifications
+ // if uid already exists in the array, only the html text will be added to the existing html text
+ $new_ampel_data_arr =
+ $this->_getAmpelContentData($uid, $html_text, $new_ampel_data_arr);
+ }
+
+ // if ampel is overdue
+ if ($overdue)
+ {
+ $html_text = '
+ '. strtoupper($ampel->kurzbz). '
+
+ Die Deadline für die Bestätigung war am
+ '. date_format($deadline, 'Y-m-d'). '
+
+
';
+
+ // create template-specific data array of overdue notifications
+ // if uid already exists in the array, only the html text will be added to the existing html text
+ $overdue_ampel_data_arr =
+ $this->_getAmpelContentData($uid, $html_text, $overdue_ampel_data_arr);
+ }
+ }
+ }
+ elseif (isError($result_ampel_user))
+ {
+ show_error($result_ampel_user->error);
+ }
+ }
+ }
+ elseif (isError($result_active_ampeln))
+ {
+ show_error($result_active_ampeln->error);
+ }
+
+ // Send mails for new ampeln merged by user
+ foreach ($new_ampel_data_arr as $new_ampel_data)
+ {
+ sendMail(
+ 'Sancho_Content_AmpelNeu',
+ $new_ampel_data,
+ $new_ampel_data['uid']. '@'. DOMAIN,
+ 'Du hast eine neue Ampel!',
+ 'sancho_header_neue_nachrichten_in_ampelsystem.jpg'
+ );
+ };
+ // Send mails for overdue ampeln merged by user
+ foreach ($overdue_ampel_data_arr as $overdue_ampel_data)
+ {
+ sendMail(
+ 'Sancho_Content_AmpelUeberfaellig',
+ $overdue_ampel_data,
+ $overdue_ampel_data['uid']. '@'. DOMAIN,
+ 'Bestätige bitte Deine Ampel!',
+ 'sancho_header_ampel_overdue.jpg'
+ );
+ };
+ }
+
+ // ------------------------------------------------------------------------
+ // Private methods
+ /**
+ * Returns associative array with data as needed in the ampel content templates.
+ * @param string $uid UID, needed to merge user.
+ * @param string $html_text Specific HTML Content to be set initially for a user or to add if user exists.
+ * @param array $ampel_data_arr Array with ampeln.
+ * @return array
+ */
+ private function _getAmpelContentData($uid, $html_text, $ampel_data_arr)
+ {
+ $firstName = $this->PersonModel->getByUid($uid)->retval[0]->vorname;
+
+ // check if user already exists in the array
+ $key_position = array_search($uid, array_column($ampel_data_arr, 'uid'));
+
+ // If user already exists in the array, add only new ampel data to users ampel list
+ if ($key_position !== false)
+ {
+ $ampel_data_arr[$key_position]['ampel_list'] .= $html_text;
+ }
+ // If user does not exist, create new user and push all data needed
+ else
+ {
+ $ampel_data_arr[] = array(
+ 'uid' => $uid,
+ 'firstName' => $firstName,
+ 'ampel_list' => $html_text,
+ 'link' => self::CIS_AMPELVERWALTUNG_URL
+ );
+ }
+ return $ampel_data_arr;
+ }
+}
diff --git a/application/controllers/jobs/Prestudentstatus.php b/application/controllers/jobs/Prestudentstatus.php
index 7d9bb60b7..1cd659e79 100644
--- a/application/controllers/jobs/Prestudentstatus.php
+++ b/application/controllers/jobs/Prestudentstatus.php
@@ -39,7 +39,7 @@ class Prestudentstatus extends FHC_Controller
public function index()
{
$result = "The following are the available command line interface commands\n\n";
- $result .= "php index.ci.php jobs/Prestudentstatus CorrectStudienplan";
+ $result .= "php ".$this->config->item('index_page')." jobs/Prestudentstatus CorrectStudienplan";
echo $result.PHP_EOL;
}
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 90962e196..c87425b56 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,13 +11,19 @@ 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 INFOCENTER_URI = 'system/infocenter/InfoCenter'; // URL prefix for this controller
+ const INDEX_PAGE = 'index';
+ const FREIGEGEBEN_PAGE = 'freigegeben';
+ const SHOW_DETAILS_PAGE = 'showDetails';
+
+ const NAVIGATION_PAGE = 'navigation_page';
+ const ORIGIN_PAGE = 'origin_page';
+
+ private $_uid; // contains the UID of the logged user
// Used to log with PersonLogLib
- private $logparams = array(
+ private $_logparams = array(
'saveformalgep' => array(
'logtype' => 'Action',
'name' => 'Document formally checked',
@@ -53,7 +59,6 @@ class InfoCenter extends FHC_Controller
'success' => null
)
);
- private $uid; // contains the UID of the logged user
/**
* Constructor
@@ -74,7 +79,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,34 +100,42 @@ 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
}
// -----------------------------------------------------------------------------------------------------------------
// Public methods
/**
- * Default
+ * Main page of the InfoCenter tool
*/
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
- public function infocenterFreigegeben()
- {
- $this->load->view('system/infocenter/infocenterFreigegeben.php', array('fhc_controller_id' => $this->fhc_controller_id));
+ $this->load->view('system/infocenter/infocenter.php');
}
/**
+ * Freigegeben page of the InfoCenter tool
+ */
+ public function freigegeben()
+ {
+ $this->_setNavigationMenuFreigegeben(); // define the navigation menu for this page
+
+ $this->load->view('system/infocenter/infocenterFreigegeben.php');
+ }
+
+ /**
+ * Personal details page of the InfoCenter tool
* 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 +147,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(self::ORIGIN_PAGE);
+ if ($origin_page == self::INDEX_PAGE)
{
- //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 +162,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[self::FHC_CONTROLLER_ID] = $this->getControllerId();
+ $data[self::ORIGIN_PAGE] = $origin_page;
$this->load->view('system/infocenter/infocenterDetails.php', $data);
}
@@ -172,7 +182,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::INFOCENTER_URI.'?'.self::FHC_CONTROLLER_ID.'='.$this->getControllerId());
}
/**
@@ -211,9 +221,7 @@ class InfoCenter extends FHC_Controller
}
}
- $this->output
- ->set_content_type('application/json')
- ->set_output(json_encode($json));
+ $this->output->set_content_type('application/json')->set_output(json_encode($json));
}
/**
@@ -224,9 +232,7 @@ class InfoCenter extends FHC_Controller
{
$prestudent = $this->PrestudentModel->getLastPrestudent($person_id, true);
- $this->output
- ->set_content_type('application/json')
- ->set_output(json_encode($prestudent));
+ $this->output->set_content_type('application/json')->set_output(json_encode($prestudent));
}
/**
@@ -305,9 +311,7 @@ class InfoCenter extends FHC_Controller
$this->_log($logdata['person_id'], 'savezgv', array($logdata['studiengang_kurzbz'], $prestudent_id));
}
}
- $this->output
- ->set_content_type('application/json')
- ->set_output(json_encode($result));
+ $this->output->set_content_type('application/json')->set_output(json_encode($result));
}
/**
@@ -318,7 +322,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 +343,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 +399,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,16 +457,14 @@ 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))
{
$this->_log($person_id, 'savenotiz', array($titel));
}
- $this->output
- ->set_content_type('application/json')
- ->set_output(json_encode($result));
+ $this->output->set_content_type('application/json')->set_output(json_encode($result));
}
/**
@@ -482,9 +483,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
)
);
@@ -494,9 +495,7 @@ class InfoCenter extends FHC_Controller
$this->_log($person_id, 'updatenotiz', array($titel));
}
- $this->output
- ->set_content_type('application/json')
- ->set_output(json_encode($result));
+ $this->output->set_content_type('application/json')->set_output(json_encode($result));
}
/**
@@ -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))
@@ -561,9 +562,7 @@ class InfoCenter extends FHC_Controller
{
$result = $this->personloglib->getParkedDate($person_id);
- $this->output
- ->set_content_type('application/json')
- ->set_output(json_encode($result));
+ $this->output->set_content_type('application/json')->set_output(json_encode($result));
}
/**
@@ -574,11 +573,9 @@ 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')
- ->set_output(json_encode($result));
+ $this->output->set_content_type('application/json')->set_output(json_encode($result));
}
/**
@@ -590,9 +587,7 @@ class InfoCenter extends FHC_Controller
$result = $this->personloglib->unPark($person_id);
- $this->output
- ->set_content_type('application/json')
- ->set_output(json_encode($result));
+ $this->output->set_content_type('application/json')->set_output(json_encode($result));
}
/**
@@ -611,9 +606,26 @@ class InfoCenter extends FHC_Controller
$json = $result->retval[0]->ende;
}
- $this->output
- ->set_content_type('application/json')
- ->set_output(json_encode($json));
+ $this->output->set_content_type('application/json')->set_output(json_encode($json));
+ }
+
+ /**
+ * Wrapper for setNavigationMenu, returns JSON message
+ */
+ public function setNavigationMenuArrayJson()
+ {
+ $navigation_page = $this->input->get(self::NAVIGATION_PAGE);
+
+ if (strpos($navigation_page, self::INDEX_PAGE) !== false)
+ {
+ $this->_setNavigationMenuIndex();
+ }
+ else
+ {
+ $this->_setNavigationMenuFreigegeben();
+ }
+
+ $this->outputJsonSuccess('success');
}
// -----------------------------------------------------------------------------------------------------------------
@@ -624,18 +636,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()
+ private function _setNavigationMenuIndex()
{
+ $this->load->library('NavigationLib', array(self::NAVIGATION_PAGE => self::INFOCENTER_URI.'/'.self::INDEX_PAGE));
+
$listFiltersSent = array();
$listFiltersNotSent = array();
+ $listCustomFilters = array();
$filtersSent = $this->FiltersModel->getFilterList('infocenter', 'PersonActions', '%InfoCenterSentApplication%');
if (hasData($filtersSent))
@@ -659,7 +674,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,95 +685,203 @@ 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
- )
- );
-
- $_SESSION['navigation_menu']['system/infocenter/InfoCenter/showDetails'] = 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
+ )
)
);
}
/**
- * Wrapper for setNavigationMenu, returns JSON message
+ * Define the navigation menu for the showDetails page
*/
- public function setNavigationMenuArrayJson()
+ private function _setNavigationMenuShowDetails()
{
- $this->setNavigationMenuArray();
+ $this->load->library('NavigationLib', array(self::NAVIGATION_PAGE => self::INFOCENTER_URI.'/'.self::SHOW_DETAILS_PAGE));
- $this->output
- ->set_content_type('application/json')
- ->set_output(json_encode(success('success')));
+ $origin_page = $this->input->get(self::ORIGIN_PAGE);
+
+ $link = site_url(self::INFOCENTER_URI.'/'.self::INDEX_PAGE);
+ if ($origin_page == self::FREIGEGEBEN_PAGE)
+ {
+ $link = site_url(self::INFOCENTER_URI.'/'.self::FREIGEGEBEN_PAGE);
+ }
+
+ $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
+ */
+ private function _setNavigationMenuFreigegeben()
+ {
+ $this->load->library('NavigationLib', array(self::NAVIGATION_PAGE => self::INFOCENTER_URI.'/'.self::FREIGEGEBEN_PAGE));
+
+ $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();
+ $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
+ );
+
+ $this->_fillCustomFilters($listCustomFilters, $filtersArray['children']['personal']);
+ }
+
+ $this->navigationlib->setSessionMenu(
+ array(
+ 'filters' => $this->navigationlib->oneLevel(
+ 'Filter', // description
+ '#', // link
+ $filtersArray['children'], // children
+ '', // icon
+ true // expand
+ )
+ )
+ );
+ }
+
+ /**
+ * Utility method used to fill elements of the InfoCenter left menu of the main InfoCenter page
+ */
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(self::INFOCENTER_URI), 'filter_id', $filterId,
+ FHC_Controller::FHC_CONTROLLER_ID,
+ $this->getControllerId()
+ ),
'description' => $description
);
}
}
- private function _fillCustomFilters($filters, &$tofill)
+ /**
+ * Utility method used to fill elements of the InfoCenter left menu of the freigegeben InfoCenter page
+ */
+ private function _fillFiltersFreigegeben($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(self::INFOCENTER_URI.'/'.self::FREIGEGEBEN_PAGE), 'filter_id', $filterId,
+ FHC_Controller::FHC_CONTROLLER_ID,
+ $this->getControllerId()
+ ),
+ 'description' => $description
+ );
+ }
+ }
+
+ /**
+ * Utility method used to fill elements of the InfoCenter left menu
+ * with the list of the custom filter of the authenticated user
+ */
+ private function _fillCustomFilters($filters, &$tofill)
+ {
+ $toPrint = "%s?%s=%s&%s=%s";
+
+ foreach ($filters as $filterId => $description)
+ {
+ $tofill['children'][] = array(
+ 'link' => sprintf(
+ $toPrint,
+ site_url(self::INFOCENTER_URI), 'filter_id', $filterId,
+ FHC_Controller::FHC_CONTROLLER_ID,
+ $this->getControllerId()
+ ),
'description' => $description,
'subscriptDescription' => 'Remove',
'subscriptLinkClass' => 'remove-custom-filter',
@@ -789,7 +912,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 +963,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 +1072,18 @@ 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(
+ sprintf(
+ '/%s/%s?%s=%s&%s=%s#%s',
+ self::INFOCENTER_URI,
+ self::SHOW_DETAILS_PAGE,
+ 'person_id',
+ $person_id,
+ self::FHC_CONTROLLER_ID,
+ $this->getControllerId(),
+ $section
+ )
+ );
}
/**
@@ -981,7 +1115,7 @@ class InfoCenter extends FHC_Controller
*/
private function _log($person_id, $logname, $messageparams)
{
- $logdata = $this->logparams[$logname];
+ $logdata = $this->_logparams[$logname];
$datatolog = array(
'name' => $logdata['name']
@@ -1000,7 +1134,7 @@ class InfoCenter extends FHC_Controller
self::TAETIGKEIT,
self::APP,
null,
- $this->uid
+ $this->_uid
);
}
diff --git a/application/helpers/message_helper.php b/application/helpers/message_helper.php
index 1cba07eec..1197a02ac 100644
--- a/application/helpers/message_helper.php
+++ b/application/helpers/message_helper.php
@@ -9,7 +9,7 @@
* @license GPLv3
* @since Version 1.0.0
*/
-
+
/**
* Message Helper
*
@@ -35,7 +35,7 @@ function success($retval, $code = null, $msg_indx_prefix = 'fhc_')
$success->fhcCode = $code;
if (!is_null($code)) $success->msg = lang($msg_indx_prefix . $code);
$success->retval = $retval;
-
+
return $success;
}
@@ -51,7 +51,7 @@ function error($retval = '', $code = null, $msg_indx_prefix = 'fhc_')
$error->fhcCode = $code;
if (!is_null($code)) $error->msg = lang($msg_indx_prefix . $code);
$error->retval = $retval;
-
+
return $error;
}
@@ -64,7 +64,7 @@ function isSuccess($result)
{
return true;
}
-
+
return false;
}
@@ -78,15 +78,16 @@ function hasData($result)
{
return true;
}
-
+
return false;
}
/**
* Checks if the result represents an error
* Wrapper function of isSuccess, more readable code
+ * Bob Dylan: ...there's no success like failure. And that failure's no success at all.
*/
function isError($result)
{
return !isSuccess($result);
-}
\ No newline at end of file
+}
diff --git a/application/helpers/sancho_helper.php b/application/helpers/sancho_helper.php
new file mode 100644
index 000000000..210c5115b
--- /dev/null
+++ b/application/helpers/sancho_helper.php
@@ -0,0 +1,93 @@
+load->library('email');
+ $ci->load->library('MailLib');
+
+ $sanchoHeader_img = 'skin/images/sancho/'. $headerImg;
+ $sanchoFooter_img = 'skin/images/sancho/sancho_footer.jpg';
+
+ // Embed sancho header and footer image
+ // reset important to ensure embedding of images when called in a loop
+ $ci->email->clear(true); // clear vars and attachments
+ $ci->email->attach($sanchoHeader_img);
+ $ci->email->attach($sanchoFooter_img);
+ $cid_header = $ci->email->attachment_cid($sanchoHeader_img); // sets unique content id for embedding
+ $cid_footer = $ci->email->attachment_cid($sanchoFooter_img); // sets unique content id for embedding
+
+ // Set specific mail content into specific content template
+ $content = _parseMailContent($vorlage_kurzbz, $vorlage_data);
+
+ // overall main content data array
+ $layout = array(
+ 'CID_header' => $cid_header,
+ 'CID_footer' => $cid_footer,
+ 'content' => $content
+ );
+
+ // Set overall main content into the sancho mail template
+ $body = _parseMailContent('Sancho_Mail_Template', $layout);
+
+ // Send mail
+ $ci->maillib->send('sancho@'. DOMAIN, $to, $subject, $body);
+}
+
+/**
+ * Replace variables in the mail content template with specific mail content data.
+ * @param string $vorlage_kurzbz Name of the template for specific mail content.
+ * @param array $vorlage_data Associative array with specific mail content varibales
+ * to be replaced in the content template.
+ * @return string
+ */
+function _parseMailContent($vorlage_kurzbz, $vorlage_data)
+{
+ $ci =& get_instance();
+ $ci->load->library('VorlageLib');
+
+ $result = $ci->vorlagelib->getVorlagetextByVorlage($vorlage_kurzbz);
+
+ if (isSuccess($result))
+ {
+ // If the text and the subject of the template are not empty
+ if (is_array($result->retval) && count($result->retval) > 0 &&
+ !empty($result->retval[0]->text))
+ {
+ // Parses template text
+ $parsedText = $ci->vorlagelib->parseVorlagetext($result->retval[0]->text, $vorlage_data);
+
+ return $parsedText;
+ }
+ }
+}
diff --git a/application/helpers/session_helper.php b/application/helpers/session_helper.php
new file mode 100644
index 000000000..e74468896
--- /dev/null
+++ b/application/helpers/session_helper.php
@@ -0,0 +1,88 @@
+_ci =& get_instance();
+ $this->_ci =& get_instance(); // get code igniter instance
// 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');
$this->_filterUniqueId = $this->_getFilterUniqueId($params); // sets the id for the related filter widget
}
@@ -90,27 +92,19 @@ class FiltersLib
// Public methods
/**
- * Returns the whole session for this filter widget if found, otherwise null
+ * Wrapper method to the session helper funtions to retrive the whole session for this filter
*/
public function getSession()
{
- $session = null;
-
- // If it is present a session for this filter
- if (isset($_SESSION[self::SESSION_NAME]) && isset($_SESSION[self::SESSION_NAME][$this->_filterUniqueId]))
- {
- $session = $_SESSION[self::SESSION_NAME][$this->_filterUniqueId];
- }
-
- return $session;
+ return getElementSession(self::SESSION_NAME, $this->_filterUniqueId);
}
/**
- * Returns one element from the session of this filter widget, otherwise null
+ * Wrapper method to the session helper funtions to retrive one element from the session of this filter
*/
public function getElementSession($name)
{
- $session = $this->getSession(); // get the whole session for this filter
+ $session = getElementSession(self::SESSION_NAME, $this->_filterUniqueId);
if (isset($session[$name]))
{
@@ -121,41 +115,23 @@ class FiltersLib
}
/**
- * Sets the whole session for this filter widget
+ * Wrapper method to the session helper funtions to set the whole session for this filter
*/
public function setSession($data)
{
- // If is NOT already present into the session
- if (!isset($_SESSION[self::SESSION_NAME])
- || (isset($_SESSION[self::SESSION_NAME]) && !is_array($_SESSION[self::SESSION_NAME])))
- {
- $_SESSION[self::SESSION_NAME] = array(); // then create it
- }
-
- $_SESSION[self::SESSION_NAME][$this->_filterUniqueId] = $data; // stores data
+ setElementSession(self::SESSION_NAME, $this->_filterUniqueId, $data);
}
/**
- * Sets one element of the session of this filter widget
+ * Wrapper method to the session helper funtions to set one element in the session for this filter
*/
public function setElementSession($name, $value)
{
- // If is NOT already present into the session
- if (!isset($_SESSION[self::SESSION_NAME])
- || (isset($_SESSION[self::SESSION_NAME]) && !is_array($_SESSION[self::SESSION_NAME])))
- {
- $_SESSION[self::SESSION_NAME] = array(); // then create it
- }
+ $session = getElementSession(self::SESSION_NAME, $this->_filterUniqueId);
- // If the session for this filter is NOT already present into the session
- if (!isset($_SESSION[self::SESSION_NAME][$this->_filterUniqueId])
- || (isset($_SESSION[self::SESSION_NAME][$this->_filterUniqueId])
- && !is_array($_SESSION[self::SESSION_NAME][$this->_filterUniqueId])))
- {
- $_SESSION[self::SESSION_NAME][$this->_filterUniqueId] = array(); // then create it
- }
+ $session[$name] = $value;
- $_SESSION[self::SESSION_NAME][$this->_filterUniqueId][$name] = $value; // stores the single value
+ setElementSession(self::SESSION_NAME, $this->_filterUniqueId, $session); // stores the single value
}
/**
@@ -264,7 +240,7 @@ class FiltersLib
*/
public function generateDatasetQuery($query, $filters)
{
- $datasetQuery = null;
+ $datasetQuery = 'SELECT * FROM ('.$query.') '.self::DATASET_TABLE_ALIAS;
// If the given query is valid and the parameter filters is an array
if (!empty(trim($query)) && $filters != null && is_array($filters))
@@ -287,7 +263,7 @@ class FiltersLib
if ($where != '') // if the SQL where clause was built
{
- $datasetQuery = 'SELECT * FROM ('.$query.') '.self::DATASET_TABLE_ALIAS.' WHERE '.$where;
+ $datasetQuery .= ' WHERE '.$where;
}
}
diff --git a/application/libraries/NavigationLib.php b/application/libraries/NavigationLib.php
new file mode 100644
index 000000000..756d2bf6a
--- /dev/null
+++ b/application/libraries/NavigationLib.php
@@ -0,0 +1,390 @@
+_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);
+ }
+ }
+ }
+
+ $this->_sortArray($menuArray);
+
+ 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);
+ }
+ }
+ }
+
+ $this->_sortArray($headerArray);
+
+ 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, $target = '',
+ $sort = null)
+ {
+ return array(
+ 'description' => $description,
+ 'link' => $link,
+ 'target' => $target,
+ 'children'=> $children,
+ 'icon' => $icon,
+ 'expand' => $expand,
+ 'subscriptDescription' => $subscriptDescription,
+ 'subscriptLinkClass' => $subscriptLinkClass,
+ 'subscriptLinkValue' => $subscriptLinkValue,
+ 'sort' => $sort
+ );
+ }
+
+ /**
+ * 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;
+ }
+
+ /**
+ * Sorts using the sort element present in the array
+ */
+ private function _sortArray(&$array)
+ {
+ uasort($array, function($a, $b) {
+
+ // If the element sort is not present then the default value is 999
+ $sortA = 999;
+ if (isset($a['sort'])) $sortA = $a['sort'];
+
+ // If the element sort is not present then the default value is 999
+ $sortB = 999;
+ if (isset($b['sort'])) $sortB = $b['sort'];
+
+ return $sortA - $sortB; // < 0 => lt, == 0 => equal, > 0 => gt
+ });
+
+ // Sort also the children
+ foreach ($array as $key => $value)
+ {
+ if (isset($value['children']) && is_array($value['children']) && count($value['children']) > 0)
+ {
+ // NOTE: keep this way to give the element by reference, $value has a different reference!
+ // otherwise the children will not be sorted
+ $this->_sortArray($array[$key]['children']); // recursive call
+ }
+ }
+ }
+}
diff --git a/application/models/content/Ampel_model.php b/application/models/content/Ampel_model.php
index 84109e17b..aeb260a5c 100644
--- a/application/models/content/Ampel_model.php
+++ b/application/models/content/Ampel_model.php
@@ -1,7 +1,6 @@
dbTable = 'public.tbl_ampel';
$this->pk = 'ampel_id';
}
+
+ /**
+ * Returns all active Ampeln, that are actually:
+ * 1. not after the deadline date
+ * 2. not before the vorlaufszeit
+ * @param bool $email If true, then only ampeln are retrieved that are marked to be sent by mail.
+ * @return array Returns array of objects.
+ */
+ public function active($email = false)
+ {
+ $parametersArray = null;
+ $query = '
+ SELECT *
+ FROM public.tbl_ampel
+ WHERE';
+
+ if ($email === true)
+ {
+ $parametersArray['email'] = $email;
+ $query .= ' email = ? AND';
+ }
+
+ $query .= '
+ (NOW()<(deadline+(COALESCE(verfallszeit,0) || \' days\')::interval)::date)
+ OR (verfallszeit IS NULL)
+ AND (NOW()>(deadline-(COALESCE(vorlaufzeit,0) || \' days\')::interval)::date)
+ OR (vorlaufzeit IS NULL AND NOW() < deadline)';
+
+ $query .= ' ORDER BY deadline DESC';
+
+ return $this->execQuery($query, $parametersArray);
+ }
+
+ /**
+ * Returns all Ampel-receiver of a specific Ampel.
+ * @param string $benutzer_select SQL Statement which defines the Ampel-receiver.
+ * @return array Returns array of objects with property 'uid'.
+ */
+ public function execBenutzerSelect($benutzer_select)
+ {
+ if (isset($benutzer_select) && !empty(trim($benutzer_select)))
+ {
+ return $this->execQuery($benutzer_select);
+ }
+ }
+
+ /**
+ * Checks if Ampel was confirmed by the user.
+ * @param int $ampel_id Ampel-ID
+ * @param string $uid UID
+ * @return bool
+ */
+ public function isConfirmed($ampel_id, $uid)
+ {
+ $result = null;
+ $query = '
+ SELECT 1
+ FROM public.tbl_ampel_benutzer_bestaetigt
+ WHERE ampel_id = ?
+ AND uid = ?';
+
+ if (isset($ampel_id, $uid))
+ {
+ $result = $this->execQuery($query, array($ampel_id, $uid));
+ }
+
+ if ($result)
+ {
+ if (count($result->retval) > 0)
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+ else
+ return $result; //will contain the error-msg from execQuery
+ }
}
diff --git a/application/models/system/Filters_model.php b/application/models/system/Filters_model.php
index eb81dbb32..20ab6419e 100644
--- a/application/models/system/Filters_model.php
+++ b/application/models/system/Filters_model.php
@@ -13,7 +13,7 @@ class Filters_model extends DB_Model
}
/**
- *
+ * Loads a filter by its app, dataset_name and filter_kurzbz
*/
public function getFilterList($app, $dataset_name, $filter_kurzbz)
{
@@ -24,7 +24,6 @@ class Filters_model extends DB_Model
'app' => $app,
'dataset_name' => $dataset_name,
'person_id' => null,
- 'default_filter' => false,
'array_length(description, 1) >' => 0,
'filter_kurzbz ILIKE' => $filter_kurzbz
);
@@ -33,7 +32,7 @@ class Filters_model extends DB_Model
}
/**
- *
+ * Loads a custom filter by its app, dataset_name and the uid of the owner
*/
public function getCustomFiltersList($app, $dataset_name, $uid)
{
@@ -50,12 +49,4 @@ class Filters_model extends DB_Model
return $this->loadWhere($filterParametersArray);
}
-
- /**
- *
- */
- public function deleteCustomFilter($filter_id)
- {
- return $this->delete($filter_id);
- }
}
diff --git a/application/views/crm/statusgrundEdit.php b/application/views/crm/statusgrundEdit.php
index d37eafe8f..ddbd1ff0a 100644
--- a/application/views/crm/statusgrundEdit.php
+++ b/application/views/crm/statusgrundEdit.php
@@ -7,7 +7,7 @@
Statusgrund: status_kurzbz; ?>
-