diff --git a/.gitignore b/.gitignore index bd98c9b59..96af3e5dc 100644 --- a/.gitignore +++ b/.gitignore @@ -24,6 +24,7 @@ application/logs/ application/models/extensions/ application/views/extensions/ application/widgets/extensions/ +application/components/extensions/ public/extensions/ diff --git a/application/components/extensions/.placeholder b/application/components/extensions/.placeholder new file mode 100644 index 000000000..e69de29bb diff --git a/application/components/filters/LogsViewer.php b/application/components/filters/LogsViewer.php new file mode 100644 index 000000000..3a5390273 --- /dev/null +++ b/application/components/filters/LogsViewer.php @@ -0,0 +1,19 @@ + 'core', + 'datasetName' => 'logs', + //'filterKurzbz' => 'jobs48hours', // REMOVE ME + 'query' => ' + SELECT wsl.webservicelog_id AS "LogId", + wsl.request_id AS "RequestId", + wsl.execute_time AS "ExecutionTime", + wsl.execute_user AS "ExecutedBy", + wsl.beschreibung AS "Description", + wsl.request_data AS "Data", + wsl.webservicetyp_kurzbz AS "WebserviceType" + FROM system.tbl_webservicelog wsl + ORDER BY wsl.execute_time DESC + ', + 'requiredPermissions' => 'admin' + ); + diff --git a/application/config/navigation.php b/application/config/navigation.php index 957bdbdae..5f3414759 100644 --- a/application/config/navigation.php +++ b/application/config/navigation.php @@ -15,7 +15,7 @@ $config['navigation_header'] = array( 'description' => 'Organisation', 'sort' => 20, 'requiredPermissions' => 'basis/vilesci:r', - 'children'=> array( + 'children' => array( 'vilesci' => array( 'link' => base_url('vilesci'), 'icon' => '', @@ -40,7 +40,7 @@ $config['navigation_header'] = array( 'description' => 'Lehre', 'sort' => 30, 'requiredPermissions' => 'basis/vilesci:r', - 'children'=> array( + 'children' => array( 'cis' => array( 'link' => CIS_ROOT, 'icon' => '', @@ -71,16 +71,16 @@ $config['navigation_header'] = array( 'lehre/lehrauftrag_erteilen:r' ) ), - 'zverfueg' => array( - 'link' => site_url('lehre/lvplanung/AdminZeitverfuegbarkeit'), - 'description' => 'Zeitverfügbarkeit', - 'expand' => true, - 'sort' => 45, - 'requiredPermissions' => array( - 'lehre/zeitverfuegbarkeit:rw', - 'lehre/zeitverfuegbarkeit:rw' - ) - ), + 'zverfueg' => array( + 'link' => site_url('lehre/lvplanung/AdminZeitverfuegbarkeit'), + 'description' => 'Zeitverfügbarkeit', + 'expand' => true, + 'sort' => 45, + 'requiredPermissions' => array( + 'lehre/zeitverfuegbarkeit:rw', + 'lehre/zeitverfuegbarkeit:rw' + ) + ), 'zgvueberpruefung' => array( 'link' => site_url('system/infocenter/ZGVUeberpruefung'), 'description' => 'ZGV Überprüfung', @@ -98,7 +98,7 @@ $config['navigation_header'] = array( 'description' => 'Personen', 'sort' => 40, 'requiredPermissions' => 'basis/vilesci:r', - 'children'=> array( + 'children' => array( 'messages' => array( 'link' => site_url('system/messages/MessageClient/read'), 'icon' => '', @@ -136,7 +136,7 @@ $config['navigation_header'] = array( 'expand' => false, 'sort' => 50, 'requiredPermissions' => 'admin:r', - 'children'=> array( + 'children' => array( 'extensions' => array( 'link' => site_url('system/extensions/Manager'), 'description' => 'Extensions Manager', @@ -201,7 +201,8 @@ $config['navigation_menu']['lehre/lehrauftrag/Lehrauftrag/*'] = array( 'icon' => 'dashboard', 'sort' => 1, 'requiredPermissions' => array('lehre/lehrauftrag_bestellen:r','lehre/lehrauftrag_erteilen:r') - ),'lehrauftragBestellen' => array( + ), + 'lehrauftragBestellen' => array( 'link' => site_url('lehre/lehrauftrag/Lehrauftrag'), 'description' => 'Lehrauftrag bestellen', 'icon' => '', @@ -223,6 +224,7 @@ $config['navigation_menu']['lehre/lehrauftrag/Lehrauftrag/*'] = array( 'requiredPermissions' => array('lehre/lehrauftrag_erteilen:r') ) ); + $config['navigation_menu']['lehre/lehrauftrag/LehrauftragErteilen/*'] = array( 'lehrauftragDashboard' => array( 'link' => site_url('lehre/lehrauftrag/Lehrauftrag/Dashboard'), @@ -230,7 +232,8 @@ $config['navigation_menu']['lehre/lehrauftrag/LehrauftragErteilen/*'] = array( 'icon' => 'dashboard', 'sort' => 1, 'requiredPermissions' => array('lehre/lehrauftrag_bestellen:r','lehre/lehrauftrag_erteilen:r') - ),'lehrauftragBestellen' => array( + ), + 'lehrauftragBestellen' => array( 'link' => site_url('lehre/lehrauftrag/Lehrauftrag'), 'description' => 'Lehrauftrag bestellen', 'icon' => '', @@ -263,3 +266,4 @@ $config['navigation_menu']['system/issues/Issues/*'] = array( 'requiredPermissions' => array('admin:rw') ) ); + diff --git a/application/config/routes.php b/application/config/routes.php index 36bfdcb1e..15da5698f 100644 --- a/application/config/routes.php +++ b/application/config/routes.php @@ -60,3 +60,26 @@ $route['api/v1/organisation/[G|g]eschaeftsjahr/(:any)'] = 'api/v1/organisation/g $route['api/v1/organisation/[O|o]rganisationseinheit/(:any)'] = 'api/v1/organisation/organisationseinheit2/$1'; $route['api/v1/ressource/[B|b]etriebsmittelperson/(:any)'] = 'api/v1/ressource/betriebsmittelperson2/$1'; $route['api/v1/system/[S|s]prache/(:any)'] = 'api/v1/system/sprache2/$1'; + +// load routes from extensions +$subdir = 'application/config/extensions'; +$dirlist = scandir($subdir); + +if ($dirlist) +{ + $files = array_diff($dirlist, array('.','..')); + + foreach ($files as &$item) + { + if (is_dir($subdir . DIRECTORY_SEPARATOR . $item)) + { + $routes_file = $subdir . DIRECTORY_SEPARATOR . $item . DIRECTORY_SEPARATOR . 'routes.php'; + + if (file_exists($routes_file)) + { + require($routes_file); + } + } + } +} + diff --git a/application/controllers/components/Filter.php b/application/controllers/components/Filter.php new file mode 100644 index 000000000..ab7e1493e --- /dev/null +++ b/application/controllers/components/Filter.php @@ -0,0 +1,207 @@ +load->library('AuthLib'); + + // Loads the FilterCmptLib with HTTP GET/POST parameters + $this->_startFilterCmptLib(); + } + + //------------------------------------------------------------------------------------------------------------------ + // Public methods + + /** + * Retrieves data about the current filter from the session and will be written on the output in JSON format + */ + public function getFilter() + { + $this->outputJsonSuccess($this->filtercmptlib->getSession()); + } + + /** + * Remove an applied filter (SQL where condition) from the current filter + */ + public function removeFilterField() + { + $request = $this->getPostJSON(); + + if (property_exists($request, 'filterField') + && $this->filtercmptlib->removeFilterField($request->filterField) == true) + { + $this->outputJsonSuccess('Field removed'); + } + else + { + $this->outputJsonError('Error occurred'); + } + } + + /** + * Add a filter (SQL where clause) to be applied to the current filter + */ + public function addFilterField() + { + $request = $this->getPostJSON(); + + if (property_exists($request, 'filterField') + && $this->filtercmptlib->addFilterField($request->filterField) == true) + { + $this->outputJsonSuccess('Field added'); + } + else + { + $this->outputJsonError('Error occurred'); + } + } + + /** + * Apply the filter changes + */ + public function applyFilterFields() + { + $request = $this->getPostJSON(); + + if (property_exists($request, 'filterFields') + && $this->filtercmptlib->applyFilterFields($request->filterFields) == true) + { + $this->outputJsonSuccess('Applied'); + } + else + { + $this->outputJsonError('Error occurred'); + } + } + + /** + * Save the current filter as a custom filter for this user with the given description + */ + public function saveCustomFilter() + { + $request = $this->getPostJSON(); + + if (property_exists($request, 'customFilterName') + && $this->filtercmptlib->saveCustomFilter($request->customFilterName) == true) + { + $this->outputJsonSuccess('Saved'); + } + else + { + $this->outputJsonError('An error occurred while saving a custom filter'); + } + } + + /** + * Remove a custom filter by its filterId + */ + public function removeCustomFilter() + { + $request = $this->getPostJSON(); + + if (property_exists($request, 'filterId') + && $this->filtercmptlib->removeCustomFilter($request->filterId) == true) + { + $this->outputJsonSuccess('Removed'); + } + else + { + $this->outputJsonError('Wrong parameter'); + } + } + + /** + * Reloads the dataset + */ + public function reloadDataset() + { + $this->filtercmptlib->reloadDataset(); + + $this->outputJsonSuccess('Success'); + } + + //------------------------------------------------------------------------------------------------------------------ + // Private methods + + /** + * Loads the FilterCmptLib with the FILTER_UNIQUE_ID parameter + * If the parameter FILTER_UNIQUE_ID is not given then the execution of the controller is terminated and + * an error message is printed + */ + private function _startFilterCmptLib() + { + $filterUniqueId = null; + $filterType = null; + $filterId = null; + + // Try to get the POSTed JSON + $postJSON = $this->getPostJSON(); + + // POSTed JSON + if ($postJSON != null) + { + // If the mandatory parameters FILTER_UNIQUE_ID and FILTER_TYPE have been provided + if (property_exists($postJSON, self::FILTER_UNIQUE_ID) && property_exists($postJSON, self::FILTER_TYPE)) + { + // Retrives them from the POSTed JSON + $filterUniqueId = $postJSON->{self::FILTER_UNIQUE_ID}; + $filterType = $postJSON->{self::FILTER_TYPE}; + } + + // If the optional parameter FILTER_ID has been provided + if (property_exists($postJSON, self::FILTER_ID)) $filterId = $postJSON->{self::FILTER_ID}; + } + else // otherwise it is an HTTP GET call + { + // If the mandatory parameters FILTER_UNIQUE_ID and FILTER_TYPE have been provided + if (isset($_GET[self::FILTER_UNIQUE_ID]) && isset($_GET[self::FILTER_TYPE])) + { + // Retrives them from the HTTP GET + $filterUniqueId = $this->input->get(self::FILTER_UNIQUE_ID); + $filterType = $this->input->get(self::FILTER_TYPE); + } + + // If the optional parameter FILTER_ID has been provided + if (isset($_GET[self::FILTER_ID])) $filterId = $filterId = $this->input->get(self::FILTER_ID); + } + + // If the mandatory parameters have _not_ been provided, then terminate the execution and return an error + if ($filterUniqueId == null) $this->terminateWithJsonError('Parameter "'.self::FILTER_UNIQUE_ID.'" not provided!'); + if ($filterType == null) $this->terminateWithJsonError('Parameter "'.self::FILTER_TYPE.'" not provided!'); + + // Loads the FilterCmptLib that contains all the used logic + $this->load->library( + 'FilterCmptLib', + array( + 'filterUniqueId' => $filterUniqueId, + 'filterType' => $filterType, + 'filterId' => $filterId + ) + ); + + // Start the component + $this->filtercmptlib->start(); + } +} + diff --git a/application/controllers/components/SearchBar.php b/application/controllers/components/SearchBar.php new file mode 100644 index 000000000..09a49e163 --- /dev/null +++ b/application/controllers/components/SearchBar.php @@ -0,0 +1,51 @@ +load->library('SearchBarLib'); + } + + //------------------------------------------------------------------------------------------------------------------ + // Public methods + + /** + * Gets a JSON body via HTTP POST and provides the parameters + */ + public function search() + { + $json = json_decode($this->input->raw_input_stream); + + // Checks if the searchstr and the types parameters are in the POSTed JSON + if (isset($json->{self::SEARCHSTR_PARAM}) && isset($json->{self::TYPES_PARAM})) + { + // Convert to json the result from searchbarlib->search + $this->outputJson( + $this->searchbarlib->search( + $json->{self::SEARCHSTR_PARAM}, + $json->{self::TYPES_PARAM} + ) + ); + } + else // otherwise return an error in JSON format + { + $this->outputJsonError(SearchBarLib::ERROR_WRONG_JSON); + } + } +} + diff --git a/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php b/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php index f574e7dfc..1bd92004d 100644 --- a/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php +++ b/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php @@ -322,20 +322,10 @@ class reviewAnrechnungDetail extends Auth_Controller // Send mail to STGL of each studiengang foreach ($studiengang_kz_arr as $studiengang_kz) { - // Get STGL mail address, if available, otherwise get assistance mail address - $stgmail = $this->_getSTGLMailAddress($studiengang_kz); - - if(isSuccess($stgmail) && hasData($stgmail)) - list ($to, $vorname) = getData($stgmail)[0]; - else - show_error ('Failed retrieving DegreeProgram Mail'); - // Get full name of lector $this->load->model('person/Person_model', 'PersonModel'); - if (!$lector_name = getData($this->PersonModel->getFullName($this->_uid))) - { - show_error ('Failed retrieving person'); - } + $result = $this->PersonModel->getFullName($this->_uid); + $lector_name = hasData($result) ? getData($result) : 'Ein Lektor'; // Link to Antrag genehmigen $url = @@ -343,22 +333,26 @@ class reviewAnrechnungDetail extends Auth_Controller CIS_ROOT. 'cis/menu.php?content_id=&content='. CIS_ROOT. index_page(). self::APPROVE_ANRECHNUNG_URI; - // Prepare mail content - $body_fields = array( - 'vorname' => $vorname, - 'lektor_name' => $lector_name, - 'empfehlung' => $empfehlung ? 'positive' : 'negative', - 'link' => anchor($url, 'Anrechnungsanträge Übersicht') - ); + // Get STGL mail address, if available, otherwise get assistance mail address + if( !$result = $this->_getSTGLMailAddress($studiengang_kz)) return false; + foreach ($result as $stgl) + { + // Prepare mail content + $body_fields = array( + 'vorname' => $stgl['vorname'], + 'lektor_name' => $lector_name, + 'empfehlung' => $empfehlung ? 'positive' : 'negative', + 'link' => anchor($url, 'Anrechnungsanträge Übersicht') + ); - sendSanchoMail( - 'AnrechnungEmpfehlungAbgeben', - $body_fields, - $to, - 'Anerkennung nachgewiesener Kenntnisse: Empfehlung wurde abgegeben' - ); + sendSanchoMail( + 'AnrechnungEmpfehlungAbgeben', + $body_fields, + $stgl['to'], + 'Anerkennung nachgewiesener Kenntnisse: Empfehlung wurde abgegeben' + ); + } } - return true; } @@ -369,28 +363,33 @@ class reviewAnrechnungDetail extends Auth_Controller $result = $this->StudiengangModel->getLeitung($stg_kz); // Get STGL mail address, if available - if (isSuccess($result) && hasData($result)) - { - return success(array( - $result->retval[0]->uid. '@'. DOMAIN, - $result->retval[0]->vorname - )); - } + if (hasData($result)) + { + foreach (getData($result) as $stgl) + { + $stglMailAdress_arr[]= array( + 'to' => $stgl->uid. '@'. DOMAIN, + 'vorname' => $stgl->vorname + ); + } + + return $stglMailAdress_arr; + } // ...otherwise get assistance mail address else { $result = $this->StudiengangModel->load($stg_kz); - if (isSuccess($result) && hasData($result)) + if (hasData($result)) { - return success(array( + return array( $result->retval[0]->email, '' - )); + ); } else { - return error('Keine E-Mail für diesen Stg gefunden'); + return false; } } } diff --git a/application/controllers/lehre/anrechnung/ReviewAnrechnungUebersicht.php b/application/controllers/lehre/anrechnung/ReviewAnrechnungUebersicht.php index 974b32393..c63d0af69 100644 --- a/application/controllers/lehre/anrechnung/ReviewAnrechnungUebersicht.php +++ b/application/controllers/lehre/anrechnung/ReviewAnrechnungUebersicht.php @@ -257,20 +257,10 @@ class reviewAnrechnungUebersicht extends Auth_Controller // Send mail to STGL of each studiengang foreach ($studiengang_kz_arr as $studiengang_kz) { - // Get STGL mail address, if available, otherwise get assistance mail address - $stgmail = $this->_getSTGLMailAddress($studiengang_kz); - - if(isSuccess($stgmail) && hasData($stgmail)) - list ($to, $vorname) = getData($stgmail)[0]; - else - show_error ('Failed retrieving DegreeProgram Mail'); - // Get full name of lector $this->load->model('person/Person_model', 'PersonModel'); - if (!$lector_name = getData($this->PersonModel->getFullName($this->_uid))) - { - show_error ('Failed retrieving person'); - } + $result = $this->PersonModel->getFullName($this->_uid); + $lector_name = hasData($result) ? getData($result) : 'Ein Lektor'; // Link to Antrag genehmigen $url = @@ -278,22 +268,26 @@ class reviewAnrechnungUebersicht extends Auth_Controller CIS_ROOT. 'cis/menu.php?content_id=&content='. CIS_ROOT. index_page(). self::APPROVE_ANRECHNUNG_URI; - // Prepare mail content - $body_fields = array( - 'vorname' => $vorname, - 'lektor_name' => $lector_name, - 'empfehlung' => $empfehlung ? 'positive' : 'negative', - 'link' => anchor($url, 'Anrechnungsanträge Übersicht') - ); + // Get STGL mail address, if available, otherwise get assistance mail address + if (!$result = $this->_getSTGLMailAddress($studiengang_kz)) return false; + foreach ($result as $stgl) + { + // Prepare mail content + $body_fields = array( + 'vorname' => $stgl['vorname'], + 'lektor_name' => $lector_name, + 'empfehlung' => $empfehlung ? 'positive' : 'negative', + 'link' => anchor($url, 'Anrechnungsanträge Übersicht') + ); - sendSanchoMail( - 'AnrechnungEmpfehlungAbgeben', - $body_fields, - $to, - 'Anerkennung nachgewiesener Kenntnisse: Empfehlung wurde abgegeben' - ); + sendSanchoMail( + 'AnrechnungEmpfehlungAbgeben', + $body_fields, + $stgl['to'], + 'Anerkennung nachgewiesener Kenntnisse: Empfehlung wurde abgegeben' + ); + } } - return true; } @@ -304,28 +298,33 @@ class reviewAnrechnungUebersicht extends Auth_Controller $result = $this->StudiengangModel->getLeitung($stg_kz); // Get STGL mail address, if available - if (isSuccess($result) && hasData($result)) - { - return success(array( - $result->retval[0]->uid. '@'. DOMAIN, - $result->retval[0]->vorname - )); - } + if (hasData($result)) + { + foreach (getData($result) as $stgl) + { + $stglMailAdress_arr[]= array( + 'to' => $stgl->uid. '@'. DOMAIN, + 'vorname' => $stgl->vorname + ); + } + + return $stglMailAdress_arr; + } // ...otherwise get assistance mail address else { $result = $this->StudiengangModel->load($stg_kz); - if (isSuccess($result) && hasData($result)) + if (hasData($result)) { - return success(array( + return array( $result->retval[0]->email, '' - )); + ); } else { - return error('Keine E-Mail für diesen Stg gefunden'); + return false; } } } diff --git a/application/controllers/person/BPKWartung.php b/application/controllers/person/BPKWartung.php index 52cb09c5c..0d96f8a12 100644 --- a/application/controllers/person/BPKWartung.php +++ b/application/controllers/person/BPKWartung.php @@ -7,8 +7,6 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); */ class BPKWartung extends Auth_Controller { - private $_uid; // contains the UID of the logged user - /** * Constructor */ @@ -46,7 +44,7 @@ class BPKWartung extends Auth_Controller // Public methods /** - * Main page of the InfoCenter tool + * Main page of the bPK Wartung. */ public function index() { @@ -56,9 +54,7 @@ class BPKWartung extends Auth_Controller } /** - * Personal details page of the InfoCenter tool - * Initialization function, gets person and prestudent data and loads the view with the data - * @param $person_id + * bPK Details initialization function, gets person data and loads the view with the data. */ public function showDetails() { @@ -85,8 +81,7 @@ class BPKWartung extends Auth_Controller } /** - * Saves a ZGV for a prestudent, includes Ort, Datum, Nation for bachelor and master - * @param $prestudent_id + * Saves a bPK for a person. */ public function saveBPK() { @@ -112,7 +107,7 @@ class BPKWartung extends Auth_Controller // Private methods /** - * Loads all necessary Person data: Stammdaten (name, svnr, contact, ...), Dokumente, Logs and Notizen + * Loads all necessary Person data. * @param $person_id * @return array */ diff --git a/application/controllers/person/Gruppenmanagement.php b/application/controllers/person/Gruppenmanagement.php index 8e8e22d41..1a4c341a4 100644 --- a/application/controllers/person/Gruppenmanagement.php +++ b/application/controllers/person/Gruppenmanagement.php @@ -78,8 +78,8 @@ class Gruppenmanagement extends Auth_Controller } /** - * Gets Benutzer assigned to a Gruppe - */ + * Gets Benutzer assigned to a Gruppe + */ public function getBenutzer() { $gruppe_kurzbz = $this->input->get('gruppe_kurzbz'); @@ -93,8 +93,8 @@ class Gruppenmanagement extends Auth_Controller } /** - * Gets all Benutzer for assignment to Gruppe - */ + * Gets all Benutzer for assignment to Gruppe + */ public function getAllBenutzer() { $this->BenutzerModel->addSelect('uid, vorname, nachname'); diff --git a/application/controllers/system/Navigation.php b/application/controllers/system/Navigation.php index 190f84acd..c3764b612 100644 --- a/application/controllers/system/Navigation.php +++ b/application/controllers/system/Navigation.php @@ -1,4 +1,20 @@ . + */ if (! defined('BASEPATH')) exit('No direct script access allowed'); diff --git a/application/controllers/system/TestSearch.php b/application/controllers/system/TestSearch.php new file mode 100644 index 000000000..1f5c66a1d --- /dev/null +++ b/application/controllers/system/TestSearch.php @@ -0,0 +1,44 @@ + 'system/developer:r' + ) + ); + + // Loads WidgetLib + $this->load->library('WidgetLib'); + + // Loads phrases system + $this->loadPhrases( + array( + 'global', + 'ui', + 'filter' + ) + ); + } + + // ----------------------------------------------------------------------------------------------------------------- + // Public methods + + /** + * Everything has a beginning + */ + public function index() + { + $this->load->view('system/logs/testSearch.php'); + } +} diff --git a/application/controllers/system/issues/Issues.php b/application/controllers/system/issues/Issues.php index da92c251c..6d959a024 100644 --- a/application/controllers/system/issues/Issues.php +++ b/application/controllers/system/issues/Issues.php @@ -81,7 +81,7 @@ class Issues extends Auth_Controller } if (isEmptyString($changeIssueMethod)) - $errors[] = error("Invalid issue status given"); + $errors[] = "Invalid issue status given"; else { $issueRes = $this->issueslib->{$changeIssueMethod}($issue_id, $user); diff --git a/application/core/FHC_Controller.php b/application/core/FHC_Controller.php index c71d5f6d0..dcd693cb1 100644 --- a/application/core/FHC_Controller.php +++ b/application/core/FHC_Controller.php @@ -169,6 +169,15 @@ abstract class FHC_Controller extends CI_Controller } } + /** + * Return the JSON decoded HTTP POST request + * If the request is not in JSON format then a null value is returned + */ + protected function getPostJSON() + { + return json_decode($this->input->raw_input_stream); + } + //------------------------------------------------------------------------------------------------------------------ // Private methods @@ -185,3 +194,4 @@ abstract class FHC_Controller extends CI_Controller } } } + diff --git a/application/helpers/hlp_common_helper.php b/application/helpers/hlp_common_helper.php index 7b937d73d..913d29b54 100644 --- a/application/helpers/hlp_common_helper.php +++ b/application/helpers/hlp_common_helper.php @@ -1,20 +1,19 @@ . */ if (! defined('BASEPATH')) exit('No direct script access allowed'); @@ -42,15 +41,19 @@ function generateToken($length = 64) { $firstGeneratedToken = random_bytes($length); // try to generates cryptographically secure pseudo-random bytes... } - catch (Exception $e) { $firstGeneratedToken = null; } // if fails $firstGeneratedToken is set to null + catch (Exception $e) + { + // If fails $firstGeneratedToken is set to null + $firstGeneratedToken = null; + } } // For PHP >= 5.3 and < 7 and openssl is available elseif (function_exists('openssl_random_pseudo_bytes')) { $firstGeneratedToken = openssl_random_pseudo_bytes($length, $strong); // If the token generation ended with errors OR the generated token is NOT strong enough - if ($firstGeneratedToken == false || $strong == false) $firstGeneratedToken = null; // $firstGeneratedToken is set to null - } + if ($firstGeneratedToken == false || $strong == false) $firstGeneratedToken = null; // $firstGeneratedToken is set to null + } if ($firstGeneratedToken != null) // If everything was fine { @@ -107,10 +110,7 @@ function var_dump_to_error_log($parameter) function loadResource($path, $resources = null, $subdir = false) { // Place a / character at the and of the string if not present - if (strrpos($path, '/') < strlen($path) - 1) - { - $path .= '/'; - } + if (strrpos($path, '/') < strlen($path) - 1) $path .= '/'; // Loads in $tmpResources all the given resources $tmpResources = $resources; @@ -125,28 +125,36 @@ function loadResource($path, $resources = null, $subdir = false) // Loads in $tmpPaths path and eventually the subdirectories $tmpPaths = array($path); - // NOTE: Used @ to prevent ugly error messages - if (is_dir($path) && ($dirHandler = @opendir($path)) !== false) + + // If path is a directory + if (is_dir($path)) { - // Reads all file system entries present in path - while (($entry = readdir($dirHandler)) !== false) + // NOTE: Used @ to prevent ugly error messages + $dirHandler = @opendir($path); + + // Successfully opened + if ($dirHandler !== false) { - // If entry is a directory but not the current and subdirectories should be loaded - if ($subdir === true && $entry != '.' && $entry != '..' && is_dir($entry)) + // Reads all file system entries present in path + while (($entry = readdir($dirHandler)) !== false) { - $tmpPaths[] = $entry; - } - // If no resources are specified and the current file system entry is a file - if ($resources == null && is_file($path.$entry)) - { - // If the current entry is a php file store the name without extension - if ($entry != ($tmpName = str_replace('.php', '', $entry))) + // If entry is a directory but not the current and subdirectories should be loaded + if ($subdir === true && $entry != '.' && $entry != '..' && is_dir($path.$entry)) { - $tmpResources[] = $tmpName; + $tmpPaths[] = $path.$entry.'/'; + } + // If no resources are specified and the current file system entry is a file + if ($resources == null && is_file($path.$entry)) + { + // Name without php extension + $tmpName = str_replace('.php', '', $entry); + + // If the current entry is a php file store the name without extension + if ($entry != $tmpName) $tmpResources[] = $tmpName; } } + closedir($dirHandler); } - closedir($dirHandler); } // Loops through the resources @@ -156,10 +164,7 @@ function loadResource($path, $resources = null, $subdir = false) foreach ($tmpPaths as $tmpPath) { $fileName = $tmpPath.$tmpResource.'.php'; // Php extension - if (file_exists($fileName)) - { - include_once($fileName); - } + if (file_exists($fileName)) include_once($fileName); } } } @@ -351,3 +356,52 @@ function sanitizeProblemChars($str) return preg_replace($acentos, array_keys($acentos), htmlentities($str, ENT_NOQUOTES | ENT_HTML5, $enc)); } + +/** + * + */ +function findResource($path, $resource, $subdir = false, $extraDir = null) +{ + // Place a / character at the and of the string if not present + if (strrpos($path, '/') < strlen($path) - 1) $path .= '/'; + + // Loads in $tmpPaths path and eventually the subdirectories + $tmpPaths = array($path); + if (is_dir($path)) + { + // NOTE: Used @ to prevent ugly error messages + $dirHandler = @opendir($path); + + // Successfully opened + if ($dirHandler !== false) + { + // Reads all file system entries present in path + while (($entry = readdir($dirHandler)) !== false) + { + // If entry is a directory but not the current and subdirectories should be loaded + if ($subdir === true && $entry != '.' && $entry != '..' && is_dir($path.$entry)) + { + if ($extraDir == null) + { + $tmpPaths[] = $path.$entry.'/'; + } + else + { + $tmpPaths[] = $path.$entry.'/'.$extraDir.'/'; + } + } + } + closedir($dirHandler); + } + } + + // Loops through the paths + foreach ($tmpPaths as $tmpPath) + { + $fileName = $tmpPath.$resource.'.php'; // Php extension + if (file_exists($fileName)) return $fileName; + } + + return null; +} + diff --git a/application/helpers/hlp_header_helper.php b/application/helpers/hlp_header_helper.php index 203834ebb..05bba48c4 100644 --- a/application/helpers/hlp_header_helper.php +++ b/application/helpers/hlp_header_helper.php @@ -149,6 +149,31 @@ function generateJSsInclude($JSs) } } +/** + * Generates tags for the javascript modules you want to include, the parameter could by a string or an array of strings + */ +function generateJSModulesInclude($JSModules) +{ + $jsInclude = ''; + + $ci =& get_instance(); + $cachetoken = '?'.$ci->config->item('fhcomplete_build_version'); + + if (isset($JSModules)) + { + $tmpJSs = is_array($JSModules) ? $JSModules : array($JSModules); + + for ($tmpJSsCounter = 0; $tmpJSsCounter < count($tmpJSs); $tmpJSsCounter++) + { + $toPrint = sprintf($jsInclude, base_url($tmpJSs[$tmpJSsCounter].$cachetoken)).PHP_EOL; + + if ($tmpJSsCounter > 0) $toPrint = "\t\t".$toPrint; + + echo $toPrint; + } + } +} + /** * Generates all the includes needed by the Addons */ @@ -156,16 +181,26 @@ function generateAddonsJSsInclude($calledFrom) { $aktive_addons = array_filter(explode(";", ACTIVE_ADDONS)); + // For each active addon foreach ($aktive_addons as $addon) { + // Build the path to the hook file $hookfile = DOC_ROOT.'addons/'.$addon.'/hooks.config.inc.php'; + + // If the hook file exists if (file_exists($hookfile)) { - include($hookfile); + $js_hooks = array(); // default value + + include($hookfile); // include the hook file where the array js_hooks should be setup + + // If it contains the provided key calledFrom if (key_exists($calledFrom, $js_hooks)) { foreach ($js_hooks[$calledFrom] as $js_file) + { generateJSsInclude('addons/'.$addon.'/'.$js_file); + } } } } @@ -180,3 +215,4 @@ function generateBackwardCompatibleJSMsIe($js) echo ' '."\n"; echo "\n"; } + diff --git a/application/libraries/ExtensionsLib.php b/application/libraries/ExtensionsLib.php index cec40a753..9fe5d9e87 100644 --- a/application/libraries/ExtensionsLib.php +++ b/application/libraries/ExtensionsLib.php @@ -1,7 +1,25 @@ . + */ if (! defined('BASEPATH')) exit('No direct script access allowed'); +use \stdClass as stdClass; + /** * Library to manage core extensions */ @@ -23,7 +41,7 @@ class ExtensionsLib // Directories that are part of the extension archive private $SOFTLINK_TARGET_DIRECTORIES = array( - APPPATH => array('config', 'controllers', 'helpers', 'hooks', 'libraries', 'models', 'views', 'widgets'), + APPPATH => array('config', 'components', 'controllers', 'helpers', 'hooks', 'libraries', 'models', 'views', 'widgets'), DOC_ROOT => array('public') ); @@ -181,17 +199,15 @@ class ExtensionsLib // Select all the version of this extension $this->_ci->ExtensionsModel->addSelect('extension_id'); $result = $this->_ci->ExtensionsModel->loadWhere(array('name' => $extensionName)); - if (hasData($result)) // if something was found + // If something was found + if (hasData($result)) { - $extsArray = array(); - foreach ($result->retval as $key => $extension) // loops on them + // Loops on them + foreach ($result->retval as $extension) { // Remove them all $result = $this->_ci->ExtensionsModel->delete($extension->extension_id); - if (isSuccess($result)) - { - $delExtension = true; - } + if (isSuccess($result)) $delExtension = true; } } } @@ -432,9 +448,13 @@ class ExtensionsLib // If no errors occurred if ($extensionJson != null) { + // Default value + $fhcomplete_version = 0; + require_once('version.php'); // get the core version + // Checks if the required core version of the extension is the same of this system - if (isset($extensionJson->core_version) && $extensionJson->core_version == $fhcomplete_version) + if (isset($extensionJson->core_version) && version_compare($extensionJson->core_version, $fhcomplete_version,'<=')) { $this->_printMessage('Required core version: '.$extensionJson->core_version); $this->_printMessage('Current core version: '.$fhcomplete_version); @@ -587,18 +607,22 @@ class ExtensionsLib for ($sqlDir = $startVersion; $sqlDir <= $extensionJson->version; $sqlDir++) { // If a directory with the same value of the version is present in the sql scripts directory - if (($files = glob($pkgSQLsPath.'/'.$sqlDir.'/*'.ExtensionsLib::SQL_FILE_EXTENSION)) != false) - { + $files = glob($pkgSQLsPath.'/'.$sqlDir.'/*'.ExtensionsLib::SQL_FILE_EXTENSION); + if ($files != false) + { // Loads every sql files - foreach ($files as $file) - { - $sql = file_get_contents($file); // gets the entire content of the file + foreach ($files as $file) + { + $sql = file_get_contents($file); // gets the entire content of the file $this->_printMessage('Executing query:'); $this->_printMessage($sql); // Try to execute that - if (!isSuccess($result = @$this->_ci->ExtensionsModel->executeQuery($sql))) + $resultQuery = @$this->_ci->ExtensionsModel->executeQuery($sql); + + // If _not_ a success + if (!isSuccess($resultQuery)) { $this->_errorOccurred = true; $this->_printFailure(' error occurred while executing the query'); @@ -608,11 +632,11 @@ class ExtensionsLib else { $this->_printMessage('Query result:'); - var_dump($result->retval); // KEEP IT!!! + var_dump(getData($resultQuery)); // KEEP IT!!! $this->_ci->eprintflib->printEOL(); } - } - } + } + } } $this->_printSuccess(!$this->_errorOccurred); @@ -673,7 +697,7 @@ class ExtensionsLib foreach ($this->SOFTLINK_TARGET_DIRECTORIES as $rootPath => $targetDirectories) { - foreach ($targetDirectories as $key => $targetDirectory) + foreach ($targetDirectories as $targetDirectory) { if (file_exists($rootPath.$targetDirectory.'/'.ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$extensionName)) { @@ -727,7 +751,7 @@ class ExtensionsLib // For every target directory foreach ($this->SOFTLINK_TARGET_DIRECTORIES as $rootPath => $targetDirectories) { - foreach ($targetDirectories as $key => $targetDirectory) + foreach ($targetDirectories as $targetDirectory) { // If destination of the symlink does not exist if (!file_exists($rootPath.$targetDirectory.'/'.ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$extensionName)) diff --git a/application/libraries/FilterCmptLib.php b/application/libraries/FilterCmptLib.php new file mode 100644 index 000000000..9d6dfa681 --- /dev/null +++ b/application/libraries/FilterCmptLib.php @@ -0,0 +1,1163 @@ +. + */ + +if (! defined('BASEPATH')) exit('No direct script access allowed'); + +use \stdClass as stdClass; + +/** + * Filter component logic + */ +class FilterCmptLib +{ + // FilterCmpt session name + const SESSION_NAME = 'FHC_FILTER_COMPONENT'; + + // Session elements + const SESSION_FILTER_NAME = 'filterName'; + const SESSION_FIELDS = 'fields'; + const SESSION_SELECTED_FIELDS = 'selectedFields'; + const SESSION_FILTERS = 'filters'; + const SESSION_METADATA = 'datasetMetadata'; + const SESSION_ROW_NUMBER = 'rowNumber'; + const SESSION_TIMEOUT = 'sessionTimeout'; + + // Session dataset elements + const SESSION_DATASET = 'dataset'; + const SESSION_DATASET_RELOAD = 'reloadDataset'; + + const SESSION_SIDE_MENU = 'sideMenu'; + + // Default session timeout + const SESSION_DEFAULT_TIMEOUT = 30; + + // Alias for the dynamic table used to retrieve the dataset + const DATASET_TABLE_ALIAS = 'datasetFilterTable'; + + // Parameters names... + // ...to identify a single filter component in the session + const FHC_CONTROLLER_ID = 'fhc_controller_id'; + + // ...to identify a single filter component in the DB + const FILTER_ID = 'filter_id'; + const APP = 'app'; + const DATASET_NAME = 'datasetName'; + const FILTER_KURZBZ = 'filterKurzbz'; + const DATASET_RELOAD = 'reloadDataset'; + + // ...to specify permissions that are needed to use this FilterCmpt + const REQUIRED_PERMISSIONS = 'requiredPermissions'; + + // ...stament to retrieve the dataset + const QUERY = 'query'; + + // Filter operations values + const OP_EQUAL = 'equal'; + const OP_NOT_EQUAL = 'nequal'; + const OP_GREATER_THAN = 'gt'; + const OP_LESS_THAN = 'lt'; + const OP_IS_TRUE = 'true'; + const OP_IS_FALSE = 'false'; + const OP_CONTAINS = 'contains'; + const OP_NOT_CONTAINS = 'ncontains'; + const OP_SET = 'set'; + const OP_NOT_SET = 'nset'; + + // Filter options values + const OPT_MINUTES = 'minutes'; + const OPT_HOURS = 'hours'; + const OPT_DAYS = 'days'; + const OPT_MONTHS = 'months'; + + const FILTER_PHRASES_CATEGORY = 'FilterWidget'; // The category used to store phrases for the FilterCmpt + + const FILTER_UNIQUE_ID = 'filterUniqueId'; // Filter page parameter name + + const PERMISSION_FILTER_METHOD = 'FilterCmpt'; // Name for fake method to be checked by the PermissionLib + const PERMISSION_TYPE = 'r'; + + private $_ci; // Code igniter instance + + private $_filterUniqueId; // Unique id for this filter component + private $_filterType; // + private $_filterId; // + + private $_app; + private $_datasetName; + private $_filterKurzbz; + private $_query; + private $_requiredPermissions; + private $_reloadDataset; + private $_sessionTimeout; + + /** + * Gets the CI instance and loads message helper + */ + public function __construct($params) + { + $this->_ci =& get_instance(); // get code igniter instance + + // Set parameters + $this->_setParameters($params); + } + + //------------------------------------------------------------------------------------------------------------------ + // Public methods + + /** + * Wrapper method to the session helper funtions to retrieve the whole session for this filter + */ + public function getSession() + { + return getSessionElement(self::SESSION_NAME, $this->_filterUniqueId); + } + + /** + * Contains all the logic used to load all the data needed to the FilterCmpt + */ + public function start() + { + // + if (!$this->_checkJSParameters()) return; + + $filterCmptArray = array(); // default value + + // + $filePath = findResource(APPPATH.'components/filters/', $this->_filterType, true); + if (!isEmptyString($filePath)) + { + // Gets the filter configuration from the file system + require_once($filePath); + } + else + { + $filePath = findResource(APPPATH.'components/extensions/', $this->_filterType, true, 'filters'); + if (!isEmptyString($filePath)) require_once($filePath); + } + + // + if (!isset($filterCmptArray) && isEmptyArray($filterCmptArray)) + { + $this->_setSession(error('Component definition file '.$this->_filterType.' not found')); + return; + } + + // + if (!$this->_checkPHPParameters($filterCmptArray)) return; + + // + $this->_initFilterCmpt($filterCmptArray); + + // + if (!$this->_isAllowed()) return; + + // Looks for expired filter components in session and drops them + $this->_dropExpiredFilterCmpts(); + + // Read the all session for this filter component + $session = $this->getSession(); + + // If session is NOT empty -> a filter was already loaded + if ($session != null) + { + // Retrieve the filterId stored in the session + $sessionFilterId = $this->_getSessionElement(FilterCmptLib::FILTER_ID); + + // If the filter loaded in session is NOT the same that is being requested then empty the session + if ($this->_filterId != $sessionFilterId) + { + $this->_setSession(null); + $session = null; + } + else // else if the filter loaded in session is the same that is being requested + { + // Get SESSION_DATASET_RELOAD from the session + $sessionReloadDataset = $this->_getSessionElement(FilterCmptLib::SESSION_DATASET_RELOAD); + + // if Filter changed or reload is forced by parameter then reload the Dataset + if ($this->_reloadDataset === true || $sessionReloadDataset === true) + { + // Set as false to stop changing the dataset + $this->_setSessionElement(FilterCmptLib::SESSION_DATASET_RELOAD, false); + + // Generate dataset query using filters from the session + $datasetQuery = $this->_generateDatasetQuery( + $this->_query, + $this->_getSessionElement(FilterCmptLib::SESSION_FILTERS) + ); + + // Then retrieve dataset from DB + $dataset = $this->_getDataset($datasetQuery); + + // Save changes into session if data are valid + if (!isError($dataset)) + { + // Set the new dataset and its attributes in the session + $this->_setSessionElement(FilterCmptLib::SESSION_METADATA, $this->_ci->FiltersModel->getExecutedQueryMetaData()); + $this->_setSessionElement(FilterCmptLib::SESSION_ROW_NUMBER, count($dataset->retval)); + $this->_setSessionElement(FilterCmptLib::SESSION_DATASET, $dataset->retval); + } + } + } + } + + // If the session is empty -> first time that this filter is loaded + if ($session == null) + { + // Load filter definition data from DB + $definition = $this->_loadDefinition( + $this->_filterId, + $this->_app, + $this->_datasetName, + $this->_filterKurzbz + ); + + // Checks and parse json present into the definition + $parsedFilterJson = $this->_parseFilterJson($definition); + if ($parsedFilterJson != null) // if the json is valid + { + // Generate dataset query + $datasetQuery = $this->_generateDatasetQuery($this->_query, $parsedFilterJson->filters); + + // Then retrieve dataset from DB + $dataset = $this->_getDataset($datasetQuery); + + // Try to load the name of the filter using the PhrasesLib + $filterName = $this->_getFilterName($parsedFilterJson); + + // Save changes into session if data are valid + if (!isError($dataset)) + { + // Stores an array that contains all the data useful for + $this->_setSession( + array( + FilterCmptLib::FILTER_ID => $this->_filterId, // the current filter id + FilterCmptLib::APP => $this->_app, // the current app parameter + FilterCmptLib::DATASET_NAME => $this->_datasetName, // the carrent dataset name + FilterCmptLib::SESSION_FILTER_NAME => $filterName, // the current filter name + FilterCmptLib::SESSION_FIELDS => $this->_ci->FiltersModel->getExecutedQueryListFields(), // all the fields of the dataset + FilterCmptLib::SESSION_SELECTED_FIELDS => $this->_getColumnsNames($parsedFilterJson->columns), // all the selected fields + FilterCmptLib::SESSION_FILTERS => $parsedFilterJson->filters, // all the filters used to filter the dataset + FilterCmptLib::SESSION_METADATA => $this->_ci->FiltersModel->getExecutedQueryMetaData(), // the metadata of the dataset + FilterCmptLib::SESSION_ROW_NUMBER => count($dataset->retval), // the number of loaded rows by this filter + FilterCmptLib::SESSION_DATASET => $dataset->retval, // the entire dataset + FilterCmptLib::SESSION_DATASET_RELOAD => false, // if the dataset must be reloaded, not needed the first time + FilterCmptLib::SESSION_SIDE_MENU => $this->_generateFilterMenu($this->_app, $this->_datasetName) + ) + ); + } + } + } + + // NOTE: latest operations to be performed in the session to be shure that they are always present + // To be always stored in the session, otherwise is not possible to load data from Filters controller + $this->_setSessionElement(FilterCmptLib::REQUIRED_PERMISSIONS, $this->_requiredPermissions); + // Renew or set the session expiring time + $this->_setSessionElement(FilterCmptLib::SESSION_TIMEOUT, strtotime('+'.$this->_sessionTimeout.' minutes', time())); + } + + /** + * Add a filter (SQL where clause) to be applied to the current filter + */ + public function addFilterField($filterField) + { + $addFilterField = false; + + // Checks the parameter filter + if (!isEmptyString($filterField)) + { + // Retrieves all the used fields by the current filter + $fields = $this->_getSessionElement(self::SESSION_FIELDS); + // Retrieves the applied filters by the current filter + $filters = $this->_getSessionElement(self::SESSION_FILTERS); + + // Checks that the given applied filter is present in the list of all the used fields by the current filter + if (in_array($filterField, $fields)) + { + // Search in what position the given applied filter is + $pos = $this->_searchFilterByName($filters, $filterField); + if ($pos === false) // If NOT found then add it + { + // New filter definition + $filterDefinition = new stdClass(); + // Sets filter definition required properties + $filterDefinition->name = $filterField; + // Sets filter definition optional properties + $filterDefinition->operation = null; + $filterDefinition->condition = null; + $filterDefinition->option = null; + // Place the new applied filter at the end of the applied filters list + array_push($filters, $filterDefinition); + } + + $this->_setSessionElement(self::SESSION_FILTERS, $filters); // write changes into the session + + $addFilterField = true; + } + } + + return $addFilterField; + } + + /** + * Remove an applied filter (SQL where condition) from the current filter + */ + public function removeFilterField($filterField) + { + $removeFilterField = false; + + // Checks the parameter filterField + if (!isEmptyString($filterField)) + { + // Retrieves all the used fields by the current filter + $fields = $this->_getSessionElement(self::SESSION_FIELDS); + // Retrieves the applied filters by the current filter + $filters = $this->_getSessionElement(self::SESSION_FILTERS); + + // Checks that the given applied filter is present in the list of all the used fields by the current filter + if (in_array($filterField, $fields)) + { + // Search in what position the given applied filter is + $pos = $this->_searchFilterByName($filters, $filterField); + if ($pos !== false) // If found + { + array_splice($filters, $pos, 1); // Then remove it and shift the rest of elements by one if needed + } + + // Write changes into the session + $this->_setSessionElement(self::SESSION_FILTERS, $filters); + $this->_setSessionElement(self::SESSION_DATASET_RELOAD, true); // the dataset must be reloaded + + $removeFilterField = true; + } + } + + return $removeFilterField; + } + + /** + * Apply all the applied filters (SQL where conditions) to the current filter + */ + public function applyFilterFields($filterFields) + { + $applyFilters = false; + + // Check if the parameter is an array and it is not empty + if (!isEmptyArray($filterFields)) + { + $filters = array(); + + // Check if the parameter is fine + $fine = true; + foreach ($filterFields as $filterField) + { + // If not an empty array + if ($filterField != null) + { + // + if (isset($filterField->name) && isset($filterField->operation) && isset($filterField->condition) + && !isEmptyString($filterField->name) && !isEmptyString($filterField->operation) + && !isEmptyString($filterField->condition)) + { + // Fine + $filter = new stdClass(); + $filter->name = $filterField->name; + $filter->operation = $filterField->operation; + $filter->condition = $filterField->condition; + if (isset($filterField->option) && !isEmptyString($filterField->option)) + { + $filter->option = $filterField->option; + } + else + { + $filter->option = null; + } + $filters[] = $filter; + } + else // otherwise is not fine and stop checking + { + $fine = false; + break; + } + } + else // + { + $fine = false; + break; + } + } + + // + if ($fine) + { + // Write changes into the session + $this->_setSessionElement(self::SESSION_FILTERS, $filters); + $this->_setSessionElement(self::SESSION_DATASET_RELOAD, true); // the dataset must be reloaded + + $applyFilters = true; + } + } + + return $applyFilters; + } + + /** + * Reloads dataset by setting session variable to true + */ + public function reloadDataset() + { + $this->_setSessionElement(self::SESSION_DATASET_RELOAD, true); + } + + /** + * Save the current filter as a custom filter for this user with the given description + */ + public function saveCustomFilter($customFilterDescription) + { + $saveCustomFilter = false; // by default returns a failure + + // Checks parameter customFilterDescription if not valid stop the execution + if (isEmptyString($customFilterDescription)) return $saveCustomFilter; + + $this->_ci->load->model('system/Filters_model', 'FiltersModel'); // to load the filter definitions + $this->_ci->FiltersModel->resetQuery(); // reset any previous built query + + // person_id of the authenticated user + $authPersonId = getAuthPersonId(); + // Postgres array for the description + $descPGArray = str_replace('%desc%', $customFilterDescription, '{"%desc%", "%desc%", "%desc%", "%desc%"}'); + + // Loads the definition to check if is already present in the DB + $definition = $this->_ci->FiltersModel->loadWhere(array( + 'app' => $this->_getSessionElement(self::APP), + 'dataset_name' => $this->_getSessionElement(self::DATASET_NAME), + 'description' => $descPGArray, + 'person_id' => $authPersonId + )); + + // New definition to be json encoded + $jsonDeifinition = new stdClass(); + $jsonDeifinition->name = $customFilterDescription; // name of the filter + + // Generates the "column" property + $jsonDeifinition->columns = array(); + $selectedFields = $this->_getSessionElement(self::SESSION_SELECTED_FIELDS); // retrieved the selected fields + for ($i = 0; $i < count($selectedFields); $i++) + { + // Each element is an object with a property called "name" + $jsonDeifinition->columns[$i] = new stdClass(); + $jsonDeifinition->columns[$i]->name = $selectedFields[$i]; + } + + // List of applied filters + $jsonDeifinition->filters = $this->_getSessionElement(self::SESSION_FILTERS); + + // If it is already present + if (hasData($definition)) + { + // update it + $this->_ci->FiltersModel->update( + array( + 'app' => $this->_getSessionElement(self::APP), + 'dataset_name' => $this->_getSessionElement(self::DATASET_NAME), + 'description' => $descPGArray, + 'person_id' => $authPersonId + ), + array( + 'filter' => json_encode($jsonDeifinition) + ) + ); + + $saveCustomFilter = true; + } + else // otherwise insert a new one + { + $this->_ci->FiltersModel->insert( + array( + 'app' => $this->_getSessionElement(self::APP), + 'dataset_name' => $this->_getSessionElement(self::DATASET_NAME), + 'filter_kurzbz' => uniqid($authPersonId, true), + 'description' => $descPGArray, + 'person_id' => $authPersonId, + 'sort' => null, + 'default_filter' => false, + 'filter' => json_encode($jsonDeifinition), + 'oe_kurzbz' => null + ) + ); + + $saveCustomFilter = true; + } + + if ($saveCustomFilter === true) + { + $this->_setSessionElement(FilterCmptLib::SESSION_SIDE_MENU, + $this->_generateFilterMenu($this->_app, $this->_datasetName)); + } + + return $saveCustomFilter; + } + + /** + * Remove a custom filter by its filter_id + */ + public function removeCustomFilter($filterId) + { + $removeCustomFilter = false; + + // Checks the parameter filterId + if (isset($filterId) && is_numeric($filterId) && $filterId > 0) + { + $this->_ci->load->model('system/Filters_model', 'FiltersModel'); // to remove the filter definitions from DB + + // Delete it from database + $this->_ci->FiltersModel->delete(array(self::FILTER_ID => $filterId)); + + // Delete it from session + $this->_dropFromSessionFilterCmptById($filterId); + + $removeCustomFilter = true; + } + + return $removeCustomFilter; + } + + //------------------------------------------------------------------------------------------------------------------ + // Private methods + + /** + * Generates the filters menu structure array and stores it into the session + */ + private function _generateFilterMenu($app, $datasetName) + { + $filterMenu = new stdClass(); + $filterMenu->filters = array(); + $filterMenu->personalFilters = array(); + + // Loads the Filters model + $this->_ci->load->model('system/Filters_model', 'FiltersModel'); + + // Loads all the filters related to this page (same dataset_name and same app name) + $filters = $this->_ci->FiltersModel->getFiltersByAppDatasetNamePersonId( + $app, + $datasetName, + getAuthPersonId() + ); + + // If filters were loaded + if (hasData($filters)) + { + // Loops through loaded filters + foreach (getData($filters) as $filter) + { + $menuEntry = new stdClass(); + $menuEntry->desc = $filter->description[0]; + $menuEntry->filter_id = $filter->filter_id; + + // If it is NOT a personal filter + if ($filter->person_id == null) + { + $filterMenu->filters[] = $menuEntry; + } + else // otherwise + { + $menuEntry->subscriptDescription = '(Remove)'; + $menuEntry->subscriptLinkClass = 'remove-custom-filter'; + $menuEntry->subscriptLinkValue = $filter->{self::FILTER_ID}; + + $filterMenu->personalFilters[] = $menuEntry; // adds to personal filters menu array + } + } + } + + return $filterMenu; + } + + /** + * Wrapper method to the session helper funtions to retrieve one element from the session of this filter + */ + private function _getSessionElement($name) + { + $session = getSessionElement(self::SESSION_NAME, $this->_filterUniqueId); + + if (isset($session[$name])) + { + return $session[$name]; + } + + return null; + } + + /** + * Checks if at least one of the permissions given as parameter (requiredPermissions) belongs + * to the authenticated user, if confirmed then is allowed to use this FilterCmpt. + * If the parameter requiredPermissions is NOT given or is not present in the session, + * then NO one is allow to use this FilterCmpt + * Wrapper method to permissionlib->hasAtLeastOne + */ + private function _isAllowed() + { + $this->_ci->load->library('PermissionLib'); // Load permission library + + if (!$this->_ci->permissionlib->hasAtLeastOne($this->_requiredPermissions, self::PERMISSION_FILTER_METHOD, self::PERMISSION_TYPE)) + { + $this->_setSession(error('The required permission is not help by the logged user')); + return false; + } + + return true; + } + + /** + * + */ + private function _setParameters($params) + { + if (isset($params['filterUniqueId'])) $this->_filterUniqueId = $params['filterUniqueId']; + if (isset($params['filterType'])) $this->_filterType = $params['filterType']; + if (isset($params['filterId'])) $this->_filterId = $params['filterId']; + } + + /** + * Checks the required parameters used to call this FilterCmpt + */ + private function _checkJSParameters() + { + // + if (isEmptyString($this->_filterUniqueId)) + { + $this->_setSession(error('Parameter "filterUniqueId" not provided')); + return false; + } + + // + if (isEmptyString($this->_filterType)) + { + $this->_setSession(error('Parameter "filterType" not provided')); + return false; + } + + return true; + } + + /** + * Checks the required parameters used to call this FilterCmpt + */ + private function _checkPHPParameters($filterCmptArray) + { + // If no options are given to this component... + if (!is_array($filterCmptArray) || (is_array($filterCmptArray) && count($filterCmptArray) == 0)) + { + $this->_setSession(error('No parameters provided')); + return false; + } + else // ...otherwise + { + // Parameters app AND dataset name + if (!isset($filterCmptArray[FilterCmptLib::APP]) && !isset($filterCmptArray[FilterCmptLib::DATASET_NAME])) + { + $this->_setSession( + error( + 'The parameters "'.FilterCmptLib::APP.'" AND "'.FilterCmptLib::DATASET_NAME.' must be specified' + ) + ); + return false; + } + + // The query parameter is mandatory + if (!isset($filterCmptArray[FilterCmptLib::QUERY])) + { + $this->_setSession(error('The parameter "'.FilterCmptLib::QUERY.'" must be specified')); + return false; + } + + // + if (!isset($filterCmptArray[FilterCmptLib::DATASET_NAME])) + { + $this->_setSession(error('The parameter "'.FilterCmptLib::DATESET_NAME.'" must be specified')); + return false; + } + + // + if (!isset($filterCmptArray[FilterCmptLib::REQUIRED_PERMISSIONS])) + { + $this->_setSession(error('The parameter "'.FilterCmptLib::REQUIRED_PERMISSIONS.'" must be specified')); + return false; + } + } + + return true; + } + + /** + * Checks parameters and initialize all the properties of this FilterCmpt + */ + private function _initFilterCmpt($filterCmptArray) + { + // If here then everything is ok + + // Initialize class properties + $this->_app = null; + $this->_datasetName = null; + $this->_filterKurzbz = null; + $this->_query = null; + $this->_requiredPermissions = null; + + $this->_reloadDataset = true; // by default the dataset is NOT cached in session + $this->_sessionTimeout = FilterCmptLib::SESSION_DEFAULT_TIMEOUT; + + // Retrieved the required permissions parameter if present + if (isset($filterCmptArray[FilterCmptLib::REQUIRED_PERMISSIONS])) + { + $this->_requiredPermissions = $filterCmptArray[FilterCmptLib::REQUIRED_PERMISSIONS]; + } + + // Parameters needed to retrieve univocally a filter from DB + if (isset($filterCmptArray[FilterCmptLib::APP])) + { + $this->_app = $filterCmptArray[FilterCmptLib::APP]; + } + + if (isset($filterCmptArray[FilterCmptLib::DATASET_NAME])) + { + $this->_datasetName = $filterCmptArray[FilterCmptLib::DATASET_NAME]; + } + + if (isset($filterCmptArray[FilterCmptLib::FILTER_KURZBZ])) + { + $this->_filterKurzbz = $filterCmptArray[FilterCmptLib::FILTER_KURZBZ]; + } + + // How to retrieve data for the filter: SQL statement or a result from DB + if (isset($filterCmptArray[FilterCmptLib::QUERY])) + { + $this->_query = $filterCmptArray[FilterCmptLib::QUERY]; + } + } + + /** + * Generates a condition for a SQL where clause using the given applied filter definition. + * By default an empty string is returned. + */ + private function _getDatasetQueryCondition($filterDefinition) + { + $condition = ''; // starts building the condition + + $this->_ci->load->model('system/Filters_model', 'FiltersModel'); + + // "operation" is a required property for the applied filter definition + if (!isEmptyString($filterDefinition->operation)) + { + // Checks what operation is required + switch ($filterDefinition->operation) + { + // comparison (==) + case self::OP_EQUAL: + // Numeric + if (is_numeric($filterDefinition->condition)) + { + $condition = '= '.$filterDefinition->condition; + } + else // string type + { + $condition = '= \''.$this->_ci->FiltersModel->escapeLike($filterDefinition->condition).'\''; + } + break; + // not equal (!=) + case self::OP_NOT_EQUAL: + // Numeric + if (is_numeric($filterDefinition->condition)) + { + $condition = '!= '.$filterDefinition->condition; + } + else // string type + { + $condition = '!= \''.$this->_ci->FiltersModel->escapeLike($filterDefinition->condition).'\''; + } + break; + // greater than (>) + case self::OP_GREATER_THAN: + // If it's a date type + if (is_numeric($filterDefinition->condition) + && isset($filterDefinition->option) + && ($filterDefinition->option == self::OPT_HOURS + || $filterDefinition->option == self::OPT_DAYS + || $filterDefinition->option == self::OPT_MONTHS + || $filterDefinition->option == self::OPT_MINUTES)) + { + $condition = '< (NOW() - \''.$filterDefinition->condition.' '.$filterDefinition->option.'\'::interval)'; + } + else // otherwise is a number + { + $condition = '> '.$filterDefinition->condition; + } + break; + // less than (<) + case self::OP_LESS_THAN: + // If it's a date type + if (is_numeric($filterDefinition->condition) + && isset($filterDefinition->option) + && ($filterDefinition->option == self::OPT_HOURS + || $filterDefinition->option == self::OPT_DAYS + || $filterDefinition->option == self::OPT_MONTHS + || $filterDefinition->option == self::OPT_MINUTES)) + { + $condition = '> (NOW() - \''.$filterDefinition->condition.' '.$filterDefinition->option.'\'::interval)'; + } + else // otherwise is a number + { + $condition = '< '.$filterDefinition->condition; + } + break; + // contains (ILIKE) + case self::OP_CONTAINS: + $condition = 'ILIKE \'%'.$this->_ci->FiltersModel->escapeLike($filterDefinition->condition).'%\''; + break; + // not contains (NOT ILIKE) + case self::OP_NOT_CONTAINS: + $condition = 'NOT ILIKE \'%'.$this->_ci->FiltersModel->escapeLike($filterDefinition->condition).'%\''; + break; + // is true (=== true) + case self::OP_IS_TRUE: + $condition = 'IS TRUE'; + break; + // is false (=== false) + case self::OP_IS_FALSE: + $condition = 'IS FALSE'; + break; + // is set + case self::OP_SET: + $condition = 'IS NOT NULL'; + break; + // is NOT set + case self::OP_NOT_SET: + $condition = 'IS NULL'; + break; + // by default must not be null (!= null) + default: + $condition = 'IS NOT NULL'; + break; + } + } + + // if the condition is valid + if (!isEmptyString($condition)) $condition = ' '.$condition; // add a white space before + + return $condition; + } + + /** + * Search for a filter inside a list of filters by the given filter name + * Returns false if NOT found, otherwise the position inside the list + */ + private function _searchFilterByName($filters, $filterName) + { + $pos = false; + + for($i = 0; $i < count($filters); $i++) + { + if ($filters[$i]->name == $filterName) + { + $pos = $i; + break; + } + } + + return $pos; + } + + /** + * Remove from the session the given filter component + */ + private function _dropFromSessionFilterCmptById($filterId) + { + // Loads the session for all the filter components + $filterCmptsSession = getSession(self::SESSION_NAME); + + // If something is present in session + if ($filterCmptsSession != null) + { + // Loops in the session for all the filter components + foreach ($filterCmptsSession as $filterCmpt => $filterCmptData) + { + // If this filter component is not the one that we are looking for + if ($filterCmptData[self::FILTER_ID] == $filterId) + { + cleanSessionElement(self::SESSION_NAME, $filterCmpt); // ...remove it + break; // stop to search + } + } + } + } + + /** + * Utility method that retrieves the name of the columns present in a filter JSON definition + */ + private function _getColumnsNames($columns) + { + $columnsNames = array(); + + // For each column + foreach ($columns as $obj) + { + // If it is set the property name of the column + if (isset($obj->name)) $columnsNames[] = $obj->name; + } + + return $columnsNames; + } + + /** + * Wrapper method to the session helper funtions to set the whole session for this filter + */ + private function _setSession($data) + { + setSessionElement(self::SESSION_NAME, $this->_filterUniqueId, $data); + } + + /** + * Wrapper method to the session helper funtions to set one element in the session for this filter + */ + private function _setSessionElement($name, $value) + { + $session = getSessionElement(self::SESSION_NAME, $this->_filterUniqueId); + + $session[$name] = $value; + + setSessionElement(self::SESSION_NAME, $this->_filterUniqueId, $session); // stores the single value + } + + /** + * + */ + private function _dropExpiredFilterCmpts() + { + // Loads the session for all the filter components + $filterCmptsSession = getSession(self::SESSION_NAME); + + // If something is present in session + if ($filterCmptsSession != null) + { + // Loops in the session for all the filter components + foreach ($filterCmptsSession as $filterCmpt => $filterCmptData) + { + // If this filter component is not the current used filter component and the it is expired... + if ($this->_filterUniqueId != $filterCmpt && $filterCmptData[self::SESSION_TIMEOUT] <= time()) + { + cleanSessionElement(self::SESSION_NAME, $filterCmpt); // ...remove it + } + } + } + } + + /** + * Loads the definition data from DB for a filter component + */ + private function _loadDefinition($filterId, $app, $datasetName, $filterKurzbz) + { + // Loads the needed models + $this->_ci->load->model('system/Filters_model', 'FiltersModel'); + $this->_ci->FiltersModel->resetQuery(); // reset any previous built query + + $this->_ci->FiltersModel->addSelect('system.tbl_filters.*'); // select only from table filters + $this->_ci->FiltersModel->addOrder('sort', 'ASC'); // sort on column sort + $this->_ci->FiltersModel->addLimit(1); // if more than one filter is set as default only one will be retrieved + + $definition = null; + $whereParameters = null; // where clause parameters + + // If we have a good filterId then use it! + if ($filterId != null && is_numeric($filterId) && $filterId > 0) + { + $whereParameters = array( + self::FILTER_ID => $filterId + ); + } + else + { + // If we can univocally retrieve a filter + if ($app != null && $datasetName != null && $filterKurzbz != null) + { + $whereParameters = array( + 'app' => $app, + 'dataset_name' => $datasetName, + 'filter_kurzbz' => $filterKurzbz + ); + } + // Else if we have only app and datasetName + elseif ($app != null && $datasetName != null && $filterKurzbz == null) + { + // Try to load the custom filter (person_id = logged user person_id) with the given "app" and "dataset_name" + // that is set as default filter (default_filter = true) + $whereParameters = array( + 'app' => $app, + 'dataset_name' => $datasetName, + 'person_id' => getAuthPersonId(), + 'default_filter' => true + ); + + $definition = $this->_ci->FiltersModel->loadWhere($whereParameters); + if (!hasData($definition)) // If a custom filter is NOT found + { + // Try to load the global filter (person_id = null) with the given "app" and "dataset_name" that is set as + // default filter (default_filter = true) + $whereParameters = array( + 'app' => $app, + 'dataset_name' => $datasetName, + 'person_id' => null, + 'default_filter' => true + ); + + $definition = $this->_ci->FiltersModel->loadWhere($whereParameters); + } + } + } + + // If no definition where loaded and where parameters were set + if ($definition == null && $whereParameters != null) + { + $definition = $this->_ci->FiltersModel->loadWhere($whereParameters); + + // Last chance!!! + if (!hasData($definition)) // If no data have been found until now the tries the most desperate query + { + $this->_ci->FiltersModel->addOrder('filter_id', 'ASC'); // sort on column filter_id to get the oldest + $whereParameters = array( + 'app' => $app, + 'dataset_name' => $datasetName + ); + + $definition = $this->_ci->FiltersModel->loadWhere($whereParameters); + } + } + + return $definition; + } + + /** + * Checks if the json definition of this filter is valid + */ + private function _parseFilterJson($definition) + { + $jsonEncodedFilter = null; + + // If the definition contains data and they are valid + if (hasData($definition) && isset(getData($definition)[0]->filter) && trim(getData($definition)[0]->filter) != '') + { + // Get the json definition of the filter + $tmpJsonEncodedFilter = json_decode(getData($definition)[0]->filter); + + // Checks required filter's properies + if (isset($tmpJsonEncodedFilter->name) + && isset($tmpJsonEncodedFilter->columns) + && is_array($tmpJsonEncodedFilter->columns) + && isset($tmpJsonEncodedFilter->filters) + && is_array($tmpJsonEncodedFilter->filters)) + { + $jsonEncodedFilter = $tmpJsonEncodedFilter; + } + } + + return $jsonEncodedFilter; + } + + /** + * Generate the query to retrieve the dataset for a filter + */ + private function _generateDatasetQuery($query, $filters) + { + $datasetQuery = 'SELECT * FROM ('.$query.') '.self::DATASET_TABLE_ALIAS; + + // If the given query is valid and the parameter filters is an array + if (!isEmptyString($query) && $filters != null && is_array($filters)) + { + $where = ''; // starts building the SQL where clause + + // Loops through the given applied filters + for ($filtersCounter = 0; $filtersCounter < count($filters); $filtersCounter++) + { + $filterDefinition = $filters[$filtersCounter]; // definition of one filter + + // If the name of the applied filter is valid + if (!isEmptyString($filterDefinition->name)) + { + // Build the query conditions + $datasetQueryCondition = $this->_getDatasetQueryCondition($filterDefinition); + + // If the built condition is valid then add it to the query clause + if (!isEmptyString($datasetQueryCondition)) + { + // If this is NOT the first one + if ($filtersCounter > 0) $where .= ' AND '; + + $where .= '"'.$filterDefinition->name.'"'.$datasetQueryCondition; + } + } + } + + // If the SQL where clause was built + if ($where != '') $datasetQuery .= ' WHERE '.$where; + } + + return $datasetQuery; + } + + /** + * Retrieves the dataset from the DB + */ + private function _getDataset($datasetQuery) + { + $dataset = null; + + if ($datasetQuery != null) + { + $this->_ci->load->model('system/Filters_model', 'FiltersModel'); + + // Execute the given SQL statement suppressing error messages + $dataset = @$this->_ci->FiltersModel->execReadOnlyQuery($datasetQuery); + } + + return $dataset; + } + + /** + * Get the filter name, the default is the "name" property of the JSON definition + * If the property namePhrase is present into the JSON definition, then try to load that from the phrases system + * NOTE: filterJson should be already checked using the method _parseFilterJson + */ + private function _getFilterName($filterJson) + { + $filterName = $filterJson->name; // always present, used as default + + // Filter name from phrases system + if (isset($filterJson->namePhrase) && !isEmptyString($filterJson->namePhrase)) + { + // Loads the library to use the phrases system + $this->_ci->load->library('PhrasesLib', array(self::FILTER_PHRASES_CATEGORY)); + + $tmpFilterNamePhrase = $this->_ci->phraseslib->t(self::FILTER_PHRASES_CATEGORY, $filterJson->namePhrase); + if (!isEmptyString($tmpFilterNamePhrase)) // if is not null or an empty string + { + $filterName = $tmpFilterNamePhrase; + } + } + + return $filterName; + } +} + diff --git a/application/libraries/NavigationLib.php b/application/libraries/NavigationLib.php index e2492cef4..95ce67610 100644 --- a/application/libraries/NavigationLib.php +++ b/application/libraries/NavigationLib.php @@ -1,4 +1,20 @@ . + */ if (! defined('BASEPATH')) exit('No direct script access allowed'); @@ -37,7 +53,7 @@ class NavigationLib // Loads library ExtensionsLib $this->_ci->load->library('ExtensionsLib'); - $this->_navigationPage = $this->_getNavigationtPage($params); // sets the id for the related navigation widget + $this->_navigationPage = $this->_getNavigationPage($params); // sets the id for the related navigation widget } //------------------------------------------------------------------------------------------------------------------ @@ -67,9 +83,19 @@ class NavigationLib * 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, $requiredPermissions = null, $subscriptLinkHref = '#') + $description, + $link = '#', + $children = null, + $icon = '', + $expand = false, + $subscriptDescription = null, + $subscriptLinkClass = null, + $subscriptLinkValue = null, + $target = '', + $sort = null, + $requiredPermissions = null, + $subscriptLinkHref = '#' + ) { return array( 'description' => $description, @@ -223,7 +249,8 @@ class NavigationLib $filename = APPPATH.'config/'.ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$ext->name.'/'.self::CONFIG_NAVIGATION_FILENAME; if (file_exists($filename)) { - unset($config); + $config = array(); // default value + include($filename); if (isset($config[$configName]) && is_array($config[$configName])) @@ -278,7 +305,7 @@ class NavigationLib } else { - foreach ($navigationArray as $key=>$row) + foreach ($navigationArray as $key => $row) { // Search for * Entries if (mb_strpos($key, '*') === 0 || mb_strpos($key, '*') === mb_strlen($key) - 1) @@ -300,7 +327,7 @@ class NavigationLib * 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) + private function _getNavigationPage($params) { if ($params != null && is_array($params) diff --git a/application/libraries/SearchBarLib.php b/application/libraries/SearchBarLib.php new file mode 100644 index 000000000..3a9d06d13 --- /dev/null +++ b/application/libraries/SearchBarLib.php @@ -0,0 +1,298 @@ +. + */ + +if (! defined('BASEPATH')) exit('No direct script access allowed'); + +use \stdClass as stdClass; + +/** + * + */ +class SearchBarLib +{ + // Error constats + const ERROR_WRONG_JSON = 'ERR001'; + const ERROR_WRONG_SEARCHSTR = 'ERR002'; + const ERROR_NO_TYPES = 'ERR003'; + const ERROR_WRONG_TYPES = 'ERR004'; + + // List of allowed types of search + const ALLOWED_TYPES = ['mitarbeiter', 'organisationunit', 'raum', 'person', 'student', 'prestudent', 'document', 'cms']; + + const PHOTO_IMG_URL = '/cis/public/bild.php?src=person&person_id='; + + private $_ci; // Code igniter instance + + /** + * Gets the CI instance and loads model + */ + public function __construct() + { + $this->_ci =& get_instance(); // get code igniter instance + + // It is loaded only to have the DB_Model available + $this->_ci->load->model('person/Benutzer_model', 'BenutzerModel'); + } + + //------------------------------------------------------------------------------------------------------------------ + // Public methods + + /** + * It performes the search of the given search string using the specified search types + */ + public function search($searchstr, $types) + { + // Checks if the given parameters are fine + $search = $this->_checkParameters($searchstr, $types); + + // If the check was successful then perform the search + if (isSuccess($search)) $search = $this->_search($searchstr, $types); + + return $search; // return the result + } + + //------------------------------------------------------------------------------------------------------------------ + // Private methods + + /** + * Checks: + * - The given searchstr is a not empty string + * - The given types is a not empty array and contains allowed search types + */ + private function _checkParameters($searchstr, $types) + { + // If searchstr is empty + if (isEmptyString($searchstr)) return error(self::ERROR_WRONG_SEARCHSTR); + + // If types is not an array or it is empty + if (isEmptyArray($types)) return error(self::ERROR_NO_TYPES); + + // If all the elements in types are allowed search types + if (!isEmptyArray(array_diff($types, self::ALLOWED_TYPES))) return error(self::ERROR_WRONG_TYPES); + + return success(); // The check is fine! + } + + /** + * Loops on types and perform the search of that type using searchstr + * Then it collects all the returned data into an array as property of an object + */ + private function _search($searchstr, $types) + { + // Object to be returned + $result = new stdClass(); + $result->data = array(); + + // For each search type + foreach ($types as $type) + { + // Perform the search and then add the result to data + $result->data = array_merge($result->data, $this->{'_'.$type}($searchstr, $type)); + } + + return $result; + } + + /** + * Search for employees + */ + private function _mitarbeiter($searchstr, $type) + { + $dbModel = new DB_Model(); + + $employees = $dbModel->execReadOnlyQuery(' + SELECT + \''.$type.'\' AS type, + b.uid AS uid, + p.person_id AS person_id, + p.vorname || \' \' || p.nachname AS name, + ARRAY_AGG(DISTINCT(org.bezeichnung)) AS organisationunit_name, + COALESCE(b.alias, b.uid) || \''.'@'.DOMAIN.'\' AS email, + TRIM(COALESCE(k.kontakt, \'\') || \' \' || COALESCE(m.telefonklappe, \'\')) AS phone, + \''.base_url(self::PHOTO_IMG_URL).'\' || p.person_id AS photo_url, + ARRAY_AGG(DISTINCT(stdkst.bezeichnung)) AS standardkostenstelle + FROM public.tbl_mitarbeiter m + JOIN public.tbl_benutzer b ON(b.uid = m.mitarbeiter_uid) + JOIN ( + SELECT o.bezeichnung, bf.uid + FROM public.tbl_benutzerfunktion bf + JOIN public.tbl_organisationseinheit o USING(oe_kurzbz) + WHERE bf.funktion_kurzbz = \'kstzuordnung\' + AND (bf.datum_von IS NULL OR bf.datum_von <= NOW()) + AND (bf.datum_bis IS NULL OR bf.datum_bis >= NOW()) + GROUP BY o.bezeichnung, bf.uid + ) stdkst ON stdkst.uid = b.uid + JOIN public.tbl_person p USING(person_id) + JOIN ( + SELECT o.bezeichnung, bf.uid + FROM public.tbl_benutzerfunktion bf + JOIN public.tbl_organisationseinheit o USING(oe_kurzbz) + WHERE bf.funktion_kurzbz = \'oezuordnung\' + AND (bf.datum_von IS NULL OR bf.datum_von <= NOW()) + AND (bf.datum_bis IS NULL OR bf.datum_bis >= NOW()) + GROUP BY o.bezeichnung, bf.uid + ) org ON org.uid = b.uid + LEFT JOIN ( + SELECT kontakt, standort_id + FROM public.tbl_kontakt + WHERE kontakttyp = \'telefon\' + ) k ON(k.standort_id = m.standort_id) + WHERE b.uid ILIKE \'%'.$dbModel->escapeLike($searchstr).'%\' + OR p.vorname ILIKE \'%'.$dbModel->escapeLike($searchstr).'%\' + OR p.nachname ILIKE \'%'.$dbModel->escapeLike($searchstr).'%\' + OR org.bezeichnung ILIKE \'%'.$dbModel->escapeLike($searchstr).'%\' + OR stdkst.bezeichnung ILIKE \'%'.$dbModel->escapeLike($searchstr).'%\' + GROUP BY type, b.uid, p.person_id, name, email, m.telefonklappe, phone + '); + + // If something has been found then return it + if (hasData($employees)) return getData($employees); + + // Otherwise return an empty array + return array(); + } + + /** + * Seach for organisation units + */ + private function _organisationunit($searchstr, $type) + { + $dbModel = new DB_Model(); + + $ous = $dbModel->execReadOnlyQuery(' + SELECT + \''.$type.'\' AS type, + o.oe_kurzbz AS oe_kurzbz, + o.bezeichnung AS name, + oParent.oe_kurzbz AS parentoe_kurzbz, + oParent.bezeichnung AS parentoe_name, + ARRAY_AGG(DISTINCT(bfLeader.uid)) AS leader_uid, + ARRAY_AGG(DISTINCT(bfLeader.vorname || \' \' || bfLeader.nachname)) AS leader_name, + COUNT(bfCount.benutzerfunktion_id) AS number_of_people, + (CASE WHEN o.mailverteiler = TRUE THEN o.oe_kurzbz || \''.'@'.DOMAIN.'\' END) AS mailgroup + FROM public.tbl_organisationseinheit o + LEFT JOIN public.tbl_organisationseinheit oParent ON(oParent.oe_kurzbz = o.oe_parent_kurzbz) + LEFT JOIN ( + SELECT benutzerfunktion_id, oe_kurzbz + FROM public.tbl_benutzerfunktion + WHERE funktion_kurzbz = \'oezuordnung\' + AND (datum_von IS NULL OR datum_von <= NOW()) + AND (datum_bis IS NULL OR datum_bis >= NOW()) + ) bfCount ON(bfCount.oe_kurzbz = o.oe_kurzbz) + LEFT JOIN ( + SELECT bf.oe_kurzbz, bf.uid, p.vorname, p.nachname + FROM public.tbl_benutzerfunktion bf + JOIN public.tbl_benutzer b USING(uid) + JOIN public.tbl_person p USING(person_id) + WHERE funktion_kurzbz = \'Leitung\' + AND (datum_von IS NULL OR datum_von <= NOW()) + AND (datum_bis IS NULL OR datum_bis >= NOW()) + AND b.aktiv = TRUE + ) bfLeader ON(bfLeader.oe_kurzbz = o.oe_kurzbz) + WHERE o.oe_kurzbz ILIKE \'%'.$dbModel->escapeLike($searchstr).'%\' + OR o.bezeichnung ILIKE \'%'.$dbModel->escapeLike($searchstr).'%\' + GROUP BY type, o.oe_kurzbz, o.bezeichnung, oParent.oe_kurzbz, oParent.bezeichnung + '); + + // If something has been found + if (hasData($ous)) + { + // Loop through the returned dataset + foreach (getData($ous) as $ou) + { + // Create the new property leaders as an empty array + $ou->leaders = array(); + + // Loop through the found leaders for this organisation unit + for ($i = 0; $i < count($ou->leader_uid); $i++) + { + // If a leader exists for this organisationunit and has a name :D + if (!isEmptyString($ou->leader_uid[$i]) && !isEmptyString($ou->leader_name[$i])) + { + // Empty object that will contains the leader uid and name + $leader = new stdClass(); + // Set the properties name and uid + $leader->uid = $ou->leader_uid[$i]; + $leader->name = $ou->leader_name[$i]; + // Add the leader object to the leaders array + $ou->leaders[] = $leader; + } + } + + // Remove the not needed properties leader_uid and leader_name + unset($ou->leader_uid); + unset($ou->leader_name); + } + + // Returns the changed dataset + return getData($ous); + } + + // Otherwise return an empty array + return array(); + } + + /** + * Search for persons + */ + private function _person($searchstr, $type) + { + return array(); + } + + /** + * Search for students + */ + private function _student($searchstr, $type) + { + return array(); + } + + /** + * Search for prestudents + */ + private function _prestudent($searchstr, $type) + { + return array(); + } + + /** + * Search for documents + */ + private function _document($searchstr, $type) + { + return array(); + } + + /** + * Search for CMSs + */ + private function _cms($searchstr, $type) + { + return array(); + } + + /** + * Search for rooms + */ + private function _raum($searchstr, $type) + { + return array(); + } +} + diff --git a/application/models/codex/Gsprogramm_model.php b/application/models/codex/Gsprogramm_model.php new file mode 100644 index 000000000..4fd0694dd --- /dev/null +++ b/application/models/codex/Gsprogramm_model.php @@ -0,0 +1,15 @@ +dbTable = 'bis.tbl_gsprogramm'; + $this->pk = 'gsprogramm_id'; + } + +} diff --git a/application/models/codex/Mobilitaet_model.php b/application/models/codex/Mobilitaet_model.php new file mode 100644 index 000000000..13f966d50 --- /dev/null +++ b/application/models/codex/Mobilitaet_model.php @@ -0,0 +1,14 @@ +dbTable = 'bis.tbl_mobilitaet'; + $this->pk = 'mobilitaet_id'; + } +} diff --git a/application/models/crm/Prestudent_model.php b/application/models/crm/Prestudent_model.php index b7804952e..f37b715f4 100644 --- a/application/models/crm/Prestudent_model.php +++ b/application/models/crm/Prestudent_model.php @@ -556,7 +556,7 @@ class Prestudent_model extends DB_Model */ public function getOrganisationunitsByPersonId($person_id) { - $query = 'SELECT o.oe_kurzbz, + $query = 'SELECT DISTINCT o.oe_kurzbz, o.bezeichnung, (CASE WHEN sg.typ = \'b\' THEN ps.prestudent_id diff --git a/application/models/person/Adressentyp_model.php b/application/models/person/Adressentyp_model.php new file mode 100644 index 000000000..94a8c6048 --- /dev/null +++ b/application/models/person/Adressentyp_model.php @@ -0,0 +1,14 @@ +dbTable = 'public.tbl_adressentyp'; + $this->pk = 'adressentyp_kurzbz'; + } +} diff --git a/application/views/codex/oehbeitrag.php b/application/views/codex/oehbeitrag.php index 8a697129e..feebeddef 100644 --- a/application/views/codex/oehbeitrag.php +++ b/application/views/codex/oehbeitrag.php @@ -3,12 +3,12 @@ $this->load->view( 'templates/FHC-Header', array( 'title' => 'ÖH-Beitragsverwaltung', - 'jquery' => true, - 'jqueryui' => true, - 'bootstrap' => true, - 'fontawesome' => true, - 'sbadmintemplate' => true, - 'tablesorter' => true, + 'jquery3' => true, + 'jqueryui1' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, + 'sbadmintemplate3' => true, + 'tablesorter2' => true, 'dialoglib' => true, 'ajaxlib' => true, 'navigationwidget' => true, diff --git a/application/views/home.php b/application/views/home.php index 79669dd88..eb7ef0406 100644 --- a/application/views/home.php +++ b/application/views/home.php @@ -1,42 +1,36 @@ load->view('templates/FHC-Header', - array( + $includesArray = array( 'title' => 'FH-Complete', - 'jquery' => true, - 'jqueryui' => true, - 'bootstrap' => true, - 'fontawesome' => true, - 'sbadmintemplate' => true, + 'jquery3' => true, + 'jqueryui1' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, + 'sbadmintemplate3' => true, 'ajaxlib' => true, + 'bootstrapper' => true, // to be used only if you know what you are doing! 'addons' => true, 'navigationwidget' => true - ) -); + ); + + $this->load->view('templates/FHC-Header', $includesArray); ?> - -
- - widgetlib->widget('NavigationWidget'); ?> - -
-
-
-
- +
+ + widgetlib->widget('NavigationWidget'); ?> + +
+
+
+
+ +
+ +
+
- -
-
-
- - -load->view('templates/FHC-Footer'); ?> + +load->view('templates/FHC-Footer', $includesArray); ?> + diff --git a/application/views/lehre/anrechnung/approveAnrechnungDetail.php b/application/views/lehre/anrechnung/approveAnrechnungDetail.php index 248dd33ca..bc3b6215a 100644 --- a/application/views/lehre/anrechnung/approveAnrechnungDetail.php +++ b/application/views/lehre/anrechnung/approveAnrechnungDetail.php @@ -3,10 +3,10 @@ $this->load->view( 'templates/FHC-Header', array( 'title' => $this->p->t('anrechnung', 'anrechnungenGenehmigen'), - 'jquery' => true, - 'jqueryui' => true, - 'bootstrap' => true, - 'fontawesome' => true, + 'jquery3' => true, + 'jqueryui1' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, 'ajaxlib' => true, 'dialoglib' => true, 'phrases' => array( diff --git a/application/views/lehre/anrechnung/approveAnrechnungUebersicht.php b/application/views/lehre/anrechnung/approveAnrechnungUebersicht.php index e2452fb13..f5d1e8214 100644 --- a/application/views/lehre/anrechnung/approveAnrechnungUebersicht.php +++ b/application/views/lehre/anrechnung/approveAnrechnungUebersicht.php @@ -3,11 +3,11 @@ $this->load->view( 'templates/FHC-Header', array( 'title' => $this->p->t('anrechnung', 'anrechnungenGenehmigen'), - 'jquery' => true, - 'jqueryui' => true, - 'bootstrap' => true, - 'fontawesome' => true, - 'tabulator' => true, + 'jquery3' => true, + 'jqueryui1' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, + 'tabulator4' => true, 'ajaxlib' => true, 'dialoglib' => true, 'tablewidget' => true, diff --git a/application/views/lehre/anrechnung/createAnrechnung.php b/application/views/lehre/anrechnung/createAnrechnung.php index 2d2193b80..e3cc9cad1 100644 --- a/application/views/lehre/anrechnung/createAnrechnung.php +++ b/application/views/lehre/anrechnung/createAnrechnung.php @@ -3,13 +3,13 @@ $this->load->view( 'templates/FHC-Header', array( 'title' => $this->p->t('anrechnung', 'neueAnrechnung'), - 'jquery' => true, - 'jqueryui' => true, - 'bootstrap' => true, - 'fontawesome' => true, + 'jquery3' => true, + 'jqueryui1' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, 'ajaxlib' => true, 'dialoglib' => true, - 'tabulator' => true, + 'tabulator4' => true, 'tablewidget' => true, 'phrases' => array( 'global' => array( @@ -101,7 +101,7 @@ $this->load->view( p->t('lehre', 'lehrveranstaltung'); ?> * @@ -112,7 +112,7 @@ $this->load->view( p->t('global', 'begruendung'); ?> * - + diff --git a/application/views/person/bpk/bpkwartung.php b/application/views/person/bpk/bpkwartung.php index 53450a9d8..f6283ee3b 100644 --- a/application/views/person/bpk/bpkwartung.php +++ b/application/views/person/bpk/bpkwartung.php @@ -3,12 +3,12 @@ 'templates/FHC-Header', array( 'title' => 'bPK Wartung', - 'jquery' => true, - 'jqueryui' => true, - 'bootstrap' => true, - 'fontawesome' => true, - 'sbadmintemplate' => true, - 'tablesorter' => true, + 'jquery3' => true, + 'jqueryui1' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, + 'sbadmintemplate3' => true, + 'tablesorter2' => true, 'ajaxlib' => true, 'filterwidget' => true, 'navigationwidget' => true, diff --git a/application/views/person/gradelist/gradelist.php b/application/views/person/gradelist/gradelist.php index 9ae485c02..06d499ded 100644 --- a/application/views/person/gradelist/gradelist.php +++ b/application/views/person/gradelist/gradelist.php @@ -3,10 +3,10 @@ 'templates/FHC-Header', array( 'title' => 'Gradelist', - 'jquery' => true, - 'jqueryui' => true, - 'bootstrap' => true, - 'fontawesome' => true, + 'jquery3' => true, + 'jqueryui1' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, 'ajaxlib' => true, 'customCSSs' => array( 'public/css/tools/gradelist.css', @@ -31,14 +31,26 @@
- p->t('lehre', 'notendurchschnitt'); ?> - : + + p->t('lehre', 'notendurchschnitt'); ?> + : +
- p->t('lehre', 'gewichteternotendurchschnitt'); ?> - : + + p->t('lehre', 'gewichteternotendurchschnitt'); ?> + : +
- p->t('lehre', 'ects'); ?> - : + + p->t('lehre', 'ects'); ?> + : +

load->view('templates/FHC-Footer'); ?> + diff --git a/application/views/person/gruppenmanagement/benutzergruppe.php b/application/views/person/gruppenmanagement/benutzergruppe.php index 0096f8d52..c076f6dd0 100644 --- a/application/views/person/gruppenmanagement/benutzergruppe.php +++ b/application/views/person/gruppenmanagement/benutzergruppe.php @@ -3,12 +3,12 @@ 'templates/FHC-Header', array( 'title' => 'Benutzer in Gruppe', - 'jquery' => true, - 'jqueryui' => true, - 'bootstrap' => true, - 'fontawesome' => true, - 'sbadmintemplate' => true, - 'tablesorter' => true, + 'jquery3' => true, + 'jqueryui1' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, + 'sbadmintemplate3' => true, + 'tablesorter2' => true, 'ajaxlib' => true, 'dialoglib' => true, 'navigationwidget' => true, diff --git a/application/views/person/gruppenmanagement/gruppenmanagement.php b/application/views/person/gruppenmanagement/gruppenmanagement.php index 32416eb86..87c44c1b9 100644 --- a/application/views/person/gruppenmanagement/gruppenmanagement.php +++ b/application/views/person/gruppenmanagement/gruppenmanagement.php @@ -3,12 +3,12 @@ 'templates/FHC-Header', array( 'title' => 'Gruppenmanagement', - 'jquery' => true, - 'jqueryui' => true, - 'bootstrap' => true, - 'fontawesome' => true, - 'sbadmintemplate' => true, - 'tablesorter' => true, + 'jquery3' => true, + 'jqueryui1' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, + 'sbadmintemplate3' => true, + 'tablesorter2' => true, 'ajaxlib' => true, 'filterwidget' => true, 'navigationwidget' => true, diff --git a/application/views/person/gruppenmanagement/gruppenmanagementData.php b/application/views/person/gruppenmanagement/gruppenmanagementData.php index 2a07f85f7..ddbaea350 100644 --- a/application/views/person/gruppenmanagement/gruppenmanagementData.php +++ b/application/views/person/gruppenmanagement/gruppenmanagementData.php @@ -63,4 +63,4 @@ $filterWidgetArray['filter_id'] = $this->input->get('filter_id'); echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray); -?> + diff --git a/application/views/system/fas_udf.php b/application/views/system/fas_udf.php index e6fa396cf..6d3c710ca 100644 --- a/application/views/system/fas_udf.php +++ b/application/views/system/fas_udf.php @@ -1,110 +1,109 @@ -load->view( - 'templates/FHC-Header', - array( - 'title' => 'InfocenterDetails', - 'jquery' => true, - 'bootstrap' => true, - 'fontawesome' => true, - 'jqueryui' => true, - 'dialoglib' => true, - 'ajaxlib' => true, - 'udfs' => true, - 'widgets' => true, - 'sbadmintemplate' => true, - 'customCSSs' => array( - 'public/css/sbadmin2/admintemplate.css' - ), - 'customJSs' => array( - 'public/js/bootstrapper.js' - ) - ) - ); -?> - - - -
-
-
- Zusatzfelder -
-
-
-
-   -
-
-
- -
- udflib->UDFWidget( - array( - UDFLib::UDF_UNIQUE_ID => 'fasPersonUDFs', - UDFLib::SCHEMA_ARG_NAME => 'public', - UDFLib::TABLE_ARG_NAME => 'tbl_person', - UDFLib::PRIMARY_KEY_NAME => 'person_id', - UDFLib::PRIMARY_KEY_VALUE => $person_id, - UDFLib::UDFS_ARG_NAME => $personUdfs - ) - ); - ?> -
-
-   -
- - -
- udflib->UDFWidget( - array( - UDFLib::UDF_UNIQUE_ID => 'fasPrestudentUDFs', - UDFLib::SCHEMA_ARG_NAME => 'public', - UDFLib::TABLE_ARG_NAME => 'tbl_prestudent', - UDFLib::PRIMARY_KEY_NAME => 'prestudent_id', - UDFLib::PRIMARY_KEY_VALUE => $prestudent_id, - UDFLib::UDFS_ARG_NAME => $prestudentUdfs - ) - ); - ?> -
- -
-
-
-   -
-
-
- -
-   -
-
-   -
- -
-
- - - -load->view("templates/footer"); ?> - + 'InfocenterDetails', + 'jquery3' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, + 'jqueryui1' => true, + 'dialoglib' => true, + 'ajaxlib' => true, + 'udfs' => true, + 'widgets' => true, + 'sbadmintemplate3' => true, + 'customCSSs' => array( + 'public/css/sbadmin2/admintemplate.css' + ), + 'customJSs' => array( + 'public/js/bootstrapper.js' + ) +); + +$this->load->view( + 'templates/FHC-Header', + $sitesettings +); +?> + + + +
+
+
+ Zusatzfelder +
+
+
+
+   +
+
+
+ +
+ udflib->UDFWidget( + array( + UDFLib::UDF_UNIQUE_ID => 'fasPersonUDFs', + UDFLib::SCHEMA_ARG_NAME => 'public', + UDFLib::TABLE_ARG_NAME => 'tbl_person', + UDFLib::PRIMARY_KEY_NAME => 'person_id', + UDFLib::PRIMARY_KEY_VALUE => $person_id, + UDFLib::UDFS_ARG_NAME => $personUdfs + ) + ); + ?> +
+
+   +
+ + +
+ udflib->UDFWidget( + array( + UDFLib::UDF_UNIQUE_ID => 'fasPrestudentUDFs', + UDFLib::SCHEMA_ARG_NAME => 'public', + UDFLib::TABLE_ARG_NAME => 'tbl_prestudent', + UDFLib::PRIMARY_KEY_NAME => 'prestudent_id', + UDFLib::PRIMARY_KEY_VALUE => $prestudent_id, + UDFLib::UDFS_ARG_NAME => $prestudentUdfs + ) + ); + ?> +
+ +
+
+
+   +
+
+
+ +
+   +
+
+   +
+ +
+
+ +load->view("templates/FHC-Footer", $sitesettings); ?> diff --git a/application/views/system/infocenter/infocenter.php b/application/views/system/infocenter/infocenter.php index 38e644846..0b7a20c2c 100644 --- a/application/views/system/infocenter/infocenter.php +++ b/application/views/system/infocenter/infocenter.php @@ -1,31 +1,30 @@ load->view( - 'templates/FHC-Header', - array( - 'title' => 'Info Center', - 'jquery' => true, - 'jqueryui' => true, - 'jquerycheckboxes' => true, - 'bootstrap' => true, - 'fontawesome' => true, - 'sbadmintemplate' => true, - 'tablesorter' => true, - 'ajaxlib' => true, - 'filterwidget' => true, - 'navigationwidget' => true, - 'dialoglib' => true, - 'phrases' => array( - 'person' => array('vorname', 'nachname'), - 'global' => array('mailAnXversandt'), - 'ui' => array('bitteEintragWaehlen') - ), - 'customCSSs' => array('public/css/sbadmin2/tablesort_bootstrap.css', 'public/css/infocenter/infocenterPersonDataset.css'), - 'customJSs' => array('public/js/bootstrapper.js', 'public/js/infocenter/infocenterPersonDataset.js') - ) + $includesArray = array( + 'title' => 'Info Center', + 'jquery3' => true, + 'jqueryui1' => true, + 'jquerycheckboxes1' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, + 'sbadmintemplate3' => true, + 'tablesorter2' => true, + 'ajaxlib' => true, + 'bootstrapper' => true, + 'filterwidget' => true, + 'navigationwidget' => true, + 'dialoglib' => true, + 'phrases' => array( + 'person' => array('vorname', 'nachname'), + 'global' => array('mailAnXversandt'), + 'ui' => array('bitteEintragWaehlen') + ), + 'customCSSs' => array('public/css/sbadmin2/tablesort_bootstrap.css', 'public/css/infocenter/infocenterPersonDataset.css'), + 'customJSs' => array('public/js/bootstrapper.js', 'public/js/infocenter/infocenterPersonDataset.js') ); + + $this->load->view('templates/FHC-Header', $includesArray); ?> -
widgetlib->widget('NavigationWidget'); ?> @@ -46,6 +45,6 @@
- -load->view('templates/FHC-Footer'); ?> +load->view('templates/FHC-Footer', $includesArray); ?> + diff --git a/application/views/system/infocenter/infocenterAbgewiesen.php b/application/views/system/infocenter/infocenterAbgewiesen.php index 8e946e573..55987a3bd 100644 --- a/application/views/system/infocenter/infocenterAbgewiesen.php +++ b/application/views/system/infocenter/infocenterAbgewiesen.php @@ -3,13 +3,13 @@ 'templates/FHC-Header', array( 'title' => 'Info Center', - 'jquery' => true, - 'jqueryui' => true, - 'jquerycheckboxes' => true, - 'bootstrap' => true, - 'fontawesome' => true, - 'sbadmintemplate' => true, - 'tablesorter' => true, + 'jquery3' => true, + 'jqueryui1' => true, + 'jquerycheckboxes1' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, + 'sbadmintemplate3' => true, + 'tablesorter2' => true, 'ajaxlib' => true, 'filterwidget' => true, 'navigationwidget' => true, diff --git a/application/views/system/infocenter/infocenterDetails.php b/application/views/system/infocenter/infocenterDetails.php index 76a371c11..158feeb2c 100644 --- a/application/views/system/infocenter/infocenterDetails.php +++ b/application/views/system/infocenter/infocenterDetails.php @@ -1,232 +1,230 @@ load->view( - 'templates/FHC-Header', - array( - 'title' => 'InfocenterDetails', - 'jquery' => true, - 'bootstrap' => true, - 'fontawesome' => true, - 'jqueryui' => true, - 'dialoglib' => true, - 'ajaxlib' => true, - 'tablesorter' => true, - 'tinymce' => true, - 'sbadmintemplate' => true, - 'addons' => true, - 'navigationwidget' => true, - 'udfs' => true, - 'widgets' => true, - 'customCSSs' => array( - 'public/css/sbadmin2/admintemplate.css', - 'public/css/sbadmin2/tablesort_bootstrap.css', - 'public/css/infocenter/infocenterDetails.css' + $includesArray = array( + 'title' => 'InfocenterDetails', + 'jquery3' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, + 'jqueryui1' => true, + 'dialoglib' => true, + 'ajaxlib' => true, + 'tablesorter2' => true, + 'tinymce4' => true, + 'sbadmintemplate3' => true, + 'addons' => true, + 'navigationwidget' => true, + 'udfs' => true, + 'widgets' => true, + 'customCSSs' => array( + 'public/css/sbadmin2/admintemplate.css', + 'public/css/sbadmin2/tablesort_bootstrap.css', + 'public/css/infocenter/infocenterDetails.css' + ), + 'customJSs' => array( + 'public/js/bootstrapper.js', + 'public/js/tablesort/tablesort.js', + 'public/js/infocenter/messageList.js', + 'public/js/infocenter/infocenterDetails.js', + 'public/js/infocenter/zgvUeberpruefung.js', + 'public/js/infocenter/docUeberpruefung.js' + ), + 'phrases' => array( + 'infocenter' => array( + 'notizHinzufuegen', + 'notizAendern', + 'bewerberParken', + 'bewerberAusparken', + 'nichtsZumAusparken', + 'fehlerBeimAusparken', + 'fehlerBeimParken', + 'bewerberGeparktBis', + 'bewerberOnHold', + 'bewerberOnHoldEntfernen', + 'bewerberOnHoldBis', + 'nichtsZumEntfernen', + 'fehlerBeimEntfernen', + 'rueckstelldatumUeberschritten', + 'parkenZurueckstellenInfo', + 'zgvInPruefung', + 'zgvErfuellt', + 'zgvNichtErfuellt', + 'zgvErfuelltPruefung', + 'datumUngueltig', + 'nachreichDatumNichtVergangenheit' ), - 'customJSs' => array( - 'public/js/bootstrapper.js', - 'public/js/tablesort/tablesort.js', - 'public/js/infocenter/messageList.js', - 'public/js/infocenter/infocenterDetails.js', - 'public/js/infocenter/zgvUeberpruefung.js', - 'public/js/infocenter/docUeberpruefung.js' + 'ui' => array( + 'gespeichert', + 'fehlerBeimSpeichern' ), - 'phrases' => array( - 'infocenter' => array( - 'notizHinzufuegen', - 'notizAendern', - 'bewerberParken', - 'bewerberAusparken', - 'nichtsZumAusparken', - 'fehlerBeimAusparken', - 'fehlerBeimParken', - 'bewerberGeparktBis', - 'bewerberOnHold', - 'bewerberOnHoldEntfernen', - 'bewerberOnHoldBis', - 'nichtsZumEntfernen', - 'fehlerBeimEntfernen', - 'rueckstelldatumUeberschritten', - 'parkenZurueckstellenInfo', - 'zgvInPruefung', - 'zgvErfuellt', - 'zgvNichtErfuellt', - 'zgvErfuelltPruefung', - 'datumUngueltig', - 'nachreichDatumNichtVergangenheit' - ), - 'ui' => array( - 'gespeichert', - 'fehlerBeimSpeichern' - ), - 'global' => array( - 'bis', - 'zeilen' - ) + 'global' => array( + 'bis', + 'zeilen' ) ) ); + + $this->load->view('templates/FHC-Header', $includesArray); ?> - -
- - widgetlib->widget('NavigationWidget'); ?> - -
-
- -
-
- -
-
-
- p->t('global', 'wirdBearbeitetVon').': '; - echo $lockedby; - if ($origin_page == 'index'): - $unlockpath = 'unlockPerson/'.$stammdaten->person_id; - $unlockpath .= '?fhc_controller_id='.$fhc_controller_id; - $unlockpath .= '&filter_id='.$prev_filter_id; - ?> -    - -  p->t('ui', 'freigeben')) ?> - +
+ + widgetlib->widget('NavigationWidget'); ?> + +
+
+ +
+
+ +
+
+
+ p->t('global', 'wirdBearbeitetVon').': '; + echo $lockedby; + if ($origin_page == 'index'): + $unlockpath = 'unlockPerson/'.$stammdaten->person_id; + $unlockpath .= '?fhc_controller_id='.$fhc_controller_id; + $unlockpath .= '&filter_id='.$prev_filter_id; + ?> +    + +  p->t('ui', 'freigeben')) ?> + + + +   - -   - +
-
- -
-

- p->t('global', 'bewerberVorhanden') . ':'; ?> -

-
- person_id . '
'; - } - ?> + +
+

+ p->t('global', 'bewerberVorhanden') . ':'; ?> +

+
+ person_id . '
'; + } + ?> +
+
- -
- -
-
-
-
-
-
-

p->t('global', 'stammdaten')) ?>

-
-
- load->view('system/infocenter/stammdaten.php'); ?> - load->view('system/infocenter/anmerkungenZurBewerbung.php'); ?> -
-
-
-
-
-
-
-
-
- -
-

- p->t('infocenter', 'dokumentenpruefung')) ?> -

-
-
- load->view('system/infocenter/dokpruefung.php'); ?> -
- load->view('system/infocenter/dokNachzureichend.php'); ?> + +
+
+
+
+
+
+

p->t('global', 'stammdaten')) ?>

-
-
-
-
-
-
-
-
-
-
- -

- p->t('infocenter', 'zgv').' - '.ucfirst($this->p->t('lehre', 'pruefung'))?> -

-
-
- load->view('system/infocenter/zgvpruefungen.php'); ?> -
-
-
-
-
-
-
-
-
-
- -

- p->t('global', 'nachrichten')) ?> -

-
-
-
- load->view('system/infocenter/messageList.php', $messages); - ?> +
+ load->view('system/infocenter/stammdaten.php'); ?> + load->view('system/infocenter/anmerkungenZurBewerbung.php'); ?> +
+
+
+
+
+
+
+
+
+ +
+

+ p->t('infocenter', 'dokumentenpruefung')) ?> +

+
+
+ load->view('system/infocenter/dokpruefung.php'); ?> +
+ load->view('system/infocenter/dokNachzureichend.php'); ?> +
+
+
+
+
+
+
+
+
+
+
+ +

+ p->t('infocenter', 'zgv').' - '.ucfirst($this->p->t('lehre', 'pruefung'))?> +

+
+
+ load->view('system/infocenter/zgvpruefungen.php'); ?> +
+
+
+
+
+
+
+
+
+
+ +

+ p->t('global', 'nachrichten')) ?> +

+
+
+
+ load->view('system/infocenter/messageList.php', $messages); + ?> +
-
- -
-
-
-
-
- -

- p->t('global', 'notizen')).' & '.ucfirst($this->p->t('global', 'aktivitaeten')) ?> -

-
-
-
-
-
- load->view('system/infocenter/addNotiz.php'); ?> +
+
+
+
+
+
+ +

+ p->t('global', 'notizen')).' & '.ucfirst($this->p->t('global', 'aktivitaeten')) ?> +

+
+
+
+
+
+ load->view('system/infocenter/addNotiz.php'); ?> +
+
+ load->view('system/infocenter/notizen.php'); ?> +
-
- load->view('system/infocenter/notizen.php'); ?> -
-
-
-
-
- load->view('system/infocenter/logs.php'); ?> -
-
-
-
-
-
-
- -
-
-
- - +
+
+
+ load->view('system/infocenter/logs.php'); ?> +
+
+
+
+
+
+
+ + + + + + +load->view('templates/FHC-Footer', $includesArray); ?> -load->view('templates/FHC-Footer'); ?> diff --git a/application/views/system/infocenter/infocenterFreigegeben.php b/application/views/system/infocenter/infocenterFreigegeben.php index 4855e5cd6..d3e44ea95 100644 --- a/application/views/system/infocenter/infocenterFreigegeben.php +++ b/application/views/system/infocenter/infocenterFreigegeben.php @@ -3,13 +3,13 @@ 'templates/FHC-Header', array( 'title' => 'Info Center', - 'jquery' => true, - 'jqueryui' => true, - 'jquerycheckboxes' => true, - 'bootstrap' => true, - 'fontawesome' => true, - 'sbadmintemplate' => true, - 'tablesorter' => true, + 'jquery3' => true, + 'jqueryui1' => true, + 'jquerycheckboxes1' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, + 'sbadmintemplate3' => true, + 'tablesorter2' => true, 'ajaxlib' => true, 'filterwidget' => true, 'navigationwidget' => true, diff --git a/application/views/system/infocenter/infocenterReihungstestAbsolviert.php b/application/views/system/infocenter/infocenterReihungstestAbsolviert.php index f2d838fac..71a7a1d5e 100644 --- a/application/views/system/infocenter/infocenterReihungstestAbsolviert.php +++ b/application/views/system/infocenter/infocenterReihungstestAbsolviert.php @@ -3,13 +3,13 @@ 'templates/FHC-Header', array( 'title' => 'Info Center', - 'jquery' => true, - 'jqueryui' => true, - 'jquerycheckboxes' => true, - 'bootstrap' => true, - 'fontawesome' => true, - 'sbadmintemplate' => true, - 'tablesorter' => true, + 'jquery3' => true, + 'jqueryui1' => true, + 'jquerycheckboxes1' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, + 'sbadmintemplate3' => true, + 'tablesorter2' => true, 'ajaxlib' => true, 'filterwidget' => true, 'navigationwidget' => true, diff --git a/application/views/system/infocenter/infocenterZgvDetails.php b/application/views/system/infocenter/infocenterZgvDetails.php index 62fefbec8..cf3ffad8b 100644 --- a/application/views/system/infocenter/infocenterZgvDetails.php +++ b/application/views/system/infocenter/infocenterZgvDetails.php @@ -3,15 +3,15 @@ 'templates/FHC-Header', array( 'title' => 'InfocenterZgvDetails', - 'jquery' => true, - 'bootstrap' => true, - 'fontawesome' => true, - 'jqueryui' => true, + 'jquery3' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, + 'jqueryui1' => true, 'dialoglib' => true, 'ajaxlib' => true, - 'tablesorter' => true, - 'tinymce' => true, - 'sbadmintemplate' => true, + 'tablesorter2' => true, + 'tinymce4' => true, + 'sbadmintemplate3' => true, 'addons' => true, 'navigationwidget' => true, 'udfs' => true, @@ -129,15 +129,11 @@ - + - + diff --git a/application/views/system/infocenter/infocenterZgvUeberpruefung.php b/application/views/system/infocenter/infocenterZgvUeberpruefung.php index e0b8f9eae..7b285edb2 100644 --- a/application/views/system/infocenter/infocenterZgvUeberpruefung.php +++ b/application/views/system/infocenter/infocenterZgvUeberpruefung.php @@ -3,13 +3,13 @@ $this->load->view( 'templates/FHC-Header', array( 'title' => 'Info Center', - 'jquery' => true, - 'jqueryui' => true, - 'jquerycheckboxes' => true, - 'bootstrap' => true, - 'fontawesome' => true, - 'sbadmintemplate' => true, - 'tablesorter' => true, + 'jquery3' => true, + 'jqueryui1' => true, + 'jquerycheckboxes1' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, + 'sbadmintemplate3' => true, + 'tablesorter2' => true, 'ajaxlib' => true, 'filterwidget' => true, 'navigationwidget' => true, diff --git a/application/views/system/infocenter/studiengangZgvInfo.php b/application/views/system/infocenter/studiengangZgvInfo.php index 1b699d634..8b6d1a636 100644 --- a/application/views/system/infocenter/studiengangZgvInfo.php +++ b/application/views/system/infocenter/studiengangZgvInfo.php @@ -3,10 +3,10 @@ $this->load->view( 'templates/FHC-Header', array( 'title' => 'ZGV Info', - 'jquery' => true, - 'bootstrap' => true, - 'fontawesome' => true, - 'sbadmintemplate' => true, + 'jquery3' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, + 'sbadmintemplate3' => true, 'customCSSs' => 'public/css/sbadmin2/admintemplate_contentonly.css' ) ); @@ -17,7 +17,11 @@ $this->load->view(
- +
@@ -35,3 +39,4 @@ $this->load->view( load->view('templates/FHC-Footer'); ?> + diff --git a/application/views/system/issues/issues.php b/application/views/system/issues/issues.php index 9812528d5..5e8efd547 100644 --- a/application/views/system/issues/issues.php +++ b/application/views/system/issues/issues.php @@ -3,13 +3,13 @@ $this->load->view( 'templates/FHC-Header', array( 'title' => 'Fehler Monitoring', - 'jquery' => true, - 'jqueryui' => true, - 'jquerycheckboxes' => true, - 'bootstrap' => true, - 'fontawesome' => true, - 'sbadmintemplate' => true, - 'tablesorter' => true, + 'jquery3' => true, + 'jqueryui1' => true, + 'jquerycheckboxes1' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, + 'sbadmintemplate3' => true, + 'tablesorter2' => true, 'ajaxlib' => true, 'filterwidget' => true, 'navigationwidget' => true, diff --git a/application/views/system/issues/issuesZustaendigkeiten.php b/application/views/system/issues/issuesZustaendigkeiten.php index c22eaaee5..9a82665a0 100644 --- a/application/views/system/issues/issuesZustaendigkeiten.php +++ b/application/views/system/issues/issuesZustaendigkeiten.php @@ -3,13 +3,13 @@ $this->load->view( 'templates/FHC-Header', array( 'title' => 'Fehler Zuständigkeiten', - 'jquery' => true, - 'jqueryui' => true, - 'jquerycheckboxes' => true, - 'bootstrap' => true, - 'fontawesome' => true, - 'sbadmintemplate' => true, - 'tablesorter' => true, + 'jquery3' => true, + 'jqueryui1' => true, + 'jquerycheckboxes1' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, + 'sbadmintemplate3' => true, + 'tablesorter2' => true, 'ajaxlib' => true, 'filterwidget' => true, 'navigationwidget' => true, diff --git a/application/views/system/jq/jobsQueueViewer.php b/application/views/system/jq/jobsQueueViewer.php index 6d92d610b..bf4e16645 100644 --- a/application/views/system/jq/jobsQueueViewer.php +++ b/application/views/system/jq/jobsQueueViewer.php @@ -3,12 +3,12 @@ 'templates/FHC-Header', array( 'title' => 'Jobs Queue Viewer', - 'jquery' => true, - 'jqueryui' => true, - 'bootstrap' => true, - 'fontawesome' => true, - 'sbadmintemplate' => true, - 'tablesorter' => true, + 'jquery3' => true, + 'jqueryui1' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, + 'sbadmintemplate3' => true, + 'tablesorter2' => true, 'ajaxlib' => true, 'filterwidget' => true, 'navigationwidget' => true, diff --git a/application/views/system/login/usernamePassword.php b/application/views/system/login/usernamePassword.php index 944212b49..ba6062b46 100644 --- a/application/views/system/login/usernamePassword.php +++ b/application/views/system/login/usernamePassword.php @@ -3,11 +3,11 @@ 'templates/FHC-Header', array( 'title' => 'Login', - 'jquery' => true, - 'jqueryui' => true, - 'bootstrap' => true, - 'fontawesome' => true, - 'sbadmintemplate' => true, + 'jquery3' => true, + 'jqueryui1' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, + 'sbadmintemplate3' => true, 'ajaxlib' => true, 'dialoglib' => true, 'customCSSs' => 'public/css/Login.css', diff --git a/application/views/system/logs/logsViewer.php b/application/views/system/logs/logsViewer.php index 86423006b..8749806bc 100644 --- a/application/views/system/logs/logsViewer.php +++ b/application/views/system/logs/logsViewer.php @@ -1,47 +1,41 @@ load->view( - 'templates/FHC-Header', - array( - 'title' => 'Logs Viewer', - 'jquery' => true, - 'jqueryui' => true, - 'bootstrap' => true, - 'fontawesome' => true, - 'sbadmintemplate' => true, - 'tablesorter' => true, - 'ajaxlib' => true, - 'filterwidget' => true, - 'navigationwidget' => true, - 'phrases' => array( - 'global' => array('mailAnXversandt'), - 'ui' => array('bitteEintragWaehlen') - ), - 'customCSSs' => 'public/css/sbadmin2/tablesort_bootstrap.css', - 'customJSs' => array('public/js/bootstrapper.js') - ) + $includesArray = array( + 'title' => 'Logs Viewer', + 'axios027' => true, + 'bootstrap5' => true, + 'fontawesome6' => true, + 'vue3' => true, + 'filtercomponent' => true, + 'navigationcomponent' => true, + 'tabulator5' => true, + 'phrases' => array( + 'global' => array('mailAnXversandt'), + 'ui' => array('bitteEintragWaehlen') + ), + 'customJSModules' => array('public/js/apps/LogsViewer/LogsViewer.js') ); + + $this->load->view('templates/FHC-Header', $includesArray); ?> - -
+
- widgetlib->widget('NavigationWidget'); ?> + + -
-
-
-
- -
-
-
- load->view('system/logs/logsViewerData.php'); ?> -
+
+
+ + +
- -load->view('templates/FHC-Footer'); ?> +load->view('templates/FHC-Footer', $includesArray); ?> + diff --git a/application/views/system/logs/logsViewerData.php b/application/views/system/logs/logsViewerData.php deleted file mode 100644 index f8476df6a..000000000 --- a/application/views/system/logs/logsViewerData.php +++ /dev/null @@ -1,66 +0,0 @@ - ' - SELECT wsl.webservicelog_id AS "LogId", - wsl.request_id AS "RequestId", - wsl.execute_time AS "ExecutionTime", - wsl.execute_user AS "ExecutedBy", - wsl.beschreibung AS "Description", - wsl.request_data AS "Data", - wsl.webservicetyp_kurzbz AS "WebserviceType" - FROM system.tbl_webservicelog wsl - ORDER BY wsl.execute_time DESC - ', - 'requiredPermissions' => 'admin', - 'datasetRepresentation' => 'tablesorter', - 'columnsAliases' => array( - 'Log id', - 'Request id', - 'Execution time', - 'Executed by', - 'Producer', - 'Data', - 'Webservice type' - ), - 'formatRow' => function($datasetRaw) { - - $datasetRaw->ExecutionTime = date_format(date_create($datasetRaw->ExecutionTime), 'd.m.Y H:i:s:u'); - - return $datasetRaw; - }, - 'markRow' => function($datasetRaw) { - - $mark = ''; - - if (strpos($datasetRaw->RequestId, 'error') != false) - { - $mark = 'text-red'; - } - - if (strpos($datasetRaw->RequestId, 'info') != false) - { - $mark = 'text-green'; - } - - if (strpos($datasetRaw->RequestId, 'warning') != false) - { - $mark = 'text-orange'; - } - - if (strpos($datasetRaw->RequestId, 'debug') != false) - { - $mark = 'text-info'; - } - - return $mark; - } - ); - - $filterWidgetArray['app'] = 'core'; - $filterWidgetArray['datasetName'] = 'logs'; - $filterWidgetArray['filter_id'] = $this->input->get('filter_id'); - - echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray); -?> - diff --git a/application/views/system/logs/testSearch.php b/application/views/system/logs/testSearch.php new file mode 100644 index 000000000..882b953f5 --- /dev/null +++ b/application/views/system/logs/testSearch.php @@ -0,0 +1,60 @@ + 'Test Search', + 'jquery3' => true, + 'bootstrap5' => true, + 'fontawesome6' => true, + 'tablesorter2' => true, + 'vue3' => true, + 'ajaxlib' => true, + 'jqueryui1' => true, + 'filtercomponent' => true, + 'navigationcomponent' => true, + 'phrases' => array( + 'global' => array('mailAnXversandt'), + 'ui' => array('bitteEintragWaehlen') + ), + 'customCSSs' => array( + 'public/css/components/verticalsplit.css', + 'public/css/components/searchbar.css', + ), + 'customJSs' => array('vendor/axios/axios/axios.min.js'), + 'customJSModules' => array('public/js/apps/TestSearch.js') + ); + + $this->load->view('templates/FHC-Header', $includesArray); +?> + +
+ + + + +
+
+
+ +
+
+
+ + + + + + + + +
+
+
+ +load->view('templates/FHC-Footer', $includesArray); ?> + diff --git a/application/views/system/messages/ajaxRead.php b/application/views/system/messages/ajaxRead.php index f7d60a68d..2cb88708e 100644 --- a/application/views/system/messages/ajaxRead.php +++ b/application/views/system/messages/ajaxRead.php @@ -3,16 +3,16 @@ 'templates/FHC-Header', array( 'title' => 'Read personal messages', - 'jquery' => true, - 'jqueryui' => true, - 'bootstrap' => true, - 'fontawesome' => true, - 'sbadmintemplate' => true, - 'momentjs' => true, - 'tabulator' => true, + 'jquery3' => true, + 'jqueryui1' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, + 'sbadmintemplate3' => true, + 'momentjs2' => true, + 'tabulator4' => true, 'ajaxlib' => true, 'dialoglib' => true, - 'tinymce' => true, + 'tinymce4' => true, 'phrases' => array('global', 'ui'), 'customCSSs' => array('public/css/sbadmin2/admintemplate_contentonly.css', 'public/css/messaging/message.css'), 'customJSs' => array('public/js/bootstrapper.js', 'public/js/messaging/read.js') diff --git a/application/views/system/messages/ajaxWrite.php b/application/views/system/messages/ajaxWrite.php index de3d79806..3b1582f22 100644 --- a/application/views/system/messages/ajaxWrite.php +++ b/application/views/system/messages/ajaxWrite.php @@ -3,14 +3,14 @@ 'templates/FHC-Header', array( 'title' => 'Write a new message', - 'jquery' => true, - 'jqueryui' => true, - 'bootstrap' => true, - 'fontawesome' => true, - 'sbadmintemplate' => true, + 'jquery3' => true, + 'jqueryui1' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, + 'sbadmintemplate3' => true, 'ajaxlib' => true, 'dialoglib' => true, - 'tinymce' => true, + 'tinymce4' => true, 'phrases' => array('global', 'ui'), 'customCSSs' => array('public/css/sbadmin2/admintemplate_contentonly.css', 'public/css/messaging/message.css'), 'customJSs' => array('public/js/bootstrapper.js', 'public/js/messaging/write.js') diff --git a/application/views/system/messages/ajaxWriteReply.php b/application/views/system/messages/ajaxWriteReply.php index 3721565e9..0a496c93e 100644 --- a/application/views/system/messages/ajaxWriteReply.php +++ b/application/views/system/messages/ajaxWriteReply.php @@ -3,14 +3,14 @@ 'templates/FHC-Header', array( 'title' => 'Reply to a message', - 'jquery' => true, - 'jqueryui' => true, - 'bootstrap' => true, - 'fontawesome' => true, - 'sbadmintemplate' => true, + 'jquery3' => true, + 'jqueryui1' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, + 'sbadmintemplate3' => true, 'ajaxlib' => true, 'dialoglib' => true, - 'tinymce' => true, + 'tinymce4' => true, 'phrases' => array('global', 'ui'), 'customCSSs' => array('public/css/sbadmin2/admintemplate_contentonly.css', 'public/css/messaging/message.css'), 'customJSs' => array('public/js/bootstrapper.js', 'public/js/messaging/writeReply.js') diff --git a/application/views/system/messages/htmlMessageSentError.php b/application/views/system/messages/htmlMessageSentError.php index 90191fcf0..f8a0f8491 100644 --- a/application/views/system/messages/htmlMessageSentError.php +++ b/application/views/system/messages/htmlMessageSentError.php @@ -3,10 +3,10 @@ 'templates/FHC-Header', array( 'title' => 'Message sent failure - Fehler beim Senden der Nachricht', - 'jquery' => true, - 'bootstrap' => true, - 'fontawesome' => true, - 'sbadmintemplate' => true, + 'jquery3' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, + 'sbadmintemplate3' => true, 'customCSSs' => array('public/css/sbadmin2/admintemplate_contentonly.css', 'public/css/messaging/message.css') ) ); diff --git a/application/views/system/messages/htmlMessageSentSuccess.php b/application/views/system/messages/htmlMessageSentSuccess.php index 48409a5f4..91eeab519 100644 --- a/application/views/system/messages/htmlMessageSentSuccess.php +++ b/application/views/system/messages/htmlMessageSentSuccess.php @@ -3,10 +3,10 @@ 'templates/FHC-Header', array( 'title' => 'Message sent successfully - Nachricht erfolgreich versandt!', - 'jquery' => true, - 'bootstrap' => true, - 'fontawesome' => true, - 'sbadmintemplate' => true, + 'jquery3' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, + 'sbadmintemplate3' => true, 'customCSSs' => array('public/css/sbadmin2/admintemplate_contentonly.css', 'public/css/messaging/message.css') ) ); diff --git a/application/views/system/messages/htmlRead.php b/application/views/system/messages/htmlRead.php index 5413af9f4..35e162b70 100644 --- a/application/views/system/messages/htmlRead.php +++ b/application/views/system/messages/htmlRead.php @@ -3,10 +3,10 @@ 'templates/FHC-Header', array( 'title' => 'Read message - Lies die Nachricht', - 'jquery' => true, - 'bootstrap' => true, - 'fontawesome' => true, - 'sbadmintemplate' => true, + 'jquery3' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, + 'sbadmintemplate3' => true, 'customCSSs' => array('public/css/sbadmin2/admintemplate_contentonly.css', 'public/css/messaging/message.css') ) ); diff --git a/application/views/system/messages/htmlWriteReply.php b/application/views/system/messages/htmlWriteReply.php index fa3390bfa..9106d802b 100644 --- a/application/views/system/messages/htmlWriteReply.php +++ b/application/views/system/messages/htmlWriteReply.php @@ -3,11 +3,11 @@ 'templates/FHC-Header', array( 'title' => 'Reply to a message', - 'jquery' => true, - 'bootstrap' => true, - 'fontawesome' => true, - 'tinymce' => true, - 'sbadmintemplate' => true, + 'jquery3' => true, + 'bootstrap3' => true, + 'fontawesome4' => true, + 'tinymce4' => true, + 'sbadmintemplate3' => true, 'customCSSs' => array('public/css/sbadmin2/admintemplate_contentonly.css', 'public/css/messaging/message.css'), 'customJSs' => array('public/js/bootstrapper.js', 'public/js/messaging/messageWriteReply.js') ) diff --git a/application/views/system/messages/htmlWriteTemplate.php b/application/views/system/messages/htmlWriteTemplate.php index 95ab12630..761e05f96 100644 --- a/application/views/system/messages/htmlWriteTemplate.php +++ b/application/views/system/messages/htmlWriteTemplate.php @@ -3,13 +3,13 @@ 'templates/FHC-Header', array( 'title' => 'Write a new message or reply using templates', - 'jquery' => true, - 'jqueryui' => true, - 'bootstrap' => true, + 'jquery3' => true, + 'jqueryui1' => true, + 'bootstrap3' => true, 'ajaxlib' => true, - 'fontawesome' => true, - 'tinymce' => true, - 'sbadmintemplate' => true, + 'fontawesome4' => true, + 'tinymce4' => true, + 'sbadmintemplate3' => true, 'dialoglib' => true, 'widgets' => true, 'customCSSs' => array('public/css/sbadmin2/admintemplate_contentonly.css', 'public/css/messaging/message.css'), @@ -160,7 +160,10 @@ widgetlib->widget( 'Dropdown_widget', - array('elements' => success($recipientsArray), 'emptyElement' => ucfirst($this->p->t('global', 'empfaenger')).'...'), + array( + 'elements' => success($recipientsArray), + 'emptyElement' => ucfirst($this->p->t('global', 'empfaenger')).'...' + ), array( 'name' => 'recipients[]', 'id' => 'recipients' diff --git a/application/views/system/phrases/phraseinhaltEdit.php b/application/views/system/phrases/phraseinhaltEdit.php index 594e8d9dd..388f1dd06 100644 --- a/application/views/system/phrases/phraseinhaltEdit.php +++ b/application/views/system/phrases/phraseinhaltEdit.php @@ -1,5 +1,5 @@ load->view('templates/header', array('title' => 'TemplateEdit', 'jquery' => true, 'textile' => true)); + $this->load->view('templates/header', array('title' => 'TemplateEdit', 'jquery3' => true, 'textile' => true)); ?>
diff --git a/application/views/system/vorlage/templatetextEdit.php b/application/views/system/vorlage/templatetextEdit.php index 40ebd1599..42efc1519 100644 --- a/application/views/system/vorlage/templatetextEdit.php +++ b/application/views/system/vorlage/templatetextEdit.php @@ -1,5 +1,5 @@ load->view('templates/header', array('title' => 'VorlageEdit', 'tinymce' => true, 'jsonforms' => true)); + $this->load->view('templates/header', array('title' => 'VorlageEdit', 'tinymce4' => true, 'jsonforms' => true)); ?>
diff --git a/application/views/templates/FHC-Common.php b/application/views/templates/FHC-Common.php new file mode 100644 index 000000000..dd1d8ae1c --- /dev/null +++ b/application/views/templates/FHC-Common.php @@ -0,0 +1,46 @@ + +config->item('index_page'); + $calledPath = $this->router->directory.$this->router->class; + $calledMethod = $this->router->method; + + // By default set the parameters to null + $customJSs = isset($customJSs) ? $customJSs : null; + $customJSModules = isset($customJSModules) ? $customJSModules : null; + + // -------------------------------------------------------------------------------------------------------- + // Javascripts + + // Generates the global object to pass useful parameters to other javascripts + // NOTE: must be called before any other JS include + generateJSDataStorageObject($indexPage, $calledPath, $calledMethod); + + // Generates the global object to pass phrases to javascripts + // NOTE: must be called before including the PhrasesLib.js + if ($phrases != null) generateJSPhrasesStorageObject($phrases); + + // -------------------------------------------------------------------------------------------------------- + // From vendor folder + + // Axios V0.27 + if ($axios027 === true) generateJSsInclude('vendor/axios/axios/dist/axios.min.js'); + + // Securimage JS + if ($captcha3 === true) generateJSsInclude('vendor/dapphp/securimage/securimage.js'); + + // jQuery V3 + if ($jquery3 === true) generateJSsInclude('vendor/components/jquery/jquery.min.js'); + + // jQuery UI + if ($jqueryui1 === true) + { + generateJSsInclude('vendor/components/jqueryui/jquery-ui.min.js'); + generateJSsInclude('vendor/components/jqueryui/ui/i18n/datepicker-de.js'); // datepicker german language file + } + + // jQuery checkboxes + // NOTE: keep it after jQuery includes + if ($jquerycheckboxes1 === true) generateJSsInclude('vendor/rmariuzzo/jquery-checkboxes/dist/jquery.checkboxes-1.0.7.min.js'); + + // jQuery treetable + // NOTE: keep it after jQuery includes + if ($jquerytreetable3 === true) generateJSsInclude('vendor/ludo/jquery-treetable/jquery.treetable.js'); + + // Bootstrap 3 JS + // NOTE: to be kept after jQuery! + if ($bootstrap3 === true) generateJSsInclude('vendor/twbs/bootstrap3/dist/js/bootstrap.min.js'); + + // Bootstrap 5 JS + if ($bootstrap5 === true) generateJSsInclude('vendor/twbs/bootstrap5/dist/js/bootstrap.min.js'); + + // Moment JS + if ($momentjs2 === true) + { + generateJSsInclude('vendor/moment/momentjs/min/moment.min.js'); + generateJSsInclude('vendor/moment/momentjs/locale/de-at.js'); + generateJSsInclude('vendor/moment/momentjs/locale/en-ie.js'); + } + + // PivotUI JS + if ($pivotui2 === true) generateJSsInclude('vendor/nicolaskruchten/pivottable/dist/pivot.min.js'); + + // SB Admin 2 template JS + if ($sbadmintemplate3 === true) + { + generateJSsInclude('vendor/blackrockdigital/startbootstrap-sb-admin-2/vendor/metisMenu/metisMenu.min.js'); + generateJSsInclude('vendor/blackrockdigital/startbootstrap-sb-admin-2/dist/js/sb-admin-2.min.js'); + generateBackwardCompatibleJSMsIe('vendor/afarkas/html5shiv/dist/html5shiv.min.js'); + generateBackwardCompatibleJSMsIe('vendor/scottjehl/respond/dest/respond.min.js'); + } + + // Table sorter JS + if ($tablesorter2 === true) + { + generateJSsInclude('vendor/mottie/tablesorter/dist/js/jquery.tablesorter.min.js'); + generateJSsInclude('vendor/mottie/tablesorter/dist/js/jquery.tablesorter.widgets.min.js'); + generateJSsInclude('vendor/mottie/tablesorter/dist/js/extras/jquery.tablesorter.pager.min.js'); + } + + // Tabulator 4 JS + if ($tabulator4 === true) + { + generateJSsInclude('vendor/olifolkerd/tabulator4/dist/js/tabulator.min.js'); + generateJSsInclude('vendor/olifolkerd/tabulator4/dist/js/jquery_wrapper.min.js'); + } + + // Tabulator 5 JS + if ($tabulator5 === true) generateJSsInclude('vendor/olifolkerd/tabulator5/dist/js/tabulator.min.js'); + + // Tinymce 4 JS + if ($tinymce4 === true) generateJSsInclude('vendor/tinymce/tinymce4/tinymce.min.js'); + + // Tinymce 5 JS + if ($tinymce5 === true) generateJSsInclude('vendor/tinymce/tinymce5/tinymce.min.js'); + + // Vue 3 JS + if ($vue3 === true) + { + generateJSsInclude('vendor/vuejs/vuejs3/vue.global.prod.js'); + generateJSsInclude('vendor/vuejs/vuerouter4/vue-router.global.js'); + } + + // PrimeVue + if ($primevue3) + { + generateJSsInclude('vendor/npm-asset/primevue/core/core.min.js'); + generateJSsInclude('vendor/npm-asset/primevue/organizationchart/organizationchart.min.js'); + generateJSsInclude('vendor/npm-asset/primevue/treetable/treetable.min.js'); + generateJSsInclude('vendor/npm-asset/primevue/column/column.min.js'); + generateJSsInclude('vendor/npm-asset/primevue/calendar/calendar.min.js'); + generateJSsInclude('vendor/npm-asset/primevue/skeleton/skeleton.min.js'); + } + + // -------------------------------------------------------------------------------------------------------- + // From public folder + + // DialogLib JS + // NOTE: must be called before including others JS libraries that use it + if ($dialoglib === true) generateJSsInclude('public/js/DialogLib.js'); + + // AjaxLib JS + // NOTE: must be called before including others JS libraries that use it + if ($ajaxlib === true) generateJSsInclude('public/js/AjaxLib.js'); + + // Bootstrapper include + // NOTE: to be used only if you know what you are doing! + if ($bootstrapper === true) generateJSsInclude('public/js/bootstrapper.js'); + + // NavigationWidget JS + if ($navigationwidget === true) generateJSsInclude('public/js/NavigationWidget.js'); + + // FilterWidget JS + if ($filterwidget === true) generateJSsInclude('public/js/FilterWidget.js'); + + // PhrasesLib JS + if ($phrases != null) generateJSsInclude('public/js/PhrasesLib.js'); + + // TableWidget JS + if ($tablewidget === true) generateJSsInclude('public/js/TableWidget.js'); + + // User Defined Fields + if ($udfs === true) generateJSsInclude('public/js/UDFWidget.js'); + + // Load addon hooks JS + // NOTE: keep it as the last but one + if ($addons === true) generateAddonsJSsInclude($calledPath.'/'.$calledMethod); + + // Eventually required JS + // NOTE: keep it as the latest + generateJSsInclude($customJSs); + generateJSModulesInclude($customJSModules); +?> + + + diff --git a/application/views/templates/FHC-Header.php b/application/views/templates/FHC-Header.php index 8620f8d1c..aa63541c5 100644 --- a/application/views/templates/FHC-Header.php +++ b/application/views/templates/FHC-Header.php @@ -1,45 +1,17 @@ config->item('index_page'); - $calledPath = $this->router->directory.$this->router->class; - $calledMethod = $this->router->method; + // Defines the includes variables + require('FHC-Common.php'); + // All the following variables are used only in this view // By default set the parameters to null $title = isset($title) ? $title : null; $refresh = isset($refresh) ? $refresh : null; $customCSSs = isset($customCSSs) ? $customCSSs : null; - $customJSs = isset($customJSs) ? $customJSs : null; - $phrases = isset($phrases) ? $phrases : null; - - // By default set the parameters to false - $addons = isset($addons) ? $addons : false; - $ajaxlib = isset($ajaxlib) ? $ajaxlib : false; - $bootstrap = isset($bootstrap) ? $bootstrap : false; - $captcha = isset($captcha) ? $captcha : false; - $dialoglib = isset($dialoglib) ? $dialoglib : false; - $filterwidget = isset($filterwidget) ? $filterwidget : false; - $fontawesome = isset($fontawesome) ? $fontawesome : false; - $jquery = isset($jquery) ? $jquery : false; - $jqueryui = isset($jqueryui) ? $jqueryui : false; - $jquerycheckboxes = isset($jquerycheckboxes) ? $jquerycheckboxes : false; - $jquerytreetable = isset($jquerytreetable) ? $jquerytreetable : false; - $momentjs = isset($momentjs) ? $momentjs : false; - $navigationwidget = isset($navigationwidget) ? $navigationwidget : false; - $pivotui = isset($pivotui) ? $pivotui : false; - $sbadmintemplate = isset($sbadmintemplate) ? $sbadmintemplate : false; - $tablesorter = isset($tablesorter) ? $tablesorter : false; - $tablewidget = isset($tablewidget) ? $tablewidget : false; - $tabulator = isset($tabulator) ? $tabulator : false; - $tinymce = isset($tinymce) ? $tinymce : false; - $udfs = isset($udfs) ? $udfs : false; - $widgets = isset($widgets) ? $widgets : false; ?> - + @@ -58,47 +30,69 @@ // -------------------------------------------------------------------------------------------------------- // From vendor folder - // jQuery UI CSS - if ($jqueryui === true) generateCSSsInclude('vendor/components/jqueryui/themes/base/jquery-ui.min.css'); + // Securimage CSS + if ($captcha3 === true) generateCSSsInclude('vendor/dapphp/securimage/securimage.css'); - // Bootstrap CSS - if ($bootstrap === true) generateCSSsInclude('vendor/twbs/bootstrap/dist/css/bootstrap.min.css'); + // Font Awesome 4 CSS free icons + if ($fontawesome4 === true) generateCSSsInclude('vendor/fortawesome/font-awesome4/css/font-awesome.min.css'); + + // Font Awesome 6 CSS free icons + if ($fontawesome6 === true) + { + generateCSSsInclude('vendor/fortawesome/font-awesome6/css/fontawesome.min.css'); + generateCSSsInclude('vendor/fortawesome/font-awesome6/css/solid.min.css'); + generateCSSsInclude('vendor/fortawesome/font-awesome6/css/brands.min.css'); + } + + // jQuery UI CSS + if ($jqueryui1 === true) generateCSSsInclude('vendor/components/jqueryui/themes/base/jquery-ui.min.css'); // jQuery treetable - if ($jquerytreetable === true) generateCSSsInclude('vendor/ludo/jquery-treetable/css/jquery.treetable.css'); + if ($jquerytreetable3 === true) generateCSSsInclude('vendor/ludo/jquery-treetable/css/jquery.treetable.css'); - // Font Awesome CSS - if ($fontawesome === true) generateCSSsInclude('vendor/components/font-awesome/css/font-awesome.min.css'); + // Bootstrap 3 CSS + if ($bootstrap3 === true) generateCSSsInclude('vendor/twbs/bootstrap3/dist/css/bootstrap.min.css'); + + // Bootstrap 5 CSS + if ($bootstrap5 === true) generateCSSsInclude('vendor/twbs/bootstrap5/dist/css/bootstrap.min.css'); // PivotUI CSS - if ($pivotui === true) generateCSSsInclude('vendor/nicolaskruchten/pivottable/dist/pivot.min.css'); + if ($pivotui2 === true) generateCSSsInclude('vendor/nicolaskruchten/pivottable/dist/pivot.min.css'); // SB Admin 2 template CSS - if ($sbadmintemplate === true) + if ($sbadmintemplate3 === true) { - generateCSSsInclude('vendor/BlackrockDigital/startbootstrap-sb-admin-2/vendor/metisMenu/metisMenu.min.css'); - generateCSSsInclude('vendor/BlackrockDigital/startbootstrap-sb-admin-2/dist/css/sb-admin-2.min.css'); + generateCSSsInclude('vendor/blackrockdigital/startbootstrap-sb-admin-2/vendor/metisMenu/metisMenu.min.css'); + generateCSSsInclude('vendor/blackrockdigital/startbootstrap-sb-admin-2/dist/css/sb-admin-2.min.css'); } - // Securimage CSS - if ($captcha === true) generateCSSsInclude('vendor/dapphp/securimage/securimage.css'); - // Table sorter CSS - if ($tablesorter === true) - { - generateCSSsInclude('vendor/mottie/tablesorter/dist/css/theme.default.min.css'); - generateCSSsInclude('vendor/mottie/tablesorter/dist/css/jquery.tablesorter.pager.min.css'); - } + if ($tablesorter2 === true) generateCSSsInclude('vendor/mottie/tablesorter/dist/css/theme.default.min.css'); - // Tabulator CSS - if ($tabulator === true) + // Tabulator 4 CSS + if ($tabulator4 === true) { - generateCSSsInclude('vendor/olifolkerd/tabulator/dist/css/bootstrap/tabulator_bootstrap.min.css'); + generateCSSsInclude('vendor/olifolkerd/tabulator4/dist/css/bootstrap/tabulator_bootstrap.min.css'); generateCSSsInclude('public/css/Tabulator.css'); } - // Tinymce CSS - if ($tinymce === true) generateCSSsInclude('public/css/TinyMCE.css'); + // Tabulator 5 CSS + if ($tabulator5 === true) generateCSSsInclude('vendor/olifolkerd/tabulator5/dist/css/tabulator_bootstrap5.min.css'); + + // Tinymce 4 CSS + if ($tinymce4 === true) generateCSSsInclude('public/css/TinyMCE4.css'); + + // Tinymce 5 CSS + if ($tinymce5 === true) generateCSSsInclude('public/css/TinyMCE5.css'); + + // PrimeVUE + if ($primevue3 === true) + { + generateCSSsInclude('vendor/npm-asset/primevue/resources/themes/bootstrap4-light-blue/theme.css'); + generateCSSsInclude('vendor/npm-asset/primevue/resources/primevue.min.css'); + // generateCSSsInclude('vendor/npm-asset/primevue/resources/primeflex.min.css'); + generateCSSsInclude('vendor/npm-asset/primeicons/primeicons.css'); + } // -------------------------------------------------------------------------------------------------------- // From public folder @@ -109,9 +103,15 @@ // DialogLib CSS if ($dialoglib === true) generateCSSsInclude('public/css/DialogLib.css'); + // VUE FilterWidget CSS + if ($filtercomponent === true) generateCSSsInclude('public/css/components/FilterComponent.css'); + // FilterWidget CSS if ($filterwidget === true) generateCSSsInclude('public/css/FilterWidget.css'); + // VUE NavigationWidget CSS + if ($navigationcomponent === true) generateCSSsInclude('public/css/components/NavigationComponent.css'); + // NavigationWidget CSS if ($navigationwidget === true) generateCSSsInclude('public/css/NavigationWidget.css'); @@ -120,117 +120,9 @@ // Eventually required CSS generateCSSsInclude($customCSSs); // Eventually required CSS - - - // -------------------------------------------------------------------------------------------------------- - // Javascripts - - // Generates the global object to pass useful parameters to other javascripts - // NOTE: must be called before any other JS include - generateJSDataStorageObject($indexPage, $calledPath, $calledMethod); - - // Generates the global object to pass phrases to javascripts - // NOTE: must be called before including the PhrasesLib.js - if ($phrases != null) generateJSPhrasesStorageObject($phrases); - - // -------------------------------------------------------------------------------------------------------- - // From vendor folder - - // jQuery V3 - if ($jquery === true) generateJSsInclude('vendor/components/jquery/jquery.min.js'); - - // jQuery UI - if ($jqueryui === true) - { - generateJSsInclude('vendor/components/jqueryui/jquery-ui.min.js'); - generateJSsInclude('vendor/components/jqueryui/ui/i18n/datepicker-de.js'); // datepicker german language file - } - - // jQuery checkboxes - // NOTE: keep it after jQuery includes - if ($jquerycheckboxes === true) generateJSsInclude('vendor/rmariuzzo/jquery-checkboxes/dist/jquery.checkboxes-1.0.7.min.js'); - // jQuery treetable - // NOTE: keep it after jQuery includes - if ($jquerytreetable === true) generateJSsInclude('vendor/ludo/jquery-treetable/jquery.treetable.js'); - - // Bootstrap JS - if ($bootstrap === true) generateJSsInclude('vendor/twbs/bootstrap/dist/js/bootstrap.min.js'); - - // SB Admin 2 template JS - if ($sbadmintemplate === true) - { - generateJSsInclude('vendor/BlackrockDigital/startbootstrap-sb-admin-2/vendor/metisMenu/metisMenu.min.js'); - generateJSsInclude('vendor/BlackrockDigital/startbootstrap-sb-admin-2/dist/js/sb-admin-2.min.js'); - generateBackwardCompatibleJSMsIe('vendor/afarkas/html5shiv/dist/html5shiv.min.js'); - generateBackwardCompatibleJSMsIe('vendor/scottjehl/Respond/dest/respond.min.js'); - } - - // Securimage JS - if ($captcha === true) generateJSsInclude('vendor/dapphp/securimage/securimage.js'); - - // Moment JS - if ($momentjs === true) - { - generateJSsInclude('vendor/moment/momentjs/min/moment.min.js'); - generateJSsInclude('vendor/moment/momentjs/locale/de-at.js'); - generateJSsInclude('vendor/moment/momentjs/locale/en-ie.js'); - } - - // PivotUI JS - if ($pivotui === true) generateJSsInclude('vendor/nicolaskruchten/pivottable/dist/pivot.min.js'); - - // Table sorter JS - if ($tablesorter === true) - { - generateJSsInclude('vendor/mottie/tablesorter/dist/js/jquery.tablesorter.min.js'); - generateJSsInclude('vendor/mottie/tablesorter/dist/js/jquery.tablesorter.widgets.min.js'); - generateJSsInclude('vendor/mottie/tablesorter/dist/js/extras/jquery.tablesorter.pager.min.js'); - } - - // Tabulator JS - if ($tabulator === true) - { - generateJSsInclude('vendor/olifolkerd/tabulator/dist/js/tabulator.min.js'); - generateJSsInclude('vendor/olifolkerd/tabulator/dist/js/jquery_wrapper.min.js'); - } - - // Tinymce JS - if ($tinymce === true) generateJSsInclude('vendor/tinymce/tinymce/tinymce.min.js'); - - // -------------------------------------------------------------------------------------------------------- - // From public folder - - // DialogLib JS - // NOTE: must be called before including others JS libraries that use it - if ($dialoglib === true) generateJSsInclude('public/js/DialogLib.js'); - - // AjaxLib JS - // NOTE: must be called before including others JS libraries that use it - if ($ajaxlib === true) generateJSsInclude('public/js/AjaxLib.js'); - - // FilterWidget JS - if ($filterwidget === true) generateJSsInclude('public/js/FilterWidget.js'); - - // NavigationWidget JS - if ($navigationwidget === true) generateJSsInclude('public/js/NavigationWidget.js'); - - // PhrasesLib JS - if ($phrases != null) generateJSsInclude('public/js/PhrasesLib.js'); - - // TableWidget JS - if ($tablewidget === true) generateJSsInclude('public/js/TableWidget.js'); - - // User Defined Fields - if ($udfs === true) generateJSsInclude('public/js/UDFWidget.js'); - - // Load addon hooks JS - // NOTE: keep it as the last but one - if ($addons === true) generateAddonsJSsInclude($calledPath.'/'.$calledMethod); - - // Eventually required JS - // NOTE: keep it as the latest - generateJSsInclude($customJSs); ?> - + + + diff --git a/application/views/templates/header.php b/application/views/templates/header.php index fa2cc127a..637eb3c7a 100644 --- a/application/views/templates/header.php +++ b/application/views/templates/header.php @@ -41,12 +41,12 @@ if($jqueryV1 && $jqueryV2) show_error("Two JQuery versions used: composer and in - + - + @@ -95,7 +95,7 @@ if($jqueryV1 && $jqueryV2) show_error("Two JQuery versions used: composer and in - + @@ -103,13 +103,13 @@ if($jqueryV1 && $jqueryV2) show_error("Two JQuery versions used: composer and in - - + + - - + + @@ -117,3 +117,4 @@ if($jqueryV1 && $jqueryV2) show_error("Two JQuery versions used: composer and in + diff --git a/cis/ampel.php b/cis/ampel.php index 6ef07e3ab..b68b9ec38 100644 --- a/cis/ampel.php +++ b/cis/ampel.php @@ -8,7 +8,7 @@ require_once('../include/phrasen.class.php'); $sprache = getSprache(); $p = new phrasen($sprache); ?> - + + - + + diff --git a/cis/menu.php b/cis/menu.php index 4f68b9159..ee8267773 100644 --- a/cis/menu.php +++ b/cis/menu.php @@ -42,7 +42,7 @@ ob_start(); Menu - + diff --git a/cis/private/bildupload.php b/cis/private/bildupload.php index b8ce66422..7e175957b 100644 --- a/cis/private/bildupload.php +++ b/cis/private/bildupload.php @@ -37,10 +37,10 @@ echo ' - + - - + + '.$p->t('profil/Bildupload').' diff --git a/cis/private/coodle/stammdaten.php b/cis/private/coodle/stammdaten.php index 17e19a4fc..ba2549afd 100644 --- a/cis/private/coodle/stammdaten.php +++ b/cis/private/coodle/stammdaten.php @@ -64,7 +64,7 @@ echo ' - + diff --git a/cis/private/coodle/termin.php b/cis/private/coodle/termin.php index dd61878c0..6b3000e78 100644 --- a/cis/private/coodle/termin.php +++ b/cis/private/coodle/termin.php @@ -181,7 +181,7 @@ echo ' - + diff --git a/cis/private/coodle/uebersicht.php b/cis/private/coodle/uebersicht.php index 94a7b9ab1..c9ca09618 100644 --- a/cis/private/coodle/uebersicht.php +++ b/cis/private/coodle/uebersicht.php @@ -62,7 +62,7 @@ echo ' - + diff --git a/cis/private/info/ersthelfer.php b/cis/private/info/ersthelfer.php index 12805c5b9..6ae553baf 100644 --- a/cis/private/info/ersthelfer.php +++ b/cis/private/info/ersthelfer.php @@ -49,7 +49,7 @@ if(check_lektor($user)) - + @@ -315,4 +315,4 @@ if(check_lektor($user)) - \ No newline at end of file + diff --git a/cis/private/info/partnerhochschulen.php b/cis/private/info/partnerhochschulen.php index 1bcaa9520..2a448ee61 100644 --- a/cis/private/info/partnerhochschulen.php +++ b/cis/private/info/partnerhochschulen.php @@ -46,7 +46,7 @@ echo ' - + diff --git a/cis/private/info/service_uebersicht.php b/cis/private/info/service_uebersicht.php index 60a751927..27759e6c6 100644 --- a/cis/private/info/service_uebersicht.php +++ b/cis/private/info/service_uebersicht.php @@ -46,7 +46,7 @@ echo ' - + diff --git a/cis/private/info/telefonverzeichnis.php b/cis/private/info/telefonverzeichnis.php index fe276b85b..02db1575a 100644 --- a/cis/private/info/telefonverzeichnis.php +++ b/cis/private/info/telefonverzeichnis.php @@ -64,7 +64,7 @@ if(check_lektor($user)) - + diff --git a/cis/private/lehre/abgabe_lektor.php b/cis/private/lehre/abgabe_lektor.php index 414c5e423..70f80f7ba 100644 --- a/cis/private/lehre/abgabe_lektor.php +++ b/cis/private/lehre/abgabe_lektor.php @@ -128,7 +128,7 @@ echo ' - + diff --git a/cis/private/lehre/abgabe_lektor_terminuebersicht.php b/cis/private/lehre/abgabe_lektor_terminuebersicht.php index 0cc558e4a..00ed8e5c6 100644 --- a/cis/private/lehre/abgabe_lektor_terminuebersicht.php +++ b/cis/private/lehre/abgabe_lektor_terminuebersicht.php @@ -41,7 +41,7 @@ echo ' - + diff --git a/cis/private/lehre/abgabe_student.php b/cis/private/lehre/abgabe_student.php index 2a328dd35..5a2e41f4b 100644 --- a/cis/private/lehre/abgabe_student.php +++ b/cis/private/lehre/abgabe_student.php @@ -217,7 +217,7 @@ echo ' - + diff --git a/cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php b/cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php index 916f2b4e3..1cfa4a4e2 100644 --- a/cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php +++ b/cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php @@ -112,7 +112,7 @@ echo ' - + diff --git a/cis/private/lehre/benotungstool/notenschluessel.php b/cis/private/lehre/benotungstool/notenschluessel.php index 93de334e2..a7185f2ce 100644 --- a/cis/private/lehre/benotungstool/notenschluessel.php +++ b/cis/private/lehre/benotungstool/notenschluessel.php @@ -47,7 +47,7 @@ echo ' - + diff --git a/cis/private/lehre/covidstatusliste.php b/cis/private/lehre/covidstatusliste.php index affe2b929..a5b2694bc 100644 --- a/cis/private/lehre/covidstatusliste.php +++ b/cis/private/lehre/covidstatusliste.php @@ -81,8 +81,8 @@ header('Content-Type: text/html; charset=utf-8'); FHC - Nachweisliste - - + + @@ -163,4 +163,4 @@ print_r($covidstatus);
- \ No newline at end of file + diff --git a/cis/private/lehre/lesson.php b/cis/private/lehre/lesson.php index 4d8c872a1..756572ae7 100644 --- a/cis/private/lehre/lesson.php +++ b/cis/private/lehre/lesson.php @@ -102,7 +102,8 @@ if (isset($_GET["handbuch"])){ - + + diff --git a/cis/private/lehre/notenliste.php b/cis/private/lehre/notenliste.php index 00a07b480..59eafde95 100644 --- a/cis/private/lehre/notenliste.php +++ b/cis/private/lehre/notenliste.php @@ -52,7 +52,7 @@ echo ' - + diff --git a/cis/private/lvplan/index.php b/cis/private/lvplan/index.php index 260ee8066..7e7e8e28e 100644 --- a/cis/private/lvplan/index.php +++ b/cis/private/lvplan/index.php @@ -114,7 +114,7 @@ $num_rows_lektor=$db->db_num_rows($result_lektor);*/ Lehrveranstaltungsplan - + diff --git a/cis/private/lvplan/raumsuche.php b/cis/private/lvplan/raumsuche.php index 0edbcbb8e..0cb9677d4 100644 --- a/cis/private/lvplan/raumsuche.php +++ b/cis/private/lvplan/raumsuche.php @@ -48,7 +48,7 @@ echo ' - + diff --git a/cis/private/lvplan/stpl_week_anzahl_studenten.php b/cis/private/lvplan/stpl_week_anzahl_studenten.php index eeec45145..cd69c7dbf 100644 --- a/cis/private/lvplan/stpl_week_anzahl_studenten.php +++ b/cis/private/lvplan/stpl_week_anzahl_studenten.php @@ -50,7 +50,7 @@ Anzahl Studenten Lehrveranstaltungsplan FH Technikum-Wien - + diff --git a/cis/private/mailverteiler.php b/cis/private/mailverteiler.php index 7a0736b05..a46193e72 100644 --- a/cis/private/mailverteiler.php +++ b/cis/private/mailverteiler.php @@ -60,7 +60,7 @@ if(!$is_lector) <?php echo $p->t('mailverteiler/mailverteiler');?> - + diff --git a/cis/private/outgoing/outgoing.php b/cis/private/outgoing/outgoing.php index 6be03532d..62cff05bb 100644 --- a/cis/private/outgoing/outgoing.php +++ b/cis/private/outgoing/outgoing.php @@ -262,7 +262,7 @@ if($method =="deleteFirma") - + diff --git a/cis/private/profile/anwesenheit.php b/cis/private/profile/anwesenheit.php index b75f59cd7..4eb0f6940 100644 --- a/cis/private/profile/anwesenheit.php +++ b/cis/private/profile/anwesenheit.php @@ -81,7 +81,7 @@ if(!$semester || !array_key_exists($semester, $alle_semester)) - + - + diff --git a/cis/private/profile/freebusy.php b/cis/private/profile/freebusy.php index 34cfc05ba..3d84307bb 100644 --- a/cis/private/profile/freebusy.php +++ b/cis/private/profile/freebusy.php @@ -62,7 +62,7 @@ echo ''.$p->t('freebusy/titel').' - + diff --git a/cis/private/profile/index.php b/cis/private/profile/index.php index 512e1fd64..ed3295287 100644 --- a/cis/private/profile/index.php +++ b/cis/private/profile/index.php @@ -154,7 +154,7 @@ echo ' - + diff --git a/cis/private/profile/lva_liste.php b/cis/private/profile/lva_liste.php index 6f78cf8c8..9806b8cc1 100644 --- a/cis/private/profile/lva_liste.php +++ b/cis/private/profile/lva_liste.php @@ -128,7 +128,7 @@ echo ' '.$p->t('lvaliste/titel').' - + + diff --git a/cis/private/profile/studienplan.php b/cis/private/profile/studienplan.php index 6097ed136..70d234c38 100644 --- a/cis/private/profile/studienplan.php +++ b/cis/private/profile/studienplan.php @@ -133,7 +133,7 @@ echo ' - + diff --git a/cis/private/profile/urlaubsfreigabe.php b/cis/private/profile/urlaubsfreigabe.php index f71d7adda..39c7529d1 100644 --- a/cis/private/profile/urlaubsfreigabe.php +++ b/cis/private/profile/urlaubsfreigabe.php @@ -69,7 +69,7 @@ echo ' Urlaubsfreigabe - + diff --git a/cis/private/profile/urlaubstool.php b/cis/private/profile/urlaubstool.php index ce9150dd8..fc77a01d0 100644 --- a/cis/private/profile/urlaubstool.php +++ b/cis/private/profile/urlaubstool.php @@ -536,7 +536,7 @@ $datum_obj = new datum(); - + diff --git a/cis/private/profile/zeitsperre_resturlaub.php b/cis/private/profile/zeitsperre_resturlaub.php index 4a03685dd..16ed393f9 100644 --- a/cis/private/profile/zeitsperre_resturlaub.php +++ b/cis/private/profile/zeitsperre_resturlaub.php @@ -91,7 +91,7 @@ $num_rows_stunde=$db->db_num_rows($result_stunde); <?php echo $p->t('zeitsperre/zeitsperre');?> - + diff --git a/cis/private/profile/zeitwunsch.php b/cis/private/profile/zeitwunsch.php index a448125f6..807caf25a 100644 --- a/cis/private/profile/zeitwunsch.php +++ b/cis/private/profile/zeitwunsch.php @@ -424,9 +424,9 @@ function getStgMail($stgKz_arr) <?php echo $p->t('zeitwunsch/zeitwunsch');?> - - - + + + - + <?php echo $p->t('tools/ampelsystem') ?> diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index ba57b442f..ff8e863e2 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -158,7 +158,7 @@ $angezeigte_tage = '50'; $zs = new zeitsperre(); if ($alle) - $zs->getZeitsperrenForZeitaufzeichnung($user,'180'); + $zs->getZeitsperrenForZeitaufzeichnung($user,'360'); else $zs->getZeitsperrenForZeitaufzeichnung($user,$angezeigte_tage); @@ -197,7 +197,7 @@ echo ' - + @@ -1440,7 +1440,7 @@ if ($projekt->getProjekteMitarbeiter($user, true)) else { if ($alle==true) - $za->getListeUserFull($user, ''); + $za->getListeUserFull($user, '360'); else $za->getListeUserFull($user, $angezeigte_tage); } diff --git a/cis/public/coodle.php b/cis/public/coodle.php index 48c585d6b..7447ac5c2 100644 --- a/cis/public/coodle.php +++ b/cis/public/coodle.php @@ -254,11 +254,11 @@ if (isset($_GET['resend'])) - + - + <?php echo $p->t('coodle/terminauswahl'); ?> - + diff --git a/cis/public/testtool_test/testseite.php b/cis/public/testtool_test/testseite.php index 470fec2c2..da6fee355 100644 --- a/cis/public/testtool_test/testseite.php +++ b/cis/public/testtool_test/testseite.php @@ -24,13 +24,13 @@ echo ''; Testsite MathML - + - +