diff --git a/application/config/message.php b/application/config/message.php index 35d34124b..8232cdfb7 100644 --- a/application/config/message.php +++ b/application/config/message.php @@ -18,6 +18,8 @@ $config['ou_receivers'] = array('ass'); $config['ou_receivers_no_notice'] = array('infocenter'); // Organization units that will not send the notice email to the internal account, but to the private one $config['ou_receivers_private'] = array('eac', 'ewu', 'scs'); +// +$config['ou_function_whitelist'] = array('ass', 'Leitung', 'fachzuordnung', 'oezuordnung'); $config['message_redirect_url'] = array(); $config['message_redirect_url']['fallback'] = site_url('system/messages/ViewMessage/writeReply'); diff --git a/application/config/navigation.php b/application/config/navigation.php index f44b297a5..84004b58e 100644 --- a/application/config/navigation.php +++ b/application/config/navigation.php @@ -72,11 +72,18 @@ $config['navigation_header'] = array( 'sort' => 40, 'requiredPermissions' => 'basis/vilesci:r', 'children'=> array( + 'messages' => array( + 'link' => site_url('system/messages/MessageClient/read'), + 'icon' => '', + 'target' => '_blank', + 'description' => 'Messages', + 'sort' => 10, + ), 'bpk' => array( 'link' => site_url('person/BPKWartung'), 'icon' => '', 'description' => 'BPK Wartung', - 'sort' => 10, + 'sort' => 20, 'requiredPermissions' => 'admin:r' ) ) diff --git a/application/controllers/api/v1/system/Message.php b/application/controllers/api/v1/system/Message.php index 5c663e832..1825b7db9 100644 --- a/application/controllers/api/v1/system/Message.php +++ b/application/controllers/api/v1/system/Message.php @@ -149,10 +149,10 @@ class Message extends APIv1_Controller if (isSuccess($postMessage)) { $result = $this->messagelib->sendMessageUser( - $this->post()['receiver_id']), // receiverPersonId + $this->post()['receiver_id'], // receiverPersonId $this->post()['subject'], // subject $this->post()['body'], // body - $this->post()['person_id']) ? $this->post()['person_id'] : null, // sender_id + $this->post()['person_id'] ? $this->post()['person_id'] : null, // sender_id isset($this->post()['oe_kurzbz']) ? $this->post()['oe_kurzbz'] : null, // senderOU isset($this->post()['relationmessage_id']) ? $this->post()['relationmessage_id'] : null, // relationmessage_id MSG_PRIORITY_NORMAL, // priority diff --git a/application/controllers/jobs/OneTimeMessages.php b/application/controllers/jobs/OneTimeMessages.php new file mode 100644 index 000000000..58bc1fb7c --- /dev/null +++ b/application/controllers/jobs/OneTimeMessages.php @@ -0,0 +1,122 @@ +load->model('CL/Messages_model', 'CLMessagesModel'); + } + + /** + * Sends the same message to all the applicants whith: + * - Status set as "Wartender" + * - The given study course type (b = bachelor, m = master) + * - The given semester (ex WS2020) + * - How long since applicant (days) + * - The given template id to be used as message subject and body (vorlage_kurzbz) + * The sender of all the messages is specified by the parameter senderId (sender person_id) + */ + public function sendMessageToApplicantsStillWaiting($senderId, $studyCourseType, $semester, $days, $messageTemplate) + { + $this->logInfo('Send message to applicants still waiting start'); + + $queryParams = array( + $semester, + $studyCourseType, + $semester, + $studyCourseType, + $semester, + $studyCourseType + ); + + $dbModel = new DB_Model(); + + $dbPrestudents = $dbModel->execReadOnlyQuery( + 'SELECT distinct on(person_id) p.prestudent_id + FROM public.tbl_prestudent p + JOIN public.tbl_prestudentstatus ps USING (prestudent_id) + JOIN public.tbl_studiengang s USING (studiengang_kz) + WHERE ps.status_kurzbz = \'Wartender\' + AND ps.studiensemester_kurzbz = ? + AND ps.datum <= NOW() - \''.$days.' days\'::interval + AND s.typ = ? + AND NOT EXISTS ( + SELECT pp.person_id + FROM public.tbl_prestudent pp + JOIN public.tbl_prestudentstatus pss USING (prestudent_id) + JOIN public.tbl_studiengang ss USING (studiengang_kz) + WHERE pss.status_kurzbz = \'Aufgenommener\' + AND pss.studiensemester_kurzbz = ? + AND ss.typ = ? + AND pp.person_id = p.person_id + ) + AND NOT EXISTS ( + SELECT pp.person_id + FROM public.tbl_prestudent pp + JOIN public.tbl_prestudentstatus pss USING (prestudent_id) + JOIN public.tbl_studiengang ss USING (studiengang_kz) + WHERE pss.status_kurzbz = \'Student\' + AND pss.studiensemester_kurzbz = ? + AND ss.typ = ? + AND pp.person_id = p.person_id + )', + $queryParams + ); + + if (isError($dbPrestudents)) + { + $this->logError(getError($dbPrestudents), $queryParams); + } + elseif (!hasData($dbPrestudents)) + { + $this->logInfo('There were no users to send message'); + } + else + { + $prestudentIdsArray = array(); + + foreach (getData($dbPrestudents) as $dbPrestudent) + { + $prestudentIdsArray[] = $dbPrestudent->prestudent_id; + } + + $sendMessage = $this->CLMessagesModel->sendExplicitTemplateSenderId( + $senderId, // sender person id + $prestudentIdsArray, // prestudents id + null, // organization unit + $messageTemplate, // template id + null // extra variables + ); + + if (isError($sendMessage)) + { + $this->logError( + getError($sendMessage), + array( + 'prestudents' => $prestudentIdsArray, + 'template' => $messageTemplate + ) + ); + } + + $this->logInfo('Total amount of prestudents: '.count($prestudentIdsArray)); + } + + $this->logInfo('Send message to applicants still waiting end'); + } +} diff --git a/application/controllers/lehre/Pruefungsprotokoll.php b/application/controllers/lehre/Pruefungsprotokoll.php new file mode 100644 index 000000000..594d3a9e1 --- /dev/null +++ b/application/controllers/lehre/Pruefungsprotokoll.php @@ -0,0 +1,223 @@ + 'lehre/pruefungsbeurteilung:r', + 'Protokoll' => 'lehre/pruefungsbeurteilung:r', + 'saveProtokoll' => 'lehre/pruefungsbeurteilung:rw', + ) + ); + + // Load models + $this->load->model('education/Abschlusspruefung_model', 'AbschlusspruefungModel'); + $this->load->model('education/Abschlussbeurteilung_model', 'AbschlussbeurteilungModel'); + + $this->load->library('PermissionLib'); + $this->load->library('AuthLib'); + + // Load language phrases + $this->loadPhrases( + array( + 'ui', + 'global', + 'person', + 'abschlusspruefung', + 'password', + 'lehre' + ) + ); + + $this->_setAuthUID(); // sets property uid + + $this->setControllerId(); // sets the controller id + } + + // ----------------------------------------------------------------------------------------------------------------- + // Public methods + public function index() + { + $this->load->library('WidgetLib'); + $this->load->view('lehre/pruefungsprotokollUebersicht.php'); + } + + /** + * Show Pruefungsprotokoll. + */ + public function Protokoll() + { + $abschlusspruefung_id = $this->input->get('abschlusspruefung_id'); + + if (!is_numeric($abschlusspruefung_id)) + show_error('invalid abschlusspruefung'); + + $abschlusspruefung_saved = false; + $abschlusspruefung = $this->_getAbschlusspruefungBerechtigt($abschlusspruefung_id); + + if (isError($abschlusspruefung)) + show_error(getError($abschlusspruefung)); + else + { + $abschlusspruefung = getData($abschlusspruefung); + $abschlusspruefung_saved = isset($abschlusspruefung->protokoll) && isset($abschlusspruefung->abschlussbeurteilung_kurzbz); + } + + $this->AbschlussbeurteilungModel->addOrder("sort", "ASC"); + $this->AbschlussbeurteilungModel->addOrder("(CASE WHEN abschlussbeurteilung_kurzbz = 'ausgezeichnet' THEN 1 + WHEN abschlussbeurteilung_kurzbz = 'gut' THEN 2 + WHEN abschlussbeurteilung_kurzbz = 'bestanden' THEN 3 + WHEN abschlussbeurteilung_kurzbz = 'angerechnet' THEN 4 + ELSE 5 + END + )"); + $abschlussbeurteilung = $this->AbschlussbeurteilungModel->load(); + + if (isError($abschlussbeurteilung)) + show_error(getError($abschlussbeurteilung)); + else + $abschlussbeurteilung = getData($abschlussbeurteilung); + + $language = getUserLanguage(); + + $data = array( + 'abschlusspruefung' => $abschlusspruefung, + 'abschlussbeurteilung' => $abschlussbeurteilung, + 'abschlusspruefung_saved' => $abschlusspruefung_saved, + 'language' => $language + ); + + $this->load->view('lehre/pruefungsprotokoll.php', $data); + } + + /** + * Save Pruefungsprotokoll (including possible Freigabe) + */ + public function saveProtokoll() + { + $abschlusspruefung_id = $this->input->post('abschlusspruefung_id'); + $data = $this->input->post('protocoldata'); + + if (isset($abschlusspruefung_id) && is_numeric($abschlusspruefung_id) && isset($data)) + { + // check permission + $berechtigt = $this->_getAbschlusspruefungBerechtigt($abschlusspruefung_id); + if (isError($berechtigt)) + $this->outputJsonError(getError($berechtigt)); + else + { + $freigabe = isset($data['freigabedatum']) && $data['freigabedatum']; + + if ($freigabe) + { + // Verify password + $password = $data['password']; + unset($data['password']); + if (!isEmptyString($password)) + { + $result = $this->authlib->checkUserAuthByUsernamePassword($this->_uid, $password); + if (isError($result)) + { + return $this->outputJsonError($this->p->t('password', 'wrongPassword')); // exit if password is incorrect + } + } + else + { + return $this->outputJsonError($this->p->t('password', 'passwordMissing')); + } + } + + $data = $this->_prepareAbschlusspruefungDataForSave($data); + $result = $this->AbschlusspruefungModel->update($abschlusspruefung_id, $data); + + if (hasData($result)) + { + $abschlusspruefung_id = getData($result); + $updateresult = array('abschlusspruefung_id' => $abschlusspruefung_id); + if ($freigabe) + $updateresult['freigabedatum'] = date_format(date_create($data['freigabedatum']), 'd.m.Y'); + + $this->outputJsonSuccess($updateresult); + } + else + $this->outputJsonError('Fehler beim Speichern des Prüfungsprotokolls'); + } + } + else + $this->outputJsonError($this->p->t('ui', 'ungueltigeParameter')); + } + + // ----------------------------------------------------------------------------------------------------------------- + // Private methods + + /** + * Retrieve the UID of the logged user and checks if it is valid + */ + private function _setAuthUID() + { + $this->_uid = getAuthUID(); + + if (!$this->_uid) show_error('User authentification failed'); + } + + /** + * Retrieves an Abschlussprüfung, with permission check + * permission: admin, assistance of study programe or Vorsitz of the Prüfung + * @param $abschlusspruefung_id + * @return object success or error + */ + private function _getAbschlusspruefungBerechtigt($abschlusspruefung_id) + { + $result = error('Error when getting Abschlusspruefung'); + + if (isset($this->_uid)) + { + $abschlusspruefung = $this->AbschlusspruefungModel->getAbschlusspruefung($abschlusspruefung_id); + + if (hasData($abschlusspruefung)) + { + $abschlusspruefung_data = getData($abschlusspruefung); + if ($this->permissionlib->isBerechtigt('admin') || + (isset($abschlusspruefung_data->studiengang_kz) && $this->permissionlib->isBerechtigt('assistenz', 'suid', $abschlusspruefung_data->studiengang_kz)) + || $this->_uid === $abschlusspruefung_data->uid_vorsitz) + $result = $abschlusspruefung; + else + $result = error('Permission denied'); + } + } + + return $result; + } + + /** + * Prepares Abschlussprüfung for save in database, replaces '' with null, sets Freigabedatum + * @param $data + * @return array + */ + private function _prepareAbschlusspruefungDataForSave($data) + { + $nullfields = array('uhrzeit', 'endezeit', 'abschlussbeurteilung_kurzbz', 'protokoll'); + foreach ($data as $idx => $item) + { + if (in_array($idx, $nullfields) & $item === '') + $data[$idx] = null; + } + + if (isset($data['freigabedatum']) && $data['freigabedatum']) + $data['freigabedatum'] = date('Y-m-d'); + + return $data; + } +} diff --git a/application/controllers/lehre/lehrauftrag/Lehrauftrag.php b/application/controllers/lehre/lehrauftrag/Lehrauftrag.php index dade1fb21..b7140c7c3 100644 --- a/application/controllers/lehre/lehrauftrag/Lehrauftrag.php +++ b/application/controllers/lehre/lehrauftrag/Lehrauftrag.php @@ -52,7 +52,8 @@ class Lehrauftrag extends Auth_Controller array( 'global', 'ui', - 'lehre' + 'lehre', + 'table' ) ); diff --git a/application/controllers/lehre/lehrauftrag/LehrauftragAkzeptieren.php b/application/controllers/lehre/lehrauftrag/LehrauftragAkzeptieren.php index 4fc0a879b..6ac2da887 100644 --- a/application/controllers/lehre/lehrauftrag/LehrauftragAkzeptieren.php +++ b/application/controllers/lehre/lehrauftrag/LehrauftragAkzeptieren.php @@ -8,180 +8,196 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); */ class LehrauftragAkzeptieren extends Auth_Controller { - const APP = 'lehrauftrag'; - const LEHRAUFTRAG_URI = 'lehre/lehrauftrag/LehrauftragAkzeptieren'; // URL prefix for this controller - const BERECHTIGUNG_LEHRAUFTRAG_AKZEPTIEREN = 'lehre/lehrauftrag_akzeptieren'; + const APP = 'lehrauftrag'; + const LEHRAUFTRAG_URI = 'lehre/lehrauftrag/LehrauftragAkzeptieren'; // URL prefix for this controller + const BERECHTIGUNG_LEHRAUFTRAG_AKZEPTIEREN = 'lehre/lehrauftrag_akzeptieren'; - private $_uid; // uid of the logged user + private $_uid; // uid of the logged user - /** - * Constructor - */ - public function __construct() - { - // Set required permissions - parent::__construct( - array( - 'index' => 'lehre/lehrauftrag_akzeptieren:r', - 'acceptLehrauftrag' => 'lehre/lehrauftrag_akzeptieren:rw', + /** + * Constructor + */ + public function __construct() + { + // Set required permissions + parent::__construct( + array( + 'index' => 'lehre/lehrauftrag_akzeptieren:r', + 'acceptLehrauftrag' => 'lehre/lehrauftrag_akzeptieren:rw', 'checkInkludierteLehre' => 'lehre/lehrauftrag_akzeptieren:rw' - ) - ); + ) + ); - // Load models - $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); - $this->load->model('accounting/Vertrag_model', 'VertragModel'); - $this->load->model('accounting/Vertragvertragsstatus_model', 'VertragvertragsstatusModel'); - $this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel'); - $this->load->model('codex/Bisverwendung_model', 'BisverwendungModel'); - $this->load->model('person/Benutzer_model', 'BenutzerModel'); + // Load models + $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); + $this->load->model('accounting/Vertrag_model', 'VertragModel'); + $this->load->model('accounting/Vertragvertragsstatus_model', 'VertragvertragsstatusModel'); + $this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel'); + $this->load->model('codex/Bisverwendung_model', 'BisverwendungModel'); + $this->load->model('person/Benutzer_model', 'BenutzerModel'); - // Load libraries - $this->load->library('WidgetLib'); - $this->load->library('PermissionLib'); - $this->load->library('AuthLib'); + // Load libraries + $this->load->library('WidgetLib'); + $this->load->library('PermissionLib'); + $this->load->library('AuthLib'); - // Load helpers - $this->load->helper('array'); - $this->load->helper('url'); + // Load helpers + $this->load->helper('array'); + $this->load->helper('url'); - // Load language phrases - $this->loadPhrases( - array( - 'global', - 'ui', - 'lehre' - ) - ); + // Load language phrases + $this->loadPhrases( + array( + 'global', + 'ui', + 'lehre', + 'password', + 'dms', + 'table' + ) + ); - $this->_setAuthUID(); // sets property uid + $this->_setAuthUID(); // sets property uid - $this->setControllerId(); // sets the controller id - } + $this->setControllerId(); // sets the controller id + } - // ----------------------------------------------------------------------------------------------------------------- - // Public methods + // ----------------------------------------------------------------------------------------------------------------- + // Public methods - /** - * Main page of Lehrauftrag - */ - public function index() - { - // Set studiensemester selected for studiengang dropdown - $studiensemester_kurzbz = $this->input->get('studiensemester'); // if provided by selected studiensemester - if (is_null($studiensemester_kurzbz)) // else set next studiensemester as default value - { - $studiensemester = $this->StudiensemesterModel->getAktOrNextSemester(); - if (hasData($studiensemester)) - { - $studiensemester_kurzbz = $studiensemester->retval[0]->studiensemester_kurzbz; - } - elseif (isError($studiensemester)) - { - show_error(getError($studiensemester)); - } - } + /** + * Main page of Lehrauftrag + */ + public function index() + { + // Set studiensemester selected for studiengang dropdown + $studiensemester_kurzbz = $this->input->get('studiensemester'); // if provided by selected studiensemester + if (is_null($studiensemester_kurzbz)) // else set next studiensemester as default value + { + $studiensemester = $this->StudiensemesterModel->getAktOrNextSemester(); + if (hasData($studiensemester)) + { + $studiensemester_kurzbz = $studiensemester->retval[0]->studiensemester_kurzbz; + } + elseif (isError($studiensemester)) + { + show_error(getError($studiensemester)); + } + } - $view_data = array( - 'studiensemester_selected' => $studiensemester_kurzbz - ); + // Check if user is external lector + $this->MitarbeiterModel->addJoin('public.tbl_benutzer', 'uid = mitarbeiter_uid'); + $result = $this->MitarbeiterModel->loadWhere(array( + 'uid' => $this->_uid, + 'fixangestellt' => false, + 'personalnummer > ' => 0, + 'lektor' => true, + 'aktiv' => true + )); + + $is_external_lector = hasData($result) ? true : false; + + $view_data = array( + 'studiensemester_selected' => $studiensemester_kurzbz, + 'is_external_lector' => $is_external_lector + ); - $this->load->view('lehre/lehrauftrag/acceptLehrauftrag.php', $view_data); - } + $this->load->view('lehre/lehrauftrag/acceptLehrauftrag.php', $view_data); + } - /** - * Set the contract status of Lehrauftrag to 'akzeptiert'. - * Performed on ajax call. - */ - public function acceptLehrauftrag() - { - // Verify password - $password = $this->input->post('password'); - if (!isEmptyString($password)) - { - $result = $this->authlib->checkUserAuthByUsernamePassword($this->_uid, $password); - if (isError($result)) - { - return $this->outputJsonError('Passwort ist inkorrekt'); // exit if password is incorrect - } - } - else - { + /** + * Set the contract status of Lehrauftrag to 'akzeptiert'. + * Performed on ajax call. + */ + public function acceptLehrauftrag() + { + // Verify password + $password = $this->input->post('password'); + if (!isEmptyString($password)) + { + $result = $this->authlib->checkUserAuthByUsernamePassword($this->_uid, $password); + if (isError($result)) + { + return $this->outputJsonError('Passwort ist inkorrekt'); // exit if password is incorrect + } + } + else + { return $this->outputJsonError('Passwort fehlt'); - } + } - // Loop through lehraufträge - $lehrauftrag_arr = $this->input->post('selected_data'); + // Loop through lehraufträge + $lehrauftrag_arr = $this->input->post('selected_data'); - if(is_array($lehrauftrag_arr)) - { - foreach($lehrauftrag_arr as $lehrauftrag) - { - $vertrag_id = (!is_null($lehrauftrag['vertrag_id'])) ? $lehrauftrag['vertrag_id'] : null; + if(is_array($lehrauftrag_arr)) + { + foreach($lehrauftrag_arr as $lehrauftrag) + { + $vertrag_id = (!is_null($lehrauftrag['vertrag_id'])) ? $lehrauftrag['vertrag_id'] : null; - // Check if user is entitled to accept this Lehrauftrag - // * first retrieve person_id of the contract - $this->VertragModel->addSelect('person_id'); + // Check if user is entitled to accept this Lehrauftrag + // * first retrieve person_id of the contract + $this->VertragModel->addSelect('person_id'); - if ($result = getData($this->VertragModel->load($vertrag_id))) - { - // * then find the uid of that contracts person_id - $this->BenutzerModel->addSelect('uid'); + if ($result = getData($this->VertragModel->load($vertrag_id))) + { + // * then find the uid of that contracts person_id + $this->BenutzerModel->addSelect('uid'); - if ($result = getData($this->BenutzerModel->getFromPersonId($result[0]->person_id))) - { - // * finally check uid of contract against the logged in user + if ($result = getData($this->BenutzerModel->getFromPersonId($result[0]->person_id))) + { + // * finally check uid of contract against the logged in user $account_found = false; - foreach($result as $row_accounts) + foreach ($result as $row_accounts) { - if($row_accounts->uid == $this->_uid) + if ($row_accounts->uid == $this->_uid) { $account_found = true; } } - if (!$account_found) - { + if (!$account_found) + { return $this->outputJsonError('Sie haben keine Berechtigung für einen Vertrag'); - } - } - else - { + } + } + else + { return $this->outputJsonError('Fehler beim Laden der Benutzerdaten'); - } - } - else - { + } + } + else + { return $this->outputJsonError('Fehler beim Laden des Vertrags'); - } + } - // Set status to accepted - $result = $this->VertragvertragsstatusModel->setStatus($vertrag_id, $this->_uid, 'akzeptiert'); + // Set status to accepted + $result = $this->VertragvertragsstatusModel->setStatus($vertrag_id, $this->_uid, 'akzeptiert'); - if ($result->retval) - { - $json []= array( - 'row_index' => $lehrauftrag['row_index'], - 'akzeptiert' => date('Y-m-d') - ); - } + if ($result->retval) + { + $json []= array( + 'row_index' => $lehrauftrag['row_index'], + 'akzeptiert' => date('Y-m-d') + ); + } else { return $this->outputJsonError($result->retval); } - } + } - // Output json to ajax - if (isset($json) && !isEmptyArray($json)) - { - $this->outputJsonSuccess($json); - } - } + // Output json to ajax + if (isset($json) && !isEmptyArray($json)) + { + $this->outputJsonSuccess($json); + } + } else { return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - } + } /** * Check if lectors latest Verwendung has inkludierte Lehre @@ -189,7 +205,7 @@ class LehrauftragAkzeptieren extends Auth_Controller * - inkludierte_lehre -1: fix employed lector -> has inkludierte Lehre (all inclusive) * - inkludierte_lehre > 0: fix employed lector -> has inkludierte Lehre (value is amount of hours included) */ - public function checkInkludierteLehre() + public function checkInkludierteLehre() { $result = $this->BisverwendungModel->getLast($this->_uid, false); @@ -203,17 +219,17 @@ class LehrauftragAkzeptieren extends Auth_Controller } } - // ----------------------------------------------------------------------------------------------------------------- - // Private methods + // ----------------------------------------------------------------------------------------------------------------- + // Private methods - /** - * Retrieve the UID of the logged user and checks if it is valid - */ - private function _setAuthUID() - { - $this->_uid = getAuthUID(); + /** + * Retrieve the UID of the logged user and checks if it is valid + */ + private function _setAuthUID() + { + $this->_uid = getAuthUID(); - if (!$this->_uid) show_error('User authentification failed'); - } + if (!$this->_uid) show_error('User authentification failed'); + } } diff --git a/application/controllers/lehre/lehrauftrag/LehrauftragErteilen.php b/application/controllers/lehre/lehrauftrag/LehrauftragErteilen.php index b339c81a4..64a2be69b 100644 --- a/application/controllers/lehre/lehrauftrag/LehrauftragErteilen.php +++ b/application/controllers/lehre/lehrauftrag/LehrauftragErteilen.php @@ -50,7 +50,8 @@ class LehrauftragErteilen extends Auth_Controller array( 'global', 'ui', - 'lehre' + 'lehre', + 'table' ) ); diff --git a/application/controllers/system/FAS_UDF.php b/application/controllers/system/FAS_UDF.php index cd78d64d2..febe266c7 100644 --- a/application/controllers/system/FAS_UDF.php +++ b/application/controllers/system/FAS_UDF.php @@ -7,60 +7,34 @@ class FAS_UDF extends Auth_Controller const FAS_UDF_SESSION_NAME = 'fasUdfSessionName'; public function __construct() - { - parent::__construct( + { + parent::__construct( array( 'index' => 'basis/person:r', 'saveUDF' => 'basis/person:rw' ) ); - + $this->load->model('person/Person_model', 'PersonModel'); $this->load->model('crm/Prestudent_model', 'PrestudentModel'); - } + } /** * */ public function index() { - $fasUdfSession = getSession(self::FAS_UDF_SESSION_NAME); - $person_id = $this->input->get('person_id'); - if (isset($fasUdfSession['person_id'])) - { - if (!isset($person_id)) - { - $person_id = $fasUdfSession['person_id']; - } - unset($fasUdfSession['person_id']); - } - $prestudent_id = $this->input->get('prestudent_id'); - if (isset($fasUdfSession['prestudent_id'])) - { - if (!isset($prestudent_id)) - { - $prestudent_id = $fasUdfSession['prestudent_id']; - } - unset($fasUdfSession['prestudent_id']); - } - $result = null; - if (isset($fasUdfSession['result'])) - { - $result = clone $fasUdfSession['result']; - setSessionElement(self::FAS_UDF_SESSION_NAME, 'result', null); - } - - $data = array('result' => $result); + $data = array(); if (isset($person_id) && is_numeric($person_id)) { if ($this->PersonModel->hasUDF()) { $personUdfs = $this->PersonModel->getUDFs($person_id); - $personUdfs['person_id'] = $person_id; + $data['person_id'] = $person_id; $data['personUdfs'] = $personUdfs; } } @@ -70,61 +44,12 @@ class FAS_UDF extends Auth_Controller if ($this->PrestudentModel->hasUDF()) { $prestudentUdfs = $this->PrestudentModel->getUDFs($prestudent_id); - $prestudentUdfs['prestudent_id'] = $prestudent_id; + $data['prestudent_id'] = $prestudent_id; $data['prestudentUdfs'] = $prestudentUdfs; } } $this->load->view('system/fas_udf', $data); } - - /** - * - */ - public function saveUDF() - { - $udfs = $this->input->post(); - $validation = $this->_validate($udfs); - - $userdata = array( - 'person_id' => $this->input->post('person_id'), - 'prestudent_id' => $this->input->post('prestudent_id') - ); - - if (isSuccess($validation)) - { - // Load model UDF_model - $this->load->model('system/FAS_UDF_model', 'FASUDFModel'); - - $result = $this->FASUDFModel->saveUDFs($udfs); - - $userdata['result'] = $result; - } - else - { - $userdata['result'] = $validation; - } - - setSessionElement(self::FAS_UDF_SESSION_NAME, 'person_id', $userdata['person_id']); - setSessionElement(self::FAS_UDF_SESSION_NAME, 'prestudent_id', $userdata['prestudent_id']); - setSessionElement(self::FAS_UDF_SESSION_NAME, 'result', $userdata['result']); - - redirect('system/FAS_UDF'); - } - - /** - * - */ - private function _validate($udfs) - { - $validation = error('person_id or prestudent_id is missing'); - - if((isset($udfs['person_id']) && !(is_null($udfs['person_id'])) && ($udfs['person_id'] != '')) - || (isset($udfs['prestudent_id']) && !(is_null($udfs['prestudent_id'])) && ($udfs['prestudent_id'] != ''))) - { - $validation = success(true); - } - - return $validation; - } } + diff --git a/application/controllers/system/Phrases.php b/application/controllers/system/Phrases.php index f589eaeb2..2bb003567 100644 --- a/application/controllers/system/Phrases.php +++ b/application/controllers/system/Phrases.php @@ -161,7 +161,7 @@ class Phrases extends Auth_Controller $phrase_inhalt = $this->phraseslib->insertPhraseinhalt($data); if ($phrase_inhalt->error) - show_error(getError($phrase_inhalt); + show_error(getError($phrase_inhalt)); $phrase_inhalt_id = $phrase_inhalt->retval; diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index 92636e6df..43de8bb60 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -1337,7 +1337,7 @@ class InfoCenter extends Auth_Controller show_error(getError($prestudentWithZgv)); } - $zgvpruefung = $prestudentWithZgv->retval[0]; + $zgvpruefung = getData($prestudentWithZgv); if (isset($zgvpruefung->prestudentstatus)) { @@ -1362,11 +1362,15 @@ class InfoCenter extends Auth_Controller $zgvpruefung->isRtFreigegeben = false; $zgvpruefung->isStgFreigegeben = false; $zgvpruefung->sendStgFreigabeMsg = true;//wether Stgudiengangfreigabemessage can be sent (for "exceptions", Studiengänge with no message sending) - $this->PrestudentstatusModel->addSelect('bestaetigtam, statusgrund_id, tbl_status_grund.bezeichnung_mehrsprachig AS bezeichnung_statusgrund'); - $this->PrestudentstatusModel->addJoin('public.tbl_status_grund', 'statusgrund_id', 'LEFT'); - $isFreigegeben = $this->PrestudentstatusModel->loadWhere(array('studiensemester_kurzbz' => $zgvpruefung->prestudentstatus->studiensemester_kurzbz, - 'tbl_prestudentstatus.status_kurzbz' => self::INTERESSENTSTATUS, 'prestudent_id' => $prestudent->prestudent_id)); + $isFreigegeben = null; + if (isset($zgvpruefung->prestudentstatus->studiensemester_kurzbz)) + { + $this->PrestudentstatusModel->addSelect('bestaetigtam, statusgrund_id, tbl_status_grund.bezeichnung_mehrsprachig AS bezeichnung_statusgrund'); + $this->PrestudentstatusModel->addJoin('public.tbl_status_grund', 'statusgrund_id', 'LEFT'); + $isFreigegeben = $this->PrestudentstatusModel->loadWhere(array('studiensemester_kurzbz' => $zgvpruefung->prestudentstatus->studiensemester_kurzbz, + 'tbl_prestudentstatus.status_kurzbz' => self::INTERESSENTSTATUS, 'prestudent_id' => $prestudent->prestudent_id)); + } if (hasData($isFreigegeben)) { @@ -1374,7 +1378,7 @@ class InfoCenter extends Auth_Controller { if (isset($prestudentstatus->bestaetigtam)) { - //if statusgrund set - RTfreigabe, otherwise Stgfreigabe + //if statusgrund set - freigegeben for Studiengang, otherwise freigegeben for RT if (isset($prestudentstatus->statusgrund_id)) { if (isset($prestudentstatus->bezeichnung_statusgrund[0]) @@ -1388,23 +1392,37 @@ class InfoCenter extends Auth_Controller $zgvpruefung->isRtFreigegeben = true; } } - } + } - //application priority change possible? - $zgvpruefung->changeup = false; - $zgvpruefung->changedown = false; + //application priority change possible? + $zgvpruefung->changeup = false; + $zgvpruefung->changedown = false; + $zgvpruefung->hasBewerber = false; - if (isset($zgvpruefung->prestudentstatus->status_kurzbz) && $zgvpruefung->prestudentstatus->status_kurzbz == self::INTERESSENTSTATUS) - { - if (isset($zgvpruefung->prestudentstatus->studiensemester_kurzbz)) - { - $studiensemester = $zgvpruefung->prestudentstatus->studiensemester_kurzbz; - $zgvpruefung->changeup = $this->PrestudentModel->checkPrioChange($zgvpruefung->prestudent_id, $studiensemester, -1); - $zgvpruefung->changedown = $this->PrestudentModel->checkPrioChange($zgvpruefung->prestudent_id, $studiensemester, 1); - } - } + if (isset($zgvpruefung->prestudentstatus->status_kurzbz) && $zgvpruefung->prestudentstatus->status_kurzbz == self::INTERESSENTSTATUS) + { + if (isset($zgvpruefung->prestudentstatus->studiensemester_kurzbz)) + { + $studiensemester = $zgvpruefung->prestudentstatus->studiensemester_kurzbz; + //show warning if there is already another bewerber (RT result already exists) + $bewerber = $this->PersonModel->hasBewerber($person_id, $studiensemester, 'b'); - $zgvpruefungen[] = $zgvpruefung; + if (hasData($bewerber)) + { + $bewerbercnt = getData($bewerber); + + if (is_numeric($bewerbercnt[0]->anzahl_bewerber) && $bewerbercnt[0]->anzahl_bewerber > 0) + { + $zgvpruefung->hasBewerber = true; + } + } + + $zgvpruefung->changeup = $this->PrestudentModel->checkPrioChange($zgvpruefung->prestudent_id, $studiensemester, -1); + $zgvpruefung->changedown = $this->PrestudentModel->checkPrioChange($zgvpruefung->prestudent_id, $studiensemester, 1); + } + } + + $zgvpruefungen[] = $zgvpruefung; } $this->_sortPrestudents($zgvpruefungen); @@ -1523,9 +1541,10 @@ class InfoCenter extends Auth_Controller show_error(getError($prestudent)); } - $person_id = $prestudent->retval[0]->person_id; - $studiengang_kurzbz = $prestudent->retval[0]->studiengang; - $studiengang_bezeichnung = $prestudent->retval[0]->studiengangbezeichnung; + $prestudentdata = getData($prestudent); + $person_id = $prestudentdata->person_id; + $studiengang_kurzbz = $prestudentdata->studiengang; + $studiengang_bezeichnung = $prestudentdata->studiengangbezeichnung; return array('person_id' => $person_id, 'studiengang_kurzbz' => $studiengang_kurzbz, 'studiengang_bezeichnung' => $studiengang_bezeichnung); } @@ -1568,7 +1587,8 @@ class InfoCenter extends Auth_Controller private function _sendFreigabeMail($prestudent_id) { //get data - $prestudent = $this->PrestudentModel->getPrestudentWithZgv($prestudent_id)->retval[0]; + $prestudent = $this->PrestudentModel->getPrestudentWithZgv($prestudent_id); + $prestudent = getData($prestudent); $prestudentstatus = $prestudent->prestudentstatus; $person_id = $prestudent->person_id; $person = $this->PersonModel->getPersonStammdaten($person_id, true)->retval; diff --git a/application/controllers/system/messages/MessageClient.php b/application/controllers/system/messages/MessageClient.php index a0cc5c518..5adb49296 100644 --- a/application/controllers/system/messages/MessageClient.php +++ b/application/controllers/system/messages/MessageClient.php @@ -34,7 +34,7 @@ class MessageClient extends FHC_Controller public function read() { // Loads the view to read messages - $this->load->view('system/messages/ajaxRead'); + $this->load->view('system/messages/ajaxRead', $this->CLMessagesModel->prepareAjaxRead()); } /** diff --git a/application/controllers/system/messages/Messages.php b/application/controllers/system/messages/Messages.php index 7b48b1fcf..296022ca4 100644 --- a/application/controllers/system/messages/Messages.php +++ b/application/controllers/system/messages/Messages.php @@ -92,9 +92,9 @@ class Messages extends Auth_Controller */ public function parseMessageText() { - $receiver_id = $this->input->get('receiver_id'); - $text = $this->input->get('text'); - $type = $this->input->get('type'); + $receiver_id = $this->input->post('receiver_id'); + $text = $this->input->post('text'); + $type = $this->input->post('type'); if ($type == Messages_model::TYPE_PERSONS) { diff --git a/application/controllers/widgets/Filters.php b/application/controllers/widgets/Filters.php index b5cbc07ea..748272f09 100644 --- a/application/controllers/widgets/Filters.php +++ b/application/controllers/widgets/Filters.php @@ -4,7 +4,7 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); /** * This controller operates between (interface) the JS (GUI) and the FilterWidgetLib (back-end) - * Provides data to the ajax get calls about the filter + * Provides data to the ajax get calls about the filter widget * Accepts ajax post calls to change the filter data * This controller works with JSON calls on the HTTP GET or POST and the output is always JSON * NOTE: extends the FHC_Controller instead of the Auth_Controller because the FilterWidget has its @@ -12,7 +12,7 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); */ class Filters extends FHC_Controller { - const FILTER_UNIQUE_ID = 'filterUniqueId'; + const FILTER_UNIQUE_ID = 'filterUniqueId'; // Name of the filter widget unique id /** * Calls the parent's constructor and loads the FilterWidgetLib diff --git a/application/controllers/widgets/Tables.php b/application/controllers/widgets/Tables.php index 21161ff9f..b3ea7d5a5 100644 --- a/application/controllers/widgets/Tables.php +++ b/application/controllers/widgets/Tables.php @@ -4,7 +4,7 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); /** * This controller operates between (interface) the JS (GUI) and the tablewidgetlib (back-end) - * Provides data to the ajax get calls about the filter + * Provides data to the ajax get calls about the table widget * Accepts ajax post calls to change the filter data * This controller works with JSON calls on the HTTP GET or POST and the output is always JSON * NOTE: extends the FHC_Controller instead of the Auth_Controller because the TableWidget has its @@ -12,7 +12,7 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); */ class Tables extends FHC_Controller { - const TABLE_UNIQUE_ID = 'tableUniqueId'; + const TABLE_UNIQUE_ID = 'tableUniqueId'; // Name of the table widget unique id /** * Calls the parent's constructor and loads the tablewidgetlib diff --git a/application/controllers/widgets/UDF.php b/application/controllers/widgets/UDF.php new file mode 100644 index 000000000..5b4c45776 --- /dev/null +++ b/application/controllers/widgets/UDF.php @@ -0,0 +1,107 @@ +load->library('AuthLib'); + + // Loads the UDFLib with HTTP GET/POST parameters + $this->_loadUDFLib(); + + // Checks if the caller is allow to use this UDF widget + $this->_isAllowed(); + } + + //------------------------------------------------------------------------------------------------------------------ + // Public methods + + /** + * Save data about the current UDFs and the result will be written on the output in JSON format + */ + public function saveUDFs() + { + $udfUniqueId = $this->input->post(self::UDF_UNIQUE_ID); + $udfs = $this->input->post(UDFLib::UDFS_ARG_NAME); + + if (!isEmptyString($udfs)) + { + $jsonDecodedUDF = json_decode($udfs); + if ($jsonDecodedUDF != null) + { + $this->outputJson($this->udflib->saveUDFs($udfUniqueId, $jsonDecodedUDF)); + } + else + { + $this->outputJsonError('No valid JSON format for UDF values'); + } + } + else + { + $this->outputJsonError('UDFUniqueId, schema, table name, primary key name and primary key value are mandatory paramenters'); + } + } + + //------------------------------------------------------------------------------------------------------------------ + // Private methods + + /** + * Checks if the user is allowed to use this UDFWidget + */ + private function _isAllowed() + { + if (!$this->udflib->isAllowed()) + { + $this->terminateWithJsonError('You are not allowed to access to this content'); + } + } + + /** + * Loads the UDFLib with the UDF_UNIQUE_ID parameter + * If the parameter UDF_UNIQUE_ID is not given then the execution of the controller is terminated and + * an error message is printed + */ + private function _loadUDFLib() + { + // If the parameter UDF_UNIQUE_ID is present in the HTTP GET or POST + if (isset($_GET[self::UDF_UNIQUE_ID]) || isset($_POST[self::UDF_UNIQUE_ID])) + { + // If it is present in the HTTP GET + if (isset($_GET[self::UDF_UNIQUE_ID])) + { + $udfUniqueId = $this->input->get(self::UDF_UNIQUE_ID); // is retrieved from the HTTP GET + } + elseif (isset($_POST[self::UDF_UNIQUE_ID])) // Else if it is present in the HTTP POST + { + $udfUniqueId = $this->input->post(self::UDF_UNIQUE_ID); // is retrieved from the HTTP POST + } + + // Loads the UDFLib that contains all the used logic + $this->load->library('UDFLib'); + + $this->udflib->setUDFUniqueId($udfUniqueId); + } + else // Otherwise an error will be written in the output + { + $this->terminateWithJsonError('Parameter "'.self::UDF_UNIQUE_ID.'" not provided!'); + } + } +} diff --git a/application/core/DB_Model.php b/application/core/DB_Model.php index ca760c662..4b89ae5bf 100644 --- a/application/core/DB_Model.php +++ b/application/core/DB_Model.php @@ -60,6 +60,20 @@ class DB_Model extends CI_Model // ------------------------------------------------------------------------------------------ // Public methods + /** + * This method provides a way to setup a database model without declaring one that extends this class + */ + public function setup($schema, $table, $primaryKey, $hasSequence = true) + { + // + if (!isEmptyString($schema) && !isEmptyString($table) && !isEmptyString($primaryKey) && is_bool($hasSequence)) + { + $this->dbTable = $schema.'.'.$table; + $this->pk = $primaryKey; + $this->hasSequence = $hasSequence; + } + } + /** * Insert Data into DB-Table * @@ -690,7 +704,7 @@ class DB_Model extends CI_Model */ public function hasUDF() { - if($this->fieldExists(UDFLib::COLUMN_NAME)) + if ($this->fieldExists(UDFLib::COLUMN_NAME)) { $resultUDFsDefinitions = $this->UDFModel->getUDFsDefinitions($this->dbTable); if (hasData($resultUDFsDefinitions)) @@ -727,8 +741,8 @@ class DB_Model extends CI_Model $cleanedQuery = trim(preg_replace('/\t|\n|\r|;/', '', $query)); // // - if (stripos($cleanedQuery, 'SELECT') == 0 - && (stripos($cleanedQuery, 'INSERT') > 0 || stripos($cleanedQuery, 'INSERT') == false) + if ( + (stripos($cleanedQuery, 'INSERT') > 0 || stripos($cleanedQuery, 'INSERT') == false) && (stripos($cleanedQuery, 'UPDATE') > 0 || stripos($cleanedQuery, 'UPDATE') == false) && (stripos($cleanedQuery, 'CREATE') > 0 || stripos($cleanedQuery, 'CREATE') == false) && (stripos($cleanedQuery, 'DELETE') > 0 || stripos($cleanedQuery, 'DELETE') == false) diff --git a/application/helpers/hlp_header_helper.php b/application/helpers/hlp_header_helper.php index 1a0d9dc49..f8bbb9ad2 100644 --- a/application/helpers/hlp_header_helper.php +++ b/application/helpers/hlp_header_helper.php @@ -69,6 +69,8 @@ function generateCSSsInclude($CSSs) */ function generateJSDataStorageObject($indexPage, $calledPath, $calledMethod) { + $user_language = getUserLanguage(); + $toPrint = "\n"; $toPrint .= ' - - - - - - - - -

'.$p->t('lvaliste/titel').' ( '.$stdsem.' )

'; - echo '
'; - for ($i=0;$i<$num_rows_stdsem;$i++) - { - $row=$db->db_fetch_object($result_stdsem); - if ($stdsem==$row->studiensemester_kurzbz) - echo ''.$row->studiensemester_kurzbz.' - '; - else - echo ''.$row->studiensemester_kurzbz.' - '; - } - echo ''; - echo ''.$p->t('lvaliste/hilfeAnzeigen').''; - echo '

'; - if ($num_rows>0) - { - - echo '

'.$p->t('lvaliste/lehrveranstaltungen').'

'; - echo $p->t('lvaliste/anzahl').': '.$num_rows; - echo ' - - - '; - if(!defined('CIS_LVALISTE_NOTENEINGABE_ANZEIGEN') || CIS_LVALISTE_NOTENEINGABE_ANZEIGEN) - echo ''; - - - if($lvinfo) - echo ''; - - echo ' - - - - - - - - - - - - - - - - '; - // Lektoren sollen die Anmerkung dzt. nicht sehen, da nur für intern gedacht - - echo ' - '; - $stg_obj = new studiengang(); - $stg_obj->getAll(null,null); - $summe_std=0; - - for ($i=0; $i<$num_rows; $i++) + $("#t2").tablesorter( { - $row=$db->db_fetch_object($result); - $lvangebot = new lvangebot(); - echo ''; - if(!defined('CIS_LVALISTE_NOTENEINGABE_ANZEIGEN') || CIS_LVALISTE_NOTENEINGABE_ANZEIGEN) - echo ''; - - if($lvinfo) - echo ''; - - echo ''; - echo ''; - echo ''; - if ($row->lehrfach_bez!=$row->lv_bezeichnung) - echo ''; - else - echo ''; - echo ''; - echo ''; - echo ''; - - $qry ="SELECT * FROM lehre.tbl_lehreinheitgruppe WHERE lehreinheit_id=".$db->db_add_param($row->lehreinheit_id); - $gruppe=''; - if($result_grp = $db->db_query($qry)) - { - while($row_grp = $db->db_fetch_object($result_grp)) - { - if($row_grp->gruppe_kurzbz!='') - $gruppe.= $row_grp->gruppe_kurzbz.'
'; - else - $gruppe.= $stg_obj->kuerzel_arr[$row->studiengang_kz].'-'.$row_grp->semester.$row_grp->verband.$row_grp->gruppe.'
'; - } - } - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - if(getSprache()=='German') - { - echo ''; - } - else - { - echo ''; - } - echo ''; - - $lvangebot->getAllFromLvId($row->lehrveranstaltung_id, $row->studiensemester_kurzbz); - if(!empty($lvangebot->result)) - { - echo ''; - echo ''; - } - else - { - echo ' - '; - } - //echo ''; Lektoren sollen die Anmerkung dzt. nicht sehen, da nur für intern gedacht - - echo ''; - $summe_std+=$row->semesterstunden; - } - echo ''; - echo ''; - echo ''; - if(!defined('CIS_LVALISTE_NOTENEINGABE_ANZEIGEN') || CIS_LVALISTE_NOTENEINGABE_ANZEIGEN) - echo ''; - if($lvinfo) - echo ''; - - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - if(getSprache()=='German') + sortList: [[0,0],[1,0],[3,0]], + widgets: ["zebra"] + }); + $("#t3").tablesorter( { - echo ''; - } - else - { - echo ''; - } - echo ''; - echo ''; - echo ''; - echo '
'.$p->t('lvaliste/gesamtnote').''.$p->t('lvaliste/lvinfo').''.$p->t('lvaliste/id').''.$p->t('lvaliste/lehrfach').''.$p->t('lvaliste/lehrform').''.$p->t('lvaliste/lvBezeichnung').''.$p->t('lvaliste/lektor').''.$p->t('lvaliste/studiengang').''.$p->t('lvaliste/semester').''.$p->t('lvaliste/gruppen').''.$p->t('lvaliste/raumtyp').''.$p->t('lvaliste/raumtypalternativ').''.$p->t('lvaliste/blockung').''.$p->t('lvaliste/wochenrythmus').''.$p->t('lvaliste/stunden').''.$p->t('lvaliste/kalenderwoche').'Anm. vonAnm. bis'.$p->t('lvaliste/anmerkung').'
'.$p->t('lvaliste/gesamtnote').''.$p->t('lvaliste/lvinfo').''.$row->lehreinheit_id.''.$row->lehrfach.''.$row->le_lehrform_kurzbz.''.$row->lv_bezeichnung.' ('.$p->t('lvaliste/lehrfach').': '.$row->lehrfach_bez.')'.$row->lv_bezeichnung.''.$row->lektor.''.$row->stg_kurzbz.''.$row->semester.''.$gruppe.''.$row->raumtyp.''.$row->raumtypalternativ.''.$row->stundenblockung.''.$row->wochenrythmus.''.number_format($row->semesterstunden,2,$dec_point=",",$thousands_sep=".").''.number_format($row->semesterstunden,2,$dec_point=".",$thousands_sep=",").''.$row->start_kw.''.$datum->formatDatum($lvangebot->result[0]->anmeldefenster_start, "d.m.Y").''.$datum->formatDatum($lvangebot->result[0]->anmeldefenster_ende, "d.m.Y").'  '.$row->le_anmerkung.'
             '.$p->t('lvaliste/summe').''.number_format($summe_std,2,$dec_point=",",$thousands_sep=".").''.number_format($summe_std,2,$dec_point=".",$thousands_sep=",").' 
'; - } + sortList: [[0,0],[1,0],[3,0]], + widgets: ["zebra"] + }); + }); + --> + + + +

'.$p->t('lvaliste/titel').' ( '.$stdsem.' )

'; +echo '
'; +for ($i = 0;$i < $num_rows_stdsem;$i++) +{ + $row = $db->db_fetch_object($result_stdsem); + if ($stdsem == $row->studiensemester_kurzbz) + echo ''.$row->studiensemester_kurzbz.' - '; else - echo $p->t('lvaliste/keineDatensaetze').'
'; + echo ''.$row->studiensemester_kurzbz.' - '; +} +echo '
'; +echo ''.$p->t('lvaliste/hilfeAnzeigen').''; +echo '

'; +if ($num_rows > 0) +{ + $anzahl_lvs = 0; + $lvtable = ' + + + '; + if (!defined('CIS_LVALISTE_NOTENEINGABE_ANZEIGEN') || CIS_LVALISTE_NOTENEINGABE_ANZEIGEN) + $lvtable .= ''; - //Betreuungen - - $mitarbeiter = new benutzer(); - $mitarbeiter->load($uid); - - $qry = "SELECT - tbl_lehrveranstaltung.bezeichnung, tbl_projektarbeit.titel, - (SELECT nachname || ' ' || vorname FROM public.tbl_benutzer JOIN public.tbl_person USING(person_id) - WHERE uid=student_uid) as student, tbl_lehrveranstaltung.studiengang_kz, tbl_lehrveranstaltung.semester, - tbl_studiengang.email, tbl_betreuerart.beschreibung AS beutreuerart_beschreibung, tbl_projektbetreuer.stunden - FROM - lehre.tbl_lehreinheit, lehre.tbl_lehrveranstaltung, lehre.tbl_projektarbeit, lehre.tbl_projektbetreuer, public.tbl_studiengang, lehre.tbl_betreuerart - WHERE - tbl_lehreinheit.lehreinheit_id=tbl_projektarbeit.lehreinheit_id AND - tbl_lehreinheit.lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id AND - tbl_lehreinheit.studiensemester_kurzbz=".$db->db_add_param($stdsem)." AND - tbl_projektarbeit.projektarbeit_id=tbl_projektbetreuer.projektarbeit_id AND - tbl_lehrveranstaltung.studiengang_kz=tbl_studiengang.studiengang_kz AND - tbl_projektbetreuer.betreuerart_kurzbz=tbl_betreuerart.betreuerart_kurzbz AND - tbl_projektbetreuer.person_id=".$db->db_add_param($mitarbeiter->person_id, FHC_INTEGER); + if ($lvinfo) + $lvtable .= ''; + $lvtable .= ' + + + + + + + + + + + + + + + + + + '; $stg_obj = new studiengang(); $stg_obj->getAll(null,null); $summe_std = 0; - if($result = $db->db_query($qry)) + for ($i = 0; $i < $num_rows; $i++) { - if($db->db_num_rows($result)>0) + $row = $db->db_fetch_object($result); + + // Nur erteilte Vertraege anzeigen wenn dies im Config hinterlegt ist. + if (defined('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON') + && CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON != '') { - echo '

'.$p->t('lvaliste/betreuungen').'

'; - echo $p->t('lvaliste/anzahl').': '.$db->db_num_rows($result); - echo '
'.$p->t('lvaliste/gesamtnote').''.$p->t('lvaliste/lvinfo').''.$p->t('lvaliste/id').''.$p->t('lvaliste/lehrfach').''.$p->t('lvaliste/lehrform').''.$p->t('lvaliste/lvBezeichnung').''.$p->t('lvaliste/lektor').''.$p->t('lvaliste/studiengang').''.$p->t('lvaliste/semester').''.$p->t('lvaliste/gruppen').''.$p->t('lvaliste/raumtyp').''.$p->t('lvaliste/raumtypalternativ').''.$p->t('lvaliste/blockung').''.$p->t('lvaliste/wochenrythmus').''.$p->t('lvaliste/stunden').''.$p->t('lvaliste/kalenderwoche').'Anm. vonAnm. bis
'; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - while($row = $db->db_fetch_object($result)) + $vertrag = new vertrag(); + if (!$vertrag->isVertragErteiltLV($row->lehrveranstaltung_id, $stdsem, $user)) { - echo ''; - echo ''; - echo ''; - if(getSprache()=='German') - { - echo ''; - } + continue; + } + } + $anzahl_lvs++; + + $lvangebot = new lvangebot(); + $lvtable .= ''; + if (!defined('CIS_LVALISTE_NOTENEINGABE_ANZEIGEN') || CIS_LVALISTE_NOTENEINGABE_ANZEIGEN) + $lvtable .= ''; + + if ($lvinfo) + $lvtable .= ''; + + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + if ($row->lehrfach_bez != $row->lv_bezeichnung) + $lvtable .= ''; + else + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + + $qry = " + SELECT * FROM lehre.tbl_lehreinheitgruppe + WHERE lehreinheit_id=".$db->db_add_param($row->lehreinheit_id); + + $gruppe = ''; + if ($result_grp = $db->db_query($qry)) + { + while ($row_grp = $db->db_fetch_object($result_grp)) + { + if ($row_grp->gruppe_kurzbz != '') + $gruppe .= $row_grp->gruppe_kurzbz.'
'; else - { - echo ''; - } - echo ''; - echo ''; - echo ''; - echo ''; - - $summe_std+=$row->stunden; + $gruppe .= $stg_obj->kuerzel_arr[$row->studiengang_kz].'-'.$row_grp->semester.$row_grp->verband.$row_grp->gruppe.'
'; } - echo ''; - echo ''; + } + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + if (getSprache() == 'German') + { + $lvtable .= ''; + } + else + { + $lvtable .= ''; + } + $lvtable .= ''; + + $lvangebot->getAllFromLvId($row->lehrveranstaltung_id, $row->studiensemester_kurzbz); + if (!empty($lvangebot->result)) + { + $lvtable .= ''; + $lvtable .= ''; + } + else + { + $lvtable .= ' + '; + } + + $lvtable .= ''; + $summe_std += $row->semesterstunden; + } + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + if (!defined('CIS_LVALISTE_NOTENEINGABE_ANZEIGEN') || CIS_LVALISTE_NOTENEINGABE_ANZEIGEN) + $lvtable .= ''; + if ($lvinfo) + $lvtable .= ''; + + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + if (getSprache() == 'German') + { + $lvtable .= ''; + } + else + { + $lvtable .= ''; + } + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= '
'.$p->t('lvaliste/studiengang').''.$p->t('lvaliste/semester').''.$p->t('lvaliste/stunden').''.$p->t('lvaliste/lvBezeichnung').''.$p->t('lvaliste/student').''.$p->t('lvaliste/betreuungsart').''.$p->t('lvaliste/titelProjektarbeit').'
'.$stg_obj->kuerzel_arr[$row->studiengang_kz].''.$row->semester.''.number_format($row->stunden,2,$dec_point =",", $thousands_sep ="."). '
'.$p->t('lvaliste/gesamtnote').''.$p->t('lvaliste/lvinfo').''.$row->lehreinheit_id.''.$row->lehrfach.''.$row->le_lehrform_kurzbz.''.$row->lv_bezeichnung.' ('.$p->t('lvaliste/lehrfach').': '.$row->lehrfach_bez.')'.$row->lv_bezeichnung.''.$row->lektor.''.$row->stg_kurzbz.''.$row->semester.''.number_format($row->stunden,2,$dec_point =".", $thousands_sep =","). ''.$row->bezeichnung.''.$row->student.''.$row->beutreuerart_beschreibung.''.$row->titel.'
'.$gruppe.''.$row->raumtyp.''.$row->raumtypalternativ.''.$row->stundenblockung.''.$row->wochenrythmus.''.number_format($row->semesterstunden,2,$dec_point=",",$thousands_sep=".").''.number_format($row->semesterstunden,2,$dec_point=".",$thousands_sep=",").''.$row->start_kw.''.$datum->formatDatum($lvangebot->result[0]->anmeldefenster_start, "d.m.Y").''.$datum->formatDatum($lvangebot->result[0]->anmeldefenster_ende, "d.m.Y").'  
             '.$p->t('lvaliste/summe').''.number_format($summe_std, 2, $dec_point = ",", $thousands_sep = ".").''.number_format($summe_std, 2, $dec_point = ".", $thousands_sep = ",").' 
'; + + if($anzahl_lvs > 0) + { + echo '

'.$p->t('lvaliste/lehrveranstaltungen').'

'; + echo $p->t('lvaliste/anzahl').': '.$anzahl_lvs; + echo $lvtable; + } + else + { + echo $p->t('lvaliste/keineDatensaetze').'
'; + } +} +else + echo $p->t('lvaliste/keineDatensaetze').'
'; + +//Betreuungen +$mitarbeiter = new benutzer(); +$mitarbeiter->load($uid); + +$qry = "SELECT + tbl_lehrveranstaltung.bezeichnung, tbl_projektarbeit.titel, + (SELECT nachname || ' ' || vorname FROM public.tbl_benutzer JOIN public.tbl_person USING(person_id) + WHERE uid=student_uid) as student, tbl_lehrveranstaltung.studiengang_kz, tbl_lehrveranstaltung.semester, + tbl_studiengang.email, tbl_betreuerart.beschreibung AS beutreuerart_beschreibung, tbl_projektbetreuer.stunden + FROM + lehre.tbl_lehreinheit, lehre.tbl_lehrveranstaltung, lehre.tbl_projektarbeit, lehre.tbl_projektbetreuer, public.tbl_studiengang, lehre.tbl_betreuerart + WHERE + tbl_lehreinheit.lehreinheit_id=tbl_projektarbeit.lehreinheit_id AND + tbl_lehreinheit.lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id AND + tbl_lehreinheit.studiensemester_kurzbz=".$db->db_add_param($stdsem)." AND + tbl_projektarbeit.projektarbeit_id=tbl_projektbetreuer.projektarbeit_id AND + tbl_lehrveranstaltung.studiengang_kz=tbl_studiengang.studiengang_kz AND + tbl_projektbetreuer.betreuerart_kurzbz=tbl_betreuerart.betreuerart_kurzbz AND + tbl_projektbetreuer.person_id=".$db->db_add_param($mitarbeiter->person_id, FHC_INTEGER); + +$stg_obj = new studiengang(); +$stg_obj->getAll(null,null); +$summe_std = 0; + +if ($result = $db->db_query($qry)) +{ + if ($db->db_num_rows($result) > 0) + { + echo '
'; + echo '

'.$p->t('lvaliste/betreuungen').'

'; + echo $p->t('lvaliste/anzahl').': '.$db->db_num_rows($result); + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + while ($row = $db->db_fetch_object($result)) + { echo ''; - if(!defined('CIS_LVALISTE_NOTENEINGABE_ANZEIGEN') || CIS_LVALISTE_NOTENEINGABE_ANZEIGEN) + echo ''; + echo ''; + if (getSprache() == 'German') { - echo ''; - } - if($lvinfo) - - echo ''; - - if(getSprache()=='German') - { - echo ''; + echo ''; } else { - echo ''; + echo ''; } + echo ''; + echo ''; + echo ''; + echo ''; - - echo ''; - - echo ''; - - echo '
'.$p->t('lvaliste/studiengang').''.$p->t('lvaliste/semester').''.$p->t('lvaliste/stunden').''.$p->t('lvaliste/lvBezeichnung').''.$p->t('lvaliste/student').''.$p->t('lvaliste/betreuungsart').''.$p->t('lvaliste/titelProjektarbeit').'
'.$stg_obj->kuerzel_arr[$row->studiengang_kz].''.$row->semester.' '.$p->t('lvaliste/summe').''.number_format($summe_std,2,$dec_point=",",$thousands_sep=".").''.number_format($row->stunden,2,$dec_point =",", $thousands_sep ="."). ''.number_format($summe_std,2,$dec_point=".",$thousands_sep=",").''.number_format($row->stunden,2,$dec_point =".", $thousands_sep =","). ''.$row->bezeichnung.''.$row->student.''.$row->beutreuerart_beschreibung.''.$row->titel.' 
'; + $summe_std += $row->stunden; } - } - - - //Koordination - - $qry = "SELECT - distinct - tbl_lehrveranstaltung.studiengang_kz, tbl_fachbereich.fachbereich_kurzbz, tbl_lehrveranstaltung.bezeichnung, - tbl_lehrveranstaltung.lehrveranstaltung_id, tbl_lehrveranstaltung.semester,tbl_lehrveranstaltung.koordinator, - tbl_studiengang.email - FROM - lehre.tbl_lehrveranstaltung, - lehre.tbl_lehreinheit, - lehre.tbl_lehrveranstaltung as lehrfach, - public.tbl_studiengang, - public.tbl_fachbereich - WHERE - tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id AND - tbl_lehreinheit.lehrfach_id = lehrfach.lehrveranstaltung_id AND - tbl_fachbereich.oe_kurzbz=lehrfach.oe_kurzbz AND - tbl_lehreinheit.studiensemester_kurzbz=".$db->db_add_param($stdsem)." AND - (tbl_lehrveranstaltung.koordinator=".$db->db_add_param($uid)." - OR - ( tbl_lehrveranstaltung.koordinator is null and (tbl_lehrveranstaltung.studiengang_kz, fachbereich_kurzbz) IN (SELECT studiengang_kz, fachbereich_kurzbz - FROM public.tbl_benutzerfunktion JOIN public.tbl_studiengang USING(oe_kurzbz) - WHERE funktion_kurzbz='fbk' AND uid=".$db->db_add_param($uid)." - and ( tbl_benutzerfunktion.datum_bis is null or now() between tbl_benutzerfunktion.datum_von and tbl_benutzerfunktion.datum_bis ) - )) - ) AND - tbl_lehrveranstaltung.studiengang_kz=tbl_studiengang.studiengang_kz - order by tbl_lehrveranstaltung.studiengang_kz,tbl_lehrveranstaltung.semester ,tbl_lehrveranstaltung.bezeichnung - "; - - - if($result = $db->db_query($qry)) - { - if($db->db_num_rows($result)>0) + echo ''; + echo ''; + echo ''; + if (!defined('CIS_LVALISTE_NOTENEINGABE_ANZEIGEN') || CIS_LVALISTE_NOTENEINGABE_ANZEIGEN) { - echo '

'.$p->t('lvaliste/koordination').'

'; - echo $p->t('lvaliste/anzahl').': '.$db->db_num_rows($result); - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - while($row = $db->db_fetch_object($result)) - { - //Fachbereichskoordinatoren holen - $qry = "SELECT distinct - uid,titelpre, titelpost, vorname, nachname - FROM - lehre.tbl_lehreinheitmitarbeiter, - public.tbl_benutzer, - public.tbl_person, - lehre.tbl_lehreinheit - WHERE - tbl_lehreinheitmitarbeiter.lehreinheit_id=tbl_lehreinheit.lehreinheit_id AND - tbl_lehreinheit.lehrveranstaltung_id=".$db->db_add_param($row->lehrveranstaltung_id, FHC_INTEGER)." AND - tbl_lehreinheitmitarbeiter.mitarbeiter_uid=tbl_benutzer.uid AND - tbl_benutzer.person_id=tbl_person.person_id AND - tbl_lehreinheit.studiensemester_kurzbz=".$db->db_add_param($stdsem); - $lektoren=''; - if($result_lkt = $db->db_query($qry)) - { - while($row_lkt = $db->db_fetch_object($result_lkt)) - { - if($lektoren!='') - $lektoren.=','; - $lektoren.=trim($row_lkt->titelpre.' '.$row_lkt->vorname.' '.$row_lkt->nachname.' '.$row_lkt->titelpost); - } - } - - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - } - echo '
'.$p->t('lvaliste/studiengang').''.$p->t('lvaliste/semester').''.$p->t('lvaliste/institut').''.$p->t('lvaliste/lvBezeichnung').''.$p->t('lvaliste/lektor').'
'.$stg_obj->kuerzel_arr[$row->studiengang_kz].''.$row->semester.''.$row->stunden.''.$row->fachbereich_kurzbz.''.$row->bezeichnung.''.$lektoren.'
'; + echo ' '; } + if ($lvinfo) + + echo ''.$p->t('lvaliste/summe').''; + + if (getSprache() == 'German') + { + echo ''.number_format($summe_std, 2, $dec_point = ",", $thousands_sep = ".").''; + } + else + { + echo ''.number_format($summe_std, 2, $dec_point = ".", $thousands_sep = ",").''; + } + + echo ' '; + echo ''; + echo ''; } +} + +//Koordination +$qry = "SELECT + distinct + tbl_lehrveranstaltung.studiengang_kz, tbl_fachbereich.fachbereich_kurzbz, tbl_lehrveranstaltung.bezeichnung, + tbl_lehrveranstaltung.lehrveranstaltung_id, tbl_lehrveranstaltung.semester,tbl_lehrveranstaltung.koordinator, + tbl_studiengang.email + FROM + lehre.tbl_lehrveranstaltung, + lehre.tbl_lehreinheit, + lehre.tbl_lehrveranstaltung as lehrfach, + public.tbl_studiengang, + public.tbl_fachbereich + WHERE + tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id AND + tbl_lehreinheit.lehrfach_id = lehrfach.lehrveranstaltung_id AND + tbl_fachbereich.oe_kurzbz=lehrfach.oe_kurzbz AND + tbl_lehreinheit.studiensemester_kurzbz=".$db->db_add_param($stdsem)." AND + ( + tbl_lehrveranstaltung.koordinator=".$db->db_add_param($uid)." + OR + ( tbl_lehrveranstaltung.koordinator is null + AND (tbl_lehrveranstaltung.studiengang_kz, fachbereich_kurzbz) IN ( + SELECT studiengang_kz, fachbereich_kurzbz + FROM public.tbl_benutzerfunktion JOIN public.tbl_studiengang USING(oe_kurzbz) + WHERE funktion_kurzbz='fbk' AND uid=".$db->db_add_param($uid)." + AND ( + tbl_benutzerfunktion.datum_bis is null + OR now() between tbl_benutzerfunktion.datum_von and tbl_benutzerfunktion.datum_bis ) + ) + ) + ) + AND tbl_lehrveranstaltung.studiengang_kz=tbl_studiengang.studiengang_kz + ORDER BY + tbl_lehrveranstaltung.studiengang_kz, + tbl_lehrveranstaltung.semester, + tbl_lehrveranstaltung.bezeichnung + "; + + +if ($result = $db->db_query($qry)) +{ + if ($db->db_num_rows($result) > 0) + { + echo '

'.$p->t('lvaliste/koordination').'

'; + echo $p->t('lvaliste/anzahl').': '.$db->db_num_rows($result); + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + while ($row = $db->db_fetch_object($result)) + { + //Fachbereichskoordinatoren holen + $qry = "SELECT distinct + uid,titelpre, titelpost, vorname, nachname + FROM + lehre.tbl_lehreinheitmitarbeiter, + public.tbl_benutzer, + public.tbl_person, + lehre.tbl_lehreinheit + WHERE + tbl_lehreinheitmitarbeiter.lehreinheit_id=tbl_lehreinheit.lehreinheit_id AND + tbl_lehreinheit.lehrveranstaltung_id=".$db->db_add_param($row->lehrveranstaltung_id, FHC_INTEGER)." AND + tbl_lehreinheitmitarbeiter.mitarbeiter_uid=tbl_benutzer.uid AND + tbl_benutzer.person_id=tbl_person.person_id AND + tbl_lehreinheit.studiensemester_kurzbz=".$db->db_add_param($stdsem); + $lektoren=''; + if($result_lkt = $db->db_query($qry)) + { + while($row_lkt = $db->db_fetch_object($result_lkt)) + { + if($lektoren!='') + $lektoren.=','; + $lektoren.=trim($row_lkt->titelpre.' '.$row_lkt->vorname.' '.$row_lkt->nachname.' '.$row_lkt->titelpost); + } + } + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + echo '
'.$p->t('lvaliste/studiengang').''.$p->t('lvaliste/semester').''.$p->t('lvaliste/institut').''.$p->t('lvaliste/lvBezeichnung').''.$p->t('lvaliste/lektor').'
'.$stg_obj->kuerzel_arr[$row->studiengang_kz].''.$row->semester.''.$row->stunden.''.$row->fachbereich_kurzbz.''.$row->bezeichnung.''.$lektoren.'
'; + } +} echo '
'.$p->t('lvaliste/fehlerAnStudiengang').'


'; ?> diff --git a/cis/private/profile/urlaubstool.php b/cis/private/profile/urlaubstool.php index fd8d65ec9..9d33b25ae 100644 --- a/cis/private/profile/urlaubstool.php +++ b/cis/private/profile/urlaubstool.php @@ -718,7 +718,11 @@ for ($i=0;$i<6;$i++) else { echo ''.$tage[$j+7*$i].'
'; - if(isset($freigabeamum[$j+7*$i])) + if(!isset($freigabeamum[$j+7*$i]) && !isset($freigabevon[$j+7*$i])) + { + echo 'nicht freigegeben'; + } + elseif(isset($freigabeamum[$j+7*$i])) { echo 'freigegeben'; } diff --git a/cis/private/tools/suche.php b/cis/private/tools/suche.php index ecc072d81..693cc1894 100644 --- a/cis/private/tools/suche.php +++ b/cis/private/tools/suche.php @@ -587,7 +587,17 @@ function searchContent($searchItems) // URL aus content parsen $dom = new DOMDocument(); $dom->loadXML($row->content); - $content = $dom->getElementsByTagName('url')->item(0)->nodeValue; + if($dom->getElementsByTagName('url')!=null + && $dom->getElementsByTagName('url')->item(0)!=null) + { + $content = $dom->getElementsByTagName('url')->item(0)->nodeValue; + } + else + { + // Wenn bei redirects keine URL vorhanden ist, dann handelt es sich um Fehlerhafte Einträge + // diese werden übersprungen + continue; + } if (substr($content, 0, 1) == '#') continue; @@ -649,15 +659,33 @@ function searchContent($searchItems) // URL aus content parsen $dom = new DOMDocument(); $dom->loadXML($row->content); - $content = $dom->getElementsByTagName('url')->item(0)->nodeValue; - + if($dom->getElementsByTagName('url')!=null + && $dom->getElementsByTagName('url')->item(0)!=null) + { + $content = $dom->getElementsByTagName('url')->item(0)->nodeValue; + } + else + { + // Wenn bei redirects keine URL vorhanden ist, dann handelt es sich um Fehlerhafte Einträge + // diese werden übersprungen + continue; + } if (substr($content, 0, 1) == '#') continue; else { - echo '
  • '; - echo '',$db->convert_html_chars($row->titel),'
    '; - echo '
  • '; + if(mb_strpos($content, 'http') === 0) + { + echo '
  • '; + echo '',$db->convert_html_chars($row->titel),'
    '; + echo '
  • '; + } + else + { + echo '
  • '; + echo '',$db->convert_html_chars($row->titel),'
    '; + echo '
  • '; + } } } else diff --git a/cis/public/testtool_test/testseite.php b/cis/public/testtool_test/testseite.php index 17b103be5..dd86d9de4 100644 --- a/cis/public/testtool_test/testseite.php +++ b/cis/public/testtool_test/testseite.php @@ -24,123 +24,146 @@ echo ''; Testsite MathML + + + + + + + - - - - - - - - - - - - - - - - - - '; - ?> - -

    MathML

    Picture

    - - - 5 - 3 - - - + - - 7 - 6 - - = - - - 10 - 6 - - + - - - 7 - 6 - - = - - 17 - - 6 - -

    - - - - - k=1 - 5 - - - - (-1) - k+1 - - - - - - x - 2k + 1 - - - - (2k+1)! - - - - - -
      - Beispielbild -

    The formula on the left side should be equal
    to the picture on the right side.


    Audio-Testfile

    - -
    + + + diff --git a/cis/testtool/admin/edit_gebiet.php b/cis/testtool/admin/edit_gebiet.php index 68c502577..405c908cf 100644 --- a/cis/testtool/admin/edit_gebiet.php +++ b/cis/testtool/admin/edit_gebiet.php @@ -265,10 +265,10 @@ if ($gebiet_id != '') { $offsetwarnung = strlen($gebiet->errormsg) > 0 ? ' (HINWEIS: '.$gebiet->errormsg.')' : ''; - $offsethinweis = ' empfohlene Offsetpunkteanzahl: '.round($offsetpunkte).(round($offsetpunkte) != $offsetpunkte ? ' ('.$offsetpunkte.' gerundet)' : '').''; + $offsethinweis = ' empfohlene Offsetpunkteanzahl: '.ceil($offsetpunkte).(ceil($offsetpunkte) != $offsetpunkte ? ' ('.$offsetpunkte.' gerundet)' : '').''; $offsethinweis .= ''.$offsetwarnung.''; } - echo 'Offsetpunkte (minimale Punkteanzahl)'.$offsethinweis.''; + echo 'Offsetpunkte (maximale Negativpunkte)'.$offsethinweis.''; echo ''; echo 'Maximale Fragenanzahl'; echo ''; diff --git a/cis/testtool/bild.php b/cis/testtool/bild.php index fb31cce27..0913fe2ad 100644 --- a/cis/testtool/bild.php +++ b/cis/testtool/bild.php @@ -22,28 +22,54 @@ // Holt den Hexcode eines Bildes aus der DB wandelt es in Zeichen // um und gibt das ein Bild zurueck. // Aufruf mit getBerechtigungen($user); + + if (!$rechte->isBerechtigt('basis/testtool', null, 's')) + die($rechte->errormsg); +} //base64 Dump aus der DB holen $qry = ''; if(isset($_GET['src']) && $_GET['src']=='frage' && isset($_GET['frage_id'])) { - $qry = "SELECT bild FROM testtool.tbl_frage_sprache WHERE frage_id='".addslashes($_GET['frage_id'])."' AND sprache='".addslashes($_GET['sprache'])."'"; + $qry = " + SELECT + bild + FROM + testtool.tbl_frage_sprache + WHERE + frage_id=".$db->db_add_param($_GET['frage_id'], FHC_INTEGER)." + AND sprache=".$db->db_add_param($_GET['sprache']); } elseif(isset($_GET['src']) && $_GET['src']=='vorschlag' && isset($_GET['vorschlag_id'])) { - $qry = "SELECT bild FROM testtool.tbl_vorschlag_sprache WHERE vorschlag_id='".addslashes($_GET['vorschlag_id'])."' AND sprache='".addslashes($_GET['sprache'])."'"; + $qry = " + SELECT + bild + FROM + testtool.tbl_vorschlag_sprache + WHERE + vorschlag_id=".$db->db_add_param($_GET['vorschlag_id'], FHC_INTEGER)." + AND sprache=".$db->db_add_param($_GET['sprache']); } elseif(isset($_GET['src']) && $_GET['src']=='flag' && isset($_GET['sprache'])) { - $qry = "SELECT flagge as bild FROM public.tbl_sprache WHERE sprache='".addslashes($_GET['sprache'])."'"; + $qry = "SELECT flagge as bild FROM public.tbl_sprache WHERE sprache=".$db->db_add_param($_GET['sprache']); } -else +else echo 'Unkown type'; if($qry!='') @@ -56,5 +82,3 @@ if($qry!='') echo base64_decode($row->bild); } ?> - - diff --git a/cis/testtool/frage.php b/cis/testtool/frage.php index e2c87ed67..12d9d8d26 100644 --- a/cis/testtool/frage.php +++ b/cis/testtool/frage.php @@ -36,6 +36,7 @@ require_once('../../include/antwort.class.php'); require_once('../../include/gebiet.class.php'); require_once('../../include/sprache.class.php'); require_once '../../include/phrasen.class.php'; +require_once '../../include/reihungstest.class.php'; if (!$db = new basis_db()) die('Fehler beim Oeffnen der Datenbankverbindung'); @@ -174,6 +175,17 @@ if(!$gestartet && $gebiet->errormsg!='') //Start des Pruefungsvorganges if(isset($_GET['start']) && !$gestartet) { + //Wenn der Reihungstest nicht freigeschaltet ist, kann das Gebiet nicht gestartet werden + if (isset($_SESSION['reihungstestID']) && $_SESSION['reihungstestID'] != '') + { + $rt = new reihungstest($_SESSION['reihungstestID']); + if ($rt->freigeschaltet == false) + { + echo '
    Die Gesamtbearbeitungszeit des Reihungstests ist vorbei und der Test wurde gesperrt.
    '; + die(); + } + } + //Fragenpool generieren $frage = new frage(); if(!$frage->generateFragenpool($_SESSION['pruefling_id'], $gebiet_id)) diff --git a/cis/testtool/index.html b/cis/testtool/index.html index 02044a4bc..f0a3d650b 100644 --- a/cis/testtool/index.html +++ b/cis/testtool/index.html @@ -1,21 +1,12 @@ - + TestTool - FH Technikum Wien + - - - - - - - - - <body> - <p>Diese Seite verwendet Frames. Frames werden von Ihrem Browser aber nicht unterstützt.</p> - </body> - - + + Falls sie nicht automatisch weitergeleitet werden klicken Sie hier + diff --git a/cis/testtool/index.php b/cis/testtool/index.php new file mode 100644 index 000000000..d235e6ce9 --- /dev/null +++ b/cis/testtool/index.php @@ -0,0 +1,28 @@ + + + + TestTool - FH Technikum Wien + + + + + + + + + + + + <body> + <p>Diese Seite verwendet Frames. Frames werden von Ihrem Browser aber nicht unterstützt.</p> + </body> + + + diff --git a/cis/testtool/login.php b/cis/testtool/login.php index 122e3cc2a..f20d93911 100644 --- a/cis/testtool/login.php +++ b/cis/testtool/login.php @@ -44,22 +44,22 @@ session_start(); // Logout (triggered by logout button in menu.php) if (isset($_GET['logout']) && $_GET['logout'] == true) { - // Unset global vars - unset($_GET['logout']); - unset($_GET['sprache_user']); - $_POST = []; - $_SESSION = []; + // Unset global vars + unset($_GET['logout']); + unset($_GET['sprache_user']); + $_POST = []; + $_SESSION = []; - // Destroy session - session_destroy(); + // Destroy session + session_destroy(); - echo ' - - '; + echo ' + + '; } $gebdatum=''; @@ -70,19 +70,45 @@ $alertmsg = ''; $sg_var = new studiengang(); -if(isset($_POST['gebdatum']) && $_POST['gebdatum']!='') +if (isset($_POST['gebdatum']) && $_POST['gebdatum']!='') { $gebdatum = $date->formatDatum($_POST['gebdatum'],'Y-m-d'); } else $gebdatum=''; -if (isset($_POST['prestudent']) && isset($gebdatum)) +if (isset($_REQUEST['prestudent'])) { - $ps=new prestudent($_POST['prestudent']); + $ps = new prestudent($_REQUEST['prestudent']); - //Geburtsdatum Pruefen - if ($gebdatum==$ps->gebdatum) + $login_ok = false; + if (defined('TESTTOOL_LOGIN_BEWERBUNGSTOOL') && TESTTOOL_LOGIN_BEWERBUNGSTOOL && isset($_GET['confirmation'])) + { + if (isset($_SESSION['bewerbung/personId']) && $ps->person_id == $_SESSION['bewerbung/personId']) + { + $login_ok = true; + } + else + { + $alertmsg .= '
    Login ist nicht korrekt. + Bitte schließen Sie ihren Browser und versuchen es erneut +
    '; + } + } + elseif(!defined('TESTTOOL_LOGIN_BEWERBUNGSTOOL') || TESTTOOL_LOGIN_BEWERBUNGSTOOL == false) + { + //Geburtsdatum Pruefen + if (isset($gebdatum) && $gebdatum == $ps->gebdatum) + { + $login_ok = true; + } + else + { + $alertmsg .= '
    '.$p->t('testtool/geburtsdatumStimmtNichtUeberein').'
    '; + } + } + + if ($login_ok) { $reihungstest_id=''; //Freischaltung fuer zugeteilten Reihungstest pruefen @@ -91,29 +117,29 @@ if (isset($_POST['prestudent']) && isset($gebdatum)) // Wenns der Dummy ist dann extra laden // An der FHTW gibt es 3 Testuser für den Camus International $prestudent_id_dummy_student = (defined('PRESTUDENT_ID_DUMMY_STUDENT')?PRESTUDENT_ID_DUMMY_STUDENT:''); - if($prestudent_id_dummy_student==$ps->prestudent_id || + if ($prestudent_id_dummy_student==$ps->prestudent_id || (CAMPUS_NAME == 'FH Technikum Wien' && $ps->prestudent_id == 30891) || (CAMPUS_NAME == 'FH Technikum Wien' && $ps->prestudent_id == 30890) || (CAMPUS_NAME == 'FH Technikum Wien' && $ps->prestudent_id == 30889)) { $rt->getReihungstestPerson($ps->person_id); - if(isset($rt->result[0])) + if (isset($rt->result[0])) $reihungstest_id = $rt->result[0]->reihungstest_id; else { - echo ''.$p->t('testtool/reihungstestKannNichtGeladenWerden').''; + $alertmsg .= '
    '.$p->t('testtool/reihungstestKannNichtGeladenWerden').'
    '; } } else { - if($rt->getReihungstestPersonDatum($ps->prestudent_id, date('Y-m-d'))) + if ($rt->getReihungstestPersonDatum($ps->prestudent_id, date('Y-m-d'))) { // TODO Was ist wenn da mehrere Zurueckkommen?! - if(isset($rt->result[0])) + if (isset($rt->result[0])) $reihungstest_id = $rt->result[0]->reihungstest_id; else { - echo ''.$p->t('testtool/reihungstestKannNichtGeladenWerden').''; + $alertmsg .= '
    '.$p->t('testtool/reihungstestKannNichtGeladenWerden').'
    '; } } else @@ -121,16 +147,15 @@ if (isset($_POST['prestudent']) && isset($gebdatum)) echo 'Failed:'.$rt->errormsg; } } - //echo "Reihungstest $reihungstest_id"; - if($reihungstest_id != '' && $rt->load($reihungstest_id)) + if ($reihungstest_id != '' && $rt->load($reihungstest_id)) { - if($rt->freigeschaltet) + if ($rt->freigeschaltet) { // regenerate Session ID after Login session_regenerate_id(); $pruefling = new pruefling(); - if($pruefling->getPruefling($ps->prestudent_id)) + if ($pruefling->getPruefling($ps->prestudent_id)) { $studiengang = $pruefling->studiengang_kz; $semester = $pruefling->semester; @@ -141,10 +166,10 @@ if (isset($_POST['prestudent']) && isset($gebdatum)) $ps->getLastStatus($ps->prestudent_id); $semester = $ps->ausbildungssemester; } - if($semester=='') + if ($semester=='') $semester=1; - $_SESSION['prestudent_id']=$_POST['prestudent']; + $_SESSION['prestudent_id']=$_REQUEST['prestudent']; $_SESSION['studiengang_kz']=$studiengang; $_SESSION['nachname']=$ps->nachname; $_SESSION['vorname']=$ps->vorname; @@ -152,27 +177,28 @@ if (isset($_POST['prestudent']) && isset($gebdatum)) $stg_obj = new studiengang($studiengang); $_SESSION['semester']=$semester; - $stg_obj->getStudiengangTyp($stg_obj->typ); + $_SESSION['reihungstestID'] = $reihungstest_id; + $stg_obj->getStudiengangTyp($stg_obj->typ); // STG und Studienplan mit der höchsten Prio ermitteln $firstPrio_studienplan_id = ''; $firstPrio_studiengang_kz = ''; - // * wenn STG des eingeloggten Prestudenten vom Typ Bachelor ist, dann höchste Prio aller - // Bachelor-STG ermitteln, an denen die Person noch interessiert ist - // Wenn STG vom Typ Master, dann wird als firstPrio der STPL bzw. der STG des MasterSTG gesetzt. - if ($stg_obj->typ == 'b') - { - $ps->getActualInteressenten($_POST['prestudent'], true); - } - elseif ($stg_obj->typ == 'm') - { - $ps->getActualInteressenten($_POST['prestudent'], false, 'm', $studiengang); - } + // * wenn STG des eingeloggten Prestudenten vom Typ Bachelor ist, dann höchste Prio aller + // Bachelor-STG ermitteln, an denen die Person noch interessiert ist + // Wenn STG vom Typ Master, dann wird als firstPrio der STPL bzw. der STG des MasterSTG gesetzt. + if ($stg_obj->typ == 'b') + { + $ps->getActualInteressenten($_REQUEST['prestudent'], true); + } + elseif ($stg_obj->typ == 'm') + { + $ps->getActualInteressenten($_REQUEST['prestudent'], false, 'm', $studiengang); + } foreach($ps->result as $row) { - if(isset($row->studiengang_kz)) + if (isset($row->studiengang_kz)) { $firstPrio_studienplan_id = $row->studienplan_id; break; @@ -180,7 +206,7 @@ if (isset($_POST['prestudent']) && isset($gebdatum)) } foreach($ps->result as $row) { - if(isset($row->studiengang_kz)) + if (isset($row->studiengang_kz)) { $firstPrio_studiengang_kz = $row->studiengang_kz; break; @@ -188,23 +214,23 @@ if (isset($_POST['prestudent']) && isset($gebdatum)) } // Sprachvorgaben zu STG mit höchster Prio ermitteln - // * 1. Sprache über Ablauf Vorgaben ermitteln + // * 1. Sprache über Ablauf Vorgaben ermitteln $ablauf = new Ablauf(); $ablauf->getAblaufGebiete($firstPrio_studiengang_kz, $firstPrio_studienplan_id); $rt_sprache = ''; - if(!empty($ablauf->result[0])) + if (!empty($ablauf->result[0])) { $rt_sprache = $ablauf->result[0]->sprache; } // * 2. falls keine Sprache vorhanden -> Sprache über Studienplan ermitteln if (empty($rt_sprache)) - { - $stpl = new Studienplan(); - $stpl->loadStudienplan($firstPrio_studienplan_id); - $rt_sprache = $stpl->sprache; - } + { + $stpl = new Studienplan(); + $stpl->loadStudienplan($firstPrio_studienplan_id); + $rt_sprache = $stpl->sprache; + } // * 3. falls keine Sprache vorhanden -> Sprache über Studiengang ermitteln if (empty($rt_sprache)) @@ -219,13 +245,13 @@ if (isset($_POST['prestudent']) && isset($gebdatum)) $_SESSION['sprache_user'] = DEFAULT_LANGUAGE; } else - { + { $_SESSION['sprache_user'] = $rt_sprache; - } + } } else - { - $alertmsg .= '
    '.$p->t('testtool/reihungstestNichtFreigeschalten').'
    '; + { + $alertmsg .= '
    '.$p->t('testtool/reihungstestNichtFreigeschalten').'
    '; } } else @@ -233,10 +259,6 @@ if (isset($_POST['prestudent']) && isset($gebdatum)) $alertmsg .= '
    '.$p->t('testtool/reihungstestKannNichtGeladenWerden').'
    '; } } - else - { - $alertmsg .= '
    '.$p->t('testtool/geburtsdatumStimmtNichtUeberein').'
    '; - } } // Set language of user. @@ -247,21 +269,21 @@ if (isset($_POST['prestudent']) && isset($gebdatum)) $sprache_user = DEFAULT_LANGUAGE; if (isset($_SESSION['sprache_user']) && !empty($_SESSION['sprache_user'])) { - // If session var already exists, overwrite language var - // (session var changes e.g. when user selects other language with language-select-menu) - $sprache_user = $_SESSION['sprache_user']; + // If session var already exists, overwrite language var + // (session var changes e.g. when user selects other language with language-select-menu) + $sprache_user = $_SESSION['sprache_user']; } elseif (isset($_SESSION['prestudent_id'])) { - // If session var does not exist but prestudent is known, set the session var - $_SESSION['sprache_user'] = DEFAULT_LANGUAGE; + // If session var does not exist but prestudent is known, set the session var + $_SESSION['sprache_user'] = DEFAULT_LANGUAGE; } // If language is changed by language select menu, reset language variables -if(isset($_GET['sprache_user']) && !empty($_GET['sprache_user'])) +if (isset($_GET['sprache_user']) && !empty($_GET['sprache_user'])) { - $sprache_user = $_GET['sprache_user']; - $_SESSION['sprache_user'] = $_GET['sprache_user']; + $sprache_user = $_GET['sprache_user']; + $_SESSION['sprache_user'] = $_GET['sprache_user']; } // NOTE: leave phrasen here, as the final users language is not defined until here @@ -269,7 +291,7 @@ $p = new phrasen($sprache_user); if (isset($_SESSION['prestudent_id'])) { - $prestudent_id=$_SESSION['prestudent_id']; + $prestudent_id=$_SESSION['prestudent_id']; } else { @@ -288,15 +310,15 @@ else } -if(isset($_SESSION['prestudent_id']) && !isset($_SESSION['pruefling_id'])) +if (isset($_SESSION['prestudent_id']) && !isset($_SESSION['pruefling_id'])) { $pruefling = new pruefling(); - //wenn kein Prüfling geladen werden kann - if(!$pruefling->getPruefling($_SESSION['prestudent_id'])) + //wenn kein Prüfling geladen werden kann + if (!$pruefling->getPruefling($_SESSION['prestudent_id'])) $pruefling->new = true; - else - $pruefling->new = false; + else + $pruefling->new = false; $pruefling->studiengang_kz = $_SESSION['studiengang_kz']; $pruefling->semester = $_SESSION['semester']; @@ -304,18 +326,18 @@ if(isset($_SESSION['prestudent_id']) && !isset($_SESSION['pruefling_id'])) $pruefling->idnachweis = ''; $pruefling->registriert = date('Y-m-d H:i:s'); $pruefling->prestudent_id = $_SESSION['prestudent_id']; - if($pruefling->save()) + if ($pruefling->save()) { $_SESSION['pruefling_id']=$pruefling->pruefling_id; $reload_menu=true; } } -if(isset($_POST['save']) && isset($_SESSION['prestudent_id'])) +if (isset($_POST['save']) && isset($_SESSION['prestudent_id'])) { $pruefling = new pruefling(); - if($_POST['pruefling_id']!='') - if(!$pruefling->load($_POST['pruefling_id'])) + if ($_POST['pruefling_id']!='') + if (!$pruefling->load($_POST['pruefling_id'])) die('Pruefling wurde nicht gefunden'); else $pruefling->new=false; @@ -327,7 +349,7 @@ if(isset($_POST['save']) && isset($_SESSION['prestudent_id'])) $pruefling->registriert = date('Y-m-d H:i:s'); $pruefling->prestudent_id = $_SESSION['prestudent_id']; $pruefling->semester = $_POST['semester']; - if($pruefling->save()) + if ($pruefling->save()) { $_SESSION['pruefling_id']=$pruefling->pruefling_id; $_SESSION['semester']=$pruefling->semester; @@ -344,8 +366,9 @@ if(isset($_POST['save']) && isset($_SESSION['prestudent_id'])) - + parent.menu.location.reload();'; ?> -
    +
    studiengang_kz); - $pruefling = new pruefling(); - $typ = new studiengang($prestudent->studiengang_kz); - $typ->getStudiengangTyp($stg_obj->typ); + $prestudent = new prestudent($prestudent_id); + $stg_obj = new studiengang($prestudent->studiengang_kz); + $pruefling = new pruefling(); + $typ = new studiengang($prestudent->studiengang_kz); + $typ->getStudiengangTyp($stg_obj->typ); - // STG mit der höchsten Prio ermitteln - $ps = new Prestudent(); + // STG mit der höchsten Prio ermitteln + $ps = new Prestudent(); - // * prinzipiell STG der session übernehmem - $firstPrio_studiengang_kz = $prestudent->studiengang_kz; + // * prinzipiell STG der session übernehmem + $firstPrio_studiengang_kz = $prestudent->studiengang_kz; - // * wenn STG des eingeloggten Prestudenten vom Typ Bachelor ist, dann höchste Prio aller - // Bachelor-STG ermitteln, an denen die Person noch interessiert ist - if ($typ->typ == 'b') - { - $ps->getActualInteressenten($prestudent_id, true, 'b'); - foreach($ps->result as $row_prio) - { - if(isset($row_prio->studiengang_kz)) - { - $firstPrio_studiengang_kz = $row_prio->studiengang_kz; - break; - } - } - } + // * wenn STG des eingeloggten Prestudenten vom Typ Bachelor ist, dann höchste Prio aller + // Bachelor-STG ermitteln, an denen die Person noch interessiert ist + if ($typ->typ == 'b') + { + $ps->getActualInteressenten($prestudent_id, true, 'b'); + foreach($ps->result as $row_prio) + { + if (isset($row_prio->studiengang_kz)) + { + $firstPrio_studiengang_kz = $row_prio->studiengang_kz; + break; + } + } + } - // Sprachwahl zu STG mit höchster Prio ermitteln - $ablauf = new Ablauf(); - $sprachwahl = false; - if (isset($ablauf->result[0]) + // Sprachwahl zu STG mit höchster Prio ermitteln + $ablauf = new Ablauf(); + $sprachwahl = false; + if (isset($ablauf->result[0]) && $ablauf->getAblaufVorgabeStudiengang($firstPrio_studiengang_kz) && is_bool($ablauf->result[0]->sprachwahl)) - { - $sprachwahl = $ablauf->result[0]->sprachwahl; - } + { + $sprachwahl = $ablauf->result[0]->sprachwahl; + } - // If language can be switched, display language select menu on the top - if ($sprachwahl) - { - $_SESSION['sprache_auswahl'] = true; - ?> - - '; - echo ' -

    '. $p->t('testtool/begruessungstext'). '


    -

    '. $p->t('testtool/anmeldedaten'). '


    - '; + // If language can be switched, display language select menu on the top + if ($sprachwahl) + { + $_SESSION['sprache_auswahl'] = true; + ?> + + '; + echo ' +

    '. $p->t('testtool/begruessungstext'). '


    +

    '. $p->t('testtool/anmeldedaten'). '


    + '; - echo ' - - - - - - - - - - - - - -
    '.$p->t('zeitaufzeichnung/id').''.$_SESSION['prestudent_id'].'
    '.$p->t('global/name').''.$_SESSION['vorname'].' '.$_SESSION['nachname'].'
    '.$p->t('global/geburtsdatum').''.$date->formatDatum($_SESSION["gebdatum"],"d.m.Y").'
    - '; + echo ' + + + + + + + + + + + + + +
    '.$p->t('zeitaufzeichnung/id').''.$_SESSION['prestudent_id'].'
    '.$p->t('global/name').''.$_SESSION['vorname'].' '.$_SESSION['nachname'].'
    '.$p->t('global/geburtsdatum').''.$date->formatDatum($_SESSION["gebdatum"],"d.m.Y").'
    + '; echo '
    '; - echo ' -

    '. $p->t('testtool/fuerFolgendeStgAngemeldet'). '


    + echo ' +

    '. $p->t('testtool/fuerFolgendeStgAngemeldet'). '


    - - - - - - - - - '; +
    '. $p->t('global/studiengang'). 'Status
    + + + + + + + + '; - // * wenn Prestudent an 1 - n Bachelor-Studiengängen interessiert ist, dann STG anführen - if ($typ->typ == 'b') - { + // * wenn Prestudent an 1 - n Bachelor-Studiengängen interessiert ist, dann STG anführen + if ($typ->typ == 'b') + { $ps_arr = new Prestudent(); $ps_arr->getActualInteressenten($prestudent_id, false, 'b'); - if (count($ps_arr->result) > 0) - { - // Jeweils letzten Status ermitteln (ob Interessent oder Abgewiesener) - foreach ($ps_arr->result as $ps_obj) - { - $ps_tmp = new Prestudent(); - $ps_tmp->getLastStatus($ps_obj->prestudent_id); + if (count($ps_arr->result) > 0) + { + // Jeweils letzten Status ermitteln (ob Interessent oder Abgewiesener) + foreach ($ps_arr->result as $ps_obj) + { + $ps_tmp = new Prestudent(); + $ps_tmp->getLastStatus($ps_obj->prestudent_id); - $ps_obj->lastStatus = $ps_tmp->status_kurzbz; // letzten Status dem result array hinzufügen - $ps_obj->status_mehrsprachig = $ps_tmp->status_mehrsprachig; - } + $ps_obj->lastStatus = $ps_tmp->status_kurzbz; // letzten Status dem result array hinzufügen + $ps_obj->status_mehrsprachig = $ps_tmp->status_mehrsprachig; + } - // Falls Status 'Abgewiesene' vorhanden, nach hinten reihen - usort($ps_arr->result, function($a, $b){ - return strcmp($b->lastStatus, $a->lastStatus); // Order by DESC - }); - foreach ($ps_arr->result as $ps_obj) - { - echo ''; - $stg = new Studiengang($ps_obj->studiengang_kz); + // Falls Status 'Abgewiesene' vorhanden, nach hinten reihen + usort($ps_arr->result, function($a, $b){ + return strcmp($b->lastStatus, $a->lastStatus); // Order by DESC + }); + foreach ($ps_arr->result as $ps_obj) + { + echo ''; + $stg = new Studiengang($ps_obj->studiengang_kz); - if($ps_obj->lastStatus == "Interessent" - || $ps_obj->lastStatus == "Bewerber" - || $ps_obj->lastStatus == "Wartender" - || $ps_obj->lastStatus == "Aufgenommener") - { - echo ''; - if($ps_obj->ausbildungssemester == '1') - { - echo ''; - } - elseif($ps_obj->ausbildungssemester == '3') - { - echo ''; - } - } - // wenn letzter Status \'Abgewiesener\' ist, dann als solchen kennzeichnen - elseif($ps_obj->lastStatus == "Abgewiesener") - { - echo ' - - - '; - } - echo ''; - } - } - } - // * wenn Prestudent an einem Master-Studiengang interessiert ist, dann nur den einen STG anführen - else - { - // Letzten Status für des Prestudenten einholen - $ps_master = new Prestudent(); + if ($ps_obj->lastStatus == "Interessent" + || $ps_obj->lastStatus == "Bewerber" + || $ps_obj->lastStatus == "Wartender" + || $ps_obj->lastStatus == "Aufgenommener") + { + echo ''; + if ($ps_obj->ausbildungssemester == '1') + { + echo ''; + } + elseif ($ps_obj->ausbildungssemester == '3') + { + echo ''; + } + } + // wenn letzter Status \'Abgewiesener\' ist, dann als solchen kennzeichnen + elseif ($ps_obj->lastStatus == "Abgewiesener") + { + echo ' + + + '; + } + echo ''; + } + } + } + // * wenn Prestudent an einem Master-Studiengang interessiert ist, dann nur den einen STG anführen + else + { + // Letzten Status für des Prestudenten einholen + $ps_master = new Prestudent(); $ps_master->getLastStatus($prestudent_id); - echo ''; + echo ''; echo ''; - } + } - echo ' - -
    '. $p->t('global/studiengang'). 'Status
    '. $ps_obj->typ_bz .' '. ($sprache_user == 'English' ? $stg->english : $stg->bezeichnung). ' ('.$ps_obj->orgform_bezeichnung[$sprache_user].')'. $p->t('testtool/regulaererEinstieg'). ' (1. Semester)'. $p->t('testtool/quereinstieg'). ' (3. Semester)'. $ps_obj->typ_bz .' '. ($sprache_user == 'English' ? $stg->english : $stg->bezeichnung). ''. $ps_obj->status_mehrsprachig[$sprache_user]. '
    '. $ps_obj->typ_bz .' '. ($sprache_user == 'English' ? $stg->english : $stg->bezeichnung). ' ('.$ps_obj->orgform_bezeichnung[$sprache_user].')'. $p->t('testtool/regulaererEinstieg'). ' (1. Semester)'. $p->t('testtool/quereinstieg'). ' (3. Semester)'. $ps_obj->typ_bz .' '. ($sprache_user == 'English' ? $stg->english : $stg->bezeichnung). ''. $ps_obj->status_mehrsprachig[$sprache_user]. '
    '. $typ->bezeichnung.' '.($sprache_user=='English'?$stg_obj->english:$stg_obj->bezeichnung).''. $typ->bezeichnung.' '.($sprache_user=='English'?$stg_obj->english:$stg_obj->bezeichnung).''. $ps_master->status_mehrsprachig[$sprache_user]. '
    - '; + echo ' + + + '; - echo '
    '; + echo '
    '; - if($pruefling->getPruefling($prestudent_id)) - { - echo '
    '; - echo ''; - echo ''; - //echo ''; - //echo ''; - //echo ''; - echo '
    '.$p->t('global/semester').': 
    ID Nachweis:
    '; - echo '
    '; - echo '

    '; - echo ' -
    - '.$p->t('testtool/klickenSieAufEinTeilgebiet').' -
    - '; - if($pruefling->pruefling_id!='') - { - $_SESSION['pruefling_id']=$pruefling->pruefling_id; - } - } - else - { - echo ''.$p->t('testtool/keinPrueflingseintragVorhanden').''; - } - echo '
    '; + if ($pruefling->getPruefling($prestudent_id)) + { + echo '
    '; + echo ''; + echo ''; + //echo ''; + //echo ''; + //echo ''; + echo '
    '.$p->t('global/semester').': 
    ID Nachweis:
    '; + echo '
    '; + echo '

    '; + echo ' +
    + '.$p->t('testtool/klickenSieAufEinTeilgebiet').' +
    + '; + if ($pruefling->pruefling_id!='') + { + $_SESSION['pruefling_id']=$pruefling->pruefling_id; + } + } + else + { + echo ''.$p->t('testtool/keinPrueflingseintragVorhanden').''; + } + echo '
    '; } else // LOGIN Site (vor Login) { - $prestudent_id_dummy_student = (defined('PRESTUDENT_ID_DUMMY_STUDENT')?PRESTUDENT_ID_DUMMY_STUDENT:''); - echo '
    '; + if (defined('TESTTOOL_LOGIN_BEWERBUNGSTOOL') && TESTTOOL_LOGIN_BEWERBUNGSTOOL) + { + echo '
    '; + echo '
    '.$alertmsg.'
    '; + echo $p->t('testtool/einfuehrungsText'); -// Welcome text - echo $alertmsg; - echo ' -
    -
    -

    Herzlich Willkommen zum Reihungstest



    - Bitte warten Sie mit dem Login auf die Anweisung der Aufsichtsperson.

    - Wir wünschen Ihnen einen erfolgreichen Start ins Studium. -
    -
    -

    Welcome to the placement test



    - Please wait for the tutor\'s instructions before you log in.

    - We wish you a good start to your studies. -
    -
    - '; + if (isset($_SESSION['bewerbung/personId'])) + { + echo ''; + echo '
    + '.$p->t('testtool/loginNoetig').'

    +
    + + + '.$p->t('testtool/confirmationText').' +

    + +
    '; + } + else + { + echo '
    + '.$p->t('testtool/loginNoetig').'

    +
    + +
    '; + } + echo ' +
    '; + echo '
    '; + } + else + { + $prestudent_id_dummy_student = (defined('PRESTUDENT_ID_DUMMY_STUDENT')?PRESTUDENT_ID_DUMMY_STUDENT:''); + echo '
    '; - // Begin form - echo '
    '; - echo '
    '; + // Welcome text + echo '
    '.$alertmsg.'
    '; + echo ' +
    +
    +

    Herzlich Willkommen zum Reihungstest



    + Bitte warten Sie mit dem Login auf die Anweisung der Aufsichtsperson.

    + Wir wünschen Ihnen einen erfolgreichen Start ins Studium. +
    +
    +

    Welcome to the placement test



    + Please wait for the tutor\'s instructions before you log in.

    + We wish you a good start to your studies. +
    +
    + '; - // Name select menu - echo '
    '; - echo ''; - echo '
    '; - echo ''; - echo '
    '; // end col-xs - echo '
    '; // end form-group + // Begin form + echo '
    '; + echo ''; - // Datepicker input - echo '
    '; - echo ''; - echo '
    '; - echo ''; - echo '
    '; // end col-xs - echo '
    '; // end form-group + // Name select menu + echo '
    '; + echo ''; + echo '
    '; + echo ''; + echo '
    '; // end col-xs + echo '
    '; // end form-group - // Login button - echo ''; + // Datepicker input + echo '
    '; + echo ''; + echo '
    '; + echo ''; + echo '
    '; // end col-xs + echo '
    '; // end form-group - echo ''; // end form + // Login button + echo ''; - echo '
    '; // end row - echo '
    '; // end col-xs-11 + echo ''; // end form + + echo '
    '; // end row + echo '
    '; // end col-xs-11 + } } + ?>
    diff --git a/cis/testtool/sound.php b/cis/testtool/sound.php index ccd1b8f72..81f5261d4 100644 --- a/cis/testtool/sound.php +++ b/cis/testtool/sound.php @@ -23,22 +23,49 @@ // Holt den Hexcode eines Bildes aus der DB wandelt es in Zeichen // um und gibt das ein Bild zurueck. // Aufruf mit getBerechtigungen($user); + + if (!$rechte->isBerechtigt('basis/testtool', null, 's')) + die($rechte->errormsg); +} //base64 Dump aus der DB holen $qry = ''; if(isset($_GET['src']) && $_GET['src']=='frage' && isset($_GET['frage_id'])) { - $qry = "SELECT audio FROM testtool.tbl_frage_sprache WHERE frage_id='".addslashes($_GET['frage_id'])."' AND sprache='".addslashes($_GET['sprache'])."'"; + $qry = " + SELECT + audio + FROM + testtool.tbl_frage_sprache + WHERE + frage_id=".$db->db_add_param($_GET['frage_id'], FHC_INTEGER)." + AND sprache=".$db->db_add_param($_GET['sprache']); } elseif(isset($_GET['src']) && $_GET['src']=='vorschlag' && isset($_GET['vorschlag_id'])) { - $qry = "SELECT audio FROM testtool.tbl_vorschlag_sprache WHERE vorschlag_id='".addslashes($_GET['vorschlag_id'])."' AND sprache='".addslashes($_GET['sprache'])."'"; + $qry = " + SELECT + audio + FROM + testtool.tbl_vorschlag_sprache + WHERE + vorschlag_id=".$db->db_add_param($_GET['vorschlag_id'], FHC_INTEGER)." + AND sprache=".$db->db_add_param($_GET['sprache']); } -else +else echo 'Unkown type'; if($qry!='') @@ -52,16 +79,14 @@ if($qry!='') //base64 Werte in Zeichen $result = $db->db_query($qry); $row = $db->db_fetch_object($result); - + $content = base64_decode($row->audio); - + $len = strlen($content); header("Content-Length: $len\n"); //header("Content-type: audio/wav"); - + //ausgeben echo $content; } ?> - - diff --git a/cms/menu/menu_addon_meinelv.inc.php b/cms/menu/menu_addon_meinelv.inc.php index 89eecf088..b27029586 100644 --- a/cms/menu/menu_addon_meinelv.inc.php +++ b/cms/menu/menu_addon_meinelv.inc.php @@ -24,11 +24,13 @@ */ require_once(dirname(__FILE__).'/menu_addon.class.php'); require_once(dirname(__FILE__).'/../../config/cis.config.inc.php'); +require_once(dirname(__FILE__).'/../../config/global.config.inc.php'); require_once(dirname(__FILE__).'/../../include/functions.inc.php'); require_once(dirname(__FILE__).'/../../include/phrasen.class.php'); require_once(dirname(__FILE__).'/../../include/studiensemester.class.php'); require_once(dirname(__FILE__).'/../../include/studiengang.class.php'); require_once(dirname(__FILE__).'/../../include/lehrveranstaltung.class.php'); +require_once(dirname(__FILE__).'/../../include/vertrag.class.php'); class menu_addon_meinelv extends menu_addon { @@ -187,6 +189,17 @@ class menu_addon_meinelv extends menu_addon $lv_obj = new lehrveranstaltung(); $lv_obj->load($row->lehrveranstaltung_id); + // Nur erteilte Vertraege anzeigen wenn dies im Config hinterlegt ist. + if (defined('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON') + && CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON != '') + { + $vertrag = new vertrag(); + if (!$vertrag->isVertragErteiltLV($lv_obj->lehrveranstaltung_id, $stsem, $user)) + { + continue; + } + } + if($row->studiengang_kz==0 AND $row->semester==0) { $this->items[] = array('title'=>$lv_obj->bezeichnung_arr[$sprache], diff --git a/config/global.config-default.inc.php b/config/global.config-default.inc.php index 05da2cb94..e377f0424 100644 --- a/config/global.config-default.inc.php +++ b/config/global.config-default.inc.php @@ -101,6 +101,9 @@ define('CIS_GESAMTNOTE_FREIGABEMAIL_NOTE', false); // Gibt an ob in der Notenliste der Studierenden nur offizielle Noten oder alle angezeigt werden define('CIS_NOTENLISTE_OFFIZIELL_ANZEIGEN', false); +// Gibt an ob in der Notenliste der Durchschnitt und der gewichtete Durchschnitt angezeigt werden +define('CIS_NOTENLISTE_DURCHSCHNITT_ANZEIGEN', true); + // Grenzwerte für Anwesenheit define('FAS_ANWESENHEIT_ROT', 70); define('FAS_ANWESENHEIT_GELB', 90); @@ -129,9 +132,19 @@ define('FAS_UDF', true); // Legt fest ob Aufnahmegruppen bei Reihungstests verwaltet werden true|false define('FAS_REIHUNGSTEST_AUFNAHMEGRUPPEN',false); +// Legt fest welche OEs nicht zur Stundenobergrenze für Lektoren hinzugerechnet werden +define('FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE', array('eci')); + // Legt fest, ob Vertragsdetails zum Lehrauftrag im Reiter LektorInnenzuteilung angezeigt werden define('FAS_LV_LEKTORINNENZUTEILUNG_VERTRAGSDETAILS_ANZEIGEN', false); +// Legt fest ob bei Fixangestellten Lektoren der Stundensatz vorgeschlagen wird +define('FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ', true); + +// Gibt an, ob/ab welchen Studiensemester eine zusätzliche Vertragspruefung der Lektoren erfolgt. +// Ab diesem Semester wird die Lektorenzuordnung nur angezeigt wenn ein erteilter Vertrag vorhanden ist +define('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON', ''); + // Legt fest, ob Vertragsdetails zum Projektauftrag im Reiter Projektarbeit angezeigt werden define('FAS_STUDIERENDE_PROJEKTARBEIT_VERTRAGSDETAILS_ANZEIGEN', false); @@ -252,6 +265,10 @@ define('FAS_KONTO_SHOW_CREDIT_POINTS','false'); // Bei "default" wird der Standard-Stundensatz des Lektors (aus tbl_mitarbeiter) ermittelt, und dieser eingetragen. // Wenn numerisch, wird dieser Wert bei allen LektorInnen eingetragen. // Wenn nicht definiert, wird der Stundensatz des Vorjahres übernommen. +// Bei "nachbeschaeftigungsart" wird +// bei echten Dienstvertraegen mit voller inkludierter Lehre (-1) der Stundensatz auf null gesetzt +// bei echten Dienstvertraegen mit teilweise oder nicht inkludierter Lehre der Default Stundensatz gesetzt +// bei sonstigen Dienstvertraegen der Default Stundensatz gesetzt define('VILESCI_STUNDENSATZ_VORRUECKUNG', ''); // Wenn true, werden die Content-Aufrufe des CIS in der tbl_webservicelog mitgeloggt. Zuvor manuell einen neuen Webservicetyp "content" anlegen! @@ -274,4 +291,7 @@ define('STATUSGRUND_ID_EINSTIEG_SOMMERSEMESTER', null); // Studiengangs_kz des Studiengangs "Qualifikationskurse". Der Studiengang hat eine Sonderstellung zB für das Bewerbungstool. define('STUDIENGANG_KZ_QUALIFIKATIONKURSE', null); + +// Gibt an ob der Login ins Testtool ueber das Bewerbungstool stattfindet oder nicht +define('TESTTOOL_LOGIN_BEWERBUNGSTOOL', false); ?> diff --git a/config/vilesci.config-default.inc.php b/config/vilesci.config-default.inc.php index 1d68cfdb3..1647cb59a 100644 --- a/config/vilesci.config-default.inc.php +++ b/config/vilesci.config-default.inc.php @@ -208,4 +208,45 @@ define('DVB_PASSWORD','passwort'); define('CI_ENVIRONMENT', 'development'); // Code igniter environment variable +// BIS Personalmeldung + +// Studiengaenge, die nicht gemeldet werden +define('BIS_EXCLUDE_STG', array()); + +// Basis Vollzeit Arbeitsstunden für Berechnung von Jahresvollzeitaequivalenz JVZAE (echte Dienstverträge) +define('BIS_VOLLZEIT_ARBEITSSTUNDEN', '40'); + +// Basis Vollzeit Semesterwochenstunden für Berechnung von Jahresvollzeitaequivalenz JVZAE auf Stundenbasis (freie Dienstverträge) +define('BIS_VOLLZEIT_SWS_EINZELSTUNDENBASIS', '15'); + +// Basis Vollzeit Semesterwochenstunden für Berechnung von Jahresvollzeitaequivalenz JVZAE für inkludierte Lehre bei echten Dienstverträgen +define('BIS_VOLLZEIT_SWS_INKLUDIERTE_LEHRE', '25'); + +// Semester Gewichtung für Berechnung von Jahresvollzeitaequivalenz JVZAE +define('BIS_HALBJAHRES_GEWICHTUNG_SWS', 0.5); + +// Jahrespauschale fuer studentische Hilfskraefte (in Stunden) +define('BIS_PAUSCHALE_STUDENTISCHE_HILFSKRAFT', 0); + +// Jahrespauschale fuer sonstige Dienstverhaeltnisse, zb Werkvertrag (in Stunden) +define('BIS_PAUSCHALE_SONSTIGES_DIENSTVERHAELTNIS', 0); + +define('BIS_FUNKTIONSCODE_1234_ARR', array( + 'vertrBefugter' => 1, // Vertretungsbefugte/r des Erhalters (GF, Prokura) + 'kollegium_Ltg' => 2, // Leiter/in des Kollegiums + 'kollegium_Ltg' => 2, // Leiter/in des Kollegiums + 'kollegium_stvLtg' => 3, // stellv. Leiter/In des Kollegiums + 'kollegium' => 4 // Mitglied des Kollegiums +)); + +// Liste der Leitungsfunktionen +define('BIS_FUNKTIONSCODE_5_ARR', array( + 'Leitung' +)); + +// Organisationseinheitstypen bei denen KEINE Leiter gemeldet werden +define('BIS_FUNKTIONSCODE_6_ARR', array( + 'Team' +)); + ?> diff --git a/content/lvplanung/lehrveranstaltungDBDML.php b/content/lvplanung/lehrveranstaltungDBDML.php index 5e4a3ba61..f5568ced4 100644 --- a/content/lvplanung/lehrveranstaltungDBDML.php +++ b/content/lvplanung/lehrveranstaltungDBDML.php @@ -36,6 +36,7 @@ // **************************************** require_once('../../config/vilesci.config.inc.php'); +require_once('../../config/global.config.inc.php'); require_once('../../include/functions.inc.php'); require_once('../../include/lehreinheit.class.php'); require_once('../../include/lehreinheitmitarbeiter.class.php'); @@ -52,6 +53,7 @@ require_once('../../include/lehrveranstaltung.class.php'); require_once('../../include/datum.class.php'); require_once('../../include/vertrag.class.php'); require_once('../../include/benutzergruppe.class.php'); +require_once('../../include/bisverwendung.class.php'); $user = get_uid(); $db = new basis_db(); @@ -158,9 +160,16 @@ function getStundenproInstitut($mitarbeiter_uid, $studiensemester_kurzbz, $oe_ar mitarbeiter_uid=".$db->db_add_param($mitarbeiter_uid)." AND studiensemester_kurzbz=".$db->db_add_param($studiensemester_kurzbz)." AND bismelden AND - tbl_studiengang.oe_kurzbz in(".$db->db_implode4SQL($oe_arr).") - GROUP BY tbl_studiengang.bezeichnung"; + tbl_studiengang.oe_kurzbz in(".$db->db_implode4SQL($oe_arr).")"; + if(defined('FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE') + && is_array(FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE) + && count(FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE)>0) + { + $qry.=" AND tbl_studiengang.oe_kurzbz not in(".$db->db_implode4SQL(FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE).")"; + } + + $qry .= " GROUP BY tbl_studiengang.bezeichnung"; if($result = $db->db_query($qry)) { while($row = $db->db_fetch_object($result)) @@ -340,6 +349,13 @@ if(!$error) if(count($oe_arr)>0) $qry.=" AND tbl_studiengang.oe_kurzbz in(".$db->db_implode4SQL($oe_arr).")"; + if(defined('FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE') + && is_array(FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE) + && count(FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE)>0) + { + $qry.=" AND tbl_studiengang.oe_kurzbz not in(".$db->db_implode4SQL(FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE).")"; + } + if($db->db_query($qry)) { if($row = $db->db_fetch_object()) @@ -440,11 +456,18 @@ if(!$error) elseif(isset($_POST['type']) && $_POST['type']=='lehreinheit_mitarbeiter_add') { //neue Lehreinheitmitarbeiterzuteilung anlegen - $qry = "SELECT tbl_lehrveranstaltung.studiengang_kz, tbl_lehrveranstaltung.lehrveranstaltung_id, - (SELECT fachbereich_kurzbz FROM public.tbl_fachbereich WHERE oe_kurzbz=lehrfach.oe_kurzbz) as fachbereich_kurzbz - FROM lehre.tbl_lehrveranstaltung, lehre.tbl_lehreinheit, lehre.tbl_lehrveranstaltung as lehrfach - WHERE tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id AND - tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id AND lehreinheit_id=".$db->db_add_param($_POST['lehreinheit_id'], FHC_INTEGER); + $qry = "SELECT + tbl_lehrveranstaltung.studiengang_kz, tbl_lehrveranstaltung.lehrveranstaltung_id, + lehrfach.oe_kurzbz as lehrfach_oe_kurzbz + FROM + lehre.tbl_lehrveranstaltung, + lehre.tbl_lehreinheit, + lehre.tbl_lehrveranstaltung as lehrfach + WHERE + tbl_lehrveranstaltung.lehrveranstaltung_id = tbl_lehreinheit.lehrveranstaltung_id + AND tbl_lehreinheit.lehrfach_id = lehrfach.lehrveranstaltung_id + AND lehreinheit_id = ".$db->db_add_param($_POST['lehreinheit_id'], FHC_INTEGER); + if($db->db_query($qry)) { if($row = $db->db_fetch_object()) @@ -454,8 +477,8 @@ if(!$error) if(!$rechte->isBerechtigtMultipleOe('admin', $lva->getAllOe(), 'suid') && !$rechte->isBerechtigtMultipleOe('assistenz', $lva->getAllOe(), 'suid') && !$rechte->isBerechtigtMultipleOe('lv-plan', $lva->getAllOe(), 'suid') && - !$rechte->isBerechtigtMultipleOe('assistenz', $lva->getAllOe(), 'suid', $row->fachbereich_kurzbz) && - !$rechte->isBerechtigtMultipleOe('admin', $lva->getAllOe(), 'suid', $row->fachbereich_kurzbz)) + !$rechte->isBerechtigtMultipleOe('assistenz', $row->lehrfach_oe_kurzbz, 'suid') && + !$rechte->isBerechtigtMultipleOe('admin', $row->lehrfach_oe_kurzbz, 'suid')) { $error = true; $return = false; @@ -496,29 +519,47 @@ if(!$error) $fixangestellt=false; //Stundensatz aus tbl_mitarbeiter holen - $qry = "SELECT stundensatz, fixangestellt FROM public.tbl_mitarbeiter WHERE mitarbeiter_uid=".$db->db_add_param($_POST['mitarbeiter_uid']); - if($result = $db->db_query($qry)) + $mitarbeiter = new mitarbeiter(); + if ($mitarbeiter->load($_POST['mitarbeiter_uid'])) { - if($row = $db->db_fetch_object($result)) + $fixangestellt = $mitarbeiter->fixangestellt; + $lem->stundensatz = $mitarbeiter->stundensatz; + + if (defined('FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ') + && !FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ) { - if($row->stundensatz!='') - $lem->stundensatz = $row->stundensatz; - else - $lem->stundensatz = '0'; - $fixangestellt = ($row->fixangestellt=='t'?true:false); + $stsem = new studiensemester(); + $stsem->load($semester_aktuell); + $bisverwendung = new bisverwendung(); + $data = $mitarbeiter->stundensatz; + if(!$bisverwendung->getVerwendungRange($mitarbeiter->uid, $stsem->start, $stsem->ende)) + { + $bisverwendung->getLastAktVerwendung($mitarbeiter->uid); + $bisverwendung->result[] = $bisverwendung; + } + + foreach($bisverwendung->result as $row_verwendung) + { + // Bei echten Dienstvertraegen mit voller inkludierter Lehre wird kein Stundensatz + // geliefert da dies im Vertrag inkludiert ist. + if ($row_verwendung->ba1code == 103 && $row_verwendung->inkludierte_lehre == -1) + { + $fixangestellt = true; + $lem->stundensatz = ''; + break; + } + } } else { - $error=true; - $return=false; - $errormsg='Mitarbeiter '.$db->convert_html_chars($_POST['mitarbeiter_uid']).' wurde nicht gefunden'; + $lem->stundensatz = $mitarbeiter->stundensatz; } } else { $error=true; $return=false; - $errormsg='Fehler bei einer Datenbankabfrage:'.$db->db_last_error(); + $errormsg='Mitarbeiter '.$db->convert_html_chars($_POST['mitarbeiter_uid']).' wurde nicht gefunden'; } $maxstunden=9999; @@ -1381,7 +1422,32 @@ if(!$error) $mitarbeiter = new mitarbeiter(); if($mitarbeiter->load($_POST['mitarbeiter_uid'])) { - $data = $mitarbeiter->stundensatz; + if (defined('FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ') + && !FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ) + { + $stsem = new studiensemester(); + $stsem->load($semester_aktuell); + $bisverwendung = new bisverwendung(); + $data = $mitarbeiter->stundensatz; + if(!$bisverwendung->getVerwendungRange($mitarbeiter->uid, $stsem->start, $stsem->ende)) + { + $bisverwendung->getLastAktVerwendung($mitarbeiter->uid); + $bisverwendung->result[] = $bisverwendung; + } + + foreach($bisverwendung->result as $row_verwendung) + { + // Bei echten Dienstvertraegen mit voller inkludierter Lehre wird kein Stundensatz + // geliefert da dies im Vertrag inkludiert ist. + if ($row_verwendung->ba1code == 103 && $row_verwendung->inkludierte_lehre == -1) + { + $data = ''; + break; + } + } + } + else + $data = $mitarbeiter->stundensatz; $return = true; } else @@ -1814,7 +1880,7 @@ if(!$error) } else { - $errormsg = 'VertragsID und MitarbeiterUID müssen uebergeben werden'; + $errormsg = 'Sie haben keine Berechtigung für diese Aktion.'; $return = false; } } diff --git a/content/mitarbeiter/mitarbeiterfunktionoverlay.xul.php b/content/mitarbeiter/mitarbeiterfunktionoverlay.xul.php index dff657cf6..6a50145eb 100644 --- a/content/mitarbeiter/mitarbeiterfunktionoverlay.xul.php +++ b/content/mitarbeiter/mitarbeiterfunktionoverlay.xul.php @@ -179,7 +179,7 @@ echo ''; - + - \ No newline at end of file + diff --git a/content/mitarbeiter/mitarbeiteroverlay.js.php b/content/mitarbeiter/mitarbeiteroverlay.js.php index bcd57ffcd..d0aa4f40d 100644 --- a/content/mitarbeiter/mitarbeiteroverlay.js.php +++ b/content/mitarbeiter/mitarbeiteroverlay.js.php @@ -1211,7 +1211,7 @@ function MitarbeiterVerwendungSpeichern(dialog, bisverwendung_id, mitarbeiter_ui inkludierte_lehre = dialog.getElementById('mitarbeiter-verwendung-detail-textbox-inkludierte_lehre').value; zeitaufzeichnungspflichtig = dialog.getElementById('mitarbeiter-verwendung-detail-checkbox-zeitaufzeichnungspflichtig').checked; - if(verwendung_code=='1' || verwendung_code=='5' || verwendung_code=='6') + if(verwendung_code=='1') { if(hauptberuflich==true) { diff --git a/content/mitarbeiter/mitarbeiterverwendungdialog.js.php b/content/mitarbeiter/mitarbeiterverwendungdialog.js.php index 2b3bcfafd..841f167e9 100644 --- a/content/mitarbeiter/mitarbeiterverwendungdialog.js.php +++ b/content/mitarbeiter/mitarbeiterverwendungdialog.js.php @@ -87,12 +87,12 @@ function MitarbeiterVerwendungInit(mitarbeiter_uid, bisverwendung_id) var predicateNS = "http://www.technikum-wien.at/mitarbeiter/rdf"; fixangestellt = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#fixangestellt" )); - + //neuer Datensatz wird angelegt MitarbeiterVerwendungDetailNeu='true'; //Defaultwerte - ba1code=3; //fixer Dienstvertrag + ba1code=103; //fixer Dienstvertrag ba2code=1; //unbefristet beschausmasscode=1; //Vollzeit verwendung_code=1; //Lehr- und Forschungspersonal diff --git a/content/pdfExport.php b/content/pdfExport.php index b2978c6ba..29feeef6e 100644 --- a/content/pdfExport.php +++ b/content/pdfExport.php @@ -305,8 +305,14 @@ else else $output = 'pdf'; - // An der FHTW darf fas Studienblatt auch iin anderen Formaten exportiert werden - if (CAMPUS_NAME == 'FH Technikum Wien' && ($xsl == 'Studienblatt' || $xsl == 'StudienblattEng')) + // An der FHTW darf das Studienblatt und das Prüfungsprotokoll auch in anderen Formaten exportiert werden + if (CAMPUS_NAME == 'FH Technikum Wien' && + ($xsl == 'Studienblatt' || + $xsl == 'StudienblattEng' || + $xsl == 'PrProtBA' || + $xsl == 'PrProtBAEng' || + $xsl == 'PrProtMA' || + $xsl == 'PrProtMAEng')) { $output = $_GET['output']; } @@ -452,7 +458,7 @@ else } $dokument->setFilename($filename); - + if ($sign === true) { $dokument->sign($user); @@ -471,22 +477,29 @@ else if(!$vorlage->archivierbar) die('Dieses Dokument ist nicht archivierbar'); + $studiengang_kz = null; // Archivieren von Dokumenten - $uid = $_REQUEST["uid"]; - $heute = date('Y-m-d'); - - $student = new student(); - $student->load($uid); - - if (isset($_REQUEST['ss'])) + // Wenn UID übergeben wurde ist es ein Student, sonst ein PreStudent (zB Ausbildungsvertrag) + if (isset($_REQUEST['uid']) && $_REQUEST['uid'] != '') { - $ss = $_REQUEST["ss"]; + $uid = $_REQUEST["uid"]; + $heute = date('Y-m-d'); - $prestudent = new prestudent(); - $prestudent->getLastStatus($student->prestudent_id,$ss); - $semester = $prestudent->ausbildungssemester; + $student = new student(); + $student->load($uid); - $query = "SELECT + $studiengang = new studiengang(); + $studiengang->load($student->studiengang_kz); + + if (isset($_REQUEST['ss'])) + { + $ss = $_REQUEST["ss"]; + + $prestudent = new prestudent(); + $prestudent->getLastStatus($student->prestudent_id,$ss); + $semester = $prestudent->ausbildungssemester; + + $query = "SELECT tbl_studiengang.studiengang_kz, tbl_studentlehrverband.semester, tbl_studiengang.typ, tbl_studiengang.kurzbz, tbl_person.person_id FROM tbl_person, tbl_benutzer, tbl_studentlehrverband, tbl_studiengang @@ -497,29 +510,51 @@ else AND tbl_studentlehrverband.student_uid = ".$db->db_add_param($uid)." AND tbl_studentlehrverband.studiensemester_kurzbz = ".$db->db_add_param($ss); - if ($result = $db->db_query($query)) - { - if ($row = $db->db_fetch_object($result)) + if ($result = $db->db_query($query)) { - $person_id = $row->person_id; - $titel = mb_substr($xsl."_".strtoupper($row->typ).strtoupper($row->kurzbz)."_".$semester.'_'.$ss, 0, 64); - $bezeichnung = mb_substr($xsl." ".strtoupper($row->typ).strtoupper($row->kurzbz)." ".$semester.". Semester".' '.$ss, 0, 64); - $studiengang_kz = $row->studiengang_kz; - } - else - { - die('StudentIn hat keinen Status in diesem Semester'); + if ($row = $db->db_fetch_object($result)) + { + $person_id = $row->person_id; + $titel = mb_substr($xsl."_".strtoupper($row->typ).strtoupper($row->kurzbz)."_".$semester.'_'.$ss, 0, 64); + if ($xsl == 'Ausbildungsver' || $xsl == 'AusbVerEng') + { + $bezeichnung = mb_substr($vorlage->bezeichnung." ".$studiengang->kuerzel, 0, 64); + } + else + { + $bezeichnung = mb_substr($xsl." ".strtoupper($row->typ).strtoupper($row->kurzbz)." ".$semester.". Semester".' '.$ss, 0, 64); + } + $studiengang_kz = $row->studiengang_kz; + } + else + { + die('StudentIn hat keinen Status in diesem Semester'); + } } } + else + { + $studiengang_kz = $student->studiengang_kz; + $person_id = $student->person_id; + $titel = $vorlage->bezeichnung.'_'.$studiengang->kuerzel; + $bezeichnung = mb_substr($vorlage->bezeichnung." ".$studiengang->kuerzel, 0, 64); + } } - else + elseif (isset($_REQUEST['prestudent_id']) && $_REQUEST['prestudent_id'] != '') { + $prestudent_id = $_REQUEST["prestudent_id"]; + $heute = date('Y-m-d'); + $uid = ''; + + $prestudent = new prestudent($prestudent_id); + $prestudent->getLastStatus($prestudent_id); + $studiengang_kz = $prestudent->studiengang_kz; $studiengang = new studiengang(); - $studiengang->load($student->studiengang_kz); - $studiengang_kz=$student->studiengang_kz; - $person_id = $student->person_id; - $titel = $vorlage->bezeichnung.'_'.$studiengang->kuerzel; - $bezeichnung = $vorlage->bezeichnung.'_'.$studiengang->kuerzel; + $studiengang->load($studiengang_kz); + + $person_id = $prestudent->person_id; + $titel = mb_substr($xsl."_".$studiengang->kuerzel, 0, 64); + $bezeichnung = mb_substr($vorlage->bezeichnung." ".$studiengang->kuerzel, 0, 64); } if ($rechte->isBerechtigt('admin', $studiengang_kz, 'suid') @@ -531,6 +566,9 @@ else $dokument->setFilename($filename); $error = false; + + // XML-tag archivierbar ergaenzen + $dokument->setXMLTag_archivierbar(); // Beim Archivieren wird das Dokument immer signiert wenn moeglich if($vorlage->signierbar) @@ -540,7 +578,7 @@ else { $dokument->sign($user); } - + if ($dokument->create($output)) $doc = $dokument->output(false); else diff --git a/content/statistik/projektarbeitexport.xls.php b/content/statistik/projektarbeitexport.xls.php index 213cb4b94..3b8e6b31e 100644 --- a/content/statistik/projektarbeitexport.xls.php +++ b/content/statistik/projektarbeitexport.xls.php @@ -103,7 +103,7 @@ if ($semester != '') $zeile=1; if ($result = $db->db_query($qry)) { - while ($row = $db->db_fetch_array($result)) + while ($row = $db->db_fetch_array($result, null, PGSQL_BOTH)) { $zeile++; $i = 0; @@ -150,7 +150,7 @@ if ($result = $db->db_query($qry)) } $zeile++; - while ($row_betreuer = $db->db_fetch_array($result_betreuer)) + while ($row_betreuer = $db->db_fetch_array($result_betreuer, null, PGSQL_BOTH)) { $i = 1; diff --git a/content/student/studentDBDML.php b/content/student/studentDBDML.php index 8ec746015..3c0a72875 100644 --- a/content/student/studentDBDML.php +++ b/content/student/studentDBDML.php @@ -166,7 +166,7 @@ function generateMatrikelnummer($studiengang_kz, $studiensemester_kurzbz) * @param $note * @return null, error wird direkt in globale Variable geschrieben */ -function NotePruefungAnlegen($studiensemester_kurzbz, $student_uid, $lehrveranstaltung_id, $note) +function NotePruefungAnlegen($studiensemester_kurzbz, $student_uid, $lehrveranstaltung_id, $note, $punkte) { global $return, $error, $errormsg; @@ -227,6 +227,8 @@ function NotePruefungAnlegen($studiensemester_kurzbz, $student_uid, $lehrveranst if(count($benutzerfunktion->result)>0) $anwesenheitsbefreit=true; + $gesamtnote_punkte = defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE; + // Wenn nicht Anwesenheitsbefreit und Anwesenheit unter einem bestimmten Prozentsatz faellt dann wird ein // Pruefungsantritt abgezogen if(isset($anwesenheit->result[0]) && $anwesenheit->result[0]->prozent < FAS_ANWESENHEIT_ROT && !$anwesenheitsbefreit) @@ -239,6 +241,8 @@ function NotePruefungAnlegen($studiensemester_kurzbz, $student_uid, $lehrveranst // 2. Termin mit Note erstellen $pruefung->pruefungstyp_kurzbz = "Termin2"; $pruefung->note = $note; + if($gesamtnote_punkte) + $pruefung->punkte = $punkte; if($pruefung->save()) { $return = true; @@ -260,6 +264,8 @@ function NotePruefungAnlegen($studiensemester_kurzbz, $student_uid, $lehrveranst // 1. Termin mit Note erstellen $pruefung->pruefungstyp_kurzbz = "Termin1"; $pruefung->note = $note; + if($gesamtnote_punkte) + $pruefung->punkte = $punkte; if($pruefung->save()) { @@ -1897,16 +1903,28 @@ if(!$error) } if(!$error) { - $akte = new akte(); - - if($akte->delete($_POST['akte_id'])) - { - $return = true; - } - else + $akte = new akte($_POST['akte_id']); + //Akzeptierte Ausbildungsverträge dürfen nur von Admins gelöscht werden + if ($akte->dokument_kurzbz == 'Ausbvert' && + $akte->akzeptiertamum != '' && + !$rechte->isBerechtigt('admin',$_POST['studiengang_kz'], 'suid')) { + $error = true; $return = false; - $errormsg = $akte->errormsg; + $errormsg = 'Akzeptierte Ausbildungsverträge dürfen nur von Administratoren gelöscht werden'; + } + + if(!$error) + { + if ($akte->delete($_POST['akte_id'])) + { + $return = true; + } + else + { + $return = false; + $errormsg = $akte->errormsg; + } } } } @@ -3065,7 +3083,7 @@ if(!$error) if(defined('FAS_PRUEFUNG_BEI_NOTENEINGABE_ANLEGEN') && FAS_PRUEFUNG_BEI_NOTENEINGABE_ANLEGEN && $return == true && $noten->new == true) { - NotePruefungAnlegen($studiensemester_kurzbz, $student_uid, $lehrveranstaltung_id, $noten->note); + NotePruefungAnlegen($studiensemester_kurzbz, $student_uid, $lehrveranstaltung_id, $noten->note, $noten->punkte); } } } @@ -3193,7 +3211,7 @@ if(!$error) { if(defined('FAS_PRUEFUNG_BEI_NOTENEINGABE_ANLEGEN') && FAS_PRUEFUNG_BEI_NOTENEINGABE_ANLEGEN && $zeugnisnote->new == true) { - NotePruefungAnlegen($zeugnisnote->studiensemester_kurzbz, $zeugnisnote->student_uid, $zeugnisnote->lehrveranstaltung_id, $zeugnisnote->note); + NotePruefungAnlegen($zeugnisnote->studiensemester_kurzbz, $zeugnisnote->student_uid, $zeugnisnote->lehrveranstaltung_id, $zeugnisnote->note, $zeugnisnote->punkte); } } } @@ -3362,7 +3380,7 @@ if(!$error) { if(defined('FAS_PRUEFUNG_BEI_NOTENEINGABE_ANLEGEN') && FAS_PRUEFUNG_BEI_NOTENEINGABE_ANLEGEN && $zeugnisnote->new == true) { - NotePruefungAnlegen($semester_aktuell, $uid, $_POST['lehrveranstaltung_id'], $zeugnisnote->note); + NotePruefungAnlegen($semester_aktuell, $uid, $_POST['lehrveranstaltung_id'], $zeugnisnote->note, $zeugnisnote->punkte); } } } @@ -3764,6 +3782,9 @@ if(!$error) $pruefung->pruefer2 = $_POST['pruefer2']; $pruefung->pruefer3 = $_POST['pruefer3']; $pruefung->abschlussbeurteilung_kurzbz = $_POST['abschlussbeurteilung_kurzbz']; + if(isset($_POST['pruefungsantritt_kurzbz'])) + $pruefung->pruefungsantritt_kurzbz = $_POST['pruefungsantritt_kurzbz']; + $pruefung->note = $_POST['notekommpruef']; $pruefung->akadgrad_id = $_POST['akadgrad_id']; $pruefung->pruefungstyp_kurzbz = $_POST['pruefungstyp_kurzbz']; @@ -3803,10 +3824,25 @@ if(!$error) if(isset($_POST['abschlusspruefung_id']) && is_numeric($_POST['abschlusspruefung_id'])) { $pruefung = new abschlusspruefung(); - - if($pruefung->delete($_POST['abschlusspruefung_id'])) + if($pruefung->load($_POST['abschlusspruefung_id'])) { - $return = true; + if ($pruefung->freigabedatum == '') + { + if($pruefung->delete($_POST['abschlusspruefung_id'])) + { + $return = true; + } + else + { + $errormsg = $pruefung->errormsg; + $return = false; + } + } + else + { + $errormsg = 'Löschen ist nicht möglich da bereits ein freigegebenes Protokoll vorhanden ist'; + $return = false; + } } else { diff --git a/content/student/studentabschlusspruefung.js.php b/content/student/studentabschlusspruefung.js.php index cac9cb78a..caaa32051 100644 --- a/content/student/studentabschlusspruefung.js.php +++ b/content/student/studentabschlusspruefung.js.php @@ -163,6 +163,7 @@ function StudentAbschlusspruefungDetailDisableFields(val) document.getElementById('student-abschlusspruefung-menulist-pruefer2').disabled=val; document.getElementById('student-abschlusspruefung-menulist-pruefer3').disabled=val; document.getElementById('student-abschlusspruefung-menulist-abschlussbeurteilung').disabled=val; + document.getElementById('student-abschlusspruefung-menulist-pruefungsantritt').disabled=val; document.getElementById('student-abschlusspruefung-menulist-notekommpruef').disabled=val; document.getElementById('student-abschlusspruefung-menulist-akadgrad').disabled=val; document.getElementById('student-abschlusspruefung-menulist-typ').disabled=val; @@ -186,6 +187,7 @@ function StudentAbschlusspruefungResetFields() document.getElementById('student-abschlusspruefung-menulist-pruefer2').value=''; document.getElementById('student-abschlusspruefung-menulist-pruefer3').value=''; document.getElementById('student-abschlusspruefung-menulist-abschlussbeurteilung').value=''; + document.getElementById('student-abschlusspruefung-menulist-pruefungsantritt').value=''; document.getElementById('student-abschlusspruefung-menulist-notekommpruef').value=''; //document.getElementById('student-abschlusspruefung-menulist-akadgrad').value=''; //document.getElementById('student-abschlusspruefung-menulist-typ').value='Bachelor'; @@ -342,6 +344,7 @@ function StudentAbschlusspruefungAuswahl() pruefer3 = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#pruefer3" )); pruefer3_nachname = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#pruefer3_nachname" )); abschlussbeurteilung_kurzbz = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#abschlussbeurteilung_kurzbz" )); + pruefungsantritt_kurzbz = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#pruefungsantritt_kurzbz" )); notekommpruef = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#notekommpruef" )); akadgrad_id = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#akadgrad_id" )); datum = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#datum" )); @@ -395,6 +398,7 @@ function StudentAbschlusspruefungAuswahl() MenulistSelectItemOnValue('student-abschlusspruefung-menulist-pruefer2', pruefer2); MenulistSelectItemOnValue('student-abschlusspruefung-menulist-pruefer3', pruefer3); document.getElementById('student-abschlusspruefung-menulist-abschlussbeurteilung').value=abschlussbeurteilung_kurzbz; + document.getElementById('student-abschlusspruefung-menulist-pruefungsantritt').value=pruefungsantritt_kurzbz; document.getElementById('student-abschlusspruefung-menulist-notekommpruef').value=notekommpruef; document.getElementById('student-abschlusspruefung-menulist-akadgrad').value=akadgrad_id; document.getElementById('student-abschlusspruefung-datum-datum').value=datum; @@ -424,6 +428,7 @@ function StudentAbschlusspruefungSpeichern() var pruefer2 = MenulistGetSelectedValue('student-abschlusspruefung-menulist-pruefer2'); var pruefer3 = MenulistGetSelectedValue('student-abschlusspruefung-menulist-pruefer3'); var abschlussbeurteilung_kurzbz = document.getElementById('student-abschlusspruefung-menulist-abschlussbeurteilung').value; + var pruefungsantritt_kurzbz = document.getElementById('student-abschlusspruefung-menulist-pruefungsantritt').value; var notekommpruef = document.getElementById('student-abschlusspruefung-menulist-notekommpruef').value; var akadgrad_id = document.getElementById('student-abschlusspruefung-menulist-akadgrad').value; var datum = document.getElementById('student-abschlusspruefung-datum-datum').value; @@ -482,6 +487,7 @@ function StudentAbschlusspruefungSpeichern() req.add('pruefer2', pruefer2); req.add('pruefer3', pruefer3); req.add('abschlussbeurteilung_kurzbz', abschlussbeurteilung_kurzbz); + req.add('pruefungsantritt_kurzbz', pruefungsantritt_kurzbz); req.add('notekommpruef', notekommpruef); req.add('akadgrad_id', akadgrad_id); req.add('datum', ConvertDateToISO(datum)); diff --git a/content/student/studentabschlusspruefungoverlay.xul.php b/content/student/studentabschlusspruefungoverlay.xul.php index 3c915e270..e281a7a16 100644 --- a/content/student/studentabschlusspruefungoverlay.xul.php +++ b/content/student/studentabschlusspruefungoverlay.xul.php @@ -97,6 +97,14 @@ echo ''; class="sortDirectionIndicator" sort="rdf:http://www.technikum-wien.at/abschlusspruefung/rdf#uhrzeit" onclick="StudentAbschlusspruefungTreeSort()"/> +