diff --git a/.gitignore b/.gitignore index 247c57d2e..de95987a8 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,7 @@ application/models/extensions/ application/views/extensions/ application/widgets/extensions/ application/logs/ +public/extensions/ tests/codeception/_output/* !/tests/codeception/_output/.placeholder tests/codeception/codeception.yml diff --git a/application/config/fhcomplete.php b/application/config/fhcomplete.php index 8ee6047c3..fa9c79295 100644 --- a/application/config/fhcomplete.php +++ b/application/config/fhcomplete.php @@ -4,6 +4,5 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); $config['fhc_version'] = '3.2'; -// $config['addons_aufnahme_url'] = array(); -$config['addons_aufnahme_url']['OE_ROOT'] = 'http://debian.dev/addons/aufnahme/OE_ROOT/cis/index.php'; +$config['addons_aufnahme_url']['OE_ROOT'] = 'https://SERVER-NAME/addons/aufnahme/OE_ROOT/cis/index.php'; diff --git a/application/config/navigation.php b/application/config/navigation.php index 6e1c711ed..6ef2fb803 100644 --- a/application/config/navigation.php +++ b/application/config/navigation.php @@ -1,17 +1,12 @@ array( - 'FH-Complete' => base_url('index.ci.php/'), + '*' => array( + 'FH-Complete' => site_url(''), 'Vilesci' => base_url('/vilesci'), 'CIS' => CIS_ROOT ), - 'system/infocenter/InfoCenter/index' => array( - 'FH-Complete' => base_url('index.ci.php/'), - 'Vilesci' => base_url('/vilesci'), - 'CIS' => CIS_ROOT - ), - 'system/infocenter/InfoCenter/showDetails' => array( + 'system/infocenter/InfoCenter/infocenterFreigegeben' => array( 'FH-Complete' => base_url('index.ci.php/'), 'Vilesci' => base_url('/vilesci'), 'CIS' => CIS_ROOT @@ -39,7 +34,7 @@ $config['navigation_menu']['Vilesci/index'] = array( 'expand' => true ), 'Infocenter' => array( - 'link' => base_url('index.ci.php/system/infocenter/InfoCenter'), + 'link' => site_url('/system/infocenter/InfoCenter'), 'icon' => 'info', 'description' => 'Infocenter', 'expand' => true @@ -59,17 +54,35 @@ $config['navigation_menu']['Vilesci/index'] = array( 'expand' => true ), 'Extensions' => array( - 'link' => base_url('index.ci.php/system/extensions/Manager'), + 'link' => site_url('/system/extensions/Manager'), 'icon' => 'cubes', 'description' => 'Extensions Manager', 'expand' => true - ), - 'Datenschutz' => array( - 'link' => base_url('index.ci.php/extensions/FHC-Core-DSMS/export'), - 'description' => 'Datenschutz', - 'icon' => 'legal', - 'expand' => true ) ) ) ); + +//HIDDEN as long as filter is revised +//$config['navigation_menu']['system/infocenter/InfoCenter/index'] = array( +// 'Freigegeben' => array( +// 'link' => base_url('index.ci.php/system/infocenter/InfoCenter/infocenterFreigegeben'), +// 'description' => 'Freigegeben', +// 'icon' => 'thumbs-up' +// )); + +$config['navigation_menu']['system/infocenter/InfoCenter/showDetails'] = array( + 'Freigegeben' => array( + 'link' => base_url('index.ci.php/system/infocenter/InfoCenter/infocenterFreigegeben'), + 'description' => 'Freigegeben', + 'icon' => 'thumbs-up' + )); + +$config['navigation_menu']['system/infocenter/InfoCenter/infocenterFreigegeben'] = array( + 'Zurück' => array( + 'link' => base_url('index.ci.php/system/infocenter/InfoCenter/index'), + 'description' => 'Zurück', + 'icon' => 'angle-left' + )); + + diff --git a/application/controllers/api/v1/system/Phrase.php b/application/controllers/api/v1/system/Phrase.php index ca5620bf8..1a7846cb5 100644 --- a/application/controllers/api/v1/system/Phrase.php +++ b/application/controllers/api/v1/system/Phrase.php @@ -22,11 +22,12 @@ class Phrase extends APIv1_Controller public function __construct() { parent::__construct(array('Phrase' => 'system/phrase:rw', 'Phrases' => 'system/phrase:r')); + $this->load->library('PhrasesLib'); } /** - * @return void + * */ public function getPhrase() { @@ -45,7 +46,7 @@ class Phrase extends APIv1_Controller } /** - * @return void + * */ public function getPhrases() { @@ -69,7 +70,7 @@ class Phrase extends APIv1_Controller } /** - * @return void + * */ public function postPhrase() { @@ -92,6 +93,9 @@ class Phrase extends APIv1_Controller } } + /** + * + */ private function _validate($phrase = null) { return false; diff --git a/application/controllers/system/Filters.php b/application/controllers/system/Filters.php index 1e98abe07..8578b5786 100644 --- a/application/controllers/system/Filters.php +++ b/application/controllers/system/Filters.php @@ -439,6 +439,11 @@ class Filters extends CI_Controller $filterOperationValues = $this->input->post('filterOperationValues'); $filterOptions = $this->input->post('filterOptions'); + if ($fieldNames == null) $fieldNames = array(); + if ($filterOperationValues == null) $filterOperationValues = array(); + if ($filterOperations == null) $filterOperations = array(); + if ($filterOptions == null) $filterOptions = array(); + $activeFilters = array_combine($fieldNames, $filterOperationValues); $activeFiltersOperation = array_combine($fieldNames, $filterOperations); $activeFiltersOption = array_combine($fieldNames, $filterOptions); diff --git a/application/controllers/system/Navigation.php b/application/controllers/system/Navigation.php index 65dfe7901..240172f3e 100644 --- a/application/controllers/system/Navigation.php +++ b/application/controllers/system/Navigation.php @@ -10,7 +10,7 @@ class Navigation extends FHC_Controller const SESSION_NAME = 'NAVIGATION_MENU'; /** - * + * Constructor */ public function __construct() { @@ -23,12 +23,15 @@ class Navigation extends FHC_Controller $this->config->load('navigation'); - // Load session library - $this->load->library('session'); - } + // Load session library + $this->load->library('session'); + $this->load->library('ExtensionsLib'); + } /** - * + * This function creates the left Menu for each Page + * @param navigation_widget_called GET Parameter witch holds the currently called Page + * @return JSON object with the Menu Entries */ public function menu() { @@ -37,16 +40,33 @@ class Navigation extends FHC_Controller if (isset($navigation_widget_called)) { + // Get Menu Entries of the Core $navigationMenuArray = $this->config->item('navigation_menu'); + $json = $this->wildcardsearch($navigationMenuArray, $navigation_widget_called); - if (isset($navigationMenuArray) && is_array($navigationMenuArray)) + // Load Menu Entries of Extensions + $extensions = $this->extensionslib->getInstalledExtensions(); + if(hasData($extensions)) { - if (isset($navigationMenuArray[$navigation_widget_called])) + $json_extension = array(); + foreach($extensions->retval as $ext) { - $json = $navigationMenuArray[$navigation_widget_called]; + $filename = APPPATH.'config/'.ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$ext->name.'/navigation.php'; + if (file_exists($filename)) + { + unset($config); + include($filename); + if(isset($config['navigation_menu']) && is_array($config['navigation_menu'])) + { + $json_extension = array_merge_recursive($json_extension, $this->wildcardsearch($config['navigation_menu'], $navigation_widget_called)); + } + } } + // Merge Extension Menuentries with the Core Entries + $json = array_merge_recursive($json, $json_extension); } + // Load dynamic Menu Entries from Session if (isset($_SESSION['navigation_menu'])) { $navigationMenuSessionArray = $_SESSION['navigation_menu']; @@ -55,7 +75,7 @@ class Navigation extends FHC_Controller { if (isset($navigationMenuSessionArray[$navigation_widget_called])) { - $json = array_merge($json, $navigationMenuSessionArray[$navigation_widget_called]); + $json = array_merge_recursive($json, $navigationMenuSessionArray[$navigation_widget_called]); } } } @@ -65,7 +85,9 @@ class Navigation extends FHC_Controller } /** - * + * This function creates the Top Menu for each Page + * @param navigation_widget_called GET Parameter witch holds the currently called Page + * @return JSON object with the Menu Entries */ public function header() { @@ -74,16 +96,32 @@ class Navigation extends FHC_Controller if (isset($navigation_widget_called)) { + // Load Header Entries of Core $navigationHeaderArray = $this->config->item('navigation_header'); + $json = $this->wildcardsearch($navigationHeaderArray, $navigation_widget_called); - if (isset($navigationHeaderArray) && is_array($navigationHeaderArray)) + // Load Header Entries of Extensions + $extensions = $this->extensionslib->getInstalledExtensions(); + if(hasData($extensions)) { - if (isset($navigationHeaderArray[$navigation_widget_called])) + $json_extension = array(); + foreach($extensions->retval as $ext) { - $json = $navigationHeaderArray[$navigation_widget_called]; + $filename = APPPATH.'config/'.ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$ext->name.'/navigation.php'; + if (file_exists($filename)) + { + unset($config); + include($filename); + if(isset($config['navigation_header']) && is_array($config['navigation_header'])) + { + $json_extension = array_merge_recursive($json_extension, $this->wildcardsearch($config['navigation_header'], $navigation_widget_called)); + } + } } + $json = array_merge_recursive($json, $json_extension); } + // Load dynamic Header Entries from Session if (isset($_SESSION['navigation_header'])) { $navigationHeaderSessionArray = $_SESSION['navigation_header']; @@ -92,7 +130,8 @@ class Navigation extends FHC_Controller { if (isset($navigationHeaderSessionArray[$navigation_widget_called])) { - $json = array_merge($json, $navigationHeaderSessionArray[$navigation_widget_called]); + $jsontmp = $this->wildcardsearch($navigationHeaderSessionArray, $navigation_widget_called); + $json = array_merge_recursive($json, $jsontmp); } } } @@ -100,4 +139,47 @@ class Navigation extends FHC_Controller $this->output->set_content_type('application/json')->set_output(json_encode($json)); } + + /** + * Searches a Menuentry. If there is no exact entry it searches for Wildcard Entries with a Star + * Example: + * Searching for /system/foo/index will Match the following Menuentries: + * /system/foo/index + * /system/foo/* + * /system/* + * * + * + * @param $navigationArray Array to Search in. + * @param $navigation_widget_called Navigation to search for. + * @return Navigation Array if found, empty array otherwise + */ + private function wildcardsearch($navigationArray, $navigation_widget_called) + { + // Sort Navigation to have them in correct order + krsort($navigationArray); + + // 100% match found + if(isset($navigationArray[$navigation_widget_called])) + { + return $navigationArray[$navigation_widget_called]; + } + else + { + foreach($navigationArray as $key=>$row) + { + // Search for * Entries + if(mb_strpos($key, '*') === 0 || mb_strpos($key, '*') === mb_strlen($key) - 1) + { + // Take * Entry if Matches + $search = mb_substr($key, 0, -1); + if($search == '' || mb_strpos($navigation_widget_called, $search) === 0) + { + return $row; + } + } + } + } + + return array(); + } } diff --git a/application/controllers/system/Phrases.php b/application/controllers/system/Phrases.php index 1dfbcab52..1b77d03a9 100644 --- a/application/controllers/system/Phrases.php +++ b/application/controllers/system/Phrases.php @@ -1,9 +1,12 @@ load->helper('message'); } + /** + * + */ public function index() { - $this->load->view('system/phrases.php'); + $this->load->view('system/phrases/phrases.php'); } + /** + * + */ public function table() { $phrases = $this->phraseslib->getPhraseByApp('aufnahme'); if ($phrases->error) show_error($phrases->retval); - //var_dump($vorlage); - $data = array - ( + $data = array( 'app' => 'aufnahme', 'phrases' => $phrases->retval ); - $v = $this->load->view('system/phrasesList.php', $data); + + $this->load->view('system/phrases/phrasesList.php', $data); } - public function view($phrase_id = null) + /** + * + */ + public function view($phrase_id) { if (empty($phrase_id)) - exit; - $phrase_inhalt = $this->phraseslib->getPhraseInhalt($phrase_id); + show_error('Invalid phrase_id parameter'); + $phrase = $this->phraseslib->getPhrase($phrase_id); + + $phrase_inhalt = $this->phraseslib->getPhraseInhalt($phrase_id); if ($phrase_inhalt->error) show_error($phrase_inhalt->retval); - //var_dump($vorlage); - $data = array - ( + $data = array( 'phrase_id' => $phrase_id, 'phrase' => $phrase->retval[0]->phrase, 'phrase_inhalt' => $phrase_inhalt->retval ); - $v = $this->load->view('system/phrasesinhaltList.php', $data); + + $this->load->view('system/phrases/phrasesinhaltList.php', $data); } - public function deltext($phrasentext_id=null, $phrase_id = null) + /** + * + */ + public function deltext($phrasentext_id, $phrase_id) { - if (empty($phrase_id) or empty($phrasentext_id)) - exit; + if (empty($phrasentext_id) || empty($phrase_id)) + show_error('Invalid phrasentext_id or phrase_id parameter'); + $phrase_inhalt = $this->phraseslib->delPhrasentext($phrasentext_id); if ($phrase_inhalt->error) show_error($phrase_inhalt->retval); - //var_dump($vorlage); redirect('/system/Phrases/view/'.$phrase_id); } + /** + * + */ public function edit($phrase_id = null) { - if (empty($phrase_id)) - exit; + if (empty($phrase_id)) return; + $phrase = $this->phraseslib->getPhrase($phrase_id); - //var_dump($vorlage); if ($phrase->error) show_error($phrase->retval); + if (count($phrase->retval) != 1) show_error('Phrase nicht vorhanden! ID: '.$phrase_id); - $data = array - ( + $data = array( 'phrase' => $phrase->retval[0] ); - //var_dump($data['message']); - $v = $this->load->view('system/phrasesEdit', $data); + + $this->load->view('system/phrases/phrasesEdit', $data); } - public function write($vorlage_kurzbz = null) + /** + * + */ + public function write() { - $data = array - ( + $data = array( 'subject' => 'TestSubject', 'body' => 'TestDevelopmentBodyText' ); - $v = $this->load->view('system/messageWrite', $data); + + $this->load->view('system/messageWrite', $data); } + /** + * + */ public function save() { $phrase_id = $this->input->post('phrase_id'); - $data['phrase'] = $this->input->post('phrase'); + $data = array('phrase' => $this->input->post('phrase')); + $phrase = $this->phraseslib->savePhrase($phrase_id, $data); if ($phrase->error) show_error($phrase->retval); + $phrase_id = $phrase->retval; redirect('/system/Phrases/edit/'.$phrase_id); } + /** + * + */ public function newText() { $phrase_id = $this->input->post('phrase_id'); $this->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel'); + $this->OrganisationseinheitModel->addLimit(1); $this->OrganisationseinheitModel->addOrder('oe_kurzbz'); - $resultOE = $this->OrganisationseinheitModel->loadWhere(array('aktiv' => true, 'oe_parent_kurzbz' => null)); + $resultOE = $this->OrganisationseinheitModel->loadWhere(array('aktiv' => true, 'oe_parent_kurzbz' => null)); if ($resultOE->error) show_error($resultOE->retval); @@ -139,7 +168,7 @@ class Phrases extends FHC_Controller { $orgeinheit_kurzbz = $resultOE->retval[0]->oe_kurzbz; - $data = array ( + $data = array( 'phrase_id' => $phrase_id, 'sprache' => 'German', 'text' => '', @@ -161,30 +190,40 @@ class Phrases extends FHC_Controller } } + /** + * + */ public function editText($phrasentext_id) { $phrase_inhalt = $this->phraseslib->getPhrasentextById($phrasentext_id); if ($phrase_inhalt->error) show_error($phrase_inhalt->retval); + $data = $phrase_inhalt->retval[0]; - $this->load->view('system/phraseinhaltEdit', $data); + $this->load->view('system/phrases/phraseinhaltEdit', $data); } + /** + * + */ public function saveText() { $phrase_inhalt_id = $this->input->post('phrase_inhalt_id'); - $data['orgeinheit_kurzbz'] = $this->input->post('oe_kurzbz'); - $data['orgform_kurzbz'] = $this->input->post('orgform_kurzbz'); - $data['text'] = $this->input->post('text'); - $data['description'] = $this->input->post('description'); - $data['sprache'] = $this->input->post('sprache'); + + $data = array( + 'orgeinheit_kurzbz' => $this->input->post('oe_kurzbz'), + 'orgform_kurzbz' => $this->input->post('orgform_kurzbz'), + 'text' => $this->input->post('text'), + 'description' => $this->input->post('description'), + 'sprache' => $this->input->post('sprache') + ); + $phrase_inhalt = $this->phraseslib->updatePhraseInhalt($phrase_inhalt_id, $data); if ($phrase_inhalt->error) show_error($phrase_inhalt->retval); - $data['phrase_inhalt_id'] = $phrase_inhalt_id; - redirect('/system/Phrases/editText/'.$phrase_inhalt_id); - //$this->load->view('system/templatetextEdit', $data); - } + + redirect('/system/Phrases/editText/'.$phrase_inhalt_id); + } } diff --git a/application/controllers/system/extensions/Manager.php b/application/controllers/system/extensions/Manager.php index f13040918..8172e9912 100644 --- a/application/controllers/system/extensions/Manager.php +++ b/application/controllers/system/extensions/Manager.php @@ -24,9 +24,9 @@ class Manager extends FHC_Controller // Load helpers to upload files $this->load->helper(array('form', 'url')); - // Loads the extensions library - $this->load->library('ExtensionsLib'); - } + // Loads the extensions library + $this->load->library('ExtensionsLib'); + } /** * diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index c034c8942..6e6e46619 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -42,6 +42,11 @@ class InfoCenter extends FHC_Controller 'logtype' => 'Action', 'name' => 'Note added', 'message' => 'Note with title %s was added' + ), + 'updatenotiz' => array( + 'logtype' => 'Action', + 'name' => 'Note updated', + 'message' => 'Note with title %s was updated' ) ); private $uid; // contains the UID of the logged user @@ -103,7 +108,12 @@ class InfoCenter extends FHC_Controller { $this->load->view('system/infocenter/infocenter.php'); } - + + public function infocenterFreigegeben() + { + $this->load->view('system/infocenter/infocenterFreigegeben.php'); + } + /** * Initialization function, gets person and prestudent data and loads the view with the data * @param $person_id @@ -137,7 +147,7 @@ class InfoCenter extends FHC_Controller ) ); } - + /** * unlocks page from edit by a person, redirects to overview filter page * @param $person_id @@ -367,7 +377,7 @@ class InfoCenter extends FHC_Controller $this->_redirectToStart($prestudent_id, 'ZgvPruef'); } - + /** * Saves a new Notiz for a person * @param $person_id @@ -391,6 +401,44 @@ class InfoCenter extends FHC_Controller ->set_content_type('application/json') ->set_output(json_encode($result->retval)); } + + /** + * Updates a new Notiz for a person + * @param int $notiz_id + * @param int $person_id + * @return bool true if success + */ + public function updateNotiz($notiz_id, $person_id) + { + $titel = $this->input->post('notiztitel'); + $text = $this->input->post('notiz'); + + $result = $this->NotizModel->update( + $notiz_id, + array( + 'titel' => $titel, + 'text' => $text, + 'verfasser_uid' => $this->uid, + "updateamum" => 'NOW()', + "updatevon" => $this->uid + ) + ); + + + $json = FALSE; + + if (isSuccess($result)) + { + $json = TRUE; + + //set log "Notiz updated" + $this->_log($person_id, 'updatenotiz', array($titel)); + } + + $this->output + ->set_content_type('application/json') + ->set_output(json_encode($json)); + } /** * Loads Notizen view for a person, helper for reloading after ajax request @@ -514,7 +562,7 @@ class InfoCenter extends FHC_Controller 'children' => array() ) ); - + $this->_fillFilters($listFiltersSent, $filtersarray['abgeschickt']); $this->_fillFilters($listFiltersNotSent, $filtersarray['nichtabgeschickt']); @@ -562,7 +610,7 @@ class InfoCenter extends FHC_Controller { $toPrint = "%s=%s"; $tofill['children'][] = array( - 'link' => sprintf($toPrint, base_url('index.ci.php/system/infocenter/InfoCenter?filter_id'), $filterId), + 'link' => sprintf($toPrint, site_url('system/infocenter/InfoCenter?filter_id'), $filterId), 'description' => $description ); } @@ -574,13 +622,8 @@ class InfoCenter extends FHC_Controller { $toPrint = "%s=%s"; - if ($this->router->method != 'index') - { - - } - $tofill['children'][] = array( - 'link' => sprintf($toPrint, base_url('index.ci.php/system/infocenter/InfoCenter?filter_id'), $filterId), + 'link' => sprintf($toPrint, site_url('system/infocenter/InfoCenter?filter_id'), $filterId), 'description' => $description, 'subscriptDescription' => 'Remove', 'subscriptLinkClass' => 'remove-filter', @@ -831,6 +874,8 @@ class InfoCenter extends FHC_Controller $prestudentstatus = $prestudent->prestudentstatus; $person_id = $prestudent->person_id; $person = $this->PersonModel->getPersonStammdaten($person_id, true)->retval; + $dokumente = $this->AkteModel->getAktenWithDokInfo($person_id, null, false)->retval; + $dokumenteNachzureichen = $this->AkteModel->getAktenWithDokInfo($person_id, null, true)->retval; //fill mail variables $interessentbez = $person->geschlecht == 'm' ? 'Ein Interessent' : 'Eine Interessentin'; @@ -838,6 +883,25 @@ class InfoCenter extends FHC_Controller $orgform = $prestudentstatus->orgform != '' ? ' ('.$prestudentstatus->orgform.')' : ''; $geschlecht = $person->geschlecht == 'm' ? 'männlich' : 'weiblich'; $geburtsdatum = date('d.m.Y', strtotime($person->gebdatum)); + $zgvort = !empty($prestudent->zgvort) ? ' in '.$prestudent->zgvort : ''; + $zgvnation = !empty($prestudent->zgvnation_bez) ? ', '.$prestudent->zgvnation_bez : ''; + $zgvdatum = !empty($prestudent->zgvdatum) ? ', am '.date_format(date_create($prestudent->zgvdatum), 'd.m.Y') : ''; + + $dokumenteNachzureichenMail = $dokumenteMail = array(); + //convert documents to array so they can be parsed, and keeping only needed fields + $lastel = end($dokumente); + foreach ($dokumente as $dokument) + { + $postfix = $lastel === $dokument ? '' : ' |'; + $dokumenteMail[] = array('dokument_bezeichnung' => $dokument->dokument_bezeichnung.$postfix); + } + + foreach ($dokumenteNachzureichen as $dokument) + { + $anmerkung = !empty($dokument->anmerkung) ? ' | Anmerkung: '.$dokument->anmerkung : ''; + $nachgereichtam = !empty($dokument->nachgereicht_am) ? ' | wird nachgereicht bis '.date_format(date_create($dokument->nachgereicht_am), 'd.m.Y') : ''; + $dokumenteNachzureichenMail[] = array('dokument_bezeichnung' => $dokument->dokument_bezeichnung, 'anmerkung' => $anmerkung, 'nachgereicht_am' => $nachgereichtam); + } $notizenBewerbung = $this->NotizModel->getNotizByTitel($person_id, 'Anmerkung zur Bewerbung')->retval; @@ -874,7 +938,13 @@ class InfoCenter extends FHC_Controller 'gebdatum' => $geburtsdatum, 'mailadresse' => $mailadresse, 'prestudentid' => $prestudent_id, - 'notizentext' => $notizentext + 'zgvbez' => $prestudent->zgv_bez, + 'zgvort' => $zgvort, + 'zgvdatum' => $zgvdatum, + 'zgvnation' => $zgvnation, + 'notizentext' => $notizentext, + 'dokumente' => $dokumenteMail, + 'dokumente_nachgereicht' => $dokumenteNachzureichenMail ); $this->load->library('parser'); @@ -884,7 +954,7 @@ class InfoCenter extends FHC_Controller //parse freigabe html email template, wordwrap wraps text so no display errors $email = wordwrap($this->parser->parse('templates/mailtemplates/interessentFreigabe', $data, true), 70); - $subject = ($person->geschlecht == 'm' ? 'Interessent ' : 'Interessentin ').$person->vorname.' '.$person->nachname.' freigegeben'; + $subject = ($person->geschlecht == 'm' ? 'Interessent ' : 'Interessentin ').$person->vorname.' '.$person->nachname.' für '.$prestudent->studiengangbezeichnung.$orgform.' freigegeben'; $receiver = $prestudent->studiengangmail; diff --git a/application/core/DB_Model.php b/application/core/DB_Model.php index e8c01bca0..ca59ad57e 100644 --- a/application/core/DB_Model.php +++ b/application/core/DB_Model.php @@ -29,18 +29,16 @@ class DB_Model extends FHC_Model /** * Constructor */ - public function __construct($dbTable = null, $pk = null, $hasSequence = true) + public function __construct($dbtype = 'default') { // Call parent constructor parent::__construct(); // Set properties - $this->pk = $pk; - $this->dbTable = $dbTable; - $this->hasSequence = $hasSequence; + $this->hasSequence = true; // Loads DB conns and confs - $this->load->database(); + $this->load->database($dbtype); // Loads the UDF library $this->load->library('UDFLib'); diff --git a/application/core/FHC_Controller.php b/application/core/FHC_Controller.php index 316e56425..52265e6ab 100644 --- a/application/core/FHC_Controller.php +++ b/application/core/FHC_Controller.php @@ -35,4 +35,14 @@ class FHC_Controller extends CI_Controller exit; } } + + /** + * Wrapper to load phrases using the PhrasesLib + * NOTE: The library is loaded with the alias 'p', so must me used with this alias in the rest of the code. + * EX: $this->p->t(, ) + */ + public function loadPhrases($categories, $language = null) + { + $this->load->library('PhrasesLib', array($categories, $language), 'p'); + } } diff --git a/application/libraries/ExtensionsLib.php b/application/libraries/ExtensionsLib.php index 25e9c666a..70edb106b 100644 --- a/application/libraries/ExtensionsLib.php +++ b/application/libraries/ExtensionsLib.php @@ -15,12 +15,17 @@ class ExtensionsLib const EXTENSION_JSON_NAME = 'extension.json'; // file that contains extension data const EXTENSIONS_DIR_NAME = 'extensions'; // name of the directories where will be created the symlinks + private $_ci; + private $ARCHIVE_EXTENSIONS = array('.tgz', '.tbz2'); // accepted file extensions for an uploaded extension private $UPLOAD_PATH; // temporary directory to store the upload file and checks the archive private $EXTENSIONS_PATH; // directory where all the extensions are // Directories that are part of the extension archive - private $SOFTLINK_TARGET_DIRECTORIES = array('config', 'controllers', 'helpers', 'hooks', 'libraries', 'models', 'views', 'widgets'); + private $SOFTLINK_TARGET_DIRECTORIES = array( + APPPATH => array('config', 'controllers', 'helpers', 'hooks', 'libraries', 'models', 'views', 'widgets'), + DOC_ROOT => array('public') + ); private $_errorOccurred; // boolean, true if an error occurred while installing an extension private $_currentInstalledExtensionVersion; // contains the version of the current installation of an extension @@ -33,16 +38,16 @@ class ExtensionsLib $this->UPLOAD_PATH = APPPATH.'tmp/'; $this->EXTENSIONS_PATH = APPPATH.'extensions/'; // Get code igniter instance - $this->ci =& get_instance(); + $this->_ci =& get_instance(); // Loads message configurationx - $this->ci->config->load('message'); + $this->_ci->config->load('message'); // Loads EPrintfLib - $this->ci->load->library('EPrintfLib'); + $this->_ci->load->library('EPrintfLib'); // Loading models - $this->ci->load->model('system/Extensions_model', 'ExtensionsModel'); + $this->_ci->load->model('system/Extensions_model', 'ExtensionsModel'); // Set default values fot class properties $this->_errorOccurred = false; @@ -153,7 +158,7 @@ class ExtensionsLib $delExtension = false; // Loads data about this extension from the DB - $result = $this->ci->ExtensionsModel->load($extensionId); + $result = $this->_ci->ExtensionsModel->load($extensionId); if (hasData($result)) // if something was found { $extensionName = $result->retval[0]->name; // extension name @@ -162,15 +167,15 @@ class ExtensionsLib $delExtension = $this->_rrm($this->EXTENSIONS_PATH.$extensionName); // Select all the version of this extension - $this->ci->ExtensionsModel->addSelect('extension_id'); - $result = $this->ci->ExtensionsModel->loadWhere(array('name' => $extensionName)); + $this->_ci->ExtensionsModel->addSelect('extension_id'); + $result = $this->_ci->ExtensionsModel->loadWhere(array('name' => $extensionName)); if (hasData($result)) // if something was found { $extsArray = array(); foreach ($result->retval as $key => $extension) // loops on them { // Remove them all - $result = $this->ci->ExtensionsModel->delete($extension->extension_id); + $result = $this->_ci->ExtensionsModel->delete($extension->extension_id); if (isSuccess($result)) { $delExtension = true; @@ -187,7 +192,7 @@ class ExtensionsLib */ public function getInstalledExtensions() { - return $this->ci->ExtensionsModel->getInstalledExtensions(); + return $this->_ci->ExtensionsModel->getInstalledExtensions(); } /** @@ -214,7 +219,7 @@ class ExtensionsLib */ private function _loadUploadLibrary() { - $this->ci->load->library( + $this->_ci->load->library( 'upload', array( 'upload_path' => $this->UPLOAD_PATH, @@ -234,9 +239,9 @@ class ExtensionsLib $this->_printStart('Uploading extension'); // If the upload was a success - if ($this->ci->upload->do_upload(ExtensionsLib::FILE_INPUT_NAME)) + if ($this->_ci->upload->do_upload(ExtensionsLib::FILE_INPUT_NAME)) { - $uploadData = $this->ci->upload->data(); // retrives data about the uploaded file + $uploadData = $this->_ci->upload->data(); // retrives data about the uploaded file // Checks the file extension $uploadedFileExtension = '.'.pathinfo($uploadData['full_path'], PATHINFO_EXTENSION); if (!in_array($uploadedFileExtension, $this->ARCHIVE_EXTENSIONS)) @@ -259,7 +264,7 @@ class ExtensionsLib } else { - $this->_printFailure($this->ci->upload->display_errors('', '')); + $this->_printFailure($this->_ci->upload->display_errors('', '')); } $this->_printSuccess($_uploadExtension != null); @@ -309,9 +314,9 @@ class ExtensionsLib $this->_printStart('Loads any previous installation data'); // Loads the last version of the previous installation of this extension - $this->ci->ExtensionsModel->addOrder('version', 'DESC'); - $this->ci->ExtensionsModel->addLimit(1); - $result = $this->ci->ExtensionsModel->loadWhere(array('name' => $extensionName)); + $this->_ci->ExtensionsModel->addOrder('version', 'DESC'); + $this->_ci->ExtensionsModel->addLimit(1); + $result = $this->_ci->ExtensionsModel->loadWhere(array('name' => $extensionName)); if (isError($result)) { $this->_errorOccurred = true; @@ -428,7 +433,7 @@ class ExtensionsLib && count($extensionJson->dependencies) > 0) { // Gets the required dependencies - $result = $this->ci->ExtensionsModel->getDependencies($extensionJson->dependencies); + $result = $this->_ci->ExtensionsModel->getDependencies($extensionJson->dependencies); // If they are matcheds if (hasData($result) && count($result->retval) == count($extensionJson->dependencies)) { @@ -525,7 +530,7 @@ class ExtensionsLib { $this->_printStart('Adding new entry in the DB'); - $result = $this->ci->ExtensionsModel->insert( + $result = $this->_ci->ExtensionsModel->insert( array( 'name' => $extensionJson->name, 'description' => isset($extensionJson->description) ? $extensionJson->description : null, @@ -581,7 +586,7 @@ class ExtensionsLib $this->_printMessage($sql); // Try to execute that - if (!isSuccess($result = @$this->ci->ExtensionsModel->executeQuery($sql))) + if (!isSuccess($result = @$this->_ci->ExtensionsModel->executeQuery($sql))) { $this->_errorOccurred = true; $this->_printFailure(' error occurred while executing the query'); @@ -592,7 +597,7 @@ class ExtensionsLib { $this->_printMessage('Query result:'); var_dump($result->retval); // KEEP IT!!! - $this->ci->eprintflib->printEOL(); + $this->_ci->eprintflib->printEOL(); } } } @@ -654,11 +659,14 @@ class ExtensionsLib { $_delSoftLinks = false; - foreach ($this->SOFTLINK_TARGET_DIRECTORIES as $key => $targetDirectory) + foreach ($this->SOFTLINK_TARGET_DIRECTORIES as $rootPath => $targetDirectories) { - if (file_exists(APPPATH.$targetDirectory.'/'.ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$extensionName)) + foreach ($targetDirectories as $key => $targetDirectory) { - $_delSoftLinks = unlink(APPPATH.$targetDirectory.'/'.ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$extensionName); + if (file_exists($rootPath.$targetDirectory.'/'.ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$extensionName)) + { + $_delSoftLinks = unlink($rootPath.$targetDirectory.'/'.ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$extensionName); + } } } @@ -705,25 +713,29 @@ class ExtensionsLib $extensionPath = $this->EXTENSIONS_PATH.$extensionName.'/'; // For every target directory - foreach ($this->SOFTLINK_TARGET_DIRECTORIES as $key => $targetDirectory) + foreach ($this->SOFTLINK_TARGET_DIRECTORIES as $rootPath => $targetDirectories) { - // If destination of the symlink does not exist - if (!file_exists(APPPATH.$targetDirectory.'/'.ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$extensionName)) + foreach ($targetDirectories as $key => $targetDirectory) { - // If the target directory does not exist than creates that - if (!is_dir($extensionPath.$targetDirectory)) + // If destination of the symlink does not exist + if (!file_exists($rootPath.$targetDirectory.'/'.ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$extensionName)) { - mkdir($extensionPath.$targetDirectory); - } + // If the target directory does not exist than creates that + if (!is_dir($extensionPath.$targetDirectory)) + { + mkdir($extensionPath.$targetDirectory); + } - // Create the symlink - $_addSoftLinks = symlink( - $extensionPath.$targetDirectory, - APPPATH.$targetDirectory.'/'.ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$extensionName - ); - if (!$_addSoftLinks) - { - break; + // Create the symlink + $_addSoftLinks = symlink( + $extensionPath.$targetDirectory, + $rootPath.$targetDirectory.'/'.ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$extensionName + ); + if (!$_addSoftLinks) + { + log_message('error','Failed to create Symlink to '.$extensionPath.$targetDirectory); + break; + } } } } @@ -757,13 +769,13 @@ class ExtensionsLib if ($uploadData != null && isset($uploadData->extensionName) && $extensionDB == null) { // Loads all the previous installations of this extension - $this->ci->ExtensionsModel->addOrder('version', 'DESC'); - $this->ci->ExtensionsModel->addLimit(1); - $result = $this->ci->ExtensionsModel->loadWhere(array('name' => $uploadData->extensionName)); + $this->_ci->ExtensionsModel->addOrder('version', 'DESC'); + $this->_ci->ExtensionsModel->addLimit(1); + $result = $this->_ci->ExtensionsModel->loadWhere(array('name' => $uploadData->extensionName)); if (hasData($result)) // if found { // Remove them all from file system and DB - $this->_printMessage('Removing entries in the DB related to this extension'); + $this->_printMessage('Removing entries in the DB related to this extension and from extensions directory'); $this->delExtension($result->retval[0]->extension_id); } } @@ -772,7 +784,7 @@ class ExtensionsLib // Remove them all only from DB if ($extensionJson != null && isset($extensionJson->extension_id)) { - $this->ci->ExtensionsModel->delete($extensionJson->extension_id); + $this->_ci->ExtensionsModel->delete($extensionJson->extension_id); } } @@ -789,7 +801,7 @@ class ExtensionsLib $_toggleExtension = false; // Loads data from DB about the given extension - $result = $this->ci->ExtensionsModel->load($extensionId); + $result = $this->_ci->ExtensionsModel->load($extensionId); if (hasData($result)) { $extensionName = $result->retval[0]->name; // extension name @@ -809,7 +821,7 @@ class ExtensionsLib if ($_toggleExtension) // if is a success { // Updates DB - $result = $this->ci->ExtensionsModel->update($extensionId, array('enabled' => $enabled)); + $result = $this->_ci->ExtensionsModel->update($extensionId, array('enabled' => $enabled)); if (isSuccess($result)) { $_toggleExtension = true; @@ -829,7 +841,7 @@ class ExtensionsLib */ private function _printError($error) { - $this->ci->eprintflib->printError($error); + $this->_ci->eprintflib->printError($error); } /** @@ -845,7 +857,7 @@ class ExtensionsLib */ private function _printMessage($message) { - $this->ci->eprintflib->printMessage($message); + $this->_ci->eprintflib->printMessage($message); } /** @@ -864,7 +876,7 @@ class ExtensionsLib */ private function _printInfo($info) { - $this->ci->eprintflib->printInfo($info); + $this->_ci->eprintflib->printInfo($info); } /** diff --git a/application/libraries/PhrasesLib.php b/application/libraries/PhrasesLib.php index 873da85c1..99b73732b 100644 --- a/application/libraries/PhrasesLib.php +++ b/application/libraries/PhrasesLib.php @@ -4,38 +4,40 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); class PhrasesLib { + private $_ci; // Code igniter instance + private $_phrases; // Contains the retrived phrases + /** * Loads parser library */ public function __construct() { - //require_once APPPATH.'config/message.php'; + $this->_ci =& get_instance(); - $this->ci =& get_instance(); + // CI parser + $this->_ci->load->library('parser'); - // Loads message configuration - $this->ci->config->load('message'); - - $this->ci->load->library('parser'); - - $this->ci->load->model('system/Phrase_model', 'PhraseModel'); - $this->ci->load->model('system/Phrasentext_model', 'PhrasentextModel'); + $this->_ci->load->model('system/Phrase_model', 'PhraseModel'); + $this->_ci->load->model('system/Phrasentext_model', 'PhrasentextModel'); - $this->ci->load->helper('language'); // Loads helper message to manage returning messages - $this->ci->load->helper('message'); + $this->_ci->load->helper('message'); + + // Workaround to use more parameters in the construct since PHP doesn't support many constructors + $this->_extend_construct(func_get_args()); } + // ----------------------------------------------------------------------------------------------------------------- + // Public methods + /** - * getPhrase() - will load a spezific Phrase + * getPhrase() - loads a specific Phrase */ public function getPhrase($phrase_id) { - if (empty($phrase_id)) - return error(MSG_ERR_INVALID_MSG_ID); + if (empty($phrase_id)) return error(MSG_ERR_INVALID_MSG_ID); - $phrase = $this->ci->PhraseModel->load($phrase_id); - return $phrase; + return $this->_ci->PhraseModel->load($phrase_id); } /** @@ -43,8 +45,7 @@ class PhrasesLib */ public function getPhraseByApp($app = null) { - $phrases = $this->ci->PhraseModel->loadWhere(array('app' => $app)); - return $phrases; + return $this->_ci->PhraseModel->loadWhere(array('app' => $app)); } /** @@ -52,11 +53,9 @@ class PhrasesLib */ public function getPhraseInhalt($phrase_id) { - if (empty($phrase_id)) - return error(MSG_ERR_INVALID_MSG_ID); + if (empty($phrase_id)) return error(MSG_ERR_INVALID_MSG_ID); - $phrasentext = $this->ci->PhrasentextModel->loadWhere(array('phrase_id' => $phrase_id)); - return $phrasentext; + return $this->_ci->PhrasentextModel->loadWhere(array('phrase_id' => $phrase_id)); } /** @@ -64,11 +63,9 @@ class PhrasesLib */ public function delPhrasentext($phrasentext_id) { - if (empty($phrasentext_id)) - return error(MSG_ERR_INVALID_MSG_ID); + if (empty($phrasentext_id)) return error(MSG_ERR_INVALID_MSG_ID); - $phrasentext = $this->ci->PhrasentextModel->delete(array('phrasentext_id' => $phrasentext_id)); - return $phrasentext; + return $this->_ci->PhrasentextModel->delete(array('phrasentext_id' => $phrasentext_id)); } /** @@ -76,11 +73,9 @@ class PhrasesLib */ public function savePhrase($phrase_id, $data) { - if (empty($data)) - return error(MSG_ERR_INVALID_MSG_ID); + if (empty($data)) return error(MSG_ERR_INVALID_MSG_ID); - $phrase = $this->ci->PhraseModel->update($phrase_id, $data); - return $phrase; + return $this->_ci->PhraseModel->update($phrase_id, $data); } @@ -90,32 +85,33 @@ class PhrasesLib public function getPhrasentextById($phrasentext_id) { if (empty($phrasentext_id)) - return error($this->ci->lang->line('fhc_'.FHC_INVALIDID, false)); + return error($this->_ci->lang->line('fhc_'.FHC_INVALIDID, false)); - $phrasentext = $this->ci->PhrasentextModel->load($phrasentext_id); - return $phrasentext; + return $this->_ci->PhrasentextModel->load($phrasentext_id); } /** - * getPhrases() + * getPhrases() - Retrives phrases from the DB + * The given parameter are the same needed to read from the table system.tb_phrase */ public function getPhrases($app, $sprache, $phrase = null, $orgeinheit_kurzbz = null, $orgform_kurzbz = null, $blockTags = null) { if (isset($app) && isset($sprache)) { - $result = $this->ci->PhraseModel->getPhrases($app, $sprache, $phrase, $orgeinheit_kurzbz, $orgform_kurzbz); - + $result = $this->_ci->PhraseModel->getPhrases($app, $sprache, $phrase, $orgeinheit_kurzbz, $orgform_kurzbz); + if (hasData($result)) { - $parser = new \Netcarver\Textile\Parser(); - + // Textile parser + $textileParser = new \Netcarver\Textile\Parser(); + for ($i = 0; $i < count($result->retval); $i++) { // If no

tags required if ($blockTags == 'no') { - $tmpText = $parser->textileThis($result->retval[$i]->text); // Parse - + $tmpText = $textileParser->textileThis($result->retval[$i]->text); // Parse + // Removes tags

and

from the beginning and from the end of the string if they are present // NOTE: Those tags are usually, but not always, added by the textile parser if (strlen($tmpText) >= 7) @@ -129,12 +125,12 @@ class PhrasesLib $tmpText = substr($tmpText, 0, strlen($tmpText) - 4); } } - + $result->retval[$i]->text = $tmpText; } else { - $result->retval[$i]->text = $parser->textileThis($result->retval[$i]->text); + $result->retval[$i]->text = $textileParser->textileThis($result->retval[$i]->text); } } } @@ -152,8 +148,7 @@ class PhrasesLib */ public function insertPhraseinhalt($data) { - $phrasentext = $this->ci->PhrasentextModel->insert($data); - return $phrasentext; + return $this->_ci->PhrasentextModel->insert($data); } /** @@ -161,8 +156,7 @@ class PhrasesLib */ public function getVorlagetextById($vorlagestudiengang_id) { - $vorlagetext = $this->ci->VorlageStudiengangModel->load($vorlagestudiengang_id); - return $vorlagetext; + return $this->_ci->VorlageStudiengangModel->load($vorlagestudiengang_id); } /** @@ -170,8 +164,7 @@ class PhrasesLib */ public function updatePhraseInhalt($phrasentext_id, $data) { - $phrasentext = $this->ci->PhrasentextModel->update($phrasentext_id, $data); - return $phrasentext; + return $this->_ci->PhrasentextModel->update($phrasentext_id, $data); } /** @@ -180,8 +173,84 @@ class PhrasesLib public function parseVorlagetext($text, $data = array()) { if (empty($text)) - return error($this->ci->lang->line('fhc_'.FHC_INVALIDID, false)); - $text = $this->ci->parser->parse_string($text, $data, true); - return $text; + return error($this->_ci->lang->line('fhc_'.FHC_INVALIDID, false)); + + return $this->_ci->parser->parse_string($text, $data, true); } + + /** + * + */ + public function t($category, $phrase, $parameters = array(), $orgeinheit_kurzbz = null, $orgform_kurzbz = null) + { + if (isset($this->_phrases) && is_array($this->_phrases)) + { + for ($i = 0; $i < count($this->_phrases); $i++) + { + $_phrase = $this->_phrases[$i]; + + if ($_phrase->category == $category + && $_phrase->phrase == $phrase + && $_phrase->orgeinheit_kurzbz == $orgeinheit_kurzbz + && $_phrase->orgform_kurzbz== $orgform_kurzbz) + { + if ($parameters == null) $parameters = array(); + + echo $this->_ci->parser->parse_string($_phrase->text, $parameters, true)."\n"; + break; + } + } + } + } + + // ----------------------------------------------------------------------------------------------------------------- + // Private methods + + /** + * Extends the functionalities of the constructor of this class + * This is a workaround to use more parameters in the construct since PHP doesn't support many constructors + * The new accepted parameters are: + * - categories: could be a string or an array of strings. These are the categories used to load phrases + * - language: optional parameter must be a string. It's used to load phrases + */ + private function _extend_construct($params) + { + // Checks if the $params is an array with at least one element + if (is_array($params) && count($params) > 0) + { + $parameters = $params[0]; // temporary variable + + // If there are parameters + if (is_array($parameters) && count($parameters) > 0) + { + $categories = $parameters[0]; // categories is always the first parameter + if (!is_array($categories)) // if it is not an array, then convert into one + { + $categories = array($categories); + } + + // Use the given language if present, otherwise retrives the language for the logged user + $language = DEFAULT_LANGUAGE; + if (count($parameters) == 2 && !empty($parameters[1]) && is_string($parameters[1])) + { + $language = $parameters[1]; + } + else + { + $this->_ci->load->model('person/Person_model', 'PersonModel'); + + $language = $this->_ci->PersonModel->getLanguage(getAuthUID()); + } + + // Loads phrases + $phrases = $this->_ci->PhraseModel->getPhrasesByCategoryAndLanguage($categories, $language); + + // If there are phrases loaded then store them in the property _phrases + if (hasData($phrases)) + { + $this->_phrases = $phrases->retval; + } + } + } + } } diff --git a/application/libraries/VorlageLib.php b/application/libraries/VorlageLib.php index 7ea3de93d..ea96f3e18 100644 --- a/application/libraries/VorlageLib.php +++ b/application/libraries/VorlageLib.php @@ -114,6 +114,8 @@ class VorlageLib $queryParameters["sprache"] = $sprache; } + $this->ci->VorlageStudiengangModel->addOrder('version', 'DESC'); + $vorlage = $this->ci->VorlageStudiengangModel->loadWhere($queryParameters); // If the searched template was not found if (!hasData($vorlage)) diff --git a/application/models/accounting/Konto_model.php b/application/models/accounting/Konto_model.php index d041909cd..d76b2bd46 100644 --- a/application/models/accounting/Konto_model.php +++ b/application/models/accounting/Konto_model.php @@ -11,4 +11,20 @@ class Konto_model extends DB_Model $this->dbTable = 'wawi.tbl_konto'; $this->pk = 'konto_id'; } + + /** + * Gets all Konten connected for a Kostenstelle + * @param $kostenstelle_id + * @return array + */ + public function getKontenForKostenstelle($kostenstelle_id) + { + $this->addJoin('wawi.tbl_konto_kostenstelle', 'konto_id'); + $konten = $this->loadWhere(array('kostenstelle_id' => $kostenstelle_id)); + + if ($konten->error) + return error($konten->retval); + + return $konten; + } } diff --git a/application/models/accounting/Kostenstelle_model.php b/application/models/accounting/Kostenstelle_model.php index 489286306..1164bc969 100644 --- a/application/models/accounting/Kostenstelle_model.php +++ b/application/models/accounting/Kostenstelle_model.php @@ -11,4 +11,70 @@ class Kostenstelle_model extends DB_Model $this->dbTable = 'wawi.tbl_kostenstelle'; $this->pk = 'kostenstelle_id'; } + + /** + * Gets all active Kostenstellen for a geschaeftsjahr, as determined by the geschaeftsjahrvon and bis fields + * Gets Kostenstellen of current Geschaeftsjahr if Geschaeftsjahr not specified + * Only the Kostenstellen for which a permission exists are returned! + * @param $geschaeftsjahr + * @return array|null + */ + public function getActiveKostenstellenForGeschaeftsjahr($geschaeftsjahr = null) + { + $this->load->model('organisation/geschaeftsjahr_model', 'GeschaeftsjahrModel'); + + if ($geschaeftsjahr === null) + { + $lgj = $this->GeschaeftsjahrModel->getCurrGeschaeftsjahr(); + + if ($lgj->error) + return error($lgj->retval); + + if (count($lgj->retval) < 1) + return success(array()); + + $geschaeftsjahr = $lgj->retval[0]->geschaeftsjahr_kurzbz; + } + + $this->GeschaeftsjahrModel->addSelect('start, ende'); + $gj = $this->GeschaeftsjahrModel->load($geschaeftsjahr); + + if ($gj->error) + return error($gj->retval); + + if (count($gj->retval) < 1) + return success(array()); + + $gjstart = $gj->retval[0]->start; + + $query = 'SELECT kostenstelle_id, kurzbz, wawi.tbl_kostenstelle.bezeichnung, wawi.tbl_kostenstelle.aktiv + FROM wawi.tbl_kostenstelle + LEFT JOIN public.tbl_geschaeftsjahr kgjvon on wawi.tbl_kostenstelle.geschaeftsjahrvon = kgjvon.geschaeftsjahr_kurzbz + LEFT JOIN public.tbl_geschaeftsjahr kgjbis on wawi.tbl_kostenstelle.geschaeftsjahrbis = kgjbis.geschaeftsjahr_kurzbz + WHERE + (DATE ? >= kgjvon.start OR wawi.tbl_kostenstelle.geschaeftsjahrvon IS NULL) + AND + (DATE ? < kgjbis.ende OR wawi.tbl_kostenstelle.geschaeftsjahrbis IS NULL) + ORDER BY wawi.tbl_kostenstelle.bezeichnung'; + + $kostenstellen = $this->execQuery($query, array($gjstart, $gjstart)); + + if ($kostenstellen->error) + return error($kostenstellen->retval); + + $this->load->library('PermissionLib'); + + $kostenstellenresult = array(); + + //filter kostenstellen, only kostenstellen for which berechtigt + foreach ($kostenstellen->retval as $kostenstelle) + { + if ($this->permissionlib->isBerechtigt('extension/budget_verwaltung', 'suid', null, $kostenstelle->kostenstelle_id) === true) + { + $kostenstellenresult[] = $kostenstelle; + } + } + + return success($kostenstellenresult); + } } diff --git a/application/models/organisation/Geschaeftsjahr_model.php b/application/models/organisation/Geschaeftsjahr_model.php index e3c0e9fb2..e806058ae 100644 --- a/application/models/organisation/Geschaeftsjahr_model.php +++ b/application/models/organisation/Geschaeftsjahr_model.php @@ -11,4 +11,33 @@ class Geschaeftsjahr_model extends DB_Model $this->dbTable = 'public.tbl_geschaeftsjahr'; $this->pk = 'geschaeftsjahr_kurzbz'; } + + /** + * Gets current Geschaeftsjahr, as determined by its start date + * @return array|null + */ + public function getCurrGeschaeftsjahr() + { + $query = 'SELECT * + FROM public.tbl_geschaeftsjahr + WHERE start <= now() + AND ende >= now()'; + + return $this->execQuery($query); + } + + /** + * Gets next Geschaeftsjahr, as determined by its start date + * @return array|null + */ + public function getNextGeschaeftsjahr() + { + $query = 'SELECT * + FROM public.tbl_geschaeftsjahr + WHERE start > now() + ORDER BY start + LIMIT 1'; + + return $this->execQuery($query); + } } diff --git a/application/models/person/Person_model.php b/application/models/person/Person_model.php index 3ec1ccd1c..f94a59d4f 100644 --- a/application/models/person/Person_model.php +++ b/application/models/person/Person_model.php @@ -94,10 +94,13 @@ class Person_model extends DB_Model { $this->addJoin('public.tbl_prestudent', 'person_id'); + $this->addJoin('public.tbl_benutzer', 'person_id'); + $result = $this->loadTree( 'public.tbl_person', array( - 'public.tbl_prestudent' + 'public.tbl_prestudent', + 'public.tbl_benutzer' ), 'EXISTS ( SELECT @@ -112,7 +115,8 @@ class Person_model extends DB_Model AND datum <= '.$this->escape($bis).' )', array( - 'prestudenten' + 'prestudenten', + 'benutzer' ) ); @@ -192,4 +196,37 @@ class Person_model extends DB_Model return $this->loadWhere(array('uid' => $uid)); } + + /** + * Retrives the language of the user by the UID + * Gets all the persons related to the given UID and starting from the most recent person in DB + * tries to find a valid language (!= null), if found is returned, otherwise is returned the + * default global language of the system + */ + public function getLanguage($uid) + { + $language = DEFAULT_LANGUAGE; + + $this->addJoin('public.tbl_benutzer', 'person_id'); + $this->addOrder('public.tbl_person.updateamum', 'DESC'); + $this->addOrder('public.tbl_person.insertvon', 'DESC'); + + $persons = $this->loadWhere(array('uid' => $uid)); + + if (hasData($persons)) + { + for ($i = 0; $i < count($persons->retval); $i++) + { + $person = $persons->retval[$i]; + + if (!empty($person->sprache)) + { + $language = $person->sprache; + break; + } + } + } + + return $language; + } } diff --git a/application/models/system/Extensions_model.php b/application/models/system/Extensions_model.php index bdcbfa4d6..8898ebd50 100644 --- a/application/models/system/Extensions_model.php +++ b/application/models/system/Extensions_model.php @@ -7,7 +7,7 @@ class Extensions_model extends DB_Model */ public function __construct() { - parent::__construct(); + parent::__construct('system'); $this->dbTable = 'system.tbl_extensions'; $this->pk = 'extension_id'; } diff --git a/application/models/system/Phrase_model.php b/application/models/system/Phrase_model.php index d79539995..a1d771cee 100644 --- a/application/models/system/Phrase_model.php +++ b/application/models/system/Phrase_model.php @@ -54,4 +54,21 @@ class Phrase_model extends DB_Model return $this->execQuery($query, $parametersArray); } + + /** + * Loads phrases using category(s) and language as keys + * The retrived fields are category, phrase, orgeinheit_kurzbz, orgform_kurzbz and text + * They are ordered by p.category, p.phrase, pt.orgeinheit_kurzbz DESC and pt.orgform_kurzbz DESC' + */ + public function getPhrasesByCategoryAndLanguage($categories, $language) + { + $query = 'SELECT p.category, p.phrase, pt.orgeinheit_kurzbz, pt.orgform_kurzbz, pt.text + FROM system.tbl_phrase p + INNER JOIN system.tbl_phrasentext pt USING(phrase_id) + WHERE p.category IN ? + AND pt.sprache = ? + ORDER BY p.category, p.phrase, pt.orgeinheit_kurzbz DESC, pt.orgform_kurzbz DESC'; + + return $this->execQuery($query, array($categories, $language)); + } } diff --git a/application/views/system/infocenter/addNotiz.php b/application/views/system/infocenter/addNotiz.php index 8773b7cad..a8396fe40 100644 --- a/application/views/system/infocenter/addNotiz.php +++ b/application/views/system/infocenter/addNotiz.php @@ -1,4 +1,5 @@
+
@@ -19,6 +20,8 @@
+ +
diff --git a/application/views/system/infocenter/infocenterData.php b/application/views/system/infocenter/infocenterData.php old mode 100644 new mode 100755 index 9c2024510..7bf1808ee --- a/application/views/system/infocenter/infocenterData.php +++ b/application/views/system/infocenter/infocenterData.php @@ -9,10 +9,12 @@ p.vorname AS "Vorname", p.nachname AS "Nachname", p.gebdatum AS "Gebdatum", + p.staatsbuergerschaft AS "Nation", ( SELECT zeitpunkt FROM system.tbl_log WHERE taetigkeit_kurzbz IN(\'bewerbung\',\'kommunikation\') + AND logdata->>\'name\' NOT IN (\'Login with code\', \'New application\') AND person_id = p.person_id ORDER BY zeitpunkt DESC LIMIT 1 @@ -21,6 +23,7 @@ SELECT insertvon FROM system.tbl_log WHERE taetigkeit_kurzbz IN(\'bewerbung\',\'kommunikation\') + AND logdata->>\'name\' NOT IN (\'Login with code\', \'New application\') AND person_id = p.person_id ORDER BY zeitpunkt DESC LIMIT 1 @@ -79,15 +82,17 @@ FROM public.tbl_studiensemester WHERE ende >= NOW() ) + AND not exists (select 1 from tbl_prestudentstatus psss where psss.prestudent_id = pss.prestudent_id and psss.status_kurzbz = \'Abgewiesener\') LIMIT 1 ) AS "AnzahlAbgeschickt", array_to_string( ( - SELECT array_agg(distinct UPPER(tbl_studiengang.typ || tbl_studiengang.kurzbz)) + SELECT array_agg(distinct UPPER(tbl_studiengang.typ || tbl_studiengang.kurzbz) || \':\' || tbl_studienplan.orgform_kurzbz) FROM public.tbl_prestudentstatus pss INNER JOIN public.tbl_prestudent ps USING(prestudent_id) JOIN public.tbl_studiengang USING(studiengang_kz) + JOIN lehre.tbl_studienplan using (studienplan_id) WHERE pss.status_kurzbz = \'Interessent\' AND (pss.bewerbung_abgeschicktamum IS NOT NULL AND pss.bewerbung_abgeschicktamum>=\''.$NOTBEFORE.'\') AND pss.bestaetigtam IS NULL @@ -98,9 +103,53 @@ FROM public.tbl_studiensemester WHERE ende >= NOW() ) + AND not exists (select 1 from tbl_prestudentstatus psss where psss.prestudent_id = pss.prestudent_id and psss.status_kurzbz = \'Abgewiesener\') LIMIT 1 ),\', \' ) AS "StgAbgeschickt", + array_to_string( + ( + SELECT array_agg(distinct UPPER(tbl_studiengang.typ || tbl_studiengang.kurzbz) || \':\' || tbl_studienplan.orgform_kurzbz) + FROM + public.tbl_prestudentstatus pss + INNER JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang USING(studiengang_kz) + JOIN lehre.tbl_studienplan using (studienplan_id) + WHERE pss.status_kurzbz = \'Interessent\' + AND (pss.bewerbung_abgeschicktamum IS NULL) + AND pss.bestaetigtam IS NULL + AND ps.person_id = p.person_id + AND tbl_studiengang.typ in(\'b\') + AND studiensemester_kurzbz IN ( + SELECT studiensemester_kurzbz + FROM public.tbl_studiensemester + WHERE ende >= NOW() + ) + AND not exists (select 1 from tbl_prestudentstatus psss where psss.prestudent_id = pss.prestudent_id and psss.status_kurzbz = \'Abgewiesener\') + LIMIT 1 + ),\', \' + ) AS "StgNichtAbgeschickt", + array_to_string( + ( + SELECT array_agg(distinct UPPER(tbl_studiengang.typ || tbl_studiengang.kurzbz) || \':\' || tbl_studienplan.orgform_kurzbz) + FROM + public.tbl_prestudentstatus pss + INNER JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang USING(studiengang_kz) + JOIN lehre.tbl_studienplan using (studienplan_id) + WHERE pss.status_kurzbz in (\'Wartender\', \'Bewerber\', \'Aufgenommener\', \'Student\') + AND (pss.bewerbung_abgeschicktamum IS NULL) + AND ps.person_id = p.person_id + AND tbl_studiengang.typ in(\'b\') + AND studiensemester_kurzbz IN ( + SELECT studiensemester_kurzbz + FROM public.tbl_studiensemester + WHERE start >= NOW() + ) + AND not exists (select 1 from tbl_prestudentstatus psss where psss.prestudent_id = pss.prestudent_id and psss.status_kurzbz = \'Abgewiesener\') + LIMIT 1 + ),\', \' + ) AS "StgAktiv", pl.zeitpunkt AS "LockDate", pl.lockuser as "LockUser" FROM public.tbl_person p @@ -141,14 +190,17 @@ 'checkboxes' => 'PersonId', 'additionalColumns' => array('Details'), 'columnsAliases' => array( - 'PersonID','Vorname','Nachname','GebDatum','Letzte Aktion','Letzter Bearbeiter', - 'StSem','GesendetAm','NumAbgeschickt','Studiengänge','Sperrdatum','GesperrtVon' + 'PersonID', 'Vorname', 'Nachname', + 'GebDatum', 'Nation', 'Letzte Aktion', + 'Letzter Bearbeiter', 'StSem', 'GesendetAm', + 'NumAbgeschickt', 'StgSent', 'StgNotSent', + 'StgAktiv', 'Sperrdatum', 'GesperrtVon' ), 'formatRaw' => function($datasetRaw) { $datasetRaw->{'Details'} = sprintf( 'Details', - base_url('index.ci.php/system/infocenter/InfoCenter/showDetails/'), + site_url('system/infocenter/InfoCenter/showDetails/'), $datasetRaw->{'PersonId'} ); @@ -187,7 +239,19 @@ if ($datasetRaw->{'StgAbgeschickt'} == null) { - $datasetRaw->{'StgAbgeschickt'} = 'N/A'; + $datasetRaw->{'StgAbgeschickt'} = '-'; + } + if ($datasetRaw->{'StgNichtAbgeschickt'} == null) + { + $datasetRaw->{'StgNichtAbgeschickt'} = '-'; + } + if ($datasetRaw->{'StgAktiv'} == null) + { + $datasetRaw->{'StgAktiv'} = '-'; + } + if ($datasetRaw->{'Nation'} == null) + { + $datasetRaw->{'Nation'} = '-'; } return $datasetRaw; diff --git a/application/views/system/infocenter/infocenterFreigegeben.php b/application/views/system/infocenter/infocenterFreigegeben.php new file mode 100644 index 000000000..bc9d9f305 --- /dev/null +++ b/application/views/system/infocenter/infocenterFreigegeben.php @@ -0,0 +1,264 @@ +load->view( + 'templates/FHC-Header', + array( + 'title' => 'Info Center', + 'jquery' => true, + 'jqueryui' => true, + 'bootstrap' => true, + 'fontawesome' => true, + 'sbadmintemplate' => true, + 'tablesorter' => true, + 'customCSSs' => 'skin/tablesort_bootstrap.css', + 'customJSs' => array('include/js/bootstrapper.js', 'include/js/infocenter/infocenterPersonDataset.js') + ) + ); +?> + + +
+ + widgetlib->widget('NavigationWidget'); ?> + +
+
+
+
+ +
+
+
+ ' + SELECT + p.person_id AS "PersonId", + p.vorname AS "Vorname", + p.nachname AS "Nachname", + p.gebdatum AS "Gebdatum", + p.staatsbuergerschaft AS "Nation", + ( + SELECT zeitpunkt + FROM system.tbl_log + WHERE taetigkeit_kurzbz IN(\'bewerbung\',\'kommunikation\') + AND logdata->>\'name\' NOT IN (\'Login with code\', \'New application\') + AND person_id = p.person_id + ORDER BY zeitpunkt DESC + LIMIT 1 + ) AS "LastAction", + ( + SELECT insertvon + FROM system.tbl_log + WHERE taetigkeit_kurzbz IN(\'bewerbung\',\'kommunikation\') + AND logdata->>\'name\' NOT IN (\'Login with code\', \'New application\') + AND person_id = p.person_id + ORDER BY zeitpunkt DESC + LIMIT 1 + ) AS "User/Operator", + ( + SELECT + pss.studiensemester_kurzbz + FROM + public.tbl_prestudentstatus pss + INNER JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang USING(studiengang_kz) + WHERE pss.status_kurzbz = \'Interessent\' + AND pss.bestaetigtam IS NULL + AND ps.person_id = p.person_id + AND tbl_studiengang.typ in(\'b\') + AND studiensemester_kurzbz IN ( + SELECT studiensemester_kurzbz + FROM public.tbl_studiensemester + WHERE ende >= NOW() + ) + ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC + LIMIT 1 + ) AS "Studiensemester", + ( + SELECT pss.bewerbung_abgeschicktamum + FROM + public.tbl_prestudentstatus pss + INNER JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang USING(studiengang_kz) + WHERE pss.status_kurzbz = \'Interessent\' + AND (pss.bewerbung_abgeschicktamum IS NOT NULL AND pss.bewerbung_abgeschicktamum>=\''.$NOTBEFORE.'\') + AND pss.bestaetigtam IS NULL + AND ps.person_id = p.person_id + AND tbl_studiengang.typ in(\'b\') + AND studiensemester_kurzbz IN ( + SELECT studiensemester_kurzbz + FROM public.tbl_studiensemester + WHERE ende >= NOW() + ) + ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC + LIMIT 1 + ) AS "SendDate", + ( + SELECT count(*) + FROM + public.tbl_prestudentstatus pss + INNER JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang USING(studiengang_kz) + WHERE pss.status_kurzbz = \'Interessent\' + AND (pss.bewerbung_abgeschicktamum IS NOT NULL AND pss.bewerbung_abgeschicktamum>=\''.$NOTBEFORE.'\') + AND pss.bestaetigtam IS NULL + AND ps.person_id = p.person_id + AND tbl_studiengang.typ in(\'b\') + AND studiensemester_kurzbz IN ( + SELECT studiensemester_kurzbz + FROM public.tbl_studiensemester + WHERE ende >= NOW() + ) + LIMIT 1 + ) AS "AnzahlAbgeschickt", + array_to_string( + ( + SELECT array_agg(distinct UPPER(tbl_studiengang.typ || tbl_studiengang.kurzbz)) + FROM + public.tbl_prestudentstatus pss + INNER JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang USING(studiengang_kz) + WHERE pss.status_kurzbz = \'Interessent\' + AND (pss.bewerbung_abgeschicktamum IS NOT NULL AND pss.bewerbung_abgeschicktamum>=\''.$NOTBEFORE.'\') + AND pss.bestaetigtam IS NULL + AND ps.person_id = p.person_id + AND tbl_studiengang.typ in(\'b\') + AND studiensemester_kurzbz IN ( + SELECT studiensemester_kurzbz + FROM public.tbl_studiensemester + WHERE ende >= NOW() + ) + LIMIT 1 + ),\', \' + ) AS "StgAbgeschickt", + pl.zeitpunkt AS "LockDate", + pl.lockuser as "LockUser" + FROM public.tbl_person p + LEFT JOIN (SELECT person_id, zeitpunkt, uid as lockuser FROM system.tbl_person_lock WHERE app = \''.$APP.'\') pl USING(person_id) + WHERE + EXISTS( + SELECT 1 + FROM + public.tbl_prestudent + JOIN public.tbl_studiengang USING(studiengang_kz) + WHERE + person_id=p.person_id + AND tbl_studiengang.typ in(\'b\') + AND \'Interessent\' = (SELECT status_kurzbz FROM public.tbl_prestudentstatus + WHERE prestudent_id=tbl_prestudent.prestudent_id + ORDER BY datum DESC, insertamum DESC, ext_id DESC + LIMIT 1 + ) + AND EXISTS ( + SELECT + 1 + FROM + public.tbl_prestudentstatus + WHERE + prestudent_id = tbl_prestudent.prestudent_id + AND status_kurzbz = \'Interessent\' + AND (bestaetigtam IS NOT NULL AND (bewerbung_abgeschicktamum is null OR bewerbung_abgeschicktamum>=\''.$NOTBEFORE.'\')) + AND studiensemester_kurzbz IN ( + SELECT studiensemester_kurzbz + FROM public.tbl_studiensemester + WHERE ende >= NOW() + ) + ) + ) + ORDER BY "LastAction" ASC + ', + 'hideHeader' => false, + 'hideSave' => false, + 'checkboxes' => 'PersonId', + 'additionalColumns' => array('Details'), + 'columnsAliases' => array('PersonID','Vorname','Nachname','GebDatum','Nation','Letzte Aktion','Letzter Bearbeiter', + 'StSem','GesendetAm','NumAbgeschickt','Studiengänge','Sperrdatum','GesperrtVon'), + 'formatRaw' => function($datasetRaw) { + + $datasetRaw->{'Details'} = sprintf( + 'Details', + base_url('index.ci.php/system/infocenter/InfoCenter/showDetails/'), + $datasetRaw->{'PersonId'} + ); + + if ($datasetRaw->{'SendDate'} == null) + { + $datasetRaw->{'SendDate'} = 'Not sent'; + } + else + { + $datasetRaw->{'SendDate'} = date_format(date_create($datasetRaw->{'SendDate'}),'Y-m-d H:i'); + } + + if ($datasetRaw->{'LastAction'} == null) + { + $datasetRaw->{'LastAction'} = '-'; + } + else + { + $datasetRaw->{'LastAction'} = date_format(date_create($datasetRaw->{'LastAction'}),'Y-m-d H:i'); + } + + if ($datasetRaw->{'User/Operator'} == '') + { + $datasetRaw->{'User/Operator'} = 'NA'; + } + + if ($datasetRaw->{'LockDate'} == null) + { + $datasetRaw->{'LockDate'} = '-'; + } + + if ($datasetRaw->{'LockUser'} == null) + { + $datasetRaw->{'LockUser'} = '-'; + } + + if ($datasetRaw->{'StgAbgeschickt'} == null) + { + $datasetRaw->{'StgAbgeschickt'} = 'N/A'; + } + + if ($datasetRaw->{'Nation'} == null) + { + $datasetRaw->{'Nation'} = '-'; + } + + return $datasetRaw; + }, + 'markRow' => function($datasetRaw) { + + if ($datasetRaw->LockDate != null) + { + return FilterWidget::DEFAULT_MARK_ROW_CLASS; + } + } + ); + + + $filterId = isset($_GET[InfoCenter::FILTER_ID]) ? $_GET[InfoCenter::FILTER_ID] : null; + + if (isset($filterId) && is_numeric($filterId)) + { + $filterWidgetArray[InfoCenter::FILTER_ID] = $filterId; + } + else + { + $filterWidgetArray['app'] = $APP; + $filterWidgetArray['datasetName'] = 'PersonActions'; + $filterWidgetArray['filterKurzbz'] = 'InfoCenterNotSentApplicationAll'; + } + + echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray); + ?> + +
+
+
+
+ + +load->view('templates/FHC-Footer'); ?> diff --git a/application/views/system/infocenter/notizen.php b/application/views/system/infocenter/notizen.php index 23a0e6ef4..04b938086 100644 --- a/application/views/system/infocenter/notizen.php +++ b/application/views/system/infocenter/notizen.php @@ -1,19 +1,20 @@ - - - - - - - - - - - - - - - - - +
DatumNotizUser
insertamum), 'd.m.Y H:i:s') ?>titel) ?>verfasser_uid ?>
+ + + + + + + + + + + + + + + + +
DatumNotizUser
insertamum), 'd.m.Y H:i:s') ?>titel) ?>verfasser_uid ?>notiz_id ?>
\ No newline at end of file diff --git a/application/views/system/infocenter/zgvpruefungen.php b/application/views/system/infocenter/zgvpruefungen.php index ef0102a50..2e98005b8 100644 --- a/application/views/system/infocenter/zgvpruefungen.php +++ b/application/views/system/infocenter/zgvpruefungen.php @@ -287,10 +287,25 @@
+ prestudentstatus->bewerbung_abgeschicktamum)) + { + $disabled = 'disabled'; + $disabledTxt = 'Die Bewerbung muss erst abgeschickt worden sein.'; + } + + if ($zgvpruefung->studiengangtyp !== 'b') + { + $disabled = 'disabled'; + $disabledTxt = 'Nur Bachelorstudiengänge können freigegeben werden.';; + } + ?>
-
diff --git a/application/views/system/phraseinhaltEdit.php b/application/views/system/phrases/phraseinhaltEdit.php similarity index 69% rename from application/views/system/phraseinhaltEdit.php rename to application/views/system/phrases/phraseinhaltEdit.php index a0dd11eaa..594e8d9dd 100644 --- a/application/views/system/phraseinhaltEdit.php +++ b/application/views/system/phrases/phraseinhaltEdit.php @@ -65,10 +65,6 @@
Textile CheatSheet - widgetlib->widget("tinymce_widget", array('name' => 'text', 'text' => $text)); - ?> @@ -77,34 +73,29 @@
- - - - - + diff --git a/application/views/system/phrases.php b/application/views/system/phrases/phrases.php similarity index 100% rename from application/views/system/phrases.php rename to application/views/system/phrases/phrases.php diff --git a/application/views/system/phrasesEdit.php b/application/views/system/phrases/phrasesEdit.php similarity index 100% rename from application/views/system/phrasesEdit.php rename to application/views/system/phrases/phrasesEdit.php diff --git a/application/views/system/phrasesList.php b/application/views/system/phrases/phrasesList.php similarity index 75% rename from application/views/system/phrasesList.php rename to application/views/system/phrases/phrasesList.php index ed12f1926..5baff50f7 100644 --- a/application/views/system/phrasesList.php +++ b/application/views/system/phrases/phrasesList.php @@ -4,16 +4,6 @@

Phrasen

- diff --git a/application/views/system/phrasesinhaltList.php b/application/views/system/phrases/phrasesinhaltList.php similarity index 100% rename from application/views/system/phrasesinhaltList.php rename to application/views/system/phrases/phrasesinhaltList.php diff --git a/application/views/templates/FHC-Header.php b/application/views/templates/FHC-Header.php index b309f4a22..52ed50dbd 100755 --- a/application/views/templates/FHC-Header.php +++ b/application/views/templates/FHC-Header.php @@ -2,6 +2,11 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); +// Retrives the URL path of the called controller + controller method +// NOTE: placed here because it doesn't work inside functions +$calledPath = $this->router->directory.$this->router->class; +$calledMethod = $this->router->method; + // By default set the parameters to null $title = isset($title) ? $title : null; $customCSSs = isset($customCSSs) ? $customCSSs : null; @@ -55,6 +60,27 @@ function _generateCSSsInclude($CSSs) } } +/** + * Generates global JS-Object to pass parms to other javascripts + */ +function _generateJSDataStorageObject($calledPath, $calledMethod) +{ + $toPrint = "\n"; + $toPrint .= ''; + $toPrint .= "\n\n"; + + echo $toPrint; +} + /** * Generates tags for the javascripts you want to include, the parameter could by a string or an array of strings */ @@ -78,13 +104,25 @@ function _generateJSsInclude($JSs) } /** - * Generates global JS-Object to pass parms to addon-js-functions + * Generates all the includes needed by the Addons */ -function _generateAddonDataStorageObject() +function _generateAddonsJSsInclude($calledFrom) { - echo '\n"; + $aktive_addons = array_filter(explode(";", ACTIVE_ADDONS)); + + foreach ($aktive_addons as $addon) + { + $hookfile = DOC_ROOT.'addons/'.$addon.'/hooks.config.inc.php'; + if (file_exists($hookfile)) + { + include($hookfile); + if (key_exists($calledFrom, $js_hooks)) + { + foreach ($js_hooks[$calledFrom] as $js_file) + _generateJSsInclude('addons/'.$addon.'/'.$js_file); + } + } + } } ?> @@ -102,16 +140,20 @@ function _generateAddonDataStorageObject() // jQuery UI CSS if ($jqueryui === true) _generateCSSsInclude('vendor/components/jqueryui/themes/base/jquery-ui.min.css'); + // bootstrap CSS if ($bootstrap === true) _generateCSSsInclude('vendor/twbs/bootstrap/dist/css/bootstrap.min.css'); + // font awesome CSS if ($fontawesome === true) _generateCSSsInclude('vendor/components/font-awesome/css/font-awesome.min.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'); } + // sb admin template CSS if ($sbadmintemplate === true) { @@ -125,8 +167,13 @@ function _generateAddonDataStorageObject() // -------------------------------------------------------------------------------------------------------- // Javascripts + // Generates the global object to pass useful parms to the other javascripts + // NOTE: must be called before any other JS include + _generateJSDataStorageObject($calledPath, $calledMethod); + // JQuery V3 if ($jquery === true) _generateJSsInclude('vendor/components/jquery/jquery.min.js'); + // JQuery UI if ($jqueryui === true) { @@ -134,8 +181,10 @@ function _generateAddonDataStorageObject() //datepicker german language file _generateJSsInclude('vendor/components/jqueryui/ui/i18n/datepicker-de.js'); } + // bootstrap JS if ($bootstrap === true) _generateJSsInclude('vendor/twbs/bootstrap/dist/js/bootstrap.min.js'); + // Table sorter JS if ($tablesorter === true) { @@ -143,6 +192,7 @@ function _generateAddonDataStorageObject() _generateJSsInclude('vendor/mottie/tablesorter/dist/js/jquery.tablesorter.widgets.min.js'); _generateJSsInclude('vendor/mottie/tablesorter/dist/js/extras/jquery.tablesorter.pager.min.js'); } + //tinymce JS if($tinymce === true) _generateJSsInclude('vendor/tinymce/tinymce/tinymce.min.js') ; @@ -153,27 +203,8 @@ function _generateAddonDataStorageObject() _generateJSsInclude('vendor/BlackrockDigital/startbootstrap-sb-admin-2/dist/js/sb-admin-2.min.js'); } - // load addon hooks JS - if ($addons === true) - { - _generateAddonDataStorageObject(); - - $aktive_addons = array_filter(explode(";", ACTIVE_ADDONS)); - $called_from = $this->router->directory.$this->router->class.'/'.$this->router->method; - foreach ($aktive_addons as $addon) - { - $hookfile = DOC_ROOT.'addons/'.$addon.'/hooks.config.inc.php'; - if (file_exists($hookfile)) - { - include($hookfile); - if (key_exists($called_from, $js_hooks)) - { - foreach ($js_hooks[$called_from] as $js_file) - _generateJSsInclude('addons/'.$addon.'/'.$js_file); - } - } - } - } + // Load addon hooks JS + if ($addons === true) _generateAddonsJSsInclude($calledPath.'/'.$calledMethod); // Eventually required JS _generateJSsInclude($customJSs); diff --git a/application/views/templates/mailtemplates/interessentFreigabe.php b/application/views/templates/mailtemplates/interessentFreigabe.php index 91ca22f94..9c26a11d6 100644 --- a/application/views/templates/mailtemplates/interessentFreigabe.php +++ b/application/views/templates/mailtemplates/interessentFreigabe.php @@ -8,42 +8,63 @@

ID
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Studiengang{studiengangbez} {studiengangtypbez} {orgform} {sprache}
Studiensemester{studiensemester}
Geschlecht{geschlecht}
Vorname{vorname}
Nachname{nachname}
Geburtsdatum{gebdatum}
E-Mail Adresse{mailadresse}
Prestudent ID{prestudentid}
Anmerkungen zur Bewerbung{notizentext}
Studiengang{studiengangbez} {studiengangtypbez} {orgform} {sprache}
Studiensemester{studiensemester}
Geschlecht{geschlecht}
Vorname{vorname}
Nachname{nachname}
Geburtsdatum{gebdatum}
E-Mail Adresse{mailadresse}
Prestudent ID{prestudentid}
Zugangsvoraussetzung{zgvbez}{zgvort}{zgvnation}{zgvdatum}
Erbrachte Dokumente + {dokumente} + {dokument_bezeichnung} + {/dokumente} +
Nachzureichende Dokumente + {dokumente_nachgereicht} + {dokument_bezeichnung}{anmerkung}{nachgereicht_am} +
+ {/dokumente_nachgereicht} +
Anmerkungen zur Bewerbung{notizentext}

diff --git a/application/views/widgets/filter/filter.php b/application/views/widgets/filter/filter.php index 606d19b60..c2a205dc1 100644 --- a/application/views/widgets/filter/filter.php +++ b/application/views/widgets/filter/filter.php @@ -1,5 +1,11 @@ @@ -97,7 +114,7 @@ function refreshSideMenu() { $.ajax({ - url: "", + url: "", method: "GET", data: {} }) @@ -115,7 +132,7 @@ $(".remove-filter").click(function() { $.ajax({ - url: "", + url: "", method: "POST", data: { filter_id: $(this).attr('value') diff --git a/application/views/widgets/filter/saveFilter.php b/application/views/widgets/filter/saveFilter.php index 1fd9c57af..f6b7dc529 100644 --- a/application/views/widgets/filter/saveFilter.php +++ b/application/views/widgets/filter/saveFilter.php @@ -6,7 +6,7 @@ if ($("#customFilterDescription").val() != '') { $.ajax({ - url: "", + url: "", method: "POST", data: { customFilterDescription: $("#customFilterDescription").val() @@ -30,12 +30,19 @@ +
+
+ + Filter description: + - Filter description: +
+ +
diff --git a/application/views/widgets/filter/selectFields.php b/application/views/widgets/filter/selectFields.php index 57edda25e..7613639ff 100644 --- a/application/views/widgets/filter/selectFields.php +++ b/application/views/widgets/filter/selectFields.php @@ -74,7 +74,7 @@ }); $.ajax({ - url: "", + url: "", method: "POST", data: { selectedFieldsLst: arrayDndId @@ -106,7 +106,7 @@ $("#addField").change(function(event) { $.ajax({ - url: "", + url: "", method: "POST", data: { fieldName: $(this).val() @@ -128,7 +128,7 @@ $(".remove-field").click(function(event) { $.ajax({ - url: "", + url: "", method: "POST", data: { fieldName: $(this).attr('fieldToRemove') @@ -151,7 +151,7 @@ function renderSelectedFields() { $.ajax({ - url: "", + url: "", method: "GET", data: {}, dataType: "json" @@ -232,7 +232,7 @@
- + Add field: diff --git a/application/views/widgets/filter/selectFilters.php b/application/views/widgets/filter/selectFilters.php index f79a1e449..bca975b13 100644 --- a/application/views/widgets/filter/selectFilters.php +++ b/application/views/widgets/filter/selectFilters.php @@ -10,7 +10,7 @@ $("#addFilter").change(function(event) { $.ajax({ - url: "", + url: "", method: "POST", data: { fieldName: $(this).val() @@ -29,28 +29,6 @@ }); - $(".remove-filter").click(function(event) { - - $.ajax({ - url: "", - method: "POST", - data: { - fieldName: $(this).attr('filterToRemove') - } - }) - .done(function(data, textStatus, jqXHR) { - - resetSelectedFilters(); - renderSelectedFilters(); - - renderTableDataset(); - - }).fail(function(jqXHR, textStatus, errorThrown) { - alert(textStatus); - }); - - }); - $(".select-filter-operation").change(function() { if ($(this).val() == "set" || $(this).val() == "nset") @@ -92,7 +70,7 @@ }); $.ajax({ - url: "", + url: "", method: "POST", data: { filterNames: selectFilterName, @@ -116,6 +94,23 @@ }); }); + + $(".remove-selected-filter").click(function(event) { + $.ajax({ + url: "", + method: "POST", + data: { + fieldName: $(this).attr('filterToRemove') + } + }) + .done(function(data, textStatus, jqXHR) { + resetSelectedFilters(); + renderSelectedFilters(); + }).fail(function(jqXHR, textStatus, errorThrown) { + alert(textStatus); + }); + }); + } function renderSelectedFilterFields(metaData, activeFilters, activeFiltersOperation, activeFiltersOption) @@ -125,7 +120,7 @@ if (metaData.type.toLowerCase().indexOf("int") >= 0) { html = ''; - html += ' '; html += ' '; html += ' '; html += ' '; @@ -133,37 +128,37 @@ html += ' '; html += ''; html += ''; - html += ' '; + html += ' '; html += ''; } - if (metaData.type.toLowerCase().indexOf('varchar') >= 0) + if (metaData.type.toLowerCase().indexOf('varchar') >= 0 || metaData.type.toLowerCase() == 'text') { html = ''; - html += ' '; html += ' '; html += ' '; html += ' '; html += ''; html += ''; - html += ' '; + html += ' '; html += ''; } if (metaData.type.toLowerCase().indexOf('bool') >= 0) { html = ''; - html += ' '; html += ' '; html += ' '; html += ' '; html += ''; html += ''; - html += ' '; + html += ' '; html += ''; } if (metaData.type.toLowerCase().indexOf('timestamp') >= 0 || metaData.type.toLowerCase().indexOf('date') >= 0) { - var classOperation = 'select-filter-operation-value form-control'; - var classOption = 'select-filter-option form-control'; + var classOperation = 'form-control select-filter-operation-value'; + var classOption = 'form-control select-filter-option'; var disabled = ""; if (activeFiltersOperation == "set" || activeFiltersOperation == "nset") @@ -174,7 +169,7 @@ } html = ''; - html += ' '; html += ' '; html += ' '; html += ' '; @@ -202,7 +197,7 @@ function renderSelectedFilters() { $.ajax({ - url: "", + url: "", method: "GET", data: {}, dataType: "json" @@ -220,7 +215,7 @@ { var selectedFilters = '
'; - selectedFilters += ''; + selectedFilters += ''; selectedFilters += data.selectedFiltersAliases[i]; selectedFilters += ''; @@ -232,7 +227,7 @@ ); selectedFilters += ''; - selectedFilters += ''; + selectedFilters += ''; selectedFilters += ''; selectedFilters += '
'; @@ -277,10 +272,12 @@ +
+
- + Add filter: @@ -289,6 +286,6 @@ - +
diff --git a/application/views/widgets/filter/tableDataset.php b/application/views/widgets/filter/tableDataset.php index 0074d0eff..f0a3efa27 100644 --- a/application/views/widgets/filter/tableDataset.php +++ b/application/views/widgets/filter/tableDataset.php @@ -19,7 +19,7 @@ function renderTableDataset() { $.ajax({ - url: "", + url: "", method: "GET", data: {}, dataType: "json" diff --git a/application/views/widgets/navigationHeader.php b/application/views/widgets/navigationHeader.php index 6c2ca8cdc..0d050df2a 100644 --- a/application/views/widgets/navigationHeader.php +++ b/application/views/widgets/navigationHeader.php @@ -3,7 +3,7 @@ $(document).ready(function() { $.ajax({ - url: "", + url: "", method: "GET", data: { navigation_widget_called: "router->directory.$this->router->class.'/'.$this->router->method; ?>" diff --git a/application/views/widgets/navigationMenu.php b/application/views/widgets/navigationMenu.php index f231bc67e..9ef727083 100644 --- a/application/views/widgets/navigationMenu.php +++ b/application/views/widgets/navigationMenu.php @@ -102,7 +102,7 @@ function renderSideMenu() { $.ajax({ - url: "", + url: "", method: "GET", data: { navigation_widget_called: "router->directory.$this->router->class.'/'.$this->router->method; ?>" @@ -114,13 +114,13 @@ { var strMenu = ''; - $("#side-menu").html('
  • '); + printCollapseIcon(); jQuery.each(data, function(i, e) { strMenu += printNavItem(e); }); - $("#side-menu").append(strMenu); + $("#side-menu").html(strMenu); $("#side-menu").metisMenu(); } @@ -134,23 +134,31 @@ }); } - $(document).ready(function() { - - renderSideMenu(); + function printCollapseIcon() + { // Hiding/showing navigation menu - works only with sb admin 2 template!! + if(!$("#collapseicon").length) + $("#side-menu").parent().append('
    '); $("#collapseicon").click(function() { $("#page-wrapper").css('margin-left', '0px'); $("#side-menu").hide(); + $("#collapseicon").hide(); $("#collapseinicon").show(); }); $("#collapseinicon").click(function() { $("#page-wrapper").css('margin-left', '250px'); $("#side-menu").show(); + $("#collapseicon").show(); $("#collapseinicon").hide(); }); + } + + $(document).ready(function() { + + renderSideMenu(); }); @@ -160,5 +168,5 @@ - +
    diff --git a/cis/private/open_grp.php b/cis/private/open_grp.php index 2973ac7cd..aca6272d4 100644 --- a/cis/private/open_grp.php +++ b/cis/private/open_grp.php @@ -87,16 +87,62 @@ echo ' '.$p->t('mailverteiler/oeffnenEinesVerteilers').' + '; if (isset($_REQUEST['token']) && isset($_REQUEST['grp'])) { echo ' - - - - - '; +

    '.$p->t('mailverteiler/oeffnenEinesVerteilers').'

    '; /* Generate an random String */ $mail_id = mail_id_generator(); @@ -116,30 +162,18 @@ if (isset($_REQUEST['token']) && isset($_REQUEST['grp'])) fwrite($filet, $message, mb_strlen($message)); fclose($filet); - echo " - - - - - - - - "; + echo ' +

    '.$p->t('mailverteiler/geoeffnet',$db->convert_html_chars($_REQUEST['desc'])).'

    +

    Code: '.$mail_id.'
    + Adresse: '.$_REQUEST["grp"].$mail_id.'@'.DOMAIN.'

    +

    '.$p->t('mailverteiler/klickenZumSchicken').'

    +

    '.$p->t('mailverteiler/infoBenutzung').'

    '; } else { echo ' - - - '; +

    '.$p->t('mailverteiler/oeffnenFehlgeschlagen').'

    '; } - echo '
    '.$p->t('mailverteiler/mailverteiler').''.$p->t('mailverteiler/status').'
    ".$db->convert_html_chars($_REQUEST['desc'])."".$p->t('mailverteiler/geoeffnet')." (Code: ".$mail_id.")
    -

    ".$p->t('mailverteiler/klickenZumSchicken')."

    - -

    ".$p->t('mailverteiler/infoBenutzung',array($_REQUEST['grp'].$mail_id."@".DOMAIN))."

    -
    - '.$p->t('mailverteiler/oeffnenFehlgeschlagen').' -
    '; } else { @@ -149,7 +183,9 @@ else } else { - echo $p->t('mailverteiler/bestaetigeOeffnen',array($_REQUEST['grp']))." : convert_html_chars($_REQUEST['desc'])."&token=1\">".$p->t('mailverteiler/bestaetige').""; + echo '

    '.$p->t('mailverteiler/oeffnenEinesVerteilers').'

    '; + echo $p->t('mailverteiler/bestaetigeOeffnen').':'; + echo ''; } } diff --git a/cis/private/profile/index.php b/cis/private/profile/index.php index 6961ddf11..40cefd67b 100644 --- a/cis/private/profile/index.php +++ b/cis/private/profile/index.php @@ -47,7 +47,7 @@ $p=new phrasen($sprache); if (!$db = new basis_db()) die($p->t('global/fehlerBeimOeffnenDerDatenbankverbindung')); -$uid=get_uid(); +$uid = get_uid(); $datum_obj = new datum(); @@ -129,11 +129,11 @@ echo ' - - - - - + + + + + <?php echo $p->t('tools/ampelsystem') ?> @@ -346,7 +342,7 @@ $(document).ready(function(){ ' . $p->t('tools/ampelsystem') . ''; + echo '

    ' . $p->t('tools/ampelsystem') . '

    '; //title in popup for mandatory ampeln if ($is_popup) @@ -402,10 +398,33 @@ $(document).ready(function(){ $cnt = 1; //counter to set iterative id's $cnt_inactive = 1; //counter to set only one heading line for inactive ampeln + $cnt_active = 0; + + //show panel "no actual ampeln" if there are no active ampeln + foreach ($user_ampel_arr as $user_ampel) + { + if ($user_ampel['active'] == true) + $cnt_active++; + } + + if ($cnt_active == 0) + { + echo ' +
    +
    + +
    +
    '; + + } //fill panel with ampeln foreach ($user_ampel_arr as $user_ampel) { + //use only ampeln that are not overdue if ($user_ampel['show_ampel'] == true) { @@ -416,7 +435,7 @@ $(document).ready(function(){
    @@ -428,12 +447,12 @@ $(document).ready(function(){