diff --git a/application/config/navigation.php b/application/config/navigation.php index c2d221a80..d76b8a7f2 100644 --- a/application/config/navigation.php +++ b/application/config/navigation.php @@ -23,6 +23,14 @@ $config['navigation_header'] = array( 'expand' => true, 'sort' => 10, 'requiredPermissions' => 'basis/vilesci:r' + ), + 'oehbeitragsverwaltung' => array( + 'link' => site_url('codex/Oehbeitrag'), + 'icon' => '', + 'description' => 'ÖH-Beitragsverwaltung', + 'expand' => true, + 'sort' => 20, + 'requiredPermissions' => 'admin:w' ) ) ), @@ -94,6 +102,13 @@ $config['navigation_header'] = array( 'description' => 'BPK Wartung', 'sort' => 20, 'requiredPermissions' => 'admin:r' + ), + 'errormonitoring' => array( + 'link' => site_url('system/issues/Issues'), + 'description' => 'Fehler Monitoring', + 'expand' => true, + 'sort' => 30, + 'requiredPermissions' => 'system/issues_verwalten:r' ) ) ), diff --git a/application/config/udfmasterschema.json b/application/config/udfmasterschema.json index fa06dc80d..ab3faa8c9 100644 --- a/application/config/udfmasterschema.json +++ b/application/config/udfmasterschema.json @@ -9,6 +9,13 @@ "name": { "type": "string" }, + "type": { + "type": "string", + "enum": ["checkbox", "textfield", "textarea", "date", "dropdown", "multipledropdown"] + }, + "requiredPermissions": { + "type": "array" + }, "description": { "type": "array", }, @@ -18,10 +25,6 @@ "title": { "type": "array", }, - "type": { - "type": "string", - "enum": ["checkbox", "textfield", "textarea", "date", "dropdown", "multipledropdown"] - }, "sort": { "type": "integer" }, @@ -67,5 +70,6 @@ } } }, - "required": ["type", "name"] -} \ No newline at end of file + "required": ["type", "name", "requiredPermissions"] +} + diff --git a/application/controllers/codex/Oehbeitrag.php b/application/controllers/codex/Oehbeitrag.php new file mode 100644 index 000000000..da8c63e08 --- /dev/null +++ b/application/controllers/codex/Oehbeitrag.php @@ -0,0 +1,269 @@ + 'admin:r',// TODO which Berechtigung? + 'getOehbeitraege' => 'admin:r', + 'getValidStudiensemester' => 'admin:r', + 'addOehbeitrag' => 'admin:rw', + 'updateOehbeitrag' => 'admin:rw', + 'deleteOehbeitrag' => 'admin:rw' + ) + ); + + $this->load->model('codex/Oehbeitrag_model', 'OehbeitragModel'); + $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); + + $this->load->library('WidgetLib'); + + $this->loadPhrases( + array( + 'global', + 'ui', + 'oehbeitrag' + ) + ); + } + + public function index() + { + $oehbeitraege = array(); + + $oehbeitragRes = $this->_loadOehbeitraege(); + + if (isError($oehbeitragRes)) + show_error(getError($oehbeitragRes)); + + if (hasData($oehbeitragRes)) + $oehbeitraege = getData($oehbeitragRes); + + $this->load->view("codex/oehbeitrag.php", array('oehbeitraege' => $oehbeitraege)); + } + + /** + * Gets all valid, i.e. unassigned, Studiensemester. + */ + public function getValidStudiensemester() + { + $oehbeitrag_id = $this->input->get('oehbeitrag_id'); + $oehbeitrag_id_arr = isset($oehbeitrag_id) ? array($oehbeitrag_id) : null; + + $studiensemester = array(); + + $studiensemesterres = $this->OehbeitragModel->getUnassignedStudiensemester(self::STUDIENSEMESTER_START, $oehbeitrag_id_arr); + if (isError($studiensemesterres)) + { + $this->outputJsonError(getError($studiensemesterres)); + return; + } + + if (hasData($studiensemesterres)) + $studiensemester = getData($studiensemesterres); + + $this->outputJsonSuccess($studiensemester); + } + + /** + * Gets all Öhbeiträge. Wrapper function for output as JSON. + */ + public function getOehbeitraege() + { + $this->outputJson($this->_loadOehbeitraege()); + } + + /** + * Adds an Öhbeitrag. Checks for errors beforehand. + */ + public function addOehbeitrag() + { + $studierendenbeitrag = $this->input->post('studierendenbeitrag'); + $versicherung = $this->input->post('versicherung'); + $von_studiensemester_kurzbz = $this->input->post('von_studiensemester_kurzbz'); + $bis_studiensemester_kurzbz = $this->input->post('bis_studiensemester_kurzbz'); + if ($bis_studiensemester_kurzbz == 'null') + $bis_studiensemester_kurzbz = null; + + if (!$this->_checkAmount($studierendenbeitrag)) + $this->outputJsonError('Ungültiger Studierendenbeitrag'); + elseif (!$this->_checkAmount($versicherung)) + $this->outputJsonError('Ungültige Versicherung'); + else + { + $vonBisCheck = $this->_checkVonBisStudiensemester($von_studiensemester_kurzbz, $bis_studiensemester_kurzbz); + + if (isError($vonBisCheck)) + $this->outputJsonError(getError($vonBisCheck)); + else + { + $data = array( + 'studierendenbeitrag' => $studierendenbeitrag, + 'versicherung' => $versicherung, + 'von_studiensemester_kurzbz' => $von_studiensemester_kurzbz, + 'bis_studiensemester_kurzbz' => $bis_studiensemester_kurzbz + ); + + $this->outputJson($this->OehbeitragModel->insert($data)); + } + } + } + + /** + * Updates an Öhbeitrag. Checks for errors beforehand. + */ + public function updateOehbeitrag() + { + $oehbeitrag_id = $this->input->post("oehbeitrag_id"); + $data = $this->input->post("data"); + + if (!is_numeric($oehbeitrag_id) || isEmptyArray($data)) + { + $this->outputJsonError("Ungültige Parameter"); + return; + } + + foreach ($data as $idx => $value) + { + if ($idx == 'studierendenbeitrag' || $idx == 'versicherung') + { + if (!$this->_checkAmount($value)) + { + $this->outputJsonError("Ungültige(r) $idx"); + return; + } + } + elseif ($idx == 'von_studiensemester_kurzbz' || $idx == 'bis_studiensemester_kurzbz') + { + $this->OehbeitragModel->addSelect('von_studiensemester_kurzbz, bis_studiensemester_kurzbz'); + $vonBisStudiensemesterRes = $this->OehbeitragModel->load($oehbeitrag_id); + + if (!hasData($vonBisStudiensemesterRes)) + { + $this->outputJsonError("Fehler beim Holen des Öhbeitrags"); + return; + } + + $vonBisStudiensemester = getData($vonBisStudiensemesterRes); + + $von_studiensemester_kurzbz = isset($data['von_studiensemester_kurzbz']) + ? $data['von_studiensemester_kurzbz'] + : $vonBisStudiensemester[0]->von_studiensemester_kurzbz; + + if (isset($data['bis_studiensemester_kurzbz'])) + { + $bis_studiensemester_kurzbz = $data['bis_studiensemester_kurzbz'] = $data['bis_studiensemester_kurzbz'] == 'null' ? null : $data['bis_studiensemester_kurzbz']; + } + else + $bis_studiensemester_kurzbz = $vonBisStudiensemester[0]->bis_studiensemester_kurzbz; + + $checkStudiensemester = $this->_checkVonBisStudiensemester($von_studiensemester_kurzbz, $bis_studiensemester_kurzbz, $oehbeitrag_id); + + if (isError($checkStudiensemester)) + { + $this->outputJsonError(getError($checkStudiensemester)); + return; + } + } + } + + $this->outputJson($this->OehbeitragModel->update($oehbeitrag_id, $data)); + } + + /** + * Deletes an Öhbeitrag. + */ + public function deleteOehbeitrag() + { + $oehbeitrag_id = $this->input->post("oehbeitrag_id"); + + $this->outputJson($this->OehbeitragModel->delete($oehbeitrag_id)); + } + + /** + * Loads all Öhbeiträge sorted by date descending. + * @return object + */ + private function _loadOehbeitraege() + { + $this->OehbeitragModel->addSelect('oehbeitrag_id, von_studiensemester_kurzbz, bis_studiensemester_kurzbz, studierendenbeitrag, versicherung, sem_von.start as von_datum, sem_bis.ende as bis_datum'); + $this->OehbeitragModel->addJoin('public.tbl_studiensemester sem_von', 'tbl_oehbeitrag.von_studiensemester_kurzbz = sem_von.studiensemester_kurzbz'); + $this->OehbeitragModel->addJoin('public.tbl_studiensemester sem_bis', 'tbl_oehbeitrag.bis_studiensemester_kurzbz = sem_bis.studiensemester_kurzbz', 'LEFT'); + $this->OehbeitragModel->addOrder('sem_von.start', 'DESC'); + return $this->OehbeitragModel->load(); + } + + /** + * Checks if an amount is numeric and not too big. + * @param $amount + * @return bool true if valid amount, false otherwise + */ + private function _checkAmount($amount) + { + return is_numeric($amount) && (float) $amount <= 99999.99; + } + + /** + * Checks if a certain Von-Studiensemester is valid together with a Bis-Studiensemester. + * Checks for correct format, Von-Studiensemester cannot be after the Bis-Studiensemester, + * checks that semester are not overlapping with semester for existent Öhbeiträge. + * @param string $von_studiensemester_kurzbz + * @param string $bis_studiensemester_kurzbz + * @param int $oehbeitrag_id öhbeitrag to ignore, i.e. which is assignable (id of Öhbeitrag of the passed semesters) + * @return object array with true if assignable, with false if not + */ + private function _checkVonBisStudiensemester($von_studiensemester_kurzbz, $bis_studiensemester_kurzbz, $oehbeitrag_id = null) + { + $regex = "/^(WS|SS)\d{4}$/"; + if (!preg_match($regex, $von_studiensemester_kurzbz)) + return error("Ungültiges Von-Studiensemester"); + + if (!preg_match($regex, $bis_studiensemester_kurzbz) && $bis_studiensemester_kurzbz != null) + return error("Ungültiges Bis-Studiensemester"); + + $this->StudiensemesterModel->addSelect("start"); + $vonStudiensemesterRes = $this->StudiensemesterModel->load($von_studiensemester_kurzbz); + + if (!hasData($vonStudiensemesterRes)) + return error("Fehler beim Holen von Von-Studiensemester"); + + $this->StudiensemesterModel->addSelect("start"); + $bisStudiensemesterRes = $this->StudiensemesterModel->load($bis_studiensemester_kurzbz); + + if (!hasData($bisStudiensemesterRes)) + return error("Fehler beim Holen von Bis-Studiensemester"); + + $vonStudiensemester = getData($vonStudiensemesterRes)[0]->start; + $bisStudiensemester = getData($bisStudiensemesterRes)[0]->start; + + if ($bis_studiensemester_kurzbz != null && new DateTime($vonStudiensemester) > new DateTime($bisStudiensemester)) + return error("Von-Studiensemester größer als Bis-Studiensemester"); + + $oehbeitrag_id_arr = isset($oehbeitrag_id) ? array($oehbeitrag_id) : null; + + $assignableRes = $this->OehbeitragModel->checkIfStudiensemesterAssignable( + $von_studiensemester_kurzbz, + $bis_studiensemester_kurzbz, + $oehbeitrag_id_arr + ); + + if (isError($assignableRes)) + return $assignableRes; + + if (hasData($assignableRes)) + { + $assignable = getData($assignableRes)[0]; + + if (!$assignable) + return error("Keine Zuweisung möglich, Semesterüberschneidung"); + } + + return success("Studiensemester gültig"); + } +} diff --git a/application/controllers/jobs/AnrechnungJob.php b/application/controllers/jobs/AnrechnungJob.php index f92410dbc..f32a8268a 100644 --- a/application/controllers/jobs/AnrechnungJob.php +++ b/application/controllers/jobs/AnrechnungJob.php @@ -188,7 +188,7 @@ class AnrechnungJob extends JOB_Controller $studiengang_bezeichnung = $this->StudiengangModel->load($studiengang_kz)->retval[0]->stg_bezeichnung; // Get STGL mail address - list ($to, $vorname) = self::_getSTGLMailAddress($studiengang_kz); + $stglMailReceiver_arr = self::_getSTGLMailAddress($studiengang_kz); // Get HTML table with new Anrechnungen of that STG plus amount of them list ($anrechnungen_amount, $anrechnungen_table) = self::_getSTGLMailDataTable($studiengang_kz, $anrechnungen); @@ -199,22 +199,25 @@ class AnrechnungJob extends JOB_Controller CIS_ROOT. 'cis/menu.php?content_id=&content='. CIS_ROOT. index_page(). self::APPROVE_ANRECHNUNG_URI; + foreach ($stglMailReceiver_arr as $stgl) + { // Prepare mail content - $body_fields = array( - 'vorname' => $vorname, - 'studiengang' => $studiengang_bezeichnung, - 'anzahl' => $anrechnungen_amount, - 'datentabelle' => $anrechnungen_table, - 'link' => anchor($url, 'Anrechnungsanträge Übersicht') - ); - - // Send mail - sendSanchoMail( - 'AnrechnungAntragStellen', - $body_fields, - $to, - 'Anerkennung nachgewiesener Kenntnisse: Neuer Antrag wurde gestellt' - ); + $body_fields = array( + 'vorname' => $stgl['vorname'], + 'studiengang' => $studiengang_bezeichnung, + 'anzahl' => $anrechnungen_amount, + 'datentabelle' => $anrechnungen_table, + 'link' => anchor($url, 'Anrechnungsanträge Übersicht') + ); + + // Send mail + sendSanchoMail( + 'AnrechnungAntragStellen', + $body_fields, + $stgl['to'], + 'Anerkennung nachgewiesener Kenntnisse: Neuer Antrag wurde gestellt' + ); + } } $this->logInfo('SUCCEDED: Sending emails to STGL about yesterdays new Anrechnungen succeded.'); @@ -342,15 +345,21 @@ html; // Get STGL mail address private function _getSTGLMailAddress($studiengang_kz) { + $stglMailAdress_arr = array(); $result = $this->StudiengangModel->getLeitung($studiengang_kz); // Get STGL mail address if (hasData($result)) { - return array( - $result->retval[0]->uid. '@'. DOMAIN, - $result->retval[0]->vorname - ); + foreach (getData($result) as $stgl) + { + $stglMailAdress_arr[]= array( + 'to' => $stgl->uid. '@'. DOMAIN, + 'vorname' => $stgl->vorname + ); + } + + return $stglMailAdress_arr; } // If not available, get assistance mail address else diff --git a/application/controllers/jobs/IssueResolver.php b/application/controllers/jobs/IssueResolver.php new file mode 100755 index 000000000..17c4cb9ce --- /dev/null +++ b/application/controllers/jobs/IssueResolver.php @@ -0,0 +1,28 @@ + class (library) name for resolving + $this->_codeLibMappings = array( + 'CORE_ZGV_0001' => 'CORE_ZGV_0001', + 'CORE_ZGV_0002' => 'CORE_ZGV_0002', + 'CORE_ZGV_0003' => 'CORE_ZGV_0003', + 'CORE_ZGV_0004' => 'CORE_ZGV_0004', + 'CORE_ZGV_0005' => 'CORE_ZGV_0005', + 'CORE_INOUT_0001' => 'CORE_INOUT_0001', + 'CORE_INOUT_0002' => 'CORE_INOUT_0002', + 'CORE_INOUT_0003' => 'CORE_INOUT_0003', + 'CORE_INOUT_0004' => 'CORE_INOUT_0004', + 'CORE_INOUT_0005' => 'CORE_INOUT_0005', + 'CORE_INOUT_0006' => 'CORE_INOUT_0006' + ); + } +} diff --git a/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php b/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php index 8982b9970..28edf4824 100644 --- a/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php +++ b/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php @@ -22,8 +22,8 @@ class approveAnrechnungDetail extends Auth_Controller // Set required permissions parent::__construct( array( - 'index' => 'lehre/anrechnung_genehmigen:rw', - 'download' => 'lehre/anrechnung_genehmigen:rw', + 'index' => 'lehre/anrechnung_genehmigen:r', + 'download' => 'lehre/anrechnung_genehmigen:r', 'approve' => 'lehre/anrechnung_genehmigen:rw', 'reject' => 'lehre/anrechnung_genehmigen:rw', 'requestRecommendation' => 'lehre/anrechnung_genehmigen:rw', @@ -81,7 +81,7 @@ class approveAnrechnungDetail extends Auth_Controller } // Check if user is entitled to read the Anrechnung - self::_checkIfEntitledToReadAnrechnung($anrechnung_id); + $this->_checkIfEntitledToReadAnrechnung($anrechnung_id); // Get Anrechung data $anrechnungData = $this->anrechnunglib->getAnrechnungData($anrechnung_id); @@ -99,11 +99,16 @@ class approveAnrechnungDetail extends Auth_Controller // Get Genehmigung data $genehmigungData = $this->anrechnunglib->getGenehmigungData($anrechnung_id); + $hasReadOnlyAccess = + $this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN, 's', $antragData->studiengang_kz) + && !$this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN, 'suid', $antragData->studiengang_kz); + $viewData = array( 'antragData' => $antragData, 'anrechnungData' => $anrechnungData, 'empfehlungData' => $empfehlungData, - 'genehmigungData' => $genehmigungData + 'genehmigungData' => $genehmigungData, + 'hasReadOnlyAccess' => $hasReadOnlyAccess ); $this->load->view('lehre/anrechnung/approveAnrechnungDetail.php', $viewData); @@ -385,7 +390,7 @@ class approveAnrechnungDetail extends Auth_Controller } // Check if user is entitled to read dms doc - self::_checkIfEntitledToReadDMSDoc($dms_id); + $this->_checkIfEntitledToReadDMSDoc($dms_id); // Set filename to be used on downlaod $filename = $this->anrechnunglib->setFilenameOnDownload($dms_id); @@ -412,32 +417,22 @@ class approveAnrechnungDetail extends Auth_Controller { $result = $this->AnrechnungModel->load($anrechnung_id); - if(!$result = getData($result)[0]) + if(!hasData($result)) { show_error('Failed loading Anrechnung'); } - + $result = $this->LehrveranstaltungModel->loadWhere(array( - 'lehrveranstaltung_id' => $result->lehrveranstaltung_id + 'lehrveranstaltung_id' => getData($result)[0]->lehrveranstaltung_id )); - if(!$result = getData($result)[0]) - { - show_error('Failed loading Lehrveranstaltung'); - } + $studiengang_kz = getData($result)[0]->studiengang_kz; - // Get STGL - $result = $this->StudiengangModel->getLeitung($result->studiengang_kz); - - if($result = getData($result)[0]) - { - if ($result->uid == $this->_uid) - { - return; - } - } - - show_error('You are not entitled to read this Anrechnung'); + // Check if user is entitled + if (!$this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN, 's', $studiengang_kz)) + { + show_error('You are not entitled to read this page'); + } } /** @@ -457,23 +452,13 @@ class approveAnrechnungDetail extends Auth_Controller 'lehrveranstaltung_id' => $result->lehrveranstaltung_id )); - if(!$result = getData($result)[0]) - { - show_error('Failed loading Lehrveranstaltung'); - } + $studiengang_kz = getData($result)[0]->studiengang_kz; - // Get STGL - $result = $this->StudiengangModel->getLeitung($result->studiengang_kz); - - if($result = getData($result)[0]) - { - if ($result->uid == $this->_uid) - { - return; - } - } - - show_error('You are not entitled to read this document'); + // Check if user is entitled + if (!$this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN, 's', $studiengang_kz)) + { + show_error('You are not entitled to read this document'); + } } /** diff --git a/application/controllers/lehre/anrechnung/ApproveAnrechnungUebersicht.php b/application/controllers/lehre/anrechnung/ApproveAnrechnungUebersicht.php index d59d97514..053988848 100644 --- a/application/controllers/lehre/anrechnung/ApproveAnrechnungUebersicht.php +++ b/application/controllers/lehre/anrechnung/ApproveAnrechnungUebersicht.php @@ -5,7 +5,8 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); class approveAnrechnungUebersicht extends Auth_Controller { const BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN = 'lehre/anrechnung_genehmigen'; - + const BERECHTIGUNG_ANRECHNUNG_ANLEGEN = 'lehre/anrechnung_anlegen'; + const REVIEW_ANRECHNUNG_URI = '/lehre/anrechnung/ReviewAnrechnungUebersicht'; const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP'; @@ -19,8 +20,8 @@ class approveAnrechnungUebersicht extends Auth_Controller // Set required permissions parent::__construct( array( - 'index' => 'lehre/anrechnung_genehmigen:rw', - 'download' => 'lehre/anrechnung_genehmigen:rw', + 'index' => 'lehre/anrechnung_genehmigen:r', + 'download' => 'lehre/anrechnung_genehmigen:r', 'approve' => 'lehre/anrechnung_genehmigen:rw', 'reject' => 'lehre/anrechnung_genehmigen:rw', 'requestRecommendation' => 'lehre/anrechnung_genehmigen:rw' @@ -76,10 +77,19 @@ class approveAnrechnungUebersicht extends Auth_Controller { show_error(getError($studiengang_kz_arr)); } - + + $hasReadOnlyAccess = + $this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN, 's') + && !$this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN, 'suid'); + + // This permission is checked here to disable create Anrechnung button, if permission is not given + $hasCreateAnrechnungAccess = $this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_ANLEGEN, 's'); + $viewData = array( 'studiensemester_selected' => $studiensemester_kurzbz, - 'studiengaenge_entitled' => $studiengang_kz_arr + 'studiengaenge_entitled' => $studiengang_kz_arr, + 'hasReadOnlyAccess' => $hasReadOnlyAccess, + 'hasCreateAnrechnungAccess' => $hasCreateAnrechnungAccess ); $this->load->view('lehre/anrechnung/approveAnrechnungUebersicht.php', $viewData); @@ -239,7 +249,7 @@ class approveAnrechnungUebersicht extends Auth_Controller } // Check if user is entitled to read dms doc - self::_checkIfEntitledToReadDMSDoc($dms_id); + $this->_checkIfEntitledToReadDMSDoc($dms_id); // Set filename to be used on downlaod $filename = $this->anrechnunglib->setFilenameOnDownload($dms_id); @@ -281,19 +291,14 @@ class approveAnrechnungUebersicht extends Auth_Controller { show_error('Failed loading Lehrveranstaltung'); } + + $studiengang_kz = $result->studiengang_kz; - // Get STGL - $result = $this->StudiengangModel->getLeitung($result->studiengang_kz); - - if($result = getData($result)[0]) - { - if ($result->uid == $this->_uid) - { - return; - } - } - - show_error('You are not entitled to read this document'); + // Check if user is entitled + if (!$this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN, 's', $studiengang_kz)) + { + show_error('You are not entitled to read this document'); + } } /** @@ -376,23 +381,24 @@ class approveAnrechnungUebersicht extends Auth_Controller $this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel'); $result = $this->LehrveranstaltungModel->getLecturersByLv($anrechnung['studiensemester_kurzbz'], $anrechnung['lehrveranstaltung_id']); - if (!$result = getData($result)) + if (!hasData($result)) { show_error('Failed retrieving lectors of Lehrveranstaltung'); } + $lecturersByLv = getData($result); + // Check if lv has LV-Leitung - $key = array_search(true, array_column($result, 'lvleiter')); - + $key = array_search(true, array_column($lecturersByLv, 'lvleiter')); // If lv has LV-Leitung, keep only the one if ($key !== false) { - $lector_arr[]= $result[$key]; + $lector_arr[]= $lecturersByLv[$key]; } // ...otherwise keep all lectors else { - $lector_arr = array_merge($lector_arr, $result); + $lector_arr = array_merge($lector_arr, $lecturersByLv); } } diff --git a/application/controllers/lehre/anrechnung/RequestAnrechnung.php b/application/controllers/lehre/anrechnung/RequestAnrechnung.php index 45a770cf5..bc886a876 100644 --- a/application/controllers/lehre/anrechnung/RequestAnrechnung.php +++ b/application/controllers/lehre/anrechnung/RequestAnrechnung.php @@ -80,7 +80,7 @@ class requestAnrechnung extends Auth_Controller $prestudent_id = getData($result)[0]->prestudent_id; // Check if application deadline is expired - $is_expired = self::_checkAntragDeadline( + $is_expired = self::_isExpired( $this->config->item('submit_application_start'), $this->config->item('submit_application_end'), $studiensemester_kurzbz @@ -226,10 +226,10 @@ class requestAnrechnung extends Auth_Controller * @param $start Start date for application submission. * @param $ende End date for application submission. * @param $studiensemester_kurzbz - * @return bool True if today is not during the start- and ending deadlines (= if is expired) + * @return bool True if deadline is expired * @throws Exception */ - private function _checkAntragDeadline($start, $ende, $studiensemester_kurzbz) + private function _isExpired($start, $ende, $studiensemester_kurzbz) { $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); @@ -253,8 +253,8 @@ class requestAnrechnung extends Auth_Controller $start = new DateTime($start); $ende = new DateTime($ende); - // True if today is not during the start- and ending deadlines (= if is expired) - return ($today <= $start || $today >= $ende); + // True if expired + return ($today < $start || $today > $ende); } /** @@ -324,8 +324,8 @@ class requestAnrechnung extends Auth_Controller private function _LVhasBlockingGrades($studiensemester_kurzbz, $lehrveranstaltung_id) { // Get Note of Lehrveranstaltung - $this->load->model('education/Lvgesamtnote_model', 'LvgesamtnoteModel'); - $result = $this->LvgesamtnoteModel->load(array( + $this->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel'); + $result = $this->ZeugnisnoteModel->load(array( 'student_uid' => $this->_uid, 'studiensemester_kurzbz' => $studiensemester_kurzbz, 'lehrveranstaltung_id' => $lehrveranstaltung_id diff --git a/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php b/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php index 78175f4e6..7981f0ac8 100644 --- a/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php +++ b/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php @@ -79,7 +79,7 @@ class reviewAnrechnungDetail extends Auth_Controller // Get Anrechung data $anrechnungData = $this->anrechnunglib->getAnrechnungData($anrechnung_id); - + // Get Antrag data $antragData = $this->anrechnunglib->getAntragData( $anrechnungData->prestudent_id, @@ -110,7 +110,7 @@ class reviewAnrechnungDetail extends Auth_Controller { return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - + // Get lectors person data if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0]) { @@ -218,10 +218,10 @@ class reviewAnrechnungDetail extends Auth_Controller // Check if user is entitled to read dms doc self::_checkIfEntitledToReadDMSDoc($dms_id); - + // Set filename to be used on downlaod $filename = $this->anrechnunglib->setFilenameOnDownload($dms_id); - + // Download file $this->dmslib->download($dms_id, $filename); } @@ -320,7 +320,12 @@ class reviewAnrechnungDetail extends Auth_Controller foreach ($studiengang_kz_arr as $studiengang_kz) { // Get STGL mail address, if available, otherwise get assistance mail address - list ($to, $vorname) = $this->_getSTGLMailAddress($studiengang_kz); + $stgmail = $this->_getSTGLMailAddress($studiengang_kz); + + if(isSuccess($stgmail) && hasData($stgmail)) + list ($to, $vorname) = getData($stgmail)[0]; + else + show_error ('Failed retrieving DegreeProgram Mail'); // Get full name of lector $this->load->model('person/Person_model', 'PersonModel'); @@ -361,24 +366,28 @@ class reviewAnrechnungDetail extends Auth_Controller $result = $this->StudiengangModel->getLeitung($stg_kz); // Get STGL mail address, if available - if (hasData($result)) + if (isSuccess($result) && hasData($result)) { - return array( + return success(array( $result->retval[0]->uid. '@'. DOMAIN, $result->retval[0]->vorname - ); + )); } // ...otherwise get assistance mail address else { $result = $this->StudiengangModel->load($stg_kz); - if (hasData($result)) + if (isSuccess($result) && hasData($result)) { - return array( + return success(array( $result->retval[0]->email, '' - ); + )); + } + else + { + return error('Keine E-Mail für diesen Stg gefunden'); } } } diff --git a/application/controllers/lehre/anrechnung/ReviewAnrechnungUebersicht.php b/application/controllers/lehre/anrechnung/ReviewAnrechnungUebersicht.php index cd0b7afaf..e5475d0d0 100644 --- a/application/controllers/lehre/anrechnung/ReviewAnrechnungUebersicht.php +++ b/application/controllers/lehre/anrechnung/ReviewAnrechnungUebersicht.php @@ -5,15 +5,15 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); class reviewAnrechnungUebersicht extends Auth_Controller { const BERECHTIGUNG_ANRECHNUNG_EMPFEHLEN = 'lehre/anrechnung_empfehlen'; - + const APPROVE_ANRECHNUNG_URI = '/lehre/anrechnung/ApproveAnrechnungUebersicht'; - + const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP'; const ANRECHNUNGSTATUS_PROGRESSED_BY_KF = 'inProgressKF'; const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor'; const ANRECHNUNGSTATUS_APPROVED = 'approved'; const ANRECHNUNGSTATUS_REJECTED = 'rejected'; - + public function __construct() { // Set required permissions @@ -25,24 +25,24 @@ class reviewAnrechnungUebersicht extends Auth_Controller 'dontRecommend' => 'lehre/anrechnung_empfehlen:rw' ) ); - + // Load models $this->load->model('education/Anrechnung_model', 'AnrechnungModel'); $this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel'); $this->load->model('content/DmsVersion_model', 'DmsVersionModel'); $this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel'); - + // Load libraries $this->load->library('WidgetLib'); $this->load->library('PermissionLib'); $this->load->library('AnrechnungLib'); $this->load->library('DmsLib'); - + // Load helpers $this->load->helper('form'); $this->load->helper('url'); $this->load->helper('hlp_sancho_helper'); - + // Load language phrases $this->loadPhrases( array( @@ -54,12 +54,12 @@ class reviewAnrechnungUebersicht extends Auth_Controller 'table' ) ); - + $this->_setAuthUID(); - + $this->setControllerId(); } - + public function index() { // Get study semester @@ -70,14 +70,14 @@ class reviewAnrechnungUebersicht extends Auth_Controller $result = $this->StudiensemesterModel->getNearest(); $studiensemester_kurzbz = getData($result)[0]->studiensemester_kurzbz; } - + $viewData = array( 'studiensemester_selected' => $studiensemester_kurzbz ); - + $this->load->view('lehre/anrechnung/reviewAnrechnungUebersicht.php', $viewData); } - + /** * Recommend Anrechnungen. */ @@ -103,7 +103,7 @@ class reviewAnrechnungUebersicht extends Auth_Controller ); } } - + // Output json to ajax if (isset($json) && !isEmptyArray($json)) { @@ -123,19 +123,19 @@ class reviewAnrechnungUebersicht extends Auth_Controller return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt')); } } - + /** * Dont recommend Anrechnungen. */ public function dontRecommend() { $data = $this->input->post('data'); - + if(isEmptyArray($data)) { return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - + foreach ($data as $item) { // Approve Anrechnung @@ -149,7 +149,7 @@ class reviewAnrechnungUebersicht extends Auth_Controller ); } } - + // Output json to ajax if (isset($json) && !isEmptyArray($json)) { @@ -158,7 +158,7 @@ class reviewAnrechnungUebersicht extends Auth_Controller { show_error('Failed sending emails'); } - + return $this->outputJsonSuccess($json); } else @@ -166,7 +166,7 @@ class reviewAnrechnungUebersicht extends Auth_Controller return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt')); } } - + /** * Download and open uploaded document (Nachweisdokument). */ @@ -178,28 +178,28 @@ class reviewAnrechnungUebersicht extends Auth_Controller { show_error('Wrong parameter'); } - + // Check if user is entitled to read dms doc self::_checkIfEntitledToReadDMSDoc($dms_id); - + // Set filename to be used on downlaod $filename = $this->anrechnunglib->setFilenameOnDownload($dms_id); - + // Download file $this->dmslib->download($dms_id, $filename); } - - + + /** * 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'); } - + /** * Check if user is entitled to read dms doc * @param $dms_id @@ -207,15 +207,15 @@ class reviewAnrechnungUebersicht extends Auth_Controller private function _checkIfEntitledToReadDMSDoc($dms_id) { $result = $this->AnrechnungModel->loadWhere(array('dms_id' => $dms_id)); - + if(!$result = getData($result)[0]) { show_error('Failed retrieving Anrechnung'); } - + $result = $this->LehrveranstaltungModel ->getLecturersByLv($result->studiensemester_kurzbz, $result->lehrveranstaltung_id); - + if($result = getData($result)) { $entitled_lector_arr = array_column($result, 'uid'); @@ -225,10 +225,10 @@ class reviewAnrechnungUebersicht extends Auth_Controller return; } } - + show_error('You are not entitled to read this document'); } - + /** * Send mails to STGL (if not present then to STGL assistance) * @param $mail_params @@ -239,36 +239,41 @@ class reviewAnrechnungUebersicht extends Auth_Controller { // Get studiengaenge $studiengang_kz_arr = array(); - + foreach ($mail_params as $item) { $this->AnrechnungModel->addSelect('studiengang_kz'); $this->AnrechnungModel->addJoin('public.tbl_prestudent', 'prestudent_id'); - + $studiengang_kz_arr[]= $this->AnrechnungModel->load($item['anrechnung_id'])->retval[0]->studiengang_kz; } - + $studiengang_kz_arr = array_unique($studiengang_kz_arr); - + // Send mail to STGL of each studiengang foreach ($studiengang_kz_arr as $studiengang_kz) { // Get STGL mail address, if available, otherwise get assistance mail address - list ($to, $vorname) = $this->_getSTGLMailAddress($studiengang_kz); - + $stgmail = $this->_getSTGLMailAddress($studiengang_kz); + + if(isSuccess($stgmail) && hasData($stgmail)) + list ($to, $vorname) = getData($stgmail)[0]; + else + show_error ('Failed retrieving DegreeProgram Mail'); + // Get full name of lector $this->load->model('person/Person_model', 'PersonModel'); if (!$lector_name = getData($this->PersonModel->getFullName($this->_uid))) { show_error ('Failed retrieving person'); } - + // Link to Antrag genehmigen $url = CIS_ROOT. 'cis/index.php?menu='. CIS_ROOT. 'cis/menu.php?content_id=&content='. CIS_ROOT. index_page(). self::APPROVE_ANRECHNUNG_URI; - + // Prepare mail content $body_fields = array( 'vorname' => $vorname, @@ -276,7 +281,7 @@ class reviewAnrechnungUebersicht extends Auth_Controller 'empfehlung' => $empfehlung ? 'positive' : 'negative', 'link' => anchor($url, 'Anrechnungsanträge Übersicht') ); - + sendSanchoMail( 'AnrechnungEmpfehlungAbgeben', $body_fields, @@ -284,37 +289,41 @@ class reviewAnrechnungUebersicht extends Auth_Controller 'Anerkennung nachgewiesener Kenntnisse: Empfehlung wurde abgegeben' ); } - + return true; } - + // Get STGL mail address, if available, otherwise get assistance mail address private function _getSTGLMailAddress($stg_kz) { $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); $result = $this->StudiengangModel->getLeitung($stg_kz); - + // Get STGL mail address, if available - if (hasData($result)) + if (isSuccess($result) && hasData($result)) { - return array( + return success(array( $result->retval[0]->uid. '@'. DOMAIN, $result->retval[0]->vorname - ); + )); } // ...otherwise get assistance mail address else { $result = $this->StudiengangModel->load($stg_kz); - - if (hasData($result)) + + if (isSuccess($result) && hasData($result)) { - return array( + return success(array( $result->retval[0]->email, '' - ); + )); + } + else + { + return error('Keine E-Mail für diesen Stg gefunden'); } } } - -} \ No newline at end of file + +} diff --git a/application/controllers/system/FAS_UDF.php b/application/controllers/system/FAS_UDF.php index febe266c7..ecaa44393 100644 --- a/application/controllers/system/FAS_UDF.php +++ b/application/controllers/system/FAS_UDF.php @@ -31,7 +31,7 @@ class FAS_UDF extends Auth_Controller if (isset($person_id) && is_numeric($person_id)) { - if ($this->PersonModel->hasUDF()) + if ($this->PersonModel->udfsExistAndDefined()) { $personUdfs = $this->PersonModel->getUDFs($person_id); $data['person_id'] = $person_id; @@ -41,7 +41,7 @@ class FAS_UDF extends Auth_Controller if (isset($prestudent_id) && is_numeric($prestudent_id)) { - if ($this->PrestudentModel->hasUDF()) + if ($this->PrestudentModel->udfsExistAndDefined()) { $prestudentUdfs = $this->PrestudentModel->getUDFs($prestudent_id); $data['prestudent_id'] = $prestudent_id; diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index cd88f814a..25ee96b60 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -20,6 +20,7 @@ class InfoCenter extends Auth_Controller const INDEX_PAGE = 'index'; const FREIGEGEBEN_PAGE = 'freigegeben'; const REIHUNGSTESTABSOLVIERT_PAGE = 'reihungstestAbsolviert'; + const ABGEWIESEN_PAGE = 'abgewiesen'; const SHOW_DETAILS_PAGE = 'showDetails'; const SHOW_ZGV_DETAILS_PAGE = 'showZGVDetails'; const ZGV_UBERPRUEFUNG_PAGE = 'ZGVUeberpruefung'; @@ -107,6 +108,7 @@ class InfoCenter extends Auth_Controller array( 'index' => 'infocenter:r', 'freigegeben' => 'infocenter:r', + 'abgewiesen' => 'infocenter:r', 'reihungstestAbsolviert' => 'infocenter:r', 'showDetails' => 'infocenter:r', 'showZGVDetails' => 'lehre/zgvpruefung:r', @@ -203,6 +205,16 @@ class InfoCenter extends Auth_Controller $this->load->view('system/infocenter/infocenterFreigegeben.php'); } + /** + * Abgewiesen page of the InfoCenter tool + */ + public function abgewiesen() + { + $this->_setNavigationMenu(self::ABGEWIESEN_PAGE); // define the navigation menu for this page + + $this->load->view('system/infocenter/infocenterAbgewiesen.php'); + } + /** * */ @@ -297,6 +309,13 @@ class InfoCenter extends Auth_Controller } $persondata = $this->_loadPersonData($person_id); + + $checkPerson = $this->PersonModel->checkDuplicate($person_id); + + if (isError($checkPerson)) show_error(getError($checkPerson)); + + $duplicate = array('duplicated' => getData($checkPerson)); + $prestudentdata = $this->_loadPrestudentData($person_id); $this->DokumentModel->addOrder('bezeichnung'); @@ -305,7 +324,8 @@ class InfoCenter extends Auth_Controller $data = array_merge( $persondata, $prestudentdata, - $dokumentdata + $dokumentdata, + $duplicate ); $data[self::FHC_CONTROLLER_ID] = $this->getControllerId(); @@ -540,8 +560,10 @@ class InfoCenter extends Auth_Controller /** * Sendet bei einer neuen ZGV Prüfung die Mail raus an den Studiengang */ - private function sendZgvMail($mail, $typ){ + private function sendZgvMail($mail, $typ, $person){ $data = array( + 'vorname' => $person->vorname, + 'nachname' => $person->nachname, 'link' => site_url('system/infocenter/ZGVUeberpruefung') ); @@ -637,6 +659,16 @@ class InfoCenter extends Auth_Controller if (isEmptyString($prestudent_id) || isEmptyString($person_id)) $this->terminateWithJsonError('Prestudentid OR/AND Personid missing'); + $person = $this->PersonModel->load($person_id); + + if (isError($person)) + $this->terminateWithJsonError(getError($person)); + + if (!hasData($person)) + $this->terminateWithJsonError('Person existiert nicht.'); + + $person = getData($person)[0]; + $zgv = $this->ZGVPruefungStatusModel->getZgvStatusByPrestudent($prestudent_id); $data = $this->_getPersonAndStudiengangFromPrestudent($prestudent_id); @@ -668,7 +700,7 @@ class InfoCenter extends Auth_Controller $this->_log($person_id, 'updatezgv', array($zgv[0]->zgvpruefung_id, 'pruefung_stg')); if (isSuccess($insert)) - $this->sendZgvMail($mail, $typ); + $this->sendZgvMail($mail, $typ, $person); elseif (isError($insert)) $this->terminateWithJsonError('Fehler beim Speichern'); }else @@ -694,7 +726,7 @@ class InfoCenter extends Auth_Controller $this->_log($person_id, 'newzgv', array($zgvpruefung_id)); if (isSuccess($result)) - $this->sendZgvMail($mail, $typ); + $this->sendZgvMail($mail, $typ, $person); elseif (isError($result)) $this->terminateWithJsonError('Fehler beim Speichern'); } @@ -734,7 +766,7 @@ class InfoCenter extends Auth_Controller if (hasData($lastStatus) && hasData($statusgrresult)) { - //check if still Interessent + //check if still Interessent, Bewerber or Wartender if ($lastStatus->retval[0]->status_kurzbz === self::INTERESSENTSTATUS || $lastStatus->retval[0]->status_kurzbz === self::BEWERBERSTATUS || $lastStatus->retval[0]->status_kurzbz === self::WARTENDER) @@ -913,7 +945,8 @@ class InfoCenter extends Auth_Controller $this->_log($person_id, 'freigegeben', $logparams); - $this->_sendFreigabeMail($prestudent_id); + if (is_numeric($statusgrund_id) || $logdata['studiengang_typ'] === 'm') + $this->_sendFreigabeMail($prestudent_id); } } } @@ -1191,6 +1224,10 @@ class InfoCenter extends Auth_Controller { $this->_setNavigationMenu(self::REIHUNGSTESTABSOLVIERT_PAGE); } + elseif (strpos($navigation_page, self::ABGEWIESEN_PAGE) !== false) + { + $this->_setNavigationMenu(self::ABGEWIESEN_PAGE); + } $this->outputJsonSuccess('success'); } @@ -1414,12 +1451,14 @@ class InfoCenter extends Auth_Controller $freigegebenLink = site_url(self::INFOCENTER_URI.'/'.self::FREIGEGEBEN_PAGE); $reihungstestAbsolviertLink = site_url(self::INFOCENTER_URI.'/'.self::REIHUNGSTESTABSOLVIERT_PAGE); + $abgewiesenLink = site_url(self::INFOCENTER_URI.'/'.self::ABGEWIESEN_PAGE); $currentFilterId = $this->input->get(self::FILTER_ID); if (isset($currentFilterId)) { $freigegebenLink .= '?'.self::PREV_FILTER_ID.'='.$currentFilterId; $reihungstestAbsolviertLink .= '?'.self::PREV_FILTER_ID.'='.$currentFilterId; + $abgewiesenLink .= '?'.self::PREV_FILTER_ID.'='.$currentFilterId; } $this->navigationlib->setSessionMenu( @@ -1458,6 +1497,18 @@ class InfoCenter extends Auth_Controller null, // subscriptLinkValue '', // target 20 // sort + ), + 'abgewiesen' => $this->navigationlib->oneLevel( + 'Abgewiesene', // description + $abgewiesenLink, // link + null, // children + 'close', // icon + null, // subscriptDescription + false, // expand + null, // subscriptLinkClass + null, // subscriptLinkValue + '', // target + 30 // sort ) ) ); @@ -1483,6 +1534,8 @@ class InfoCenter extends Auth_Controller } if ($origin_page === self::ZGV_UBERPRUEFUNG_PAGE) $link = site_url(self::ZGV_UEBERPRUEFUNG_URI); + if ($origin_page === self::ABGEWIESEN_PAGE) + $link = site_url(self::INFOCENTER_URI.'/'.self::ABGEWIESEN_PAGE); $prevFilterId = $this->input->get(self::PREV_FILTER_ID); if (isset($prevFilterId)) @@ -1520,6 +1573,7 @@ class InfoCenter extends Auth_Controller $homeLink = site_url(self::INFOCENTER_URI.'/'.self::INDEX_PAGE); $freigegebenLink = site_url(self::INFOCENTER_URI.'/'.self::FREIGEGEBEN_PAGE); $absolviertLink = site_url(self::INFOCENTER_URI.'/'.self::REIHUNGSTESTABSOLVIERT_PAGE); + $abgewiesenLink = site_url(self::INFOCENTER_URI.'/'.self::ABGEWIESEN_PAGE); $prevFilterId = $this->input->get(self::PREV_FILTER_ID); if (isset($prevFilterId)) { @@ -1578,6 +1632,24 @@ class InfoCenter extends Auth_Controller ) ); } + if($page == self::ABGEWIESEN_PAGE) + { + $this->navigationlib->setSessionElementMenu( + 'abgewiesen', + $this->navigationlib->oneLevel( + 'Abgewiesene', // description + $abgewiesenLink, // link + null, // children + 'close', // icon + null, // subscriptDescription + false, // expand + null, // subscriptLinkClass + null, // subscriptLinkValue + '', // target + 40 // sort + ) + ); + } } /** @@ -1648,9 +1720,15 @@ class InfoCenter extends Auth_Controller if (isset($locked->retval[0]->uid)) { - $lockedby = $locked->retval[0]->uid; - if ($lockedby !== $this->_uid) + if (!$lockedby = getData($this->PersonModel->getFullName($locked->retval[0]->uid))) + { + show_error('Failed retrieving person'); + } + + if ($locked->retval[0]->uid !== $this->_uid) + { $lockedbyother = true; + } } $stammdaten = $this->PersonModel->getPersonStammdaten($person_id, true); @@ -2134,17 +2212,18 @@ class InfoCenter extends Auth_Controller { $statusgrund = $this->input->post('statusgrund'); $studiengang = $this->input->post('studiengang'); + $abgeschickt = $this->input->post('abgeschickt'); $personen = $this->input->post('personen'); $studienSemester = $this->variablelib->getVar('infocenter_studiensemester'); - if ($statusgrund === 'null' || $studiengang === 'null' || empty($personen)) - $this->terminateWithJsonError("Bitte Statusgrund, Studiengang und Personen auswählen."); + if ($statusgrund === 'null' || $studiengang === 'null' || $abgeschickt === 'null' || empty($personen)) + $this->terminateWithJsonError("Bitte füllen Sie alle Felder aus"); foreach($personen as $person) { - $prestudent = $this->PrestudentModel->getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester); + $prestudent = $this->PrestudentModel->getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester, $abgeschickt); - if(!hasData($prestudent)) + if (!hasData($prestudent)) continue; $prestudentData = getData($prestudent); diff --git a/application/controllers/system/issues/Issues.php b/application/controllers/system/issues/Issues.php new file mode 100644 index 000000000..e0103cfec --- /dev/null +++ b/application/controllers/system/issues/Issues.php @@ -0,0 +1,166 @@ + array(self::BERECHTIGUNG_KURZBZ.':r'), + 'changeIssueStatus' => array(self::BERECHTIGUNG_KURZBZ.':rw') + ) + ); + + // Load libraries + $this->load->library('IssuesLib'); + $this->load->library('PermissionLib'); + $this->load->library('WidgetLib'); + + // Load models + $this->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel'); + $this->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel'); + + $this->loadPhrases( + array( + 'global', + 'ui', + 'filter', + 'lehre', + 'person', + 'fehlermonitoring' + ) + ); + + $this->_setAuthUID(); // sets property uid + } + + public function index() + { + $oes_for_issues = $this->_getOesForIssues(); + + $this->load->view( + 'system/issues/issues', + $oes_for_issues + ); + } + + /** + * Initializes issues status change + */ + public function changeIssueStatus() + { + $issue_ids = $this->input->post('issue_ids'); + $status_kurzbz = $this->input->post('status_kurzbz'); + $user = $this->_uid; + + $errors = array(); + foreach ($issue_ids as $issue_id) + { + switch ($status_kurzbz) + { + case IssuesLib::STATUS_NEU: + $changeIssueMethod = 'setNeu'; + break; + case IssuesLib::STATUS_IN_BEARBEITUNG: + $changeIssueMethod = 'setInBearbeitung'; + break; + case IssuesLib::STATUS_BEHOBEN: + $changeIssueMethod = 'setBehoben'; + break; + default: + $changeIssueMethod = null; + break; + } + + if (isEmptyString($changeIssueMethod)) + $errors[] = error("Invalid issue status given"); + else + { + $issueRes = $this->issueslib->{$changeIssueMethod}($issue_id, $user); + + if (isError($issueRes)) + $errors[] = getError($issueRes); + } + } + + if (!isEmptyArray($errors)) + $this->outputJsonError(implode(", ", $errors)); + else + $this->outputJsonSuccess("Status successfully refreshed"); + } + + /** + * 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'); + } + + /** + * Gets oes of logged in user, which are needed to display issues of the user. + * This includes oes assigned by a funktio and as the issue permission. + * @return array + */ + private function _getOesForIssues() + { + // get oes of uid for which there is a current funktion + $all_funktionen_oe_kurzbz = array(); + $oe_kurzbz_for_funktion = array(); + $benutzerfunktionRes = $this->BenutzerfunktionModel->getBenutzerFunktionByUid($this->_uid, null, date('Y-m-d'), date('Y-m-d')); + + if (isError($benutzerfunktionRes)) + show_error(getError($benutzerfunktionRes)); + + if (hasData($benutzerfunktionRes)) + { + foreach (getData($benutzerfunktionRes) as $benutzerfunktion) + { + $all_funktionen_oe_kurzbz[$benutzerfunktion->oe_kurzbz][] = $benutzerfunktion->funktion_kurzbz; + + // separate oes for the funktion needed for displaying issues + if ($benutzerfunktion->funktion_kurzbz == self::FUNKTION_KURZBZ) + { + $oe_kurzbz_for_funktion[] = $benutzerfunktion->oe_kurzbz; + + // permission also for all oes under the oe for which funktion is assigend + $childOesFunktionRes = $this->OrganisationseinheitModel->getChilds($benutzerfunktion->oe_kurzbz); + + if (isError($childOesFunktionRes)) + show_error(getError($childOesFunktionRes)); + + if (hasData($childOesFunktionRes)) + { + $childOesFunktion = getData($childOesFunktionRes); + + foreach ($childOesFunktion as $childOeFunktion) + { + if (!in_array($childOeFunktion->oe_kurzbz, $oe_kurzbz_for_funktion)) + $oe_kurzbz_for_funktion[] = $childOeFunktion->oe_kurzbz; + } + } + } + } + } + + // add oes for which there is the "manage issues" Berechtigung + if (!$oe_kurzbz_berechtigt = $this->permissionlib->getOE_isEntitledFor(self::BERECHTIGUNG_KURZBZ)) + show_error('No permission or error when checking permissions'); + + $all_oe_kurzbz_berechtigt = array_unique(array_merge($oe_kurzbz_for_funktion, $oe_kurzbz_berechtigt)); + + return array( + 'all_funktionen_oe_kurzbz' => $all_funktionen_oe_kurzbz, + 'all_oe_kurzbz_berechtigt' => $all_oe_kurzbz_berechtigt + ); + } +} diff --git a/application/controllers/widgets/UDF.php b/application/controllers/widgets/UDF.php index 5b4c45776..26c30293c 100644 --- a/application/controllers/widgets/UDF.php +++ b/application/controllers/widgets/UDF.php @@ -26,9 +26,6 @@ class UDF extends FHC_Controller // Loads the UDFLib with HTTP GET/POST parameters $this->_loadUDFLib(); - - // Checks if the caller is allow to use this UDF widget - $this->_isAllowed(); } //------------------------------------------------------------------------------------------------------------------ @@ -39,7 +36,6 @@ class UDF extends FHC_Controller */ public function saveUDFs() { - $udfUniqueId = $this->input->post(self::UDF_UNIQUE_ID); $udfs = $this->input->post(UDFLib::UDFS_ARG_NAME); if (!isEmptyString($udfs)) @@ -47,7 +43,7 @@ class UDF extends FHC_Controller $jsonDecodedUDF = json_decode($udfs); if ($jsonDecodedUDF != null) { - $this->outputJson($this->udflib->saveUDFs($udfUniqueId, $jsonDecodedUDF)); + $this->outputJson($this->udflib->saveUDFs($jsonDecodedUDF)); } else { @@ -63,17 +59,6 @@ class UDF extends FHC_Controller //------------------------------------------------------------------------------------------------------------------ // 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 @@ -105,3 +90,4 @@ class UDF extends FHC_Controller } } } + diff --git a/application/core/DB_Model.php b/application/core/DB_Model.php index 4b89ae5bf..4e555be6c 100644 --- a/application/core/DB_Model.php +++ b/application/core/DB_Model.php @@ -86,7 +86,7 @@ class DB_Model extends CI_Model if (is_null($this->dbTable)) return error('The given database table name is not valid', EXIT_MODEL); // If this table has UDF and the validation of them is ok - if (isError($validate = $this->_manageUDFs($data, $this->dbTable))) return $validate; + if (isError($validate = $this->_prepareUDFsWrite($data, $this->dbTable))) return $validate; // DB-INSERT $insert = $this->db->insert($this->dbTable, $data); @@ -137,7 +137,7 @@ class DB_Model extends CI_Model if (is_null($this->dbTable)) return error('The given database table name is not valid', EXIT_MODEL); // If this table has UDF and the validation of them is ok - if (isError($validate = $this->_manageUDFs($data, $this->dbTable, $id))) return $validate; + if (isError($validate = $this->_prepareUDFsWrite($data, $this->dbTable, $id))) return $validate; $tmpId = $id; @@ -670,6 +670,7 @@ class DB_Model extends CI_Model /** * Returns all the UDF contained in this table ($dbTable) * If no UDF are present, an empty array will be returned + * NOTE: only the UDFs that the logged user is allowed to read are loaded by this method */ public function getUDFs($id, $udfName = null) { @@ -700,9 +701,9 @@ class DB_Model extends CI_Model } /** - * Checks if this table has the field udf_values + * Checks if this table has the field udf_values and if there is a UDF definition for this table */ - public function hasUDF() + public function udfsExistAndDefined() { if ($this->fieldExists(UDFLib::COLUMN_NAME)) { @@ -844,25 +845,25 @@ class DB_Model extends CI_Model } /** - * Wrapper method for UDFLib->manageUDFs + * Wrapper method for UDFLib->prepareUDFsWrite */ - private function _manageUDFs(&$data, $schemaAndTable, $id = null) + private function _prepareUDFsWrite(&$data, $schemaAndTable, $id = null) { - $manageUDFs = success(); + $prepareUDFsWrite = success(); - if ($this->hasUDF()) + if ($this->udfsExistAndDefined()) { if ($id != null) { - $manageUDFs = $this->udflib->manageUDFs($data, $this->dbTable, $this->getUDFs($id)); + $prepareUDFsWrite = $this->udflib->prepareUDFsWrite($data, $this->dbTable, $this->_getUDFsNoPerms($id)); } else { - $manageUDFs = $this->udflib->manageUDFs($data, $this->dbTable); + $prepareUDFsWrite = $this->udflib->prepareUDFsWrite($data, $this->dbTable); } } - return $manageUDFs; + return $prepareUDFsWrite; } /** @@ -874,9 +875,10 @@ class DB_Model extends CI_Model */ private function _toPhp($result) { + $udfs = false; // if UDFs are inside the given result set $toPhp = $result; // if there is nothing to convert then return the result from DB - // If it's an object its fields will be parsed to find booleans and arrays types + // If it's an object its fields will be parsed to find booleans, arrays and UDFs types if (is_object($result)) { $toBeConverterdArray = array(); // Fields to be converted @@ -884,40 +886,48 @@ class DB_Model extends CI_Model $this->executedQueryMetaData = $result->field_data(); // Fields information $this->executedQueryListFields = $result->list_fields(); // List of the retrieved fields - for ($i = 0; $i < count($this->executedQueryMetaData); $i++) // Looking for booleans and arrays + // Looking for booleans, arrays and UDFs + foreach ($this->executedQueryMetaData as $eqmd) { // If array type, boolean type OR a UDF - if (strpos($this->executedQueryMetaData[$i]->type, DB_Model::PGSQL_ARRAY_TYPE) !== false - || $this->executedQueryMetaData[$i]->type == DB_Model::PGSQL_BOOLEAN_TYPE - || $this->udflib->isUDFColumn($this->executedQueryMetaData[$i]->name, $this->executedQueryMetaData[$i]->type)) + if (strpos($eqmd->type, DB_Model::PGSQL_ARRAY_TYPE) !== false + || $eqmd->type == DB_Model::PGSQL_BOOLEAN_TYPE + || $this->udflib->isUDFColumn($eqmd->name, $eqmd->type)) { - // Name and type of the field to be converted - $toBeConverted = new stdClass(); - // Set the type of the field to be converted - $toBeConverted->type = $this->executedQueryMetaData[$i]->type; - // Set the name of the field to be converted - $toBeConverted->name = $this->executedQueryMetaData[$i]->name; - // Add the field to be converted to $toBeConverterdArray - array_push($toBeConverterdArray, $toBeConverted); + // If UDFs are inside this result set + if ($this->udflib->isUDFColumn($eqmd->name, $eqmd->type)) + { + $udfs = true; + } + else // all the other cases + { + // Name and type of the field to be converted + $toBeConverted = new stdClass(); + // Set the type of the field to be converted + $toBeConverted->type = $eqmd->type; + // Set the name of the field to be converted + $toBeConverted->name = $eqmd->name; + // Add the field to be converted to $toBeConverterdArray + array_push($toBeConverterdArray, $toBeConverted); + } } } - // If there is something to convert, otherwhise don't lose time - if (count($toBeConverterdArray) > 0) - { - // Returns the array of objects, each of them represents a DB record - $resultsArray = $result->result(); - // Looping on results - for ($i = 0; $i < count($resultsArray); $i++) - { - // Single element - $resultElement = $resultsArray[$i]; - // Looping on fields to be converted - for ($j = 0; $j < count($toBeConverterdArray); $j++) - { - // Single element - $toBeConverted = $toBeConverterdArray[$j]; + // Returns the array of objects, each of them represents a DB record + $resultsArray = $result->result(); + // If in this result set there are UDFs then prepare them + if ($udfs) $this->udflib->prepareUDFsRead($resultsArray, $this->dbTable); + + // If there is something to convert, otherwhise don't waste time + if (!isEmptyArray($toBeConverterdArray)) + { + // Looping on results + foreach ($resultsArray as $resultElement) + { + // Looping on fields to be converted + foreach ($toBeConverterdArray as $toBeConverted) + { // Array type if (strpos($toBeConverted->type, DB_Model::PGSQL_ARRAY_TYPE) !== false) { @@ -931,30 +941,12 @@ class DB_Model extends CI_Model { $resultElement->{$toBeConverted->name} = $this->pgBoolPhp($resultElement->{$toBeConverted->name}); } - // UDF - elseif ($this->udflib->isUDFColumn($toBeConverted->name, $toBeConverted->type)) - { - $jsonValues = json_decode($resultElement->{$toBeConverted->name}); // decode UDFs values - if ($jsonValues != null) // if decode is ok - { - // For every UDF - foreach ($jsonValues as $key => $value) - { - $resultElement->{$key} = $value; // create a new element called like the UDF - } - } - unset($resultElement->{UDFLib::COLUMN_NAME}); // remove udf_values from the response - } } } - // Returns DB data as an array - $toPhp = $resultsArray; - } - // And returns DB data as an array - else - { - $toPhp = $result->result(); } + + // Returns DB data as an array + $toPhp = $resultsArray; } return $toPhp; @@ -998,4 +990,48 @@ class DB_Model extends CI_Model { if ($this->debugMode) $this->loglib->logDebug($this->db->last_query()); } + + /** + * Returns all the UDF contained in this table ($dbTable) + * If no UDF are present, an empty array will be returned + * NOTE: it returns all the UDFs, does _not_ check the permissions + */ + private function _getUDFsNoPerms($id) + { + $udfs = array(); + + $this->db->select(UDFLib::COLUMN_NAME, true); // get only the UDF column + + // Primary key management + $tmpId = $id; + + // Check for composite Primary Key + if (is_array($id)) + { + if (isset($id[0])) + { + $tmpId = $this->_arrayCombine($this->pk, $id); + } + } + elseif ($id != null) + { + $tmpId = array($this->pk => $id); + } + + // Read the record from the table + $result = $this->db->get_where($this->dbTable, $tmpId); + + // If was a success and there are data + if ($result && count($result->result()) == 1) + { + // Get the UDF column and decode it from JSON + $jsonValues = json_decode($result->result()[0]->{UDFLib::COLUMN_NAME}); + + // If the JSON convertion was fine convert the object to an array + if ($jsonValues != null) $udfs = get_object_vars($jsonValues); + } + + return $udfs; + } } + diff --git a/application/core/IIssueResolvedChecker.php b/application/core/IIssueResolvedChecker.php new file mode 100644 index 000000000..82da67ff7 --- /dev/null +++ b/application/core/IIssueResolvedChecker.php @@ -0,0 +1,15 @@ +load->model('system/Issue_model', 'IssueModel'); + + $this->load->library('IssuesLib'); + } + + /** + * Initializes issue resolution. + */ + public function run() + { + $this->logInfo("Issue resolve job started"); + + // load open issues with given errorcodes + $openIssuesRes = $this->IssueModel->getOpenIssues(array_keys($this->_codeLibMappings)); + + // log error if occured + if (isError($openIssuesRes)) + { + $this->logError(getError($openIssuesRes)); + } + else + { + // log info if no data found + if (!hasData($openIssuesRes)) + { + $this->logInfo("No open issues found"); + } + else + { + + $openIssues = getData($openIssuesRes); + + foreach ($openIssues as $issue) + { + if (isset($this->_codeLibMappings[$issue->fehlercode])) + { + $libName = $this->_codeLibMappings[$issue->fehlercode]; + + // add person id and oe kurzbz automatically as params, merge it with additional params + // decode bewerbung_parameter into assoc array + $params = array_merge( + array('issue_id' => $issue->issue_id, 'issue_person_id' => $issue->person_id, 'issue_oe_kurzbz' => $issue->oe_kurzbz), + isset($issue->behebung_parameter) ? json_decode($issue->behebung_parameter, true) : array() + ); + + // if called from extension (extension name set), path includes extension names, otherwise it is the core library folder + $libRootPath = isset($this->_extensionName) ? 'extensions/' . $this->_extensionName . '/' : ''; + $issuesLibPath = $libRootPath . self::ISSUES_FOLDER . '/'; + $issuesLibFilePath = DOC_ROOT . 'application/' . $libRootPath . 'libraries/' . self::ISSUES_FOLDER . '/' . $libName . '.php'; + + // check if library file exists + if (!file_exists($issuesLibFilePath)) + { + // log error and continue with next issue if not + $this->logError("Issue library file " . $issuesLibFilePath . " does not exist"); + continue; + } + + // load library connected to fehlercode + $this->load->library( + $issuesLibPath . $libName + ); + + $lowercaseLibName = mb_strtolower($libName); + + // check if method is defined in libary class + if (!is_callable(array($this->{$lowercaseLibName}, self::CHECK_ISSUE_RESOLVED_METHOD_NAME))) + { + // log error and continue with next issue if not + $this->logError("Method " . self::CHECK_ISSUE_RESOLVED_METHOD_NAME . " is not defined in library $lowercaseLibName"); + continue; + } + + // call the function for checking for issue resolution + $issueResolvedRes = $this->{$lowercaseLibName}->{self::CHECK_ISSUE_RESOLVED_METHOD_NAME}($params); + + if (isError($issueResolvedRes)) + { + $this->logError(getError($issueResolvedRes)); + } + else + { + $issueResolvedData = getData($issueResolvedRes); + + if ($issueResolvedData === true) + { + // set issue to resolved if needed + $behobenRes = $this->issueslib->setBehoben($issue->issue_id, null); + + if (isError($behobenRes)) + $this->logError(getError($behobenRes)); + else + $this->logInfo("Issue " . $issue->issue_id . " successfully resolved"); + } + } + } + } + } + } + + $this->logInfo("Issue resolve job ended"); + } +} diff --git a/application/core/JQW_Controller.php b/application/core/JQW_Controller.php index 361efd998..1bc4cd346 100644 --- a/application/core/JQW_Controller.php +++ b/application/core/JQW_Controller.php @@ -70,6 +70,19 @@ abstract class JQW_Controller extends JOB_Controller return $jobs; } + /** + * To get all the jobs specified by the given parameters + */ + protected function getJobsByTypeStatus($type, $status) + { + $jobs = $this->jobsqueuelib->getJobsByTypeStatus($type, $status); + + // If an error occurred then log it in database + if (isError($jobs)) $this->logError(getError($jobs), array($type, $status)); + + return $jobs; + } + /** * To get all the jobs specified by the given parameters */ diff --git a/application/helpers/hlp_common_helper.php b/application/helpers/hlp_common_helper.php index a7eda8827..7b937d73d 100644 --- a/application/helpers/hlp_common_helper.php +++ b/application/helpers/hlp_common_helper.php @@ -314,32 +314,40 @@ function sanitizeProblemChars($str) $enc = 'UTF-8'; $acentos = array( - 'A' => '/À|Á|Â|Ã|Å/', + 'A' => '/À|Á|Â|Ã|Å|Ă|Ǎ/', 'Ae' => '/Ä/', - 'a' => '/à|á|â|ã|å/', - 'ae'=> '/ä/', - 'C' => '/Ç/', - 'c' => '/ç/', + 'a' => '/à|á|â|ã|å|ă|ǎ/', + 'ae' => '/ä/', + 'C' => '/Ç|Č/', + 'c' => '/ç|č/', 'E' => '/È|É|Ê|Ë/', 'e' => '/è|é|ê|ë/', - 'I' => '/Ì|Í|Î|Ï/', - 'i' => '/ì|í|î|ï/', - 'N' => '/Ñ/', + 'I' => '/Ì|Í|Î|Ï|Ǐ/', + 'i' => '/ì|í|î|ï|ǐ/', + 'N' => '/Ñ|Ň|ň/', 'n' => '/ñ/', - 'O' => '/Ò|Ó|Ô|Õ/', + 'O' => '/Ò|Ó|Ô|Õ|Ǒ/', 'Oe' => '/Ö/', - 'o' => '/ò|ó|ô|õ/', + 'o' => '/ò|ó|ô|õ|ǒ/', 'oe' => '/ö/', - 'U' => '/Ù|Ú|Û/', + 'R' => '/Ř/', + 'r' => '/ř/', + 'S' => '/Š/', + 's' => '/š/', + 'T' => '/Ť/', + 't' => '/ť/', + 'U' => '/Ù|Ú|Û|Ŭ|Ǔ/', 'Ue' => '/Ü/', - 'u' => '/ù|ú|û/', + 'u' => '/ù|ú|û|ŭ|ǔ/', 'ue' => '/ü/', 'Y' => '/Ý/', 'y' => '/ý|ÿ/', + 'Z' => '/Ž/', + 'z' => '/ž/', 'a.' => '/ª/', 'o.' => '/º/', 'ss' => '/ß/' ); - return preg_replace($acentos, array_keys($acentos), htmlentities($str,ENT_NOQUOTES, $enc)); + return preg_replace($acentos, array_keys($acentos), htmlentities($str, ENT_NOQUOTES | ENT_HTML5, $enc)); } diff --git a/application/helpers/hlp_header_helper.php b/application/helpers/hlp_header_helper.php index f8bbb9ad2..203834ebb 100644 --- a/application/helpers/hlp_header_helper.php +++ b/application/helpers/hlp_header_helper.php @@ -39,6 +39,24 @@ function printPageTitle($title) } } +/** + * Print the meta tag http-equiv refresh having as content the value of the given parameter + */ +function printRefreshMeta($refresh) +{ + if ($refresh != null) + { + if (is_numeric($refresh) && $refresh > 0) + { + echo ''; + } + else + { + show_error('The provided refresh parameter has to be a number greater then 0'); + } + } +} + /** * Generates tags for the style sheets you want to include, the parameter could by a string or an array of strings */ diff --git a/application/libraries/AnrechnungLib.php b/application/libraries/AnrechnungLib.php index 3bec62dce..ee197ab05 100644 --- a/application/libraries/AnrechnungLib.php +++ b/application/libraries/AnrechnungLib.php @@ -89,6 +89,7 @@ class AnrechnungLib $antrag_data->vorname = $person->vorname; $antrag_data->nachname = $person->nachname; $antrag_data->matrikelnr = $student->matrikelnr; + $antrag_data->studiengang_kz = $studiengang->studiengang_kz; $antrag_data->stg_bezeichnung = $studiengang->bezeichnung; $antrag_data->lektoren = $lv_lektoren_arr; $antrag_data->zgv = $latest_zgv_bezeichnung; diff --git a/application/libraries/FilterWidgetLib.php b/application/libraries/FilterWidgetLib.php index cdf0cac3c..d9a3428a0 100644 --- a/application/libraries/FilterWidgetLib.php +++ b/application/libraries/FilterWidgetLib.php @@ -203,7 +203,7 @@ class FilterWidgetLib // Loops in the session for all the filter widgets foreach ($filterWidgetsSession as $filterWidget => $filterWidgetData) { - // If this filter widget is not the currrent used filter widget and the it is expired... + // If this filter widget is not the current used filter widget and the it is expired... if ($this->_filterUniqueId != $filterWidget && $filterWidgetData[self::SESSION_TIMEOUT] <= time()) { cleanSessionElement(self::SESSION_NAME, $filterWidget); // ...remove it @@ -232,7 +232,7 @@ class FilterWidgetLib if ($filterId != null && is_numeric($filterId) && $filterId > 0) { $whereParameters = array( - 'filter_id' => $filterId + self::FILTER_ID => $filterId ); } else @@ -279,6 +279,18 @@ class FilterWidgetLib if ($definition == null && $whereParameters != null) { $definition = $this->_ci->FiltersModel->loadWhere($whereParameters); + + // Last chance!!! + if (!hasData($definition)) // If no data have been found until now the tries the most desperate query + { + $this->_ci->FiltersModel->addOrder('filter_id', 'ASC'); // sort on column filter_id to get the oldest + $whereParameters = array( + 'app' => $app, + 'dataset_name' => $datasetName + ); + + $definition = $this->_ci->FiltersModel->loadWhere($whereParameters); + } } return $definition; @@ -712,8 +724,11 @@ class FilterWidgetLib { $this->_ci->load->model('system/Filters_model', 'FiltersModel'); // to remove the filter definitions from DB - // delete it! - $this->_ci->FiltersModel->delete(array('filter_id' => $filterId)); + // Delete it from database + $this->_ci->FiltersModel->delete(array(self::FILTER_ID => $filterId)); + + // Delete it from session + $this->_dropFromSessionFilterWidgetById($filterId); $removeCustomFilter = true; } @@ -735,7 +750,7 @@ class FilterWidgetLib $session = $this->getSession(); // The filter currently stored in session (the one that is currently used) if ($session != null) { - // Loads the Fitlers model + // Loads the Filters model $this->_ci->load->model('system/Filters_model', 'FiltersModel'); // Loads all the filters related to this page (same dataset_name and same app name) @@ -761,7 +776,7 @@ class FilterWidgetLib '%s?%s=%s', site_url($navigationPage), self::FILTER_ID, - $filter->filter_id + $filter->{self::FILTER_ID} ) // link ); @@ -774,7 +789,7 @@ class FilterWidgetLib { $menuEntry['subscriptDescription'] = 'Remove'; $menuEntry['subscriptLinkClass'] = 'remove-custom-filter'; - $menuEntry['subscriptLinkValue'] = $filter->filter_id; + $menuEntry['subscriptLinkValue'] = $filter->{self::FILTER_ID}; $childrenPersonalArray[] = $menuEntry; // adds to personal filters menu array } } @@ -974,5 +989,29 @@ class FilterWidgetLib return $pos; } + + /** + * Remove from the session the given filter widget + */ + private function _dropFromSessionFilterWidgetById($filterId) + { + // Loads the session for all the filter widgets + $filterWidgetsSession = getSession(self::SESSION_NAME); + + // If something is present in session + if ($filterWidgetsSession != null) + { + // Loops in the session for all the filter widgets + foreach ($filterWidgetsSession as $filterWidget => $filterWidgetData) + { + // If this filter widget is not the one that we are looking for + if ($filterWidgetData[self::FILTER_ID] == $filterId) + { + cleanSessionElement(self::SESSION_NAME, $filterWidget); // ...remove it + break; // stop to search + } + } + } + } } diff --git a/application/libraries/IssuesLib.php b/application/libraries/IssuesLib.php new file mode 100644 index 000000000..d6488bc36 --- /dev/null +++ b/application/libraries/IssuesLib.php @@ -0,0 +1,279 @@ +_ci =& get_instance(); + + // Properties default values + $this->_app = 'core'; + $this->_insertvon = 'system'; + $this->_fallbackFehlercode = 'UNKNOWN_ERROR'; + + // If parameters are given then overwrite the default values + if (!isEmptyArray($params)) $this->setConfigs($params); + + // load models + $this->_ci->load->model('system/Issue_model', 'IssueModel'); + $this->_ci->load->model('system/Fehler_model', 'FehlerModel'); + } + + // -------------------------------------------------------------------------------------------------------------- + // Public methods + + /** + * Store configuration parameters for this lib + */ + public function setConfigs($params) + { + // If parameters are given then overwrite the default values + if (!isEmptyArray($params)) + { + if (isset($params[self::APP_INDEX])) $this->_app = $params[self::APP_INDEX]; + if (isset($params[self::INSERTVON_INDEX])) $this->_insertvon = $params[self::INSERTVON_INDEX]; + if (isset($params[self::FALLBACK_FEHLERCODE_INDEX])) $this->_fallbackFehlercode = $params[self::FALLBACK_FEHLERCODE_INDEX]; + } + } + + /** + * Adds an Fhc issue, i.e. an internal, self-defined issue. + * @param string $fehler_kurzbz short unique text name of the issue + * @param int $person_id + * @param string $oe_kurzbz + * @param array $fehlertext_params params for sprint replace of error text in system.tbl_fehler + * @return object success or error + */ + public function addFhcIssue($fehler_kurzbz, $person_id = null, $oe_kurzbz = null, $fehlertext_params = null, $resolution_params = null) + { + $fehlerRes = $this->_ci->FehlerModel->loadWhere(array('fehler_kurzbz' => $fehler_kurzbz)); + + if (hasData($fehlerRes)) + { + $fehlercode = getData($fehlerRes)[0]->fehlercode; + return $this->_addIssue($fehlercode, $person_id, $oe_kurzbz, $fehlertext_params, $resolution_params); + } + else + return error("Error $fehler_kurzbz not found"); + } + + /** + * Adds an external issue, already defined externally by another system. + * @param string $fehlercode_extern the error code in the external system + * @param string $inhalt_extern error text in external system + * @param int $person_id + * @param int $oe_kurzbz + * @param array $fehlertext_params params for replacement of parts of error text + * @param bool $force_predefined if true, only predefined (with entry in fehler table) external issues are added + * @return object success or error + */ + public function addExternalIssue($fehlercode_extern, $inhalt_extern, $person_id = null, $oe_kurzbz = null, $fehlertext_params = null) + { + if (isEmptyString($fehlercode_extern)) + return error("fehlercode_extern missing"); + + // get external fehlercode (unique for each app) + $this->_ci->FehlerModel->addSelect('fehlercode'); + $fehlerRes = $this->_ci->FehlerModel->loadWhere( + array( + 'fehlercode_extern' => $fehlercode_extern, + 'app' => $this->_app + ) + ); + + if (isError($fehlerRes)) + return $fehlerRes; + + // check if there is a predefined custom error for the external issue + if (hasData($fehlerRes)) + { + $fehlerData = getData($fehlerRes)[0]; + // if found, use the code + $fehlercode = $fehlerData->fehlercode; + } + else + { + // if predefined error is not found, insert with fallback code + $fehlercode = $this->_fallbackFehlercode; + } + + // add external issue + return $this->_addIssue($fehlercode, $person_id, $oe_kurzbz, $fehlertext_params, null, $fehlercode_extern, $inhalt_extern); + } + + /** + * Set issue to resolved. + * @param int $issue_id + * @param string $user uid of issue resolver + * @return object success or error + */ + public function setBehoben($issue_id, $user) + { + $data = array( + 'status_kurzbz' => self::STATUS_BEHOBEN, + 'verarbeitetvon' => $user, + 'verarbeitetamum' => date('Y-m-d H:i:s') + ); + + return $this->_changeIssueStatus($issue_id, $data, $user); + } + + /** + * Set issue to in progress. + * @param int $issue_id + * @param string $user uid of issue resovler + * @return object success or error + */ + public function setInBearbeitung($issue_id, $user) + { + $data = array( + 'status_kurzbz' => self::STATUS_IN_BEARBEITUNG, + 'verarbeitetvon' => $user + ); + + return $this->_changeIssueStatus($issue_id, $data, $user); + } + + /** + * Set issue to new. + * @param int $issue_id + * @param string $user uid of issue resolver + * @return object success or error + */ + public function setNeu($issue_id, $user) + { + $data = array( + 'status_kurzbz' => self::STATUS_NEU, + 'verarbeitetvon' => null, + 'verarbeitetamum' => null + ); + + return $this->_changeIssueStatus($issue_id, $data, $user); + } + + /** + * Changes status of an issue. + * @param int $issue_id + * @param array $sdata the data to save, including status + * @param string $user uid of person changing the status (needed for in Bearbeitung and behoben) + * @return success or error + */ + private function _changeIssueStatus($issue_id, $data, $user) + { + if (!isset($issue_id) || !is_numeric($issue_id)) + return error("Issue Id must be set correctly."); + + // check if given status is same as existing + $this->_ci->IssueModel->addSelect('status_kurzbz'); + $currStatus = $this->_ci->IssueModel->load($issue_id); + + if (hasData($currStatus)) + { + if (getData($currStatus)[0]->status_kurzbz == $data['status_kurzbz']) + return success("Same status already set"); + } + else + return error("Error when getting status"); + + $data['updatevon'] = $user; + $data['updateamum'] = date('Y-m-d H:i:s'); + + return $this->_ci->IssueModel->update( + array( + 'issue_id' => $issue_id + ), + $data + ); + } + + /** + * Adds an issue. + * @param $fehlercode + * @param int $person_id + * @param string $oe_kurzbz + * @param array $fehlertext_params + * @param string $resolution_params + * @param string $fehlercode_extern + * @param string $inhalt_extern + * @return object success or error + */ + private function _addIssue($fehlercode, $person_id = null, $oe_kurzbz = null, $fehlertext_params = null, $resolution_params = null, $fehlercode_extern = null, $inhalt_extern = null) + { + if (isEmptyString($person_id) && isEmptyString($oe_kurzbz)) + return error("Person_id or oe_kurzbz must be set."); + + // get fehlertextVorlage and replace it with params + $fehlerRes = $this->_ci->FehlerModel->load($fehlercode); + + if (hasData($fehlerRes)) + { + $fehlertextVorlage = getData($fehlerRes)[0]->fehlertext; + $fehlertext = isEmptyArray($fehlertext_params) ? $fehlertextVorlage : vsprintf($fehlertextVorlage, $fehlertext_params); + + $openIssuesCountRes = $this->_ci->IssueModel->getOpenIssueCount($fehlercode, $person_id, $oe_kurzbz, $fehlercode_extern); + + if (hasData($openIssuesCountRes)) + { + // don't insert if issue is already open + // already open - status new with same fehlercode or same fehlercode-extern (if set) + $openIssueCount = getData($openIssuesCountRes)[0]->anzahl_open_issues; + + if ($openIssueCount == 0) + { + if (isset($resolution_params)) + { + if (is_array($resolution_params)) + { + foreach ($resolution_params as $resolution_key => $resolution_param) + { + if (!is_string($resolution_key)) + return error("Invalid parameter for resolution, must be an associative array"); + } + } + else + return error("Invalid parameters for resolution"); + } + + return $this->_ci->IssueModel->insert( + array( + 'fehlercode' => $fehlercode, + 'fehlercode_extern' => $fehlercode_extern, + 'inhalt' => $fehlertext, + 'inhalt_extern' => $inhalt_extern, + 'person_id' => $person_id, + 'oe_kurzbz' => $oe_kurzbz, + 'datum' => date('Y-m-d H:i:s'), + 'status_kurzbz' => self::STATUS_NEU, + 'behebung_parameter' => isset($resolution_params) ? json_encode($resolution_params) : null, + 'insertvon' => $this->_insertvon + ) + ); + } + else + return success($openIssueCount); + } + else + return error("Number of open issues could not be determined"); + } + else + return error("Error $fehlercode could not be found"); + } +} diff --git a/application/libraries/JobsQueueLib.php b/application/libraries/JobsQueueLib.php index d264f7119..5871a3767 100644 --- a/application/libraries/JobsQueueLib.php +++ b/application/libraries/JobsQueueLib.php @@ -72,6 +72,18 @@ class JobsQueueLib return $this->_ci->JobsQueueModel->loadWhere(array('status' => self::STATUS_NEW, 'type' => $type)); } + /** + * To get all the jobs specified by the given parameters + */ + public function getJobsByTypeStatus($type, $status) + { + $this->_ci->JobsQueueModel->resetQuery(); + + $this->_ci->JobsQueueModel->addOrder('creationtime', 'DESC'); + + return $this->_ci->JobsQueueModel->loadWhere(array('status' => $status, 'type' => $type)); + } + /** * To get all the jobs specified by the given parameters */ diff --git a/application/libraries/UDFLib.php b/application/libraries/UDFLib.php index f9ad7d20d..c5f0d3e98 100644 --- a/application/libraries/UDFLib.php +++ b/application/libraries/UDFLib.php @@ -30,13 +30,14 @@ class UDFLib // ...to specify permissions that are needed to use this TableWidget const REQUIRED_PERMISSIONS_PARAMETER = 'requiredPermissions'; + const PERMISSION_TABLE_METHOD = 'UDFWidget'; // Name for fake method to be checked by the PermissionLib + const PERMISSION_TYPE_READ = 'r'; + const PERMISSION_TYPE_WRITE = 'w'; + // ...to specify the primary key name and value const PRIMARY_KEY_NAME = 'primaryKeyName'; const PRIMARY_KEY_VALUE = 'primaryKeyValue'; - const PERMISSION_TABLE_METHOD = 'UDFWidget'; // Name for fake method to be checked by the PermissionLib - const PERMISSION_TYPE = 'rw'; - // HTML components const LABEL = 'title'; const TITLE = 'description'; @@ -76,10 +77,10 @@ class UDFLib // Public methods /** - * UDFWidget - */ - public function UDFWidget($args, $htmlArgs = array()) - { + * UDFWidget + */ + public function UDFWidget($args, $htmlArgs = array()) + { if ((isset($args[self::SCHEMA_ARG_NAME]) && !isEmptyString($args[self::SCHEMA_ARG_NAME])) && (isset($args[self::TABLE_ARG_NAME]) && !isEmptyString($args[self::TABLE_ARG_NAME]))) { @@ -112,16 +113,17 @@ class UDFLib show_error(self::TABLE_ARG_NAME.' parameter is missing!'); } } - } + } - /** + /** * It renders the HTML of the UDF * * NOTE: When this method is called $widgetData contains different data from * parameter $args in the constructor */ - public function displayUDFWidget(&$widgetData) + public function displayUDFWidget(&$widgetData) { + $field = null; $schema = $widgetData[self::SCHEMA_ARG_NAME]; // schema attribute $table = $widgetData[self::TABLE_ARG_NAME]; // table attribute @@ -133,7 +135,7 @@ class UDFLib $udfResults = $this->_loadUDF($schema, $table); // loads UDF definition if (hasData($udfResults)) { - $udf = $udfResults->retval[0]; // only one record is loaded + $udf = getData($udfResults)[0]; // only one record is loaded if (isset($udf->jsons)) { $jsonSchemas = json_decode($udf->jsons); // decode the json schema @@ -155,7 +157,7 @@ class UDFLib $found = false; // used to check if the field is found or not in the json schema $this->_sortJsonSchemas($jsonSchemasArray); // Sort the list of UDF by sort property - + // Loops through json schemas foreach ($jsonSchemasArray as $jsonSchema) { @@ -169,21 +171,37 @@ class UDFLib { show_error(sprintf('%s.%s: Attribute "name" not present in the json schema', $schema, $table)); } + // If the requiredPermissions property is not present then show an error + if (!isset($jsonSchema->{self::REQUIRED_PERMISSIONS_PARAMETER})) + { + show_error(sprintf('%s.%s: Attribute "requiredPermissions" not present in the json schema', $schema, $table)); + } + + // Set the required permissions for this UDF + $this->_setRequiredPermissions($jsonSchema->{self::NAME}, $jsonSchema->{self::REQUIRED_PERMISSIONS_PARAMETER}); // If a UDF is specified and is present in the json schemas list or no UDF is specified if ((isset($field) && $field == $jsonSchema->{self::NAME}) || !isset($field)) { - // Set attributes using phrases - $this->_setAttributesWithPhrases($jsonSchema, $widgetData[HTMLWidget::HTML_ARG_NAME]); + // If the user has the permissions to read this field + if ($this->_readAllowed($jsonSchema->{self::REQUIRED_PERMISSIONS_PARAMETER})) + { + // Set attributes using phrases + $this->_setAttributesWithPhrases($jsonSchema, $widgetData[HTMLWidget::HTML_ARG_NAME]); - // Set validation attributes - $this->_setValidationAttributes($jsonSchema, $widgetData[HTMLWidget::HTML_ARG_NAME]); + // Set validation attributes + $this->_setValidationAttributes($jsonSchema, $widgetData[HTMLWidget::HTML_ARG_NAME]); - // Set name and id attributes - $this->_setNameAndId($jsonSchema, $widgetData[HTMLWidget::HTML_ARG_NAME]); + // Set name and id attributes + $this->_setNameAndId($jsonSchema, $widgetData[HTMLWidget::HTML_ARG_NAME]); - // Render the HTML for this UDF - $this->_render($jsonSchema, $widgetData); + // Set if the field is in read only mode + $this->_setReadOnly($jsonSchema, $widgetData[HTMLWidget::HTML_ARG_NAME]); + + // Render the HTML for this UDF + $this->_render($jsonSchema, $widgetData); + } + // otherwise the UDF is not displayed // If a UDf is specified and it was found then stop looking through this list if (isset($field) && $field == $jsonSchema->{self::NAME}) @@ -213,12 +231,97 @@ class UDFLib show_error(sprintf('%s.%s: Does not contain "jsons" field', $schema, $table)); } } - } + } /** - * Manage UDFs + * UDFs permissions check and convertion to read them from database */ - public function manageUDFs(&$data, $schemaAndTable, $udfValues = null) + public function prepareUDFsRead(&$data, $schemaAndTable, $udfValues = null) + { + $this->_ci->load->model('system/UDF_model', 'UDFModel'); + + // Retrieves UDFs definitions for this table + $resultUDFsDefinitions = $this->_ci->UDFModel->getUDFsDefinitions($schemaAndTable); + + // If an error occurred while reading from database + if (isError($resultUDFsDefinitions)) + { + $data = array(); // then set data as an empty array + return; // and exit from this method + } + + // If there are no UDFs defined for this table the return + if (!hasData($resultUDFsDefinitions)) return; + + // If not an error and has data, decodes json that define the UDFs for this table + $decodedUDFDefinitions = json_decode( + getData($resultUDFsDefinitions)[0]->{self::COLUMN_JSON_DESCRIPTION} + ); + + // Looping on results, resultElement is an object that represent a database record + foreach ($data as $resultElement) + { + // Decode the JSON column udf_values + $udfColumn = json_decode($resultElement->{self::COLUMN_NAME}); + + // If this is not a valid JSON then skip to the next database record + if ($udfColumn == null) continue; + + // For each UDF column of this database record + foreach (get_object_vars($udfColumn) as $columnName => $columnValue) + { + $udfColumnToBeRemoved = $columnName; // let's try to remove it + + // Loops through the UDFs definitions + foreach ($decodedUDFDefinitions as $decodedUDFDefinition) + { + // If the column exists in the UDF definition + if ($columnName == $decodedUDFDefinition->{self::NAME}) + { + $udfColumnToBeRemoved = null; // then keep it + } + } + + // If in this record have been found a _not_ defined UDF then remove it + if (!isEmptyString($udfColumnToBeRemoved)) unset($udfColumn->{$udfColumnToBeRemoved}); + } + + // Loops through the UDFs definitions + foreach ($decodedUDFDefinitions as $decodedUDFDefinition) + { + // Checks if the requiredPermissions is available and it is a valid array or a valid string + if (isset($decodedUDFDefinition->{self::REQUIRED_PERMISSIONS_PARAMETER}) + && (!isEmptyArray($decodedUDFDefinition->{self::REQUIRED_PERMISSIONS_PARAMETER}) + || !isEmptyString($decodedUDFDefinition->{self::REQUIRED_PERMISSIONS_PARAMETER}))) + { + // Then check if the user has the permissions to read such UDF + if (!$this->_readAllowed($decodedUDFDefinition->{self::REQUIRED_PERMISSIONS_PARAMETER})) + { + // If not then remove the UDF from the result set + unset($udfColumn->{$decodedUDFDefinition->{self::NAME}}); + } + } + else // If not then remove the UDF from the result set + { + unset($udfColumn->{$decodedUDFDefinition->{self::NAME}}); + } + } + + // Add the defined and permitted UDF columns to the record set + foreach (get_object_vars($udfColumn) as $columnName => $columnValue) + { + $resultElement->{$columnName} = $columnValue; + } + + // And finally remove the UDFs column + unset($resultElement->{self::COLUMN_NAME}); + } + } + + /** + * UDFs validation and permissions check to write them into database + */ + public function prepareUDFsWrite(&$data, $schemaAndTable, $udfValues = null) { $validate = success(true); // returned value // Contains a list of validation errors for the UDFs that have not passed the validation @@ -241,18 +344,34 @@ class UDFLib // Decodes json that define the UDFs for this table $decodedUDFDefinitions = json_decode( - $resultUDFsDefinitions->retval[0]->{self::COLUMN_JSON_DESCRIPTION} + getData($resultUDFsDefinitions)[0]->{self::COLUMN_JSON_DESCRIPTION} ); // Loops through the UDFs definitions - for ($i = 0; $i < count($decodedUDFDefinitions); $i++) + foreach ($decodedUDFDefinitions as $decodedUDFDefinition) { - $decodedUDFDefinition = $decodedUDFDefinitions[$i]; // Definition of a single UDF + // Checks if the requiredPermissions is available and it is a valid array or a valid string + if (isset($decodedUDFDefinition->{self::REQUIRED_PERMISSIONS_PARAMETER}) + && (!isEmptyArray($decodedUDFDefinition->{self::REQUIRED_PERMISSIONS_PARAMETER}) + || !isEmptyString($decodedUDFDefinition->{self::REQUIRED_PERMISSIONS_PARAMETER}))) + { + // Then check if the user has the permissions to write such UDF + if (!$this->_writeAllowed($decodedUDFDefinition->{self::REQUIRED_PERMISSIONS_PARAMETER})) + { + // If the logged user has no permissions then remove the UDF + unset($udfsParameters[$decodedUDFDefinition->{self::NAME}]); + } + } + else + { + // If no permissions have been defined for this UDF then remove it + unset($udfsParameters[$decodedUDFDefinition->{self::NAME}]); + } // Loops through the UDFs values that should be stored foreach ($udfsParameters as $key => $val) { - $tmpValidate = success(true); // temporary variable used to store the returned value from _validateUDFs + $tmpValidateArray = array(); // temporary variable used to store the returned value from _validateUDFs // If this is the definition of this UDF if ($decodedUDFDefinition->{self::NAME} == $key) @@ -314,7 +433,7 @@ class UDFLib if ($toBeValidated === true) // Checks if validation should be performed { - $tmpValidate = $this->_validateUDFs( + $tmpValidateArray = $this->_validateUDFs( $decodedUDFDefinition->{self::VALIDATION}, $decodedUDFDefinition->{self::NAME}, $val @@ -324,13 +443,13 @@ class UDFLib } // If validation is ok copy the value that is to be stored into $toBeStoredUDFsArray - if (isSuccess($tmpValidate)) + if (isEmptyArray($tmpValidateArray)) { $toBeStoredUDFsArray[$key] = $val; } - else // otherwise store the validation error in $notValidUDFsArray + else // otherwise store the validation errors in $notValidUDFsArray { - $notValidUDFsArray[] = $tmpValidate; + $notValidUDFsArray = array_merge($notValidUDFsArray, $tmpValidateArray); } } } @@ -344,11 +463,11 @@ class UDFLib } // If the validation of all the supplied UDFs is ok - if (count($notValidUDFsArray) == 0) + if (isEmptyArray($notValidUDFsArray)) { // An update is performed, then in this case it preserves the values // of the UDF that are not updated - if (is_array($udfValues) && count($udfValues) > 0) + if (!isEmptyArray($udfValues)) { foreach ($udfValues as $fieldName => $fieldValue) { @@ -379,7 +498,7 @@ class UDFLib /** * isUDFColumn */ - public function isUDFColumn($columnName, $columnType) + public function isUDFColumn($columnName, $columnType = self::COLUMN_TYPE) { $isUDFColumn = false; @@ -466,7 +585,7 @@ class UDFLib /** * Save UDFs */ - public function saveUDFs($udfUniqueId, $udfs) + public function saveUDFs($udfs) { // Read the all session for this udf widget $session = $this->getSession(); @@ -490,30 +609,80 @@ class UDFLib // Returns the result of the database update operation to save UDFs return $dbModel->update( array($session[self::PRIMARY_KEY_NAME] => $session[self::PRIMARY_KEY_VALUE]), - (array)$udfs + get_object_vars($udfs) ); } - /** - * Checks if at least one of the permissions given as parameter (requiredPermissions) belongs - * to the authenticated user, if confirmed then is allowed to use this UDFWidget. - * If the parameter requiredPermissions is NOT given or is not present in the session, - * then NO one is allow to use this UDFWidget - * Wrapper method to permissionlib->hasAtLeastOne - */ - public function isAllowed($requiredPermissions = null) - { - $this->_ci->load->library('PermissionLib'); // Load permission library - - // Gets the required permissions from the session if they are not provided as parameter - $rq = $requiredPermissions; - if ($rq == null) $rq = $this->getSessionElement(self::REQUIRED_PERMISSIONS_PARAMETER); - - return $this->_ci->permissionlib->hasAtLeastOne($rq, self::PERMISSION_TABLE_METHOD, self::PERMISSION_TYPE); - } - // ------------------------------------------------------------------------------------------------- // Private methods + // + + /** + * Checks if at least one of the permissions given as parameter belongs to the authenticated user in read mode + * Wrapper method to permissionlib->hasAtLeastOne + */ + private function _readAllowed($requiredPermissions) + { + $readAllowed = false; + + // If the user is logged then it is possible to check the permissions + if (isLogged()) + { + $this->_ci->load->library('PermissionLib'); // Load permission library + + $readAllowed = $this->_ci->permissionlib->hasAtLeastOne( + $requiredPermissions, + self::PERMISSION_TABLE_METHOD, + self::PERMISSION_TYPE_READ + ); + } // otherwise it is not possible to check the permissions + + return $readAllowed; + } + + /** + * Checks if at least one of the permissions given as parameter belongs to the authenticated user in write mode + * Wrapper method to permissionlib->hasAtLeastOne + */ + private function _writeAllowed($requiredPermissions) + { + $writeAllowed = false; + + // If the user is logged then it is possible to check the permissions + if (isLogged()) + { + $this->_ci->load->library('PermissionLib'); // Load permission library + + $writeAllowed = $this->_ci->permissionlib->hasAtLeastOne( + $requiredPermissions, + self::PERMISSION_TABLE_METHOD, + self::PERMISSION_TYPE_WRITE + ); + } // otherwise it is not possible to check the permissions + + return $writeAllowed; + } + + /** + * Set an array of required permissions for a UDF into the session + */ + private function _setRequiredPermissions($udfName, $permissions) + { + // Get the session for this UDFWidget + $session = $this->getSession(); + + // If does _not_ exist yet in the session + if (!isset($session[self::REQUIRED_PERMISSIONS_PARAMETER])) + { + $session[self::REQUIRED_PERMISSIONS_PARAMETER] = array(); + } + + // Set the required permission in the session for this UDFWidget + $session[self::REQUIRED_PERMISSIONS_PARAMETER][$udfName] = $permissions; + + // Write into the session + $this->setSession($session); + } /** * Print the block for UDFs @@ -544,12 +713,12 @@ class UDFLib { $udfsParameters = array(); - foreach ($data as $key => $val) + foreach ($data as $columnName => $columnValue) { - if (substr($key, 0, 4) == self::COLUMN_PREFIX) + if ($this->isUDFColumn($columnName)) { - $udfsParameters[$key] = $val; // stores UDF value into property UDFs - unset($data[$key]); // remove from data + $udfsParameters[$columnName] = $columnValue; // stores UDF value into property UDFs + unset($data[$columnName]); // remove from data } } @@ -645,29 +814,39 @@ class UDFLib } } - // If no UDF validation errors were raised, it's a success!! - if (count($returnArrayValidation) == 0) - { - $returnArrayValidation = success(true); - } - return $returnArrayValidation; } - /** - * Set the name and id attribute of the HTML element - */ - private function _setNameAndId($jsonSchema, &$htmlParameters) - { + /** + * Disable the HTML element if in read only mode + */ + private function _setReadOnly($jsonSchema, &$htmlParameters) + { + // If write permissions _not_ exist then set the field as disabled + if (!$this->_writeAllowed($jsonSchema->{self::REQUIRED_PERMISSIONS_PARAMETER})) + { + $htmlParameters[HTMLWidget::DISABLED] = HTMLWidget::DISABLED; // any values is fine + } + else // otherwise restore to default + { + if (isset($htmlParameters[HTMLWidget::DISABLED])) unset($htmlParameters[HTMLWidget::DISABLED]); + } + } + + /** + * Set the name and id attribute of the HTML element + */ + private function _setNameAndId($jsonSchema, &$htmlParameters) + { $htmlParameters[HTMLWidget::HTML_ID] = $jsonSchema->{self::NAME}; $htmlParameters[HTMLWidget::HTML_NAME] = $jsonSchema->{self::NAME}; - } - - /** - * Sort the list of UDF by sort property - */ - private function _sortJsonSchemas(&$jsonSchemasArray) - { + } + + /** + * Sort the list of UDF by sort property + */ + private function _sortJsonSchemas(&$jsonSchemasArray) + { usort($jsonSchemasArray, function ($a, $b) { if (!isset($a->{self::SORT})) { @@ -684,13 +863,13 @@ class UDFLib return ($a->{self::SORT} < $b->{self::SORT}) ? -1 : 1; }); - } - - /** - * Loads the UDF description by the given schema and table - */ - private function _loadUDF($schema, $table) - { + } + + /** + * Loads the UDF description by the given schema and table + */ + private function _loadUDF($schema, $table) + { // Loads UDF model $this->_ci->load->model('system/UDF_model', 'UDFModel'); @@ -703,18 +882,7 @@ class UDFLib if (isError($udfResults)) { - if (is_object($udfResults) && isset($udfResults->retval)) - { - show_error(getError($udfResults)); - } - elseif (is_string($udfResults)) - { - show_error($udfResults); - } - else - { - show_error('UDFWidget: generic error occurred'); - } + show_error(getError($udfResults)); } elseif (!hasData($udfResults)) { @@ -722,13 +890,13 @@ class UDFLib } return $udfResults; - } + } - /** - * Render the HTML for the UDF - */ - private function _render($jsonSchema, &$widgetData) - { + /** + * Render the HTML for the UDF + */ + private function _render($jsonSchema, &$widgetData) + { // Checkbox if ($jsonSchema->{self::TYPE} == 'checkbox') { @@ -759,11 +927,11 @@ class UDFLib { $this->_renderDropdown($jsonSchema, $widgetData, true); } - } + } - /** - * Renders a dropdown element - */ + /** + * Renders a dropdown element + */ private function _renderDropdown($jsonSchema, &$widgetData, $multiple = false) { // Selected element/s @@ -792,7 +960,7 @@ class UDFLib $queryResult = $this->_ci->UDFModel->execReadOnlyQuery($jsonSchema->{self::LIST_VALUES}->sql); if (hasData($queryResult)) { - $parameters = $queryResult->retval; + $parameters = getData($queryResult); } } @@ -805,8 +973,8 @@ class UDFLib } /** - * Renders a textarea element - */ + * Renders a textarea element + */ private function _renderTextarea($jsonSchema, &$widgetData) { $text = null; // text value @@ -823,8 +991,8 @@ class UDFLib } /** - * Renders an input text element - */ + * Renders an input text element + */ private function _renderTextfield($jsonSchema, &$widgetData) { $text = null; // text value @@ -841,8 +1009,8 @@ class UDFLib } /** - * Renders a checkbox element - */ + * Renders a checkbox element + */ private function _renderCheckbox($jsonSchema, &$widgetData) { // Set checkbox value if present in the DB @@ -861,11 +1029,11 @@ class UDFLib $checkboxWidgetUDF->render(); } - /** - * Sets the attributes of the HTML element using the phrases system - */ - private function _setAttributesWithPhrases($jsonSchema, &$htmlParameters) - { + /** + * Sets the attributes of the HTML element using the phrases system + */ + private function _setAttributesWithPhrases($jsonSchema, &$htmlParameters) + { // By default set to null all the attributes $htmlParameters[HTMLWidget::LABEL] = null; $htmlParameters[HTMLWidget::TITLE] = null; @@ -893,7 +1061,7 @@ class UDFLib ); if (hasData($tmpResult)) { - $htmlParameters[HTMLWidget::LABEL] = $tmpResult->retval[0]->text; + $htmlParameters[HTMLWidget::LABEL] = getData($tmpResult)[0]->text; } } @@ -911,7 +1079,7 @@ class UDFLib ); if (hasData($tmpResult)) { - $htmlParameters[HTMLWidget::TITLE] = $tmpResult->retval[0]->text; + $htmlParameters[HTMLWidget::TITLE] = getData($tmpResult)[0]->text; } } @@ -929,17 +1097,17 @@ class UDFLib ); if (hasData($tmpResult)) { - $htmlParameters[HTMLWidget::PLACEHOLDER] = $tmpResult->retval[0]->text; + $htmlParameters[HTMLWidget::PLACEHOLDER] = getData($tmpResult)[0]->text; } } } - } + } - /** - * Sets the validation attributes of the HTML element using the configuration inside the json schema - */ - private function _setValidationAttributes($jsonSchema, &$htmlParameters) - { + /** + * Sets the validation attributes of the HTML element using the configuration inside the json schema + */ + private function _setValidationAttributes($jsonSchema, &$htmlParameters) + { // Validation attributes set by default to null $htmlParameters[HTMLWidget::REGEX] = null; $htmlParameters[HTMLWidget::REQUIRED] = null; @@ -998,3 +1166,4 @@ class UDFLib } } } + diff --git a/application/libraries/VorlageLib.php b/application/libraries/VorlageLib.php index 9679dff1c..d8d443a41 100644 --- a/application/libraries/VorlageLib.php +++ b/application/libraries/VorlageLib.php @@ -114,7 +114,7 @@ class VorlageLib if (!hasData($vorlage)) { // Builds where clause - $where = $this->_where($vorlage_kurzbz, $orgform_kurzbz, $sprache); + $where = $this->_where($vorlage_kurzbz); $vorlage = $this->ci->organisationseinheitlib->treeSearch( 'public', @@ -134,20 +134,11 @@ class VorlageLib /** * _where */ - private function _where($vorlage_kurzbz, $orgform_kurzbz, $sprache) + private function _where($vorlage_kurzbz) { // Builds where clause $where = "vorlage_kurzbz = ".$this->ci->VorlageModel->escape($vorlage_kurzbz); - if (is_null($sprache)) - { - $where .= " AND sprache IS NULL"; - } - else - { - $where .= " AND sprache = ".$this->ci->VorlageModel->escape($sprache); - } - $where .= " AND aktiv = true"; return $where; diff --git a/application/libraries/issues/CORE_INOUT_0001.php b/application/libraries/issues/CORE_INOUT_0001.php new file mode 100644 index 000000000..d62c73f9e --- /dev/null +++ b/application/libraries/issues/CORE_INOUT_0001.php @@ -0,0 +1,31 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->model('codex/Bisiozweck_model', 'BisiozweckModel'); + + // get all bisio Zwecke + $this->_ci->BisiozweckModel->addSelect('1'); + $bisiozweckRes = $this->_ci->BisiozweckModel->loadWhere(array('bisio_id' => $params['bisio_id'])); + + if (isError($bisiozweckRes)) + return $bisiozweckRes; + + if (hasData($bisiozweckRes)) + return success(true); // resolved if bisio Zweck exists + else + return success(false); // not resolved if no bisio zweck + } +} diff --git a/application/libraries/issues/CORE_INOUT_0002.php b/application/libraries/issues/CORE_INOUT_0002.php new file mode 100644 index 000000000..9868ccd25 --- /dev/null +++ b/application/libraries/issues/CORE_INOUT_0002.php @@ -0,0 +1,34 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->model('codex/Bisiozweck_model', 'BisiozweckModel'); + + // get all bisio Zwecke + $this->_ci->BisiozweckModel->addSelect('1'); + $bisiozweckRes = $this->_ci->BisiozweckModel->loadWhere(array('bisio_id' => $params['bisio_id'])); + + if (isError($bisiozweckRes)) + return $bisiozweckRes; + + if (hasData($bisiozweckRes)) + { + if (count(getData($bisiozweckRes)) <= 1) // resolved if one bisio Zweck + return success(true); + else + return success(false); // otherwise not resolved + } + else + return success(true); // resolved if no bisio zweck + } +} diff --git a/application/libraries/issues/CORE_INOUT_0003.php b/application/libraries/issues/CORE_INOUT_0003.php new file mode 100644 index 000000000..0fee6c061 --- /dev/null +++ b/application/libraries/issues/CORE_INOUT_0003.php @@ -0,0 +1,39 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->model('codex/Bisiozweck_model', 'BisiozweckModel'); + + // get all Zwecke + $this->_ci->BisiozweckModel->addSelect('zweck_code'); + $bisiozweckRes = $this->_ci->BisiozweckModel->loadWhere(array('bisio_id' => $params['bisio_id'])); + + if (isError($bisiozweckRes)) + return $bisiozweckRes; + + if (hasData($bisiozweckRes)) + { + $bisiozweckData = getData($bisiozweckRes); + + // resolved if Zweck is 1, 2 or 3 + if (count($bisiozweckData) == 1 && !in_array($bisiozweckData[0]->zweck_code, array(1, 2, 3))) + return success(false); + else + return success(true); + } + else + return success(true); + } +} diff --git a/application/libraries/issues/CORE_INOUT_0004.php b/application/libraries/issues/CORE_INOUT_0004.php new file mode 100644 index 000000000..703b108cc --- /dev/null +++ b/application/libraries/issues/CORE_INOUT_0004.php @@ -0,0 +1,57 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->model('codex/Aufenthaltfoerderung_model', 'AufenthaltfoerderungModel'); + + // get all Zwecke + $this->_ci->AufenthaltfoerderungModel->addSelect('tbl_aufenthaltfoerderung.aufenthaltfoerderung_code'); + $this->_ci->AufenthaltfoerderungModel->addJoin('bis.tbl_bisio_aufenthaltfoerderung', 'aufenthaltfoerderung_code'); + $this->_ci->AufenthaltfoerderungModel->addOrder('tbl_aufenthaltfoerderung.aufenthaltfoerderung_code'); + $bisioFoerderungRes = $this->_ci->AufenthaltfoerderungModel->loadWhere(array('bisio_id' => $params['bisio_id'])); + + if (isError($bisioFoerderungRes)) + return $bisioFoerderungRes; + + if (hasData($bisioFoerderungRes)) + { + // resolved if Aufenthaltsfoerderung exists + return success(true); + } + else + { + $this->_ci->load->model('codex/Bisio_model', 'BisioModel'); + + // get Bisio Aufenthaltsdauer + $aufenthaltsdauerRes = $this->_ci->BisioModel->getAufenthaltsdauer($params['bisio_id']); + + if (isError($aufenthaltsdauerRes)) + return $aufenthaltsdauerRes; + + if (hasData($aufenthaltsdauerRes)) + { + $aufenthaltsdauer = getData($aufenthaltsdauerRes); + + // check if stay >= 29 days. If yes and no Aufenthaltsfoerderung - not resolved + if ($aufenthaltsdauer >= 29) + return success(false); + else + return success(true); + } + else // no Aufenthaltsdauer - not resolved + return success(false); + } + } +} diff --git a/application/libraries/issues/CORE_INOUT_0005.php b/application/libraries/issues/CORE_INOUT_0005.php new file mode 100644 index 000000000..e655d2e36 --- /dev/null +++ b/application/libraries/issues/CORE_INOUT_0005.php @@ -0,0 +1,53 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->model('codex/Bisio_model', 'BisioModel'); + + // get all Zwecke + $this->_ci->BisioModel->addSelect('ects_angerechnet'); + $bisioRes = $this->_ci->BisioModel->loadWhere(array('bisio_id' => $params['bisio_id'])); + + if (isError($bisioRes)) + return $bisioRes; + + if (hasData($bisioRes) && !isEmptyString(getData($bisioRes)[0]->ects_angerechnet)) + { + // resolved if ects exists + return success(true); + } + else + { + // get Bisio Aufenthaltsdauer + $aufenthaltsdauerRes = $this->_ci->BisioModel->getAufenthaltsdauer($params['bisio_id']); + + if (isError($aufenthaltsdauerRes)) + return $aufenthaltsdauerRes; + + if (hasData($aufenthaltsdauerRes)) + { + $aufenthaltsdauer = getData($aufenthaltsdauerRes); + + // check if stay >= 29 days. If yes and no ects - not resolved + if ($aufenthaltsdauer >= 29) + return success(false); + else + return success(true); + } + else // no Aufenthaltsdauer - not resolved + return success(false); + } + } +} diff --git a/application/libraries/issues/CORE_INOUT_0006.php b/application/libraries/issues/CORE_INOUT_0006.php new file mode 100644 index 000000000..a447a9625 --- /dev/null +++ b/application/libraries/issues/CORE_INOUT_0006.php @@ -0,0 +1,54 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->model('codex/Bisio_model', 'BisioModel'); + //$this->_ci->load->model('codex/Aufenthaltfoerderung_model', 'AufenthaltfoerderungModel'); + + // get all Zwecke + $this->_ci->BisioModel->addSelect('ects_erworben'); + $bisioRes = $this->_ci->BisioModel->loadWhere(array('bisio_id' => $params['bisio_id'])); + + if (isError($bisioRes)) + return $bisioRes; + + if (hasData($bisioRes) && !isEmptyString(getData($bisioRes)[0]->ects_erworben)) + { + // resolved if ects exists + return success(true); + } + else + { + // get Bisio Aufenthaltsdauer + $aufenthaltsdauerRes = $this->_ci->BisioModel->getAufenthaltsdauer($params['bisio_id']); + + if (isError($aufenthaltsdauerRes)) + return $aufenthaltsdauerRes; + + if (hasData($aufenthaltsdauerRes)) + { + $aufenthaltsdauer = getData($aufenthaltsdauerRes); + + // check if stay >= 29 days. If yes and no ects - not resolved + if ($aufenthaltsdauer >= 29) + return success(false); + else + return success(true); + } + else // no Aufenthaltsdauer - not resolved + return success(false); + } + } +} diff --git a/application/libraries/issues/CORE_ZGV_0001.php b/application/libraries/issues/CORE_ZGV_0001.php new file mode 100644 index 000000000..47d27d30e --- /dev/null +++ b/application/libraries/issues/CORE_ZGV_0001.php @@ -0,0 +1,42 @@ +_ci =& get_instance(); // get code igniter instance + + // get zgvdatum of prestudent + $this->_ci->load->model('crm/Prestudent_model', 'PrestudentModel'); + + $this->_ci->PrestudentModel->addSelect('zgvdatum'); + $prestudentRes = $this->_ci->PrestudentModel->load($params['prestudent_id']); + + if (isError($prestudentRes)) + return $prestudentRes; + + if (hasData($prestudentRes)) + { + $zgvdatum = getData($prestudentRes)[0]->zgvdatum; + + if (isEmptyString($zgvdatum)) + return success(false); + + // check if zgvdatum comes after today + if ($zgvdatum > date('Y-m-d')) + return success(false); + else + return success(true); + } + else + return success(false); + } +} diff --git a/application/libraries/issues/CORE_ZGV_0002.php b/application/libraries/issues/CORE_ZGV_0002.php new file mode 100644 index 000000000..d09380ddb --- /dev/null +++ b/application/libraries/issues/CORE_ZGV_0002.php @@ -0,0 +1,50 @@ +_ci =& get_instance(); // get code igniter instance + + // get zgvdatum of prestudent + $this->_ci->load->model('crm/Prestudent_model', 'PrestudentModel'); + + $this->_ci->PrestudentModel->addSelect('zgvdatum, gebdatum'); + $this->_ci->PrestudentModel->addJoin('public.tbl_person', 'person_id'); + $prestudentRes = $this->_ci->PrestudentModel->load($params['prestudent_id']); + + if (isError($prestudentRes)) + return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudentData = getData($prestudentRes)[0]; + + $zgvdatum = $prestudentData->zgvdatum; + + if (isEmptyString($zgvdatum)) + return success(false); + + $gebdatum = $prestudentData->gebdatum; + + if (isEmptyString($gebdatum)) + return success(false); + + // check if zgvdatum comes before geburtsdatum + if ($zgvdatum < $gebdatum) + return success(false); + else + return success(true); + } + else + return success(false); + } +} diff --git a/application/libraries/issues/CORE_ZGV_0003.php b/application/libraries/issues/CORE_ZGV_0003.php new file mode 100644 index 000000000..db0ab29db --- /dev/null +++ b/application/libraries/issues/CORE_ZGV_0003.php @@ -0,0 +1,42 @@ +_ci =& get_instance(); // get code igniter instance + + // get zgvdatum of prestudent + $this->_ci->load->model('crm/Prestudent_model', 'PrestudentModel'); + + $this->_ci->PrestudentModel->addSelect('zgvmadatum'); + $prestudentRes = $this->_ci->PrestudentModel->load($params['prestudent_id']); + + if (isError($prestudentRes)) + return $prestudentRes; + + if (hasData($prestudentRes)) + { + $zgvdatum = getData($prestudentRes)[0]->zgvmadatum; + + if (isEmptyString($zgvdatum)) + return success(false); + + // check if zgvdatum comes after today + if ($zgvdatum > date('Y-m-d')) + return success(false); + else + return success(true); + } + else + return success(false); + } +} diff --git a/application/libraries/issues/CORE_ZGV_0004.php b/application/libraries/issues/CORE_ZGV_0004.php new file mode 100644 index 000000000..27488af00 --- /dev/null +++ b/application/libraries/issues/CORE_ZGV_0004.php @@ -0,0 +1,50 @@ +_ci =& get_instance(); // get code igniter instance + + // get zgvdatum of prestudent + $this->_ci->load->model('crm/Prestudent_model', 'PrestudentModel'); + + $this->_ci->PrestudentModel->addSelect('zgvdatum, zgvmadatum'); + $prestudentRes = $this->_ci->PrestudentModel->load($params['prestudent_id']); + + if (isError($prestudentRes)) + return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudentData = getData($prestudentRes)[0]; + + // get and compare zgvdatum and zgvmadatum + $zgvdatum = $prestudentData->zgvdatum; + + if (isEmptyString($zgvdatum)) + return success(false); + + $zgvmadatum = $prestudentData->zgvmadatum; + + if (isEmptyString($zgvmadatum)) + return success(false); + + // check if zgvmadatum comes after zgvdatum + if ($zgvmadatum < $zgvdatum) + return success(false); + else + return success(true); + } + else + return success(false); + } +} diff --git a/application/libraries/issues/CORE_ZGV_0005.php b/application/libraries/issues/CORE_ZGV_0005.php new file mode 100644 index 000000000..405f3d88d --- /dev/null +++ b/application/libraries/issues/CORE_ZGV_0005.php @@ -0,0 +1,50 @@ +_ci =& get_instance(); // get code igniter instance + + // get zgvdatum and geburtsdatum of prestudent + $this->_ci->load->model('crm/Prestudent_model', 'PrestudentModel'); + + $this->_ci->PrestudentModel->addSelect('zgvmadatum, gebdatum'); + $this->_ci->PrestudentModel->addJoin('public.tbl_person', 'person_id'); + $prestudentRes = $this->_ci->PrestudentModel->load($params['prestudent_id']); + + if (isError($prestudentRes)) + return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudentData = getData($prestudentRes)[0]; + + $zgvdatum = $prestudentData->zgvmadatum; + + if (isEmptyString($zgvdatum)) + return success(false); + + $gebdatum = $prestudentData->gebdatum; + + if (isEmptyString($gebdatum)) + return success(false); + + // check if zgvdatum comes before geburtsdatum + if ($zgvdatum < $gebdatum) + return success(false); + else + return success(true); + } + else + return success(false); + } +} diff --git a/application/models/codex/Aufenthaltfoerderung_model.php b/application/models/codex/Aufenthaltfoerderung_model.php new file mode 100644 index 000000000..b650b3a05 --- /dev/null +++ b/application/models/codex/Aufenthaltfoerderung_model.php @@ -0,0 +1,14 @@ +dbTable = 'bis.tbl_aufenthaltfoerderung'; + $this->pk = 'aufenthaltfoerderung_code'; + } +} diff --git a/application/models/codex/Bisio_model.php b/application/models/codex/Bisio_model.php index 5f35aec9a..1cff1dc54 100644 --- a/application/models/codex/Bisio_model.php +++ b/application/models/codex/Bisio_model.php @@ -11,4 +11,37 @@ class Bisio_model extends DB_Model $this->dbTable = 'bis.tbl_bisio'; $this->pk = 'bisio_id'; } + + /** + * Gets duration of stay in days by bisio_id. + * @param int $bisio_id + * @return object success with number of days or error + */ + public function getAufenthaltsdauer($bisio_id) + { + // get from and to date + $this->addSelect('von, bis'); + $bisioRes = $this->load($bisio_id); + + if (isError($bisioRes)) + return $bisioRes; + + if (hasData($bisioRes)) + { + $bisioData = getData($bisioRes)[0]; + + $avon = $bisioData->von; + $abis = $bisioData->bis; + + if (is_null($avon) || is_null($abis)) + return success("Von or bis date not set"); + + $vonDate = new DateTime($avon); + $bisDate = new DateTime($abis); + $interval = $vonDate->diff($bisDate); + return success($interval->days); + } + else + return success("Bisio not found"); + } } diff --git a/application/models/codex/Oehbeitrag_model.php b/application/models/codex/Oehbeitrag_model.php new file mode 100644 index 000000000..0df016ba8 --- /dev/null +++ b/application/models/codex/Oehbeitrag_model.php @@ -0,0 +1,107 @@ +dbTable = 'bis.tbl_oehbeitrag'; + $this->pk = 'oehbeitrag_id'; + } + + /** + * Gets oehbeitrag data valid for a certain Studiensemester. + * @param string $studiensemester_kurzbz + * @return object + */ + public function getByStudiensemester($studiensemester_kurzbz) + { + $qry = "WITH semstart AS ( + SELECT start FROM public.tbl_studiensemester + WHERE studiensemester_kurzbz = ? + ) + SELECT * FROM bis.tbl_oehbeitrag oehb + JOIN public.tbl_studiensemester semvon ON oehb.von_studiensemester_kurzbz = semvon.studiensemester_kurzbz + LEFT JOIN public.tbl_studiensemester sembis ON oehb.bis_studiensemester_kurzbz = sembis.studiensemester_kurzbz + JOIN semstart ON semstart.start::date >= semvon.start::date AND (sembis.studiensemester_kurzbz IS NULL OR semstart.start::date <= sembis.start::date) + ORDER BY semvon.start + LIMIT 1"; + + return $this->execQuery($qry, array($studiensemester_kurzbz)); + } + + /** + * Gets all Studiensemester for which no Oehbeitrag value assignment exists. + * @param string $start_studiensemester_kurzbz semester before the given semester are ignored + * @param array $excluded_oehbeitrag_id oehbeitraege to be ignored, i.e. which are assigned + * @return object + */ + public function getUnassignedStudiensemester($start_studiensemester_kurzbz, $excluded_oehbeitrag_id = array()) + { + $params = array($start_studiensemester_kurzbz); + + $qry = "SELECT * FROM public.tbl_studiensemester sem + WHERE sem.start >= (SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz = ?) + AND NOT EXISTS (SELECT 1 FROM bis.tbl_oehbeitrag oeh + JOIN public.tbl_studiensemester oeh_von ON oeh.von_studiensemester_kurzbz = oeh_von.studiensemester_kurzbz + LEFT JOIN public.tbl_studiensemester oeh_bis ON oeh.bis_studiensemester_kurzbz = oeh_bis.studiensemester_kurzbz + WHERE sem.start::date >= oeh_von.start::date AND (sem.start::date <= oeh_bis.start::date OR oeh_bis.studiensemester_kurzbz IS NULL)"; + + if (!isEmptyArray($excluded_oehbeitrag_id)) + { + $qry .= " AND oehbeitrag_id NOT IN ?"; + $params[] = $excluded_oehbeitrag_id; + } + + $qry .= ") ORDER BY sem.start"; + + return $this->execQuery($qry, $params); + } + + /** + * Checks if a Öhbeitrag can be assigned for a Studiensemester range. + * @param string $von_studiensemester_kurzbz + * @param string $bis_studiensemester_kurzbz + * @param array $excluded_oehbeitrag_id oehbeitraege to ignore, i.e. which are assignable + * @return object array with true if assignable, with false if not + */ + public function checkIfStudiensemesterAssignable($von_studiensemester_kurzbz, $bis_studiensemester_kurzbz = null, $excluded_oehbeitrag_id = array()) + { + $params = array($von_studiensemester_kurzbz); + + $allStdSemSpanQry = "SELECT count(studiensemester_kurzbz) as number_assigned FROM public.tbl_studiensemester sem + WHERE start >= (SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz = ?)"; + + if ($bis_studiensemester_kurzbz != null) + { + $allStdSemSpanQry .= " AND (start <= (SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz = ?))"; + $params[] = $bis_studiensemester_kurzbz; + } + + $allStdSemSpanQry .= " AND EXISTS (SELECT 1 FROM bis.tbl_oehbeitrag + JOIN public.tbl_studiensemester sem_von ON tbl_oehbeitrag.von_studiensemester_kurzbz = sem_von.studiensemester_kurzbz + LEFT JOIN public.tbl_studiensemester sem_bis ON tbl_oehbeitrag.bis_studiensemester_kurzbz = sem_bis.studiensemester_kurzbz + WHERE sem.start >= sem_von.start AND (sem.start <= sem_bis.start OR sem_bis.studiensemester_kurzbz IS NULL)"; + + if (!isEmptyArray($excluded_oehbeitrag_id)) + { + $allStdSemSpanQry .= " AND oehbeitrag_id NOT IN ?"; + $params[] = $excluded_oehbeitrag_id; + } + + $allStdSemSpanQry .= ")"; + + $nrAssigned = $this->execQuery($allStdSemSpanQry, $params); + + if (isError($nrAssigned)) + return $nrAssigned; + + if (!hasData($nrAssigned)) + return error("Fehler bei Überprüfung der Möglichkeit der Semesterzuweisung"); + + return success(array(getData($nrAssigned)[0]->number_assigned == 0)); + } +} diff --git a/application/models/crm/Konto_model.php b/application/models/crm/Konto_model.php index a3b5cdbb6..840bb290c 100644 --- a/application/models/crm/Konto_model.php +++ b/application/models/crm/Konto_model.php @@ -18,45 +18,50 @@ class Konto_model extends DB_Model public function setPaid($buchungsnr) { // get payment - $buchungResult = $this->loadWhere(array('buchungsnr' => $buchungsnr)); + $buchungResult = $this->loadWhere(array('buchungsnr' => $buchungsnr)); - if(isSuccess($buchungResult) && hasData($buchungResult)) + if (isSuccess($buchungResult) && hasData($buchungResult)) { + $buchung = getData($buchungResult)[0]; + // get already paid amount $this->addSelect('sum(betrag) as bezahlt'); $this->addGroupBy('buchungsnr_verweis'); - $buchungVerweisResult = $this->loadWhere(array('buchungsnr_verweis' => $buchungsnr)); + $buchungVerweisResult = $this->loadWhere(array('buchungsnr_verweis' => $buchungsnr)); - if(isSuccess($buchungVerweisResult)) + if (isSuccess($buchungVerweisResult)) { - if(hasData($buchungVerweisResult)) - { - $betragBezahltResult = getData($buchungVerweisResult); - $betragBezahlt = $betragBezahltResult->bezahlt; - } - else - $betragBezahlt = 0; + $betragBezahlt = 0; - $buchung = getData($buchungResult); - $buchung = $buchung[0]; + if (hasData($buchungVerweisResult)) + { + $betragBezahlt = getData($buchungVerweisResult)[0]->bezahlt; + } // calculate open amount - $betragOffen = $betragBezahlt - $buchung->betrag*(-1); + $betragOffen = $betragBezahlt - $buchung->betrag * (-1); - $data = array( - 'person_id' => $buchung->person_id, - 'studiengang_kz' => $buchung->studiengang_kz, - 'studiensemester_kurzbz' => $buchung->studiensemester_kurzbz, - 'buchungsnr_verweis' => $buchungsnr, - 'betrag' => str_replace(',','.',$betragOffen*(-1)), - 'buchungsdatum' => date('Y-m-d'), - 'buchungstext' => $buchung->buchungstext, - 'insertamum' => date('Y-m-d H:i:s'), - 'insertvon' => '', - 'buchungstyp_kurzbz' => $buchung->buchungstyp_kurzbz, - ); + if ($betragOffen != 0) + { + $data = array( + 'person_id' => $buchung->person_id, + 'studiengang_kz' => $buchung->studiengang_kz, + 'studiensemester_kurzbz' => $buchung->studiensemester_kurzbz, + 'buchungsnr_verweis' => $buchungsnr, + 'betrag' => str_replace(',', '.', $betragOffen * (-1)), + 'buchungsdatum' => date('Y-m-d'), + 'buchungstext' => $buchung->buchungstext, + 'insertamum' => date('Y-m-d H:i:s'), + 'insertvon' => '', + 'buchungstyp_kurzbz' => $buchung->buchungstyp_kurzbz, + ); - return $this->insert($data); + return $this->insert($data); + } + else + { + return success(); + } } else { diff --git a/application/models/crm/Prestudent_model.php b/application/models/crm/Prestudent_model.php index 2553fd5fa..5db9a98f1 100644 --- a/application/models/crm/Prestudent_model.php +++ b/application/models/crm/Prestudent_model.php @@ -291,7 +291,7 @@ class Prestudent_model extends DB_Model $prestudentdata->prestudentstatus = $lastStatusData; - if ($this->hasUDF()) + if ($this->udfsExistAndDefined()) { $prestudentdata->prestudentUdfs = $this->getUDFs($prestudent_id); } @@ -611,7 +611,7 @@ class Prestudent_model extends DB_Model )); } - public function getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester) + public function getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester, $abgeschickt) { $query = "SELECT ps.prestudent_id FROM public.tbl_prestudentstatus pss @@ -621,8 +621,49 @@ class Prestudent_model extends DB_Model WHERE ps.person_id = ? AND UPPER((sg.typ || sg.kurzbz) || ':' || sp.orgform_kurzbz) = ? AND pss.studiensemester_kurzbz = ? - "; + AND"; + + if ($abgeschickt === 'true') + $query .= " EXISTS"; + else + $query .= " NOT EXISTS"; + + $query .= " (SELECT 1 FROM public.tbl_prestudentstatus spss + JOIN public.tbl_prestudent sps USING(prestudent_id) + WHERE sps.prestudent_id = ps.prestudent_id + AND spss.bewerbung_abgeschicktamum IS NOT NULL)"; return $this->execQuery($query, array($person, $studiengang, $studienSemester)); } + + /** + * Gets förderrelevant flag for a prestudent, from prestudent, or, if not set on prestudent level, from studiengang + * @param int $prestudent_id + * @return object + */ + public function getFoerderrelevant($prestudent_id) + { + $query = 'SELECT COALESCE (ps.foerderrelevant, stg.foerderrelevant) AS foerderrelevant + FROM public.tbl_prestudent ps + LEFT JOIN public.tbl_studiengang stg USING (studiengang_kz) + WHERE prestudent_id = ?'; + + return $this->execQuery($query, array($prestudent_id)); + } + + /** + * Gets bis standort_code for a prestudent, from prestudent, or, if not set on prestudent level, from studiengang + * @param int $prestudent_id + * @return object + */ + public function getStandortCode($prestudent_id) + { + $query = 'SELECT COALESCE (ps.standort_code, stg.standort_code) AS standort_code + FROM public.tbl_prestudent ps + LEFT JOIN public.tbl_studiengang stg USING (studiengang_kz) + WHERE prestudent_id = ?'; + + return $this->execQuery($query, array($prestudent_id)); + } + } diff --git a/application/models/education/Pruefung_model.php b/application/models/education/Pruefung_model.php index d10364979..e3776c4ad 100644 --- a/application/models/education/Pruefung_model.php +++ b/application/models/education/Pruefung_model.php @@ -11,4 +11,29 @@ class Pruefung_model extends DB_Model $this->dbTable = 'campus.tbl_pruefung'; $this->pk = 'pruefung_id'; } + + /** + * Gets Pruefungen of a person for a Studiensemester. + * @param int $person_id + * @param string $studiensemester_kurzbz + * @return object + */ + public function getByPerson($person_id, $studiensemester_kurzbz) + { + $qry = ' + SELECT prfg.*, pers.matr_nr, lv.ects, stg.studiengang_kz, prst.prestudent_id, + UPPER(stg.typ||stg.kurzbz) AS studiengang, stg.bezeichnung AS studiengang_bezeichnung + FROM public.tbl_person pers + JOIN public.tbl_prestudent prst USING (person_id) + JOIN public.tbl_student USING (prestudent_id) + JOIN lehre.tbl_pruefung prfg USING (student_uid) + JOIN lehre.tbl_lehreinheit le USING (lehreinheit_id) + JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id) + JOIN public.tbl_studiengang stg ON prst.studiengang_kz = stg.studiengang_kz + WHERE pers.person_id = ? + AND le.studiensemester_kurzbz = ? + ORDER BY prfg.datum, pruefung_id'; + + return $this->execQuery($qry, array($person_id, $studiensemester_kurzbz)); + } } diff --git a/application/models/education/Zeugnisnote_model.php b/application/models/education/Zeugnisnote_model.php index 7ed0e6456..a4185a7f4 100644 --- a/application/models/education/Zeugnisnote_model.php +++ b/application/models/education/Zeugnisnote_model.php @@ -12,4 +12,132 @@ class Zeugnisnote_model extends DB_Model $this->pk = array('studiensemester_kurzbz', 'student_uid', 'lehrveranstaltung_id'); $this->hasSequence = false; } + + /** + * Gets ECTS sums of completed courses (Zeugnisnoten) of a person for a Studiensemester. + * If no valid Noten for the course were entered, 0 ects is returned. + * @param int $person_id + * @param string $studiensemester_kurzbz + * @param bool $aktiv + * @param bool $lehre + * @param bool $offiziell + * @param bool $positiv + * @return object + */ + public function getEctsSumsByPerson($person_id, $studiensemester_kurzbz, $aktiv = true, $lehre = null, $offiziell = null, $positiv = null) + { + $params = array(); + + $qry = "SELECT DISTINCT ON (prst.prestudent_id) pers.matr_nr, stg.studiengang_kz, prst.prestudent_id, stg.erhalter_kz, + UPPER(stg.typ||stg.kurzbz) AS studiengang, stg.bezeichnung AS studiengang_bezeichnung, COALESCE(summen.summe_ects, 0) AS summe_ects + FROM public.tbl_person pers + JOIN public.tbl_prestudent prst USING (person_id) + JOIN public.tbl_prestudentstatus prstst USING (prestudent_id) + JOIN public.tbl_studiengang stg ON prst.studiengang_kz = stg.studiengang_kz + LEFT JOIN ( + SELECT zgnisnote.student_uid, prestudent_id, zgnisnote.studiensemester_kurzbz, sum(ects) AS summe_ects + FROM public.tbl_student + LEFT JOIN lehre.tbl_zeugnisnote zgnisnote USING(student_uid) + LEFT JOIN lehre.tbl_note note ON zgnisnote.note = note.note + LEFT JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id) + WHERE TRUE"; + + if (isset($aktiv)) + { + $qry .= ' AND (note.aktiv = ?)'; + $params[] = $aktiv; + } + + if (isset($lehre)) + { + $qry .= ' AND (note.lehre = ?)'; + $params[] = $lehre; + } + + if (isset($offiziell)) + { + $qry .= ' AND (note.offiziell = ?)'; + $params[] = $offiziell; + } + + if (isset($positiv)) + { + $qry .= ' AND (note.positiv = ?)'; + $params[] = $positiv; + } + + $qry .= " GROUP BY zgnisnote.studiensemester_kurzbz, zgnisnote.student_uid, prestudent_id + ) summen ON prst.prestudent_id = summen.prestudent_id AND prstst.studiensemester_kurzbz = summen.studiensemester_kurzbz + WHERE pers.person_id = ? + AND prstst.studiensemester_kurzbz = ? + ORDER BY prst.prestudent_id"; + + $params[] = $person_id; + $params[] = $studiensemester_kurzbz; + + return $this->execQuery($qry, $params); + } + + /** + * Gets courses (Zeugnisnoten) of a person for a Studiensemester. + * @param int $person_id + * @param string $studiensemester_kurzbz + * @param bool $aktiv + * @param bool $lehre + * @param bool $offiziell + * @param bool $positiv + * @param bool $zeugnis + * @return object + */ + public function getByPerson($person_id, $studiensemester_kurzbz, $aktiv = true, $lehre = null, $offiziell = null, $positiv = null, $zeugnis = null) + { + $params = array($person_id, $studiensemester_kurzbz); + + $qry = "SELECT zgnisnote.*, pers.matr_nr, lv.ects, stg.studiengang_kz, prst.prestudent_id, stg.erhalter_kz, + UPPER(stg.typ||stg.kurzbz) AS studiengang, stg.bezeichnung AS studiengang_bezeichnung, note.note, + note.bezeichnung AS note_bezeichnung + FROM public.tbl_person pers + JOIN public.tbl_prestudent prst USING (person_id) + JOIN public.tbl_student USING (prestudent_id) + JOIN lehre.tbl_zeugnisnote zgnisnote USING (student_uid) + JOIN lehre.tbl_note note ON zgnisnote.note = note.note + JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id) + JOIN public.tbl_studiengang stg ON prst.studiengang_kz = stg.studiengang_kz + WHERE pers.person_id = ? + AND zgnisnote.studiensemester_kurzbz = ?"; + + if (isset($aktiv)) + { + $qry .= ' AND note.aktiv = ?'; + $params[] = $aktiv; + } + + if (isset($lehre)) + { + $qry .= ' AND note.lehre = ?'; + $params[] = $lehre; + } + + if (isset($offiziell)) + { + $qry .= ' AND note.offiziell = ?'; + $params[] = $offiziell; + } + + if (isset($positiv)) + { + $qry .= ' AND note.positiv = ?'; + $params[] = $positiv; + } + + if (isset($zeugnis)) + { + $qry .= ' AND lv.zeugnis = ?'; + $params[] = $zeugnis; + } + + $qry .= ' ORDER BY zgnisnote.benotungsdatum'; + + return $this->execQuery($qry, $params); + } } diff --git a/application/models/organisation/Studiengang_model.php b/application/models/organisation/Studiengang_model.php index 6358ca81e..e2b3bdfb7 100644 --- a/application/models/organisation/Studiengang_model.php +++ b/application/models/organisation/Studiengang_model.php @@ -448,10 +448,11 @@ class Studiengang_model extends DB_Model return $this->execQuery($query, array($typ)); } - + /** - * Get Studiengangsleitung - * @param null $studiengang_kz + * Get Studiengangsleitung/en of Studiengang/Studiengaenge. + * + * @param null $studiengang_kz Numeric or Array * @return array */ public function getLeitung($studiengang_kz = null) @@ -460,7 +461,12 @@ class Studiengang_model extends DB_Model $this->addJoin('public.tbl_benutzerfunktion', 'oe_kurzbz'); $this->addJoin('public.tbl_benutzer', 'uid'); $this->addJoin('public.tbl_person', 'person_id'); - + + if (!is_numeric($studiengang_kz) && !is_array($studiengang_kz)) + { + return error('Studiengangskennzahl ungültig'); + } + if (is_null($studiengang_kz)) { $condition = ' @@ -469,16 +475,21 @@ class Studiengang_model extends DB_Model AND ( datum_bis >= NOW() OR datum_bis IS NULL ) '; } - elseif (is_numeric($studiengang_kz)) + elseif (is_numeric($studiengang_kz) || is_array($studiengang_kz)) { + if (is_array($studiengang_kz)) + { + $studiengang_kz = array_map(array($this,'escape'), $studiengang_kz); + $studiengang_kz = implode(', ', $studiengang_kz); + } $condition = ' funktion_kurzbz = \'Leitung\' AND ( datum_von <= NOW() OR datum_von IS NULL ) AND ( datum_bis >= NOW() OR datum_bis IS NULL ) - AND studiengang_kz = ' . $this->db->escape($studiengang_kz) + AND studiengang_kz IN (' . $studiengang_kz. ')'; ; } - + return $this->loadWhere($condition); } diff --git a/application/models/person/Person_model.php b/application/models/person/Person_model.php index e005e243c..559700390 100644 --- a/application/models/person/Person_model.php +++ b/application/models/person/Person_model.php @@ -152,34 +152,36 @@ class Person_model extends DB_Model */ public function getPersonStammdaten($person_id, $zustellung_only = false) { - $this->addSelect('public.tbl_person.*, s.kurztext as staatsbuergerschaft, g.kurztext as geburtsnation'); + $this->addSelect('public.tbl_person.*, tbl_person.staatsbuergerschaft AS staatsbuergerschaft_code, tbl_person.geburtsnation AS geburtsnation_code, + s.kurztext as staatsbuergerschaft, g.kurztext as geburtsnation'); $this->addJoin('bis.tbl_nation s', 'public.tbl_person.staatsbuergerschaft = s.nation_code', 'LEFT'); $this->addJoin('bis.tbl_nation g', 'public.tbl_person.geburtsnation = g.nation_code', 'LEFT'); $person = $this->load($person_id); - if($person->error) return $person; + if (isError($person)) return $person; //return null if not found - if(count($person->retval) < 1) + if (!hasData($person)) return success(null); - $this->KontaktModel->addDistinct(); - $this->KontaktModel->addSelect('kontakttyp, anmerkung, kontakt, zustellung'); + $this->KontaktModel->addSelect('kontakt_id, kontakttyp, anmerkung, kontakt, zustellung'); $this->KontaktModel->addOrder('kontakttyp'); + $this->KontaktModel->addOrder('insertamum', 'DESC'); $where = $zustellung_only === true ? array('person_id' => $person_id, 'zustellung' => true) : array('person_id' => $person_id); $kontakte = $this->KontaktModel->loadWhere($where); - if($kontakte->error) return $kontakte; + if (isError($kontakte)) return $kontakte; $where = $zustellung_only === true ? array('person_id' => $person_id, 'zustelladresse' => true) : array('person_id' => $person_id); $this->AdresseModel->addSelect('public.tbl_adresse.*, bis.tbl_nation.kurztext AS nationkurztext'); $this->AdresseModel->addJoin('bis.tbl_nation', 'tbl_adresse.nation = tbl_nation.nation_code', 'LEFT'); + $this->AdresseModel->addOrder('insertamum', 'DESC'); $adressen = $this->AdresseModel->loadWhere($where); - if($adressen->error) return $adressen; + if (isError($adressen)) return $adressen; - $stammdaten = $person->retval[0]; - $stammdaten->kontakte = $kontakte->retval; - $stammdaten->adressen = $adressen->retval; + $stammdaten = getData($person)[0]; + $stammdaten->kontakte = hasData($kontakte) ? getData($kontakte) : array(); + $stammdaten->adressen = hasData($adressen) ? getData($adressen) : array(); return success($stammdaten); } @@ -263,4 +265,64 @@ class Person_model extends DB_Model return success($result->vorname. ' '. $result->nachname); } + + public function checkDuplicate($person_id) + { + $qry = "SELECT person_id + FROM public.tbl_prestudent p + JOIN + ( + SELECT DISTINCT ON(prestudent_id) * + FROM public.tbl_prestudentstatus + WHERE prestudent_id IN + ( + SELECT prestudent_id + FROM public.tbl_prestudent + WHERE person_id IN + ( + SELECT p2.person_id + FROM public.tbl_person p + JOIN public.tbl_person p2 + ON p.vorname = p2.vorname + AND p.nachname = p2.nachname + AND p.gebdatum = p2.gebdatum + AND p.person_id = ? + ) + ) + ORDER BY prestudent_id, datum DESC, insertamum DESC + ) ps USING(prestudent_id) + JOIN public.tbl_status USING(status_kurzbz) + WHERE status_kurzbz = 'Interessent' + AND studiengang_kz IN + ( + SELECT studiengang_kz + FROM public.tbl_prestudent p + JOIN + ( + SELECT DISTINCT ON(prestudent_id) * + FROM public.tbl_prestudentstatus + WHERE prestudent_id IN + ( + SELECT prestudent_id + FROM public.tbl_prestudent + WHERE person_id IN + ( + SELECT p2.person_id + FROM public.tbl_person p + JOIN public.tbl_person p2 + ON p.vorname = p2.vorname + AND p.nachname = p2.nachname + AND p.gebdatum = p2.gebdatum + AND p.person_id = ? + ) + ) + ORDER BY prestudent_id, datum DESC, insertamum DESC + ) ps USING(prestudent_id) + JOIN public.tbl_status USING(status_kurzbz) + WHERE status_kurzbz = 'Abbrecher' + ) + "; + + return $this->execQuery($qry, array($person_id, $person_id)); + } } diff --git a/application/models/ressource/Betriebsmittelperson_model.php b/application/models/ressource/Betriebsmittelperson_model.php index 87915cfa8..1a97d9e38 100644 --- a/application/models/ressource/Betriebsmittelperson_model.php +++ b/application/models/ressource/Betriebsmittelperson_model.php @@ -18,7 +18,7 @@ class Betriebsmittelperson_model extends DB_Model * @param bool $isRetourniert False to retrieve only active Betriebsmittel. * @return array|bool */ - public function getBetriebsmittel($person_id, $betriebsmitteltyp = null, $isRetourniert = null) + public function getBetriebsmittel($person_id, $betriebsmitteltyp = null, $isRetourniert = null, $onlyAktiveBenutzer=false) { if (!is_numeric($person_id)) { @@ -28,8 +28,12 @@ class Betriebsmittelperson_model extends DB_Model $this->addJoin('wawi.tbl_betriebsmittel', 'betriebsmittel_id'); + if( $onlyAktiveBenutzer ) { + $this->addJoin('public.tbl_benutzer b', 'b.uid = wawi.tbl_betriebsmittelperson.uid AND b.aktiv = \'t\''); + } + $condition = ' - person_id = '. $this->escape($person_id). ' + wawi.tbl_betriebsmittelperson.person_id = '. $this->escape($person_id). ' '; if (is_string($betriebsmitteltyp)) { diff --git a/application/models/system/Fehler_model.php b/application/models/system/Fehler_model.php new file mode 100644 index 000000000..28618f6d9 --- /dev/null +++ b/application/models/system/Fehler_model.php @@ -0,0 +1,14 @@ +dbTable = 'system.tbl_fehler'; + $this->pk = 'fehlercode'; + } +} diff --git a/application/models/system/Issue_model.php b/application/models/system/Issue_model.php new file mode 100644 index 000000000..ab1f9ba6e --- /dev/null +++ b/application/models/system/Issue_model.php @@ -0,0 +1,90 @@ +dbTable = 'system.tbl_issue'; + $this->pk = 'issue_id'; + } + + /** + * Gets issues which are open, i.e. not resolved. + * @param array $fehlercodes only issues for given fehler are retrieved + * @param int $person_id + * @param string $oe_kurzbz + * @param string $fehlercode_extern + * @return object success with issues or error + */ + public function getOpenIssues($fehlercodes, $person_id = null, $oe_kurzbz = null, $fehlercode_extern = null) + { + $params = array($fehlercodes); + // issue exists for a fehlercode (or fehlercode_extern), person_id, oe_kurzbz, if not verarbeitet yet + $qry = 'SELECT issue_id, fehlercode, inhalt, fehlercode_extern, inhalt_extern, person_id, oe_kurzbz, + behebung_parameter, datum, verarbeitetvon, verarbeitetamum + FROM system.tbl_issue + WHERE fehlercode IN ? + AND verarbeitetamum IS NULL'; + + if (!isEmptyString($fehlercode_extern)) + { + $qry .= ' AND fehlercode_extern = ?'; + $params[] = $fehlercode_extern; + } + + if (isset($person_id)) + { + $qry .= ' AND person_id = ?'; + $params[] = $person_id; + } + + if (isset($oe_kurzbz)) + { + $qry .= ' AND oe_kurzbz = ?'; + $params[] = $oe_kurzbz; + } + + return $this->execQuery($qry, $params); + } + + /** + * Gets number of open (non-resolved) issues. + * @param string $fehlercode unique error code + * @param int $person_id if provided, only issues with this person_id are counted. + * @param string $oe_kurzbz if provided, only issues with this oe_kurzbz are counted. + * @param string $fehlercode_extern if provided, only issues with this external fehlercode are counted (for identifying issues from external systems). + * @return Object success with number of issues or error + */ + public function getOpenIssueCount($fehlercode, $person_id = null, $oe_kurzbz = null, $fehlercode_extern = null) + { + $params = array($fehlercode); + // issue exists for a fehlercode (or fehlercode_extern), person_id, oe_kurzbz, if not verarbeitet yet + $qry = 'SELECT count(*) as anzahl_open_issues FROM system.tbl_issue + WHERE fehlercode = ? + AND verarbeitetamum IS NULL'; + + if (!isEmptyString($fehlercode_extern)) + { + $qry .= ' AND fehlercode_extern = ?'; + $params[] = $fehlercode_extern; + } + + if (isset($person_id)) + { + $qry .= ' AND person_id = ?'; + $params[] = $person_id; + } + + if (isset($oe_kurzbz)) + { + $qry .= ' AND oe_kurzbz = ?'; + $params[] = $oe_kurzbz; + } + + return $this->execQuery($qry, $params); + } +} diff --git a/application/views/codex/oehbeitrag.php b/application/views/codex/oehbeitrag.php new file mode 100644 index 000000000..8a697129e --- /dev/null +++ b/application/views/codex/oehbeitrag.php @@ -0,0 +1,68 @@ +load->view( + 'templates/FHC-Header', + array( + 'title' => 'ÖH-Beitragsverwaltung', + 'jquery' => true, + 'jqueryui' => true, + 'bootstrap' => true, + 'fontawesome' => true, + 'sbadmintemplate' => true, + 'tablesorter' => true, + 'dialoglib' => true, + 'ajaxlib' => true, + 'navigationwidget' => true, + 'phrases' => array( + 'person' => array('vorname', 'nachname'), + 'global' => array('unbeschraenkt'), + 'ui' => array('bearbeiten', 'loeschen', 'speichern', 'entfernen'), + 'oehbeitrag' => array('oehbeitraegeFestgelegt', 'fehlerHolenOehbeitraege', 'fehlerHolenSemester', + 'fehlerHinzufuegenOehbeitrag', 'fehlerAktualisierenOehbeitrag', + 'fehlerLoeschenOehbeitrag') + ), + 'customCSSs' => array('public/css/sbadmin2/tablesort_bootstrap.css', 'public/css/codex/oehbeitrag.css'), + 'customJSs' => array('public/js/tablesort/tablesort.js', 'public/js/codex/oehbeitrag.js') + ) +); +?> + + +
+ + widgetlib->widget('NavigationWidget'); ?> + +
+
+
+
+ +
+
+
+
+ +
+
+ + + + + + + + + + + + +
p->t('global', 'gueltigVon')) ?>p->t('global', 'gueltigBis')) ?>p->t('oehbeitrag', 'studierendenbetrag')) ?>p->t('oehbeitrag', 'versicherungsbetrag')) ?>p->t('ui', 'aktion')) ?>
+
+
+
+
+
+ + +load->view('templates/FHC-Footer'); ?> diff --git a/application/views/lehre/anrechnung/approveAnrechnungDetail.php b/application/views/lehre/anrechnung/approveAnrechnungDetail.php index 4603708f4..cd38fd9ac 100644 --- a/application/views/lehre/anrechnung/approveAnrechnungDetail.php +++ b/application/views/lehre/anrechnung/approveAnrechnungDetail.php @@ -25,7 +25,8 @@ $this->load->view( 'bitteBegruendungAngeben', 'empfehlungWurdeAngefordert', 'anrechnungenWurdenGenehmigt', - 'anrechnungenWurdenAbgelehnt' + 'anrechnungenWurdenAbgelehnt', + 'nurLeseberechtigung' ), 'person' => array( 'student', @@ -72,7 +73,7 @@ $this->load->view( -
+
diff --git a/application/views/lehre/anrechnung/approveAnrechnungUebersicht.php b/application/views/lehre/anrechnung/approveAnrechnungUebersicht.php index 850affeea..308f702a3 100644 --- a/application/views/lehre/anrechnung/approveAnrechnungUebersicht.php +++ b/application/views/lehre/anrechnung/approveAnrechnungUebersicht.php @@ -48,7 +48,8 @@ $this->load->view( 'empfehlungWurdeAngefordert', 'empfehlungWurdeAngefordertAusnahmeWoKeineLektoren', 'anrechnungenWurdenGenehmigt', - 'anrechnungenWurdenAbgelehnt' + 'anrechnungenWurdenAbgelehnt', + 'nurLeseberechtigung' ), 'person' => array( 'student', @@ -101,7 +102,7 @@ $this->load->view(
-
+
widgetlib->widget( @@ -226,7 +227,7 @@ $this->load->view( class='fa fa-times'>
- ' target='_blank'> + ' target='_blank'> p->t('global', 'antragAnlegen'); ?>
diff --git a/application/views/lehre/lehrauftrag/approveLehrauftragData.php b/application/views/lehre/lehrauftrag/approveLehrauftragData.php index 7c9669ae3..635fd9da9 100644 --- a/application/views/lehre/lehrauftrag/approveLehrauftragData.php +++ b/application/views/lehre/lehrauftrag/approveLehrauftragData.php @@ -2,7 +2,7 @@ $STUDIENSEMESTER = $studiensemester_selected; $ORGANISATIONSEINHEIT = (isset($organisationseinheit_selected) && !is_null($organisationseinheit_selected)) ? array($organisationseinheit_selected) : $organisationseinheit; -$AUSBILDUNGSSEMESTER = (isset($ausbildungssemester_selected) && !is_null($ausbildungssemester_selected)) ? $ausbildungssemester_selected : '1,2,3,4,5,6,7,8'; +$AUSBILDUNGSSEMESTER = (isset($ausbildungssemester_selected) && !is_null($ausbildungssemester_selected)) ? $ausbildungssemester_selected : '1,2,3,4,5,6,7,8,9,10'; $query = ' SELECT @@ -187,7 +187,7 @@ FROM (SELECT uid FROM - public.tbl_benutzer JOIN public.tbl_mitarbeiter ma + public.tbl_benutzer JOIN public.tbl_mitarbeiter ma ON tbl_benutzer.uid = ma.mitarbeiter_uid WHERE person_id = tmp_projektbetreuung.person_id @@ -268,7 +268,7 @@ FROM ELSE (oe.organisationseinheittyp_kurzbz || \' \' || oe.bezeichnung) END AS "lv_oe_kurzbz", - (vorname || \' \' || nachname) AS "lektor", + (nachname || \' \' || vorname) AS "lektor", TRUNC(pb.stunden, 1) AS "stunden", TRUNC((pb.stunden * pb.stundensatz), 2) AS "betrag", vertrag_id, diff --git a/application/views/lehre/lehrauftrag/orderLehrauftrag.php b/application/views/lehre/lehrauftrag/orderLehrauftrag.php index 4498dacb4..023df1ac7 100644 --- a/application/views/lehre/lehrauftrag/orderLehrauftrag.php +++ b/application/views/lehre/lehrauftrag/orderLehrauftrag.php @@ -160,7 +160,7 @@ $this->load->view( 'Ausbildungssemester_widget', array( DropdownWidget::SELECTED_ELEMENT => $ausbildungssemester_selected, - 'number_semester' => 6 + 'number_semester' => 10 ), array( 'name' => 'ausbildungssemester', diff --git a/application/views/lehre/lehrauftrag/orderLehrauftragData.php b/application/views/lehre/lehrauftrag/orderLehrauftragData.php index 1ccfc55a4..c272c392c 100644 --- a/application/views/lehre/lehrauftrag/orderLehrauftragData.php +++ b/application/views/lehre/lehrauftrag/orderLehrauftragData.php @@ -2,7 +2,7 @@ $STUDIENSEMESTER = $studiensemester_selected; $STUDIENGANG = (isset($studiengang_selected) && !is_null($studiengang_selected)) ? array($studiengang_selected) : $studiengang; -$AUSBILDUNGSSEMESTER = (isset($ausbildungssemester_selected) && !is_null($ausbildungssemester_selected)) ? $ausbildungssemester_selected : '1,2,3,4,5,6,7,8'; +$AUSBILDUNGSSEMESTER = (isset($ausbildungssemester_selected) && !is_null($ausbildungssemester_selected)) ? $ausbildungssemester_selected : '1,2,3,4,5,6,7,8,9,10'; $query = ' SELECT diff --git a/application/views/person/bpk/bpkData.php b/application/views/person/bpk/bpkData.php index 3580ed4bc..1c70b44a6 100644 --- a/application/views/person/bpk/bpkData.php +++ b/application/views/person/bpk/bpkData.php @@ -3,7 +3,8 @@ 'query' => ' SELECT person_id, vorname, nachname, geschlecht, svnr, ersatzkennzeichen, matr_nr, - staatsbuergerschaft, gebdatum, false AS mitarbeiter + staatsbuergerschaft, gebdatum, false AS mitarbeiter, + (SELECT count(*) FROM public.tbl_akte WHERE person_id=tbl_person.person_id) AS anzahl_dokumente FROM public.tbl_person WHERE @@ -14,7 +15,8 @@ UNION SELECT person_id, vorname, nachname, geschlecht, svnr, ersatzkennzeichen, matr_nr, - staatsbuergerschaft, gebdatum, true AS mitarbeiter + staatsbuergerschaft, gebdatum, true AS mitarbeiter, + (SELECT count(*) FROM public.tbl_akte WHERE person_id=tbl_person.person_id) AS anzahl_dokumente FROM public.tbl_person JOIN public.tbl_benutzer USING(person_id) @@ -36,7 +38,8 @@ ucfirst($this->p->t('person', 'matrikelnummer')), ucfirst($this->p->t('person', 'staatsbuergerschaft')), ucfirst($this->p->t('person', 'geburtsdatum')), - 'Mitarbeiter' + 'Mitarbeiter', + 'Anzahl Dokumente' ), 'formatRow' => function($datasetRaw) { diff --git a/application/views/system/fas_udf.php b/application/views/system/fas_udf.php index 8a1200b6a..e6fa396cf 100644 --- a/application/views/system/fas_udf.php +++ b/application/views/system/fas_udf.php @@ -45,7 +45,6 @@ echo $this->udflib->UDFWidget( array( UDFLib::UDF_UNIQUE_ID => 'fasPersonUDFs', - UDFLib::REQUIRED_PERMISSIONS_PARAMETER => 'basis/person', UDFLib::SCHEMA_ARG_NAME => 'public', UDFLib::TABLE_ARG_NAME => 'tbl_person', UDFLib::PRIMARY_KEY_NAME => 'person_id', @@ -70,7 +69,6 @@ echo $this->udflib->UDFWidget( array( UDFLib::UDF_UNIQUE_ID => 'fasPrestudentUDFs', - UDFLib::REQUIRED_PERMISSIONS_PARAMETER => 'basis/person', UDFLib::SCHEMA_ARG_NAME => 'public', UDFLib::TABLE_ARG_NAME => 'tbl_prestudent', UDFLib::PRIMARY_KEY_NAME => 'prestudent_id', @@ -109,3 +107,4 @@ load->view("templates/footer"); ?> + diff --git a/application/views/system/infocenter/dokpruefung.php b/application/views/system/infocenter/dokpruefung.php index 95e383569..f7446895c 100644 --- a/application/views/system/infocenter/dokpruefung.php +++ b/application/views/system/infocenter/dokpruefung.php @@ -22,7 +22,7 @@ titel) ? $dokument->bezeichnung : $dokument->titel ?> - autocomplete="off"> bezeichnung === $dokument->dokument_bezeichnung ? 'selected' : '') . " value = " . $dokumenttyp->dokument_kurzbz . ">" . $dokumenttyp->bezeichnung . "" diff --git a/application/views/system/infocenter/infocenterAbgewiesen.php b/application/views/system/infocenter/infocenterAbgewiesen.php new file mode 100644 index 000000000..8e946e573 --- /dev/null +++ b/application/views/system/infocenter/infocenterAbgewiesen.php @@ -0,0 +1,50 @@ +load->view( + 'templates/FHC-Header', + array( + 'title' => 'Info Center', + 'jquery' => true, + 'jqueryui' => true, + 'jquerycheckboxes' => true, + 'bootstrap' => true, + 'fontawesome' => true, + 'sbadmintemplate' => true, + 'tablesorter' => true, + 'ajaxlib' => true, + 'filterwidget' => true, + 'navigationwidget' => true, + 'dialoglib' => true, + 'phrases' => array( + 'person' => array('vorname', 'nachname'), + 'global' => array('mailAnXversandt'), + 'ui' => array('bitteEintragWaehlen') + ), + 'customCSSs' => array('public/css/sbadmin2/tablesort_bootstrap.css', 'public/css/infocenter/infocenterPersonDataset.css'), + 'customJSs' => array('public/js/bootstrapper.js', 'public/js/infocenter/infocenterPersonDataset.js') + ) + ); +?> + + +
+ + widgetlib->widget('NavigationWidget'); ?> + +
+
+
+
+ +
+
+
+ load->view('system/infocenter/infocenterAbgewiesenData.php'); ?> +
+
+
+
+ + +load->view('templates/FHC-Footer'); ?> diff --git a/application/views/system/infocenter/infocenterAbgewiesenData.php b/application/views/system/infocenter/infocenterAbgewiesenData.php new file mode 100644 index 000000000..dbe0540be --- /dev/null +++ b/application/views/system/infocenter/infocenterAbgewiesenData.php @@ -0,0 +1,87 @@ +config->load('infocenter'); + $ABGEWIESENEN_STATUS = '\'Abgewiesener\''; + $STUDIENGANG_TYP = '\''.$this->variablelib->getVar('infocenter_studiensgangtyp').'\''; + $ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz'); + $STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\''; + $LOGDATA_NAME = '\'Message sent\''; + $LOGDATA_VON = '\'online\''; + +$query = ' + SELECT + p.person_id AS "PersonID", + ps.prestudent_id AS "PreStudentID", + p.vorname AS "Vorname", + p.nachname AS "Nachname", + sg.kurzbzlang as "Studiengang", + pss.insertamum AS "AbgewiesenAm", + ( + SELECT l.zeitpunkt + FROM system.tbl_log l + WHERE l.person_id = p.person_id + AND '. $LOGDATA_NAME .' = ( + SELECT l.logdata->>\'name\' + FROM system.tbl_log l + WHERE l.person_id = p.person_id + ORDER BY l.log_id DESC + LIMIT 1 + ) + AND '. $LOGDATA_VON .' = ( + SELECT l.insertvon + FROM system.tbl_log l + WHERE l.person_id = p.person_id + ORDER BY l.log_id DESC + LIMIT 1 + ) + AND l.zeitpunkt >= pss.insertamum + ORDER BY l.log_id DESC + LIMIT 1 + ) AS "Nachricht" + FROM + public.tbl_prestudentstatus pss + JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_person p USING(person_id) + JOIN public.tbl_studiengang sg USING(studiengang_kz) + WHERE pss.status_kurzbz = '. $ABGEWIESENEN_STATUS .' + AND pss.studiensemester_kurzbz = '. $STUDIENSEMESTER .' + AND (sg.typ IN ('. $STUDIENGANG_TYP .') + OR + sg.studiengang_kz IN ('. $ADDITIONAL_STG .') + ) + ORDER BY "AbgewiesenAm" DESC'; + + $filterWidgetArray = array( + 'query' => $query, + 'app' => InfoCenter::APP, + 'datasetName' => 'abgewiesen', + 'filter_id' => $this->input->get('filter_id'), + 'requiredPermissions' => 'infocenter', + 'datasetRepresentation' => 'tablesorter', + 'columnsAliases' => array( + 'PersonID', + 'PreStudentID', + 'Vorname', + 'Nachname', + 'Studiengang', + 'Abgewiesen am', + 'Nachricht' + ), + + 'formatRow' => function($datasetRaw) { + if ($datasetRaw->{'Nachricht'} === null) + { + $datasetRaw->{'Nachricht'} = 'Nein'; + } + else + { + $datasetRaw->{'Nachricht'} = 'Ja'; + } + + $datasetRaw->{'AbgewiesenAm'} = date_format(date_create($datasetRaw->{'AbgewiesenAm'}),'Y-m-d H:i'); + return $datasetRaw; + } + ); + + echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray); +?> diff --git a/application/views/system/infocenter/infocenterData.php b/application/views/system/infocenter/infocenterData.php index d0e0a7126..f3849d622 100644 --- a/application/views/system/infocenter/infocenterData.php +++ b/application/views/system/infocenter/infocenterData.php @@ -6,7 +6,7 @@ $INTERESSENT_STATUS = '\'Interessent\''; $STUDIENGANG_TYP = '\''.$this->variablelib->getVar('infocenter_studiensgangtyp').'\''; $TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\''; - $LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'New application\', \'Interessent rejected\''; + $LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'Interessent rejected\', \'Attempt to register with existing mailadress\''; $LOGDATA_NAME_PARKED = '\'Parked\''; $LOGDATA_NAME_ONHOLD = '\'Onhold\''; $LOGTYPE_KURZBZ = '\'Processstate\''; @@ -14,6 +14,7 @@ $ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz'); $AKTE_TYP = '\'identity\', \'zgv_bakk\''; $STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\''; + $ORG_NAME = '\'InfoCenter\''; $query = ' SELECT @@ -33,7 +34,7 @@ WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) AS "LastAction", ( @@ -42,7 +43,7 @@ WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) AS "LastActionType", ( @@ -54,12 +55,14 @@ a.dokument_kurzbz in ('.$AKTE_TYP.') ) AS "AnzahlAkte", ( - SELECT l.insertvon + SELECT CASE WHEN sp.nachname IS NULL THEN l.insertvon ELSE sp.nachname END FROM system.tbl_log l + LEFT JOIN public.tbl_benutzer on l.insertvon = tbl_benutzer.uid + LEFT JOIN public.tbl_person sp on tbl_benutzer.person_id = sp.person_id WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) AS "User/Operator", ( @@ -254,13 +257,14 @@ JOIN public.tbl_organisationseinheit USING(oe_kurzbz) WHERE (tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von <= now()) AND (tbl_benutzerfunktion.datum_bis IS NULL OR tbl_benutzerfunktion.datum_bis >= now()) + AND tbl_organisationseinheit.bezeichnung = '.$ORG_NAME.' AND tbl_benutzerfunktion.uid = ( SELECT l.insertvon FROM system.tbl_log l WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) LIMIT 1 @@ -269,8 +273,10 @@ LEFT JOIN ( SELECT tpl.person_id, tpl.zeitpunkt, - tpl.uid AS lockuser + sp.nachname AS lockuser FROM system.tbl_person_lock tpl + JOIN public.tbl_benutzer sb USING (uid) + JOIN public.tbl_person sp ON sb.person_id = sp.person_id WHERE tpl.app = '.$APP.' ) pl USING(person_id) LEFT JOIN ( @@ -408,6 +414,10 @@ { $datasetRaw->{'OnholdDate'} = '-'; } + else + { + $datasetRaw->{'OnholdDate'} = date_format(date_create($datasetRaw->{'OnholdDate'}), 'Y-m-d H:i'); + } if ($datasetRaw->{'StgAbgeschickt'} == null) { @@ -439,13 +449,13 @@ $datasetRaw->{'ZGVMNation'} = '-'; } - if ($datasetRaw->{'InfoCenterMitarbeiter'} === 'InfoCenter') + if ($datasetRaw->{'InfoCenterMitarbeiter'} === null) { - $datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja'; + $datasetRaw->{'InfoCenterMitarbeiter'} = 'Nein'; } else { - $datasetRaw->{'InfoCenterMitarbeiter'} = 'Nein'; + $datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja'; } return $datasetRaw; diff --git a/application/views/system/infocenter/infocenterDetails.php b/application/views/system/infocenter/infocenterDetails.php index 30acb8617..76a371c11 100644 --- a/application/views/system/infocenter/infocenterDetails.php +++ b/application/views/system/infocenter/infocenterDetails.php @@ -101,6 +101,22 @@
+ +
+

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

+
+ person_id . '
'; + } + ?> +
+ +
+
diff --git a/application/views/system/infocenter/infocenterFreigegebenData.php b/application/views/system/infocenter/infocenterFreigegebenData.php index 26c30d718..92f062b62 100644 --- a/application/views/system/infocenter/infocenterFreigegebenData.php +++ b/application/views/system/infocenter/infocenterFreigegebenData.php @@ -5,13 +5,15 @@ $INTERESSENT_STATUS = '\'Interessent\''; $STUDIENGANG_TYP = '\''.$this->variablelib->getVar('infocenter_studiensgangtyp').'\''; $TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\''; - $LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'New application\''; + $LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'Attempt to register with existing mailadress\''; $REJECTED_STATUS = '\'Abgewiesener\''; $ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz'); $STATUS_KURZBZ = '\'Wartender\', \'Bewerber\', \'Aufgenommener\', \'Student\''; $STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\''; + $ORG_NAME = '\'InfoCenter\''; + $IDENTITY = '\'identity\''; - $query = ' +$query = ' SELECT p.person_id AS "PersonId", p.vorname AS "Vorname", @@ -27,7 +29,7 @@ WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) AS "LastAction", ( @@ -36,16 +38,18 @@ WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) AS "LastActionType", ( - SELECT l.insertvon + SELECT CASE WHEN sp.nachname IS NULL THEN l.insertvon ELSE sp.nachname END FROM system.tbl_log l + LEFT JOIN public.tbl_benutzer on l.insertvon = tbl_benutzer.uid + LEFT JOIN public.tbl_person sp on tbl_benutzer.person_id = sp.person_id WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) AS "User/Operator", ( @@ -231,23 +235,34 @@ JOIN public.tbl_organisationseinheit USING(oe_kurzbz) WHERE (tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von <= now()) AND (tbl_benutzerfunktion.datum_bis IS NULL OR tbl_benutzerfunktion.datum_bis >= now()) + AND tbl_organisationseinheit.bezeichnung = '.$ORG_NAME.' AND tbl_benutzerfunktion.uid = ( SELECT l.insertvon FROM system.tbl_log l WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) LIMIT 1 - ) AS "InfoCenterMitarbeiter" + ) AS "InfoCenterMitarbeiter", + ( + SELECT akte.akte_id + FROM public.tbl_akte akte + JOIN public.tbl_dokument USING (dokument_kurzbz) + WHERE akte.person_id = p.person_id + AND dokument_kurzbz = '. $IDENTITY .' + LIMIT 1 + ) AS "AktenId" FROM public.tbl_person p LEFT JOIN ( SELECT tpl.person_id, tpl.zeitpunkt, - tpl.uid AS lockuser + sp.nachname AS lockuser FROM system.tbl_person_lock tpl + JOIN public.tbl_benutzer sb USING (uid) + JOIN public.tbl_person sp ON sb.person_id = sp.person_id WHERE tpl.app = '.$APP.' ) pl USING(person_id) WHERE @@ -311,7 +326,8 @@ 'Reihungstest date', 'ZGV Nation BA', 'ZGV Nation MA', - 'InfoCenter Mitarbeiter' + 'InfoCenter Mitarbeiter', + 'Identitätsnachweis' ), 'formatRow' => function($datasetRaw) { @@ -410,14 +426,27 @@ $datasetRaw->{'ZGVMNation'} = '-'; } - if ($datasetRaw->{'InfoCenterMitarbeiter'} === 'InfoCenter') - { - $datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja'; - } - else + if ($datasetRaw->{'InfoCenterMitarbeiter'} === null) { $datasetRaw->{'InfoCenterMitarbeiter'} = 'Nein'; } + else + { + $datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja'; + } + + if ($datasetRaw->{'AktenId'} !== null) + { + $datasetRaw->{'AktenId'} = sprintf( + 'Identitätsnachweis', + $datasetRaw->{'AktenId'} + ); + } + else + { + $datasetRaw->{'AktenId'} = '-'; + } + return $datasetRaw; }, diff --git a/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php b/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php index 81ddd2594..dbc0124bc 100644 --- a/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php +++ b/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php @@ -5,11 +5,12 @@ $INTERESSENT_STATUS = '\'Interessent\''; $STUDIENGANG_TYP = '\''.$this->variablelib->getVar('infocenter_studiensgangtyp').'\''; $TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\''; - $LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'New application\''; + $LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'Attempt to register with existing mailadress\''; $ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz'); $STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\''; + $ORG_NAME = '\'InfoCenter\''; - $query = ' +$query = ' SELECT p.person_id AS "PersonId", p.vorname AS "Vorname", @@ -25,7 +26,7 @@ WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) AS "LastAction", ( @@ -34,7 +35,7 @@ WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) AS "User/Operator", ( @@ -182,13 +183,14 @@ JOIN public.tbl_organisationseinheit USING(oe_kurzbz) WHERE (tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von <= now()) AND (tbl_benutzerfunktion.datum_bis IS NULL OR tbl_benutzerfunktion.datum_bis >= now()) + AND tbl_organisationseinheit.bezeichnung = '.$ORG_NAME.' AND tbl_benutzerfunktion.uid = ( SELECT l.insertvon FROM system.tbl_log l WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) LIMIT 1 @@ -347,13 +349,13 @@ $datasetRaw->{'ZGVMNation'} = '-'; } - if ($datasetRaw->{'InfoCenterMitarbeiter'} === 'InfoCenter') + if ($datasetRaw->{'InfoCenterMitarbeiter'} === null) { - $datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja'; + $datasetRaw->{'InfoCenterMitarbeiter'} = 'Nein'; } else { - $datasetRaw->{'InfoCenterMitarbeiter'} = 'Nein'; + $datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja'; } return $datasetRaw; diff --git a/application/views/system/infocenter/zgvpruefungen.php b/application/views/system/infocenter/zgvpruefungen.php index a2b2f8da8..253145557 100644 --- a/application/views/system/infocenter/zgvpruefungen.php +++ b/application/views/system/infocenter/zgvpruefungen.php @@ -341,7 +341,6 @@ echo $this->udflib->UDFWidget( array( UDFLib::UDF_UNIQUE_ID => 'infocenterPrestudentUDFs_'.$zgvpruefung->prestudent_id, - UDFLib::REQUIRED_PERMISSIONS_PARAMETER => 'infocenter', UDFLib::SCHEMA_ARG_NAME => 'public', UDFLib::TABLE_ARG_NAME => 'tbl_prestudent', UDFLib::PRIMARY_KEY_NAME => 'prestudent_id', @@ -553,3 +552,4 @@ endforeach; // end foreach zgvpruefungen ?>
+ diff --git a/application/views/system/issues/issues.php b/application/views/system/issues/issues.php new file mode 100644 index 000000000..9812528d5 --- /dev/null +++ b/application/views/system/issues/issues.php @@ -0,0 +1,49 @@ +load->view( + 'templates/FHC-Header', + array( + 'title' => 'Fehler Monitoring', + 'jquery' => true, + 'jqueryui' => true, + 'jquerycheckboxes' => true, + 'bootstrap' => true, + 'fontawesome' => true, + 'sbadmintemplate' => true, + 'tablesorter' => true, + 'ajaxlib' => true, + 'filterwidget' => true, + 'navigationwidget' => true, + 'dialoglib' => true, + 'phrases' => array( + 'ui', + 'fehlermonitoring' + ), + 'customCSSs' => array('public/css/issues/issuesDataset.css', 'public/css/sbadmin2/tablesort_bootstrap.css'), + 'customJSs' => array('public/js/issues/issuesDataset.js', 'public/js/bootstrapper.js'), + ) +); +?> + + +
+ + widgetlib->widget('NavigationWidget'); ?> + +
+
+
+
+ +
+
+
+ load->view('system/issues/issuesData.php'); ?> +
+
+
+
+ + +load->view('templates/FHC-Footer'); ?> diff --git a/application/views/system/issues/issuesData.php b/application/views/system/issues/issuesData.php new file mode 100644 index 000000000..c9a1d3828 --- /dev/null +++ b/application/views/system/issues/issuesData.php @@ -0,0 +1,198 @@ + $funktionen_kurzbz) + { + foreach ($funktionen_kurzbz as $funktion_kurzbz) + { + $query .= " OR (zst.oe_kurzbz = '$oe_kurzbz' AND zst.funktion_kurzbz = '$funktion_kurzbz')"; + } + } + } + + $query .= " THEN TRUE + ELSE FALSE + END AS \"zustaendig\" + FROM system.tbl_fehler_zustaendigkeiten zst + )"; + +$query .= "SELECT issue_id, fehlercode AS \"Fehlercode\", iss.fehlercode_extern AS \"Fehlercode extern\", datum AS \"Datum\", + inhalt AS \"Inhalt\", inhalt_extern AS \"Inhalt extern\", iss.person_id AS \"PersonId\", iss.oe_kurzbz AS \"OE\", + ftyp.bezeichnung_mehrsprachig[".$LANGUAGE_INDEX."] AS \"Fehlertyp\", stat.bezeichnung_mehrsprachig[".$LANGUAGE_INDEX."] AS \"Fehlerstatus\", + verarbeitetvon AS \"Verarbeitet von\",verarbeitetamum AS \"Verarbeitet am\", fr.app AS \"Applikation\", + fr.fehlertyp_kurzbz AS \"Fehlertypcode\", iss.status_kurzbz AS \"Statuscode\", + pers.vorname AS \"Vorname\", pers.nachname AS \"Nachname\", + CASE + WHEN + EXISTS(SELECT 1 + FROM zustaendigkeiten + WHERE fehlercode = iss.fehlercode + AND zustaendig = TRUE) /* If Zuständigkeit is defined for the oe/person, zustaendig. */ + THEN 'Ja' + WHEN + EXISTS(SELECT 1 + FROM zustaendigkeiten + WHERE fehlercode = iss.fehlercode + AND zustaendig = FALSE) /* If Zuständigkeit is defined for different oe/person, not zustaendig. */ + THEN 'Nein' + ELSE 'Ja' /* If no Zuständigkeit defined, zustaendig by default. */ + END AS \"Hauptzuständig\" + FROM system.tbl_issue iss + JOIN system.tbl_fehler fr USING (fehlercode) + JOIN system.tbl_fehlertyp ftyp USING (fehlertyp_kurzbz) + JOIN system.tbl_issue_status stat USING (status_kurzbz) + LEFT JOIN public.tbl_person pers ON iss.person_id = pers.person_id + WHERE EXISTS ( /* if oe or person is specified in fehler_zustaendigkeiten */ + SELECT 1 FROM zustaendigkeiten + WHERE fehlercode = iss.fehlercode + AND zustaendig = TRUE)"; + +// show issue if it is assigend to oe of logged in user or to student of oe of logged in user +if (!isEmptyArray($all_oe_kurzbz_berechtigt)) +{ + $query .= " OR iss.oe_kurzbz IN $ALL_OE_KURZBZ_BERECHTIGT /* if issue is for oe */"; + + $query .= " OR (iss.oe_kurzbz IS NULL AND EXISTS ( /* if person_id of issue is a student of studiengang oe */ + SELECT 1 FROM public.tbl_prestudent ps + JOIN public.tbl_prestudentstatus pss USING (prestudent_id) + JOIN public.tbl_studiengang stg USING (studiengang_kz) + WHERE person_id = iss.person_id + AND stg.oe_kurzbz IN $ALL_OE_KURZBZ_BERECHTIGT + AND pss.status_kurzbz IN $RELEVANT_PRESTUDENT_STATUS + AND NOT EXISTS (SELECT 1 /* irrelevant if already finished studies and studied a while ago */ + FROM public.tbl_prestudentstatus ps_finished + JOIN public.tbl_studiensemester sem_finished USING (studiensemester_kurzbz) + WHERE prestudent_id = ps.prestudent_id + AND status_kurzbz IN ('Absolvent','Abbrecher','Abgewiesener') + AND datum::date + interval '2 months' < NOW() + AND EXISTS (SELECT 1 FROM public.tbl_prestudent /* if more recent prestudent exists, still display the issue */ + JOIN public.tbl_prestudentstatus USING (prestudent_id) + JOIN public.tbl_studiensemester USING (studiensemester_kurzbz) + WHERE tbl_prestudentstatus.status_kurzbz IN $RELEVANT_PRESTUDENT_STATUS + AND person_id = ps.person_id + AND prestudent_id <> ps_finished.prestudent_id + AND tbl_studiensemester.start::date > sem_finished.start::date) + ) + ) + )"; +} + +$query .= " ORDER BY CASE + WHEN iss.status_kurzbz = '".IssuesLib::STATUS_NEU."' THEN 0 + WHEN iss.status_kurzbz = '".IssuesLib::STATUS_IN_BEARBEITUNG."' THEN 1 + ELSE 2 + END, + CASE + WHEN fehlertyp_kurzbz = '".IssuesLib::ERRORTYPE_CODE."' THEN 0 + WHEN fehlertyp_kurzbz = '".IssuesLib::WARNINGTYPE_CODE."' THEN 1 + ELSE 2 + END, + datum DESC, fehlercode, issue_id DESC"; + +$filterWidgetArray = array( + 'query' => $query, + 'app' => 'core', + 'datasetName' => 'issues', + 'filter_id' => $this->input->get('filter_id'), + 'tableUniqueId' => 'issues', + 'requiredPermissions' => 'admin', + 'datasetRepresentation' => 'tablesorter', + 'checkboxes' => 'issue_id', + 'columnsAliases' => array( + 'ID', + ucfirst($this->p->t('fehlermonitoring', 'fehlercode')), + ucfirst($this->p->t('fehlermonitoring', 'fehlercodeExtern')), + ucfirst($this->p->t('global', 'datum')), + ucfirst($this->p->t('fehlermonitoring', 'inhalt')), + ucfirst($this->p->t('fehlermonitoring', 'inhaltExtern')), + 'PersonId', + ucfirst($this->p->t('lehre', 'organisationseinheit')), + ucfirst($this->p->t('fehlermonitoring', 'fehlertyp')), + ucfirst($this->p->t('fehlermonitoring', 'fehlerstatus')), + ucfirst($this->p->t('fehlermonitoring', 'verarbeitetVon')), + ucfirst($this->p->t('fehlermonitoring', 'verarbeitetAm')), + ucfirst($this->p->t('global', 'applikation')), + ucfirst($this->p->t('fehlermonitoring', 'fehlertypcode')), + ucfirst($this->p->t('fehlermonitoring', 'statuscode')), + ucfirst($this->p->t('person', 'vorname')), + ucfirst($this->p->t('person', 'nachname')), + ucfirst($this->p->t('fehlermonitoring', 'hauptzustaendig')) + ), + 'formatRow' => function($datasetRaw) { + + if ($datasetRaw->{'Fehlercode extern'} == null) + { + $datasetRaw->{'Fehlercode extern'} = '-'; + } + + if ($datasetRaw->{'Inhalt'} == null) + { + $datasetRaw->{'Inhalt'} = '-'; + } + + if ($datasetRaw->{'Inhalt extern'} == null) + { + $datasetRaw->{'Inhalt extern'} = '-'; + } + + if ($datasetRaw->{'PersonId'} == null) + { + $datasetRaw->{'PersonId'} = '-'; + } + + if ($datasetRaw->{'OE'} == null) + { + $datasetRaw->{'OE'} = '-'; + } + + if ($datasetRaw->{'Verarbeitet am'} == null) + { + $datasetRaw->{'Verarbeitet am'} = '-'; + } + + if ($datasetRaw->{'Verarbeitet von'} == null) + { + $datasetRaw->{'Verarbeitet von'} = '-'; + } + + return $datasetRaw; + }, + 'markRow' => function($datasetRaw) { + + $mark = ''; + + if ($datasetRaw->Statuscode == IssuesLib::STATUS_BEHOBEN) + $mark = "text-success"; + elseif ($datasetRaw->Statuscode == IssuesLib::STATUS_NEU || $datasetRaw->Statuscode == IssuesLib::STATUS_IN_BEARBEITUNG) + { + if ($datasetRaw->Fehlertypcode == IssuesLib::ERRORTYPE_CODE) + { + $mark = "text-danger"; + } + elseif ($datasetRaw->Fehlertypcode == IssuesLib::WARNINGTYPE_CODE) + { + $mark = "text-warning"; + } + } + + return $mark; + } +); + +echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray); diff --git a/application/views/templates/FHC-Header.php b/application/views/templates/FHC-Header.php index 6a0969cd4..8620f8d1c 100644 --- a/application/views/templates/FHC-Header.php +++ b/application/views/templates/FHC-Header.php @@ -10,6 +10,7 @@ // By default set the parameters to null $title = isset($title) ? $title : null; + $refresh = isset($refresh) ? $refresh : null; $customCSSs = isset($customCSSs) ? $customCSSs : null; $customJSs = isset($customJSs) ? $customJSs : null; $phrases = isset($phrases) ? $phrases : null; @@ -44,8 +45,12 @@ <?php printPageTitle($title); ?> + + + + +
- \ No newline at end of file + + diff --git a/application/views/widgets/dropdown.php b/application/views/widgets/dropdown.php index d9faf1978..51db6d536 100644 --- a/application/views/widgets/dropdown.php +++ b/application/views/widgets/dropdown.php @@ -33,6 +33,7 @@ + > + diff --git a/application/views/widgets/filter/filterOptions.php b/application/views/widgets/filter/filterOptions.php index 6f1dd3885..38b5be98a 100644 --- a/application/views/widgets/filter/filterOptions.php +++ b/application/views/widgets/filter/filterOptions.php @@ -21,8 +21,6 @@
-
-
diff --git a/application/views/widgets/filter/selectFilters.php b/application/views/widgets/filter/selectFilters.php index 4b98c629c..5c8243e3e 100644 --- a/application/views/widgets/filter/selectFilters.php +++ b/application/views/widgets/filter/selectFilters.php @@ -1,17 +1,28 @@ +
+ +
+
+ + p->t('filter', 'filterHinzufuegen')); ?>: + + + + + + +
+ +
+ +
+ +
+ + + +
+
-
- -
- - p->t('filter', 'filterHinzufuegen')); ?>: - - - - - - - - -
+ diff --git a/application/views/widgets/textarea.php b/application/views/widgets/textarea.php index c72b52658..5346fefa8 100644 --- a/application/views/widgets/textarea.php +++ b/application/views/widgets/textarea.php @@ -29,9 +29,11 @@ + >
- \ No newline at end of file + + diff --git a/application/views/widgets/textfield.php b/application/views/widgets/textfield.php index 73b1daa1b..c5ba81710 100644 --- a/application/views/widgets/textfield.php +++ b/application/views/widgets/textfield.php @@ -31,10 +31,12 @@ + value="" > - \ No newline at end of file + + diff --git a/application/widgets/html/HTMLWidget.php b/application/widgets/html/HTMLWidget.php index 9639890ea..0034edfd9 100644 --- a/application/widgets/html/HTMLWidget.php +++ b/application/widgets/html/HTMLWidget.php @@ -6,18 +6,18 @@ class HTMLWidget extends Widget { // The name of the array present in the data array given to the view that will render this widget - const HTML_ARG_NAME = 'HTML'; + const HTML_ARG_NAME = 'HTML'; const HTML_DEFAULT_VALUE = ''; // Default value of the html element - const HTML_NAME = 'name'; // HTML name attribute - const HTML_ID = 'id'; // HTML id attribute - - // External block definition - const EXTERNAL_BLOCK = 'externalBlock'; // External block name - const EXTERNAL_START_BLOCK_HTML_TAG = '
'; // External block start tag - const EXTERNAL_END_BLOCK_HTML_TAG = '
'; // External block end tag - - // HTML attributes - const LABEL = 'title'; + const HTML_NAME = 'name'; // HTML name attribute + const HTML_ID = 'id'; // HTML id attribute + + // External block definition + const EXTERNAL_BLOCK = 'externalBlock'; // External block name + const EXTERNAL_START_BLOCK_HTML_TAG = '
'; // External block start tag + const EXTERNAL_END_BLOCK_HTML_TAG = '
'; // External block end tag + + // HTML attributes + const LABEL = 'title'; const REGEX = 'regex'; const TITLE = 'description'; const REQUIRED = 'required-field'; @@ -26,11 +26,12 @@ class HTMLWidget extends Widget const MAX_LENGTH = 'max-length'; const MIN_LENGTH = 'min-length'; const PLACEHOLDER = 'placeholder'; + const DISABLED = 'disabled'; - /** - * It gets also the htmlArgs array as parameter, it will be used to set the HTML properties - */ - public function __construct($name, $args = array(), $htmlArgs = array()) + /** + * It gets also the htmlArgs array as parameter, it will be used to set the HTML properties + */ + public function __construct($name, $args = array(), $htmlArgs = array()) { parent::__construct($name, $args); @@ -38,11 +39,11 @@ class HTMLWidget extends Widget $this->_setHtmlProperties($htmlArgs); } - /** - * Initialising html properties, such as the id and name attributes of the HTML element - */ - private function _setHtmlProperties($htmlArgs) - { + /** + * Initialising html properties, such as the id and name attributes of the HTML element + */ + private function _setHtmlProperties($htmlArgs) + { // If $htmlArgs wasn't already stored in $this->_args if (!isset($this->_args[HTMLWidget::HTML_ARG_NAME])) { @@ -58,9 +59,9 @@ class HTMLWidget extends Widget $this->_args[HTMLWidget::HTML_ARG_NAME][$argName] = $argValue; } } - } + } - /** + /** * Prints an attribute name and eventually also the value extracted from $htmlArgs * Set $isValuePresent to false the value should not be displayed */ @@ -113,3 +114,4 @@ class HTMLWidget extends Widget } } } + diff --git a/application/widgets/udf/UDFWidget.php b/application/widgets/udf/UDFWidget.php index 7af3dd926..abbbab022 100644 --- a/application/widgets/udf/UDFWidget.php +++ b/application/widgets/udf/UDFWidget.php @@ -6,8 +6,6 @@ */ class UDFWidget extends HTMLWidget { - private $_requiredPermissions; // The required permissions to use this UDF widget - private $_schema; // Schema name private $_table; // Table name private $_primaryKeyName; // Primary key name @@ -26,26 +24,16 @@ class UDFWidget extends HTMLWidget $this->_initUDFWidget($args); // checks parameters and initialize properties - // Let's start if it's allowed - // NOTE: If it is NOT allowed then no data are loaded - if ($this->udflib->isAllowed($this->_requiredPermissions)) - { - $this->_startUDFWidget($args[UDFLib::UDF_UNIQUE_ID]); - } + $this->_startUDFWidget($args[UDFLib::UDF_UNIQUE_ID]); } /** * Called by the WidgetLib, it renders the HTML of the UDF */ - public function display($widgetData) + public function display($widgetData) { - // Let's start if it's allowed - // NOTE: If it is NOT allowed then no data are loaded - if ($this->_ci->udflib->isAllowed($this->_requiredPermissions)) - { - $this->_ci->udflib->displayUDFWidget($widgetData); - } - } + $this->_ci->udflib->displayUDFWidget($widgetData); + } //------------------------------------------------------------------------------------------------------------------ // Private methods @@ -60,18 +48,11 @@ class UDFWidget extends HTMLWidget // If here then everything is ok // Initialize class properties - $this->_requiredPermissions = null; $this->_schema = null; $this->_table = null; $this->_primaryKeyName = null; $this->_primaryKeyValue = null; - // Retrieved the required permissions parameter if present - if (isset($args[UDFLib::REQUIRED_PERMISSIONS_PARAMETER])) - { - $this->_requiredPermissions = $args[UDFLib::REQUIRED_PERMISSIONS_PARAMETER]; - } - // Retrieved the if (isset($args[UDFLib::SCHEMA_ARG_NAME])) { @@ -113,11 +94,6 @@ class UDFWidget extends HTMLWidget show_error('The parameter "'.UDFLib::UDF_UNIQUE_ID.'" must be specified'); } - if (!isset($args[UDFLib::REQUIRED_PERMISSIONS_PARAMETER])) - { - show_error('The parameter "'.UDFLib::REQUIRED_PERMISSIONS_PARAMETER.'" must be specified'); - } - if (!isset($args[UDFLib::SCHEMA_ARG_NAME])) { show_error('The parameter "'.UDFLib::SCHEMA_ARG_NAME.'" must be specified'); @@ -149,7 +125,6 @@ class UDFWidget extends HTMLWidget $this->udflib->setSession( array( UDFLib::UDF_UNIQUE_ID => $udfUniqueId, // table unique id - UDFLib::REQUIRED_PERMISSIONS_PARAMETER => $this->_requiredPermissions, // UDFLib::SCHEMA_ARG_NAME => $this->_schema, // UDFLib::TABLE_ARG_NAME => $this->_table, // UDFLib::PRIMARY_KEY_NAME => $this->_primaryKeyName, // @@ -158,3 +133,4 @@ class UDFWidget extends HTMLWidget ); } } + diff --git a/cis/infoterminal/informationsbildschirm.php b/cis/infoterminal/informationsbildschirm.php index bd3abbe50..caf174846 100644 --- a/cis/infoterminal/informationsbildschirm.php +++ b/cis/infoterminal/informationsbildschirm.php @@ -37,6 +37,11 @@ else $ip = $_SERVER["REMOTE_ADDR"]; } +if(isset($_GET['norefresh'])) + $norefresh = true; +else + $norefresh = false; + $infoscreen = new infoscreen(); $i=-1; $refreshzeit = 40; // Default Refreshzeit @@ -90,9 +95,12 @@ if(isset($infoscreen_content) && isset($infoscreen_content[$aktuellerContentIdx] echo ' - - - + '; + if (!$norefresh) + { + echo ''; + } +echo ' '; //Skript fuer den automatischen bildlauf diff --git a/cis/private/coodle/stammdaten.php b/cis/private/coodle/stammdaten.php index 4b939f728..17e19a4fc 100644 --- a/cis/private/coodle/stammdaten.php +++ b/cis/private/coodle/stammdaten.php @@ -25,6 +25,7 @@ require_once('../../../include/functions.inc.php'); require_once('../../../include/phrasen.class.php'); require_once('../../../include/coodle.class.php'); require_once('../../../include/datum.class.php'); +require_once('../../../include/benutzerberechtigung.class.php'); $user = get_uid(); $sprache = getSprache(); @@ -36,6 +37,22 @@ $message=''; if(!check_lektor($user)) die($p->t('global/keineBerechtigung')); +// Administratoren duerfen die UID als Parameter uebergeben um die Umfragen von anderen Personen anzuzeigen +if(isset($_GET['uid'])) +{ + $rechte = new benutzerberechtigung(); + $rechte->getBerechtigungen($user); + if($rechte->isBerechtigt('admin')) + { + $user = $_GET['uid']; + $getParam = '&uid='.$user; + } + else + $getParam = ''; +} +else + $getParam = ''; + echo ' diff --git a/cis/private/coodle/uebersicht.php b/cis/private/coodle/uebersicht.php index bb515a1ea..94a7b9ab1 100644 --- a/cis/private/coodle/uebersicht.php +++ b/cis/private/coodle/uebersicht.php @@ -27,6 +27,7 @@ require_once('../../../include/functions.inc.php'); require_once('../../../include/phrasen.class.php'); require_once('../../../include/datum.class.php'); require_once('../../../include/benutzer.class.php'); +require_once('../../../include/benutzerberechtigung.class.php'); $lang = getSprache(); @@ -35,6 +36,22 @@ $p = new phrasen($lang); $uid = get_uid(); $message = ''; +// Administratoren duerfen die UID als Parameter uebergeben um die Umfragen von anderen Personen anzuzeigen +if(isset($_GET['uid'])) +{ + $rechte = new benutzerberechtigung(); + $rechte->getBerechtigungen($uid); + if($rechte->isBerechtigt('admin')) + { + $uid = $_GET['uid']; + $getParam = '&uid='.$uid; + } + else + $getParam = ''; +} +else + $getParam = ''; + echo ' @@ -170,7 +187,7 @@ foreach($coodle->result as $c) else $title=$p->t('coodle/bearbeiten'); - $row.= '  + $row.= '  '; } diff --git a/cis/private/lehre/anwesenheitsliste.pdf.php b/cis/private/lehre/anwesenheitsliste.pdf.php index 01ec1c93f..065820c91 100644 --- a/cis/private/lehre/anwesenheitsliste.pdf.php +++ b/cis/private/lehre/anwesenheitsliste.pdf.php @@ -28,6 +28,7 @@ require_once('../../../include/studiensemester.class.php'); require_once('../../../include/functions.inc.php'); require_once('../../../include/erhalter.class.php'); require_once('../../../include/datum.class.php'); +require_once('../../../include/lehrelisthelper.class.php'); if (!$db = new basis_db()) die('Es konnte keine Verbindung zum Server aufgebaut werden.'); @@ -64,183 +65,15 @@ if(isset($_GET['output']) && ($output='odt' || $output='doc')) isset($_GET['stg_kz']) ? $studiengang = $_GET['stg_kz'] : $studiengang = NULL; isset($_GET['lehreinheit_id']) ? $lehreinheit = $_GET['lehreinheit_id'] : $lehreinheit = NULL; - - -$doc = new dokument_export('Anwesenheitslist'); - -// Teilnehmende Gruppen laden -$qry = "SELECT DISTINCT ON(kuerzel, semester, verband, gruppe, gruppe_kurzbz) - UPPER(stg_typ::varchar(1) || stg_kurzbz) as kuerzel, - semester, - verband, - gruppe, - gruppe_kurzbz - FROM campus.vw_lehreinheit - WHERE lehrveranstaltung_id=".$db->db_add_param($lvid, FHC_INTEGER)." - AND studiensemester_kurzbz=".$db->db_add_param($studiensemester); -if($lehreinheit!='') - $qry.=" AND lehreinheit_id=".$db->db_add_param($lehreinheit, FHC_INTEGER); - -$gruppen_string = ''; -if($result = $db->db_query($qry)) -{ - while($row = $db->db_fetch_object($result)) - { - if($gruppen_string!='') - $gruppen_string.=', '; - if($row->gruppe_kurzbz=='') - $gruppen_string.=trim($row->kuerzel.'-'.$row->semester.$row->verband.$row->gruppe); - else - $gruppen_string.=$row->gruppe_kurzbz; - } -} - - -// Verplante Räume laden -$qry = "SELECT distinct(ort_kurzbz) - FROM lehre.tbl_stundenplan - WHERE lehreinheit_id in - ( - SELECT lehreinheit_id - FROM campus.vw_lehreinheit - WHERE lehrveranstaltung_id = ".$db->db_add_param($lvid, FHC_INTEGER)." - AND studiensemester_kurzbz = ".$db->db_add_param($studiensemester)." - )"; -if($lehreinheit!='') - $qry.= " AND tbl_stundenplan.lehreinheit_id = ".$db->db_add_param($lehreinheit, FHC_INTEGER); - - -$raum_string = ''; -if($result = $db->db_query($qry)) -{ - while($row = $db->db_fetch_object($result)) - { - if($raum_string!='') - $raum_string.=', '; - if($row->ort_kurzbz!='') - $raum_string.=$row->ort_kurzbz; - } -} - - $stg = new studiengang(); $stg->load($lv->studiengang_kz); -$studiengang_bezeichnung=$stg->bezeichnung; +$doc = new dokument_export('Anwesenheitslist'); -$stg->getAllTypes(); - -$data = array( - 'gruppen'=>$gruppen_string, - 'bezeichnung'=>$lv->bezeichnung, - 'lehrveranstaltung_id'=>$lv->lehrveranstaltung_id, - 'studiengang'=>$studiengang_bezeichnung, - 'studiengang_kz'=>$lv->studiengang_kz, - 'typ'=>$stg->studiengang_typ_arr[$stg->typ], - 'ects'=>$lv->ects, - 'sprache'=>$lv->sprache, - 'studiensemester'=>$studiensemester, - 'semester'=>$lv->semester, - 'orgform'=>$lv->orgform_kurzbz, - 'raum'=>$raum_string, -); - -//Lehrende der LV laden und in ein Array schreiben -$lehrende = new lehreinheitmitarbeiter(); -$lehrende->getMitarbeiterLV($lvid, $studiensemester, $lehreinheit); -$arr_lehrende = array(); -if (isset($lehrende->result)) -{ - foreach($lehrende->result AS $row) - { - $data[]=array('lehrende'=>array('uid'=>$row->uid,'name'=>$row->vorname.' '.$row->nachname)); - $arr_lehrende[]=mb_strtoupper($row->uid); - } -} - - -//Studierende der LV laden und in ein Array schreiben - -$qry = 'SELECT - distinct on(nachname, vorname, person_id) vorname, nachname, matrikelnr, - tbl_studentlehrverband.semester, tbl_studentlehrverband.verband, tbl_studentlehrverband.gruppe, - (SELECT status_kurzbz FROM public.tbl_prestudentstatus WHERE prestudent_id=tbl_student.prestudent_id ORDER BY datum DESC, insertamum DESC, ext_id DESC LIMIT 1) as status, - tbl_bisio.bisio_id, tbl_bisio.von, tbl_bisio.bis, tbl_student.studiengang_kz AS stg_kz_student, - tbl_note.lkt_ueberschreibbar, tbl_note.anmerkung, tbl_mitarbeiter.mitarbeiter_uid, tbl_person.matr_nr, tbl_studiengang.kurzbzlang - FROM - campus.vw_student_lehrveranstaltung JOIN public.tbl_benutzer USING(uid) - JOIN public.tbl_person USING(person_id) LEFT JOIN public.tbl_student ON(uid=student_uid) - LEFT JOIN public.tbl_mitarbeiter ON(uid=mitarbeiter_uid) - LEFT JOIN public.tbl_studentlehrverband USING(student_uid,studiensemester_kurzbz) - LEFT JOIN lehre.tbl_zeugnisnote on(vw_student_lehrveranstaltung.lehrveranstaltung_id=tbl_zeugnisnote.lehrveranstaltung_id AND tbl_zeugnisnote.student_uid=tbl_student.student_uid AND tbl_zeugnisnote.studiensemester_kurzbz=tbl_studentlehrverband.studiensemester_kurzbz) - LEFT JOIN lehre.tbl_note USING (note) - LEFT JOIN bis.tbl_bisio ON(uid=tbl_bisio.student_uid) - LEFT JOIN public.tbl_studiengang ON(tbl_student.studiengang_kz=tbl_studiengang.studiengang_kz) - WHERE - vw_student_lehrveranstaltung.lehrveranstaltung_id='.$db->db_add_param($lvid, FHC_INTEGER).' AND - vw_student_lehrveranstaltung.studiensemester_kurzbz='.$db->db_add_param($studiensemester); - -if($lehreinheit!='') - $qry.=' AND vw_student_lehrveranstaltung.lehreinheit_id='.$db->db_add_param($lehreinheit, FHC_INTEGER); - -$qry.=' ORDER BY nachname, vorname, person_id, tbl_bisio.bis DESC'; - -$stsem_obj = new studiensemester(); -$stsem_obj->load($studiensemester); -$stsemdatumvon = $stsem_obj->start; -$stsemdatumbis = $stsem_obj->ende; - -$erhalter = new erhalter(); -$erhalter->getAll(); - -$a_o_kz = '9'.sprintf("%03s", $erhalter->result[0]->erhalter_kz); //Stg_Kz AO-Studierende auslesen (9005 fuer FHTW) -$anzahl_studierende = 0; -$datum = new datum(); -$zusatz = ''; - -if($result = $db->db_query($qry)) -{ - while($row = $db->db_fetch_object($result)) - { - if($row->status!='Abbrecher' && $row->status!='Unterbrecher') - { - $anzahl_studierende++; - - if($row->status=='Incoming') //Incoming - $zusatz='(i)'; - else - $zusatz=''; - - if($row->bisio_id!='' && $row->status!='Incoming' && ($row->bis > $stsemdatumvon || $row->bis=='') && $row->von < $stsemdatumbis) //Outgoing - $zusatz.='(o)(ab '.$datum->formatDatum($row->von,'d.m.Y').')'; - - if($row->lkt_ueberschreibbar == 'f') // angerechnet / intern angerechnet / nicht zugelassen - $zusatz.= '('. $row->anmerkung. ')'; - - if($row->mitarbeiter_uid!='') //mitarbeiter - $zusatz.='(ma)'; - - if($row->stg_kz_student==$a_o_kz) //Außerordentliche Studierende - $zusatz.='(a.o.)'; - - $data[]=array('student'=>array( - 'vorname'=>$row->vorname, - 'nachname'=>$row->nachname, - 'personenkennzeichen'=>trim($row->matrikelnr), - 'matr_nr'=>$row->matr_nr, - 'semester'=>$row->semester, - 'verband'=>trim($row->verband), - 'gruppe'=>trim($row->gruppe), - 'zusatz'=>$zusatz, - 'studiengang_kurzbz'=>$row->kurzbzlang - )); - } - } - //Anzahl Studierende in Array $data (an erster Stelle) einfuegen - $data = array_reverse($data, true); - $data['anzahl_studierende'] = $anzahl_studierende; - $data = array_reverse($data, true); -} +$lehrelisthelper = new LehreListHelper($db, $studiensemester, $lvid, $lv, $stg, $lehreinheit); +$arr_lehrende = $lehrelisthelper->getArr_Lehrende(); +$data = $lehrelisthelper->getData(); +$studentuids = $lehrelisthelper->getStudentUids(); $doc->addDataArray($data,'anwesenheitsliste'); if($lehreinheit!='') diff --git a/cis/private/lehre/anwesenheitsliste.php b/cis/private/lehre/anwesenheitsliste.php index bc7d96083..8b1f28408 100644 --- a/cis/private/lehre/anwesenheitsliste.php +++ b/cis/private/lehre/anwesenheitsliste.php @@ -34,6 +34,7 @@ require_once('../../../include/lehrveranstaltung.class.php'); require_once('../../../include/phrasen.class.php'); require_once('../../../include/vertrag.class.php'); + require_once '../../../include/covid/covidhelper.class.php'; $sprache = getSprache(); $p=new phrasen($sprache); @@ -61,7 +62,8 @@ $stsem = $_GET['stsem']; else die($p->t('anwesenheitsliste/studiensemesterIstUngueltig')); - + +$covidhelper = new CovidHelper(); ?> @@ -69,6 +71,11 @@ + @@ -84,6 +91,7 @@ isUdfDefined()) ? '' . $p->t('anwesenheitsliste/gesamtliste') . ' ' . $lv->bezeichnung . '' : ''; $aw_content .= "".$p->t('anwesenheitsliste/gesamtliste')." $lv->bezeichnung"; $awbild_content .= "".$p->t('anwesenheitsliste/gesamtliste')." $lv->bezeichnung"; $nt_content .= "".$p->t('anwesenheitsliste/gesamtliste')." $lv->bezeichnung"; @@ -151,6 +160,7 @@ } } + $covid_content .= ($covidhelper->isUdfDefined()) ? '   ' . $kurzbz . ' - ' . $lehrform . ' - ' . $gruppen . ' (' . $lektoren . ')' : ''; $aw_content .= "   $kurzbz - $lehrform - $gruppen ($lektoren)"; $awbild_content .= "   $kurzbz - $lehrform - $gruppen ($lektoren)"; $nt_content .= "   $kurzbz - $lehrform - $gruppen ($lektoren)"; @@ -186,6 +196,7 @@ } } + $covid_content .= ($covidhelper->isUdfDefined()) ? '   ' . $kurzbz . ' - ' . $lehrform . ' - ' . $gruppen . ' (' . $lektoren . ')' : ''; $aw_content .= "   $kurzbz - $lehrform - $gruppen ($lektoren)"; $awbild_content .= "   $kurzbz - $lehrform - $gruppen ($lektoren)"; $nt_content .= "   $kurzbz - $lehrform - $gruppen ($lektoren)"; @@ -198,6 +209,11 @@ } else { + if($covid_content!='') + $covid_content = "".$covid_content."

".$p->t('anwesenheitsliste/covidstatuslisten')."

"; + else + $covid_content = ($covidhelper->isUdfDefined()) ? $p->t('anwesenheitsliste/keineStudentenVorhanden') : ''; + if($aw_content!='') $aw_content = "".$aw_content."

".$p->t('anwesenheitsliste/anwesenheitslisten')."

"; else @@ -221,17 +237,24 @@ $aw_content=''; if(defined('CIS_ANWESENHEITSLISTE_ANWESENHEITSLISTE_BILD_ANZEIGEN') && !CIS_ANWESENHEITSLISTE_ANWESENHEITSLISTE_BILD_ANZEIGEN) $awbild_content=''; - + if( defined('CIS_SHOW_COVID_STATUS') && !CIS_SHOW_COVID_STATUS ) + { + $covid_content = ''; + } + echo " - + + + +
$aw_content$covid_content
$awbild_content
$nt_content
"; diff --git a/cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php b/cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php index 407502178..3ff1f4695 100644 --- a/cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php +++ b/cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php @@ -45,6 +45,8 @@ require_once ('../../../../include/note.class.php'); require_once ('../../../../include/notenschluessel.class.php'); require_once ('../../../../include/studienplan.class.php'); require_once ('../../../../include/addon.class.php'); +require_once ('../../../../include/mobilitaet.class.php'); +require_once ('../../../../include/student.class.php'); $summe_stud = 0; $summe_t2 = 0; @@ -80,6 +82,8 @@ if (! $lv_obj->load($lvid)) // Studiengang laden $stg_obj = new studiengang($lv_obj->studiengang_kz); +$stg_obj->studiengang_kz; + $datum_obj = new datum(); if (isset($_GET['stsem'])) @@ -732,6 +736,7 @@ else die($p->t('global/fehleraufgetreten')); // Kopfzeile + echo ' @@ -1113,8 +1118,8 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG campus.vw_student_lehrveranstaltung JOIN campus.vw_student USING(uid) WHERE - studiensemester_kurzbz = " . $db->db_add_param($stsem) . " - AND lehrveranstaltung_id = " . $db->db_add_param($lvid) . " + studiensemester_kurzbz = ". $db->db_add_param($stsem). " + AND lehrveranstaltung_id = ". $db->db_add_param($lvid). " ORDER BY nachname, vorname "; if ($result_stud = $db->db_query($qry_stud)) @@ -1122,11 +1127,29 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG $i = 1; $errorshown = false; $summe_stud = $db->db_num_rows($result_stud); + + //Ergänzung um Mobility-Eintrag (d.d.) while ($row_stud = $db->db_fetch_object($result_stud)) { $grades[$row_stud->uid]['vorname'] = $row_stud->vorname; $grades[$row_stud->uid]['nachname'] = $row_stud->nachname; + $student = new student(); + $student->load($row_stud->uid); + $student->result[]= $student; + $prestudent_id = $student->prestudent_id; + + $mobility = new mobilitaet(); + $mobility->loadPrestudent($prestudent_id); + $output = $mobility->result; + $eintrag = ''; + foreach ($output as $k) + { + if(($k->mobilitaetstyp_kurzbz == 'GS') && ($k->studiensemester_kurzbz == $stsem)) + $eintrag = ' (d.d.)'; + } + $grades[$row_stud->uid]['mobility'] = $eintrag; + // Noten aus Uebungstool $le = new lehreinheit(); $le->load_lehreinheiten($lvid, $stsem); @@ -1167,12 +1190,14 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG $anzahlChanged = 0; foreach ($grades as $uid => $data) + //Ausgabe Array { + $htmlstring .= ' - '; + '; // Bereits eingetragene Note ermitteln if ($lvgesamtnote = new lvgesamtnote($lvid, $uid, $stsem)) @@ -1195,6 +1220,7 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG $negativeteilnote = false; $note_zusatztext = ''; $note_zusatztext_tooltip = ''; + $ueberschreibbar = false; //Damit keine Notice Fehler kommt muss Variable bei jeden Schleifendurchgang neue gesetzt und berechnet werden. if (isset($data['grades'])) { @@ -1619,5 +1645,11 @@ echo $htmlstring;
+
+
+

Legende

+

(d.d.)... Double Degree Program

+
+ diff --git a/cis/private/lehre/covidstatusliste.php b/cis/private/lehre/covidstatusliste.php new file mode 100644 index 000000000..affe2b929 --- /dev/null +++ b/cis/private/lehre/covidstatusliste.php @@ -0,0 +1,166 @@ + + */ +require_once('../../../config/cis.config.inc.php'); +require_once('../../../include/lehrveranstaltung.class.php'); +require_once('../../../include/lehreinheitgruppe.class.php'); +require_once('../../../include/lehreinheit.class.php'); +require_once('../../../include/benutzerberechtigung.class.php'); +require_once('../../../include/lehreinheitmitarbeiter.class.php'); +require_once('../../../include/studiensemester.class.php'); +require_once('../../../include/functions.inc.php'); +require_once('../../../include/erhalter.class.php'); +require_once('../../../include/datum.class.php'); +require_once('../../../include/lehrelisthelper.class.php'); +require_once('../../../include/covid/covidhelper.class.php'); + +$debug = false; + +if (!$db = new basis_db()) + die('Es konnte keine Verbindung zum Server aufgebaut werden.'); + +$user=get_uid(); + +$berechtigung = new benutzerberechtigung(); +$berechtigung->getBerechtigungen($user); + +if(isset($_GET['lvid']) && is_numeric($_GET['lvid'])) + $lvid = $_GET['lvid']; +else + die('Eine gueltige LvID muss uebergeben werden'); + +$lv = new lehrveranstaltung(); +$lv->load($lvid); + +if(isset($_GET['stsem'])) + $studiensemester = $_GET['stsem']; +else + die('Eine Studiensemester muss uebergeben werden'); + +if( !$berechtigung->isBerechtigt('admin') + && !$berechtigung->isBerechtigt('assistenz') + && !$berechtigung->isBerechtigt('lehre', $lv->oe_kurzbz, 's') + && !check_lektor_lehrveranstaltung($user,$lvid,$studiensemester)) + die('Sie muessen LektorIn der LV sein oder das Recht "ADMIN", "ASSISTENZ" oder "LEHRE" haben, um diese Seite aufrufen zu koennen'); + +isset($_GET['stg_kz']) ? $studiengang = $_GET['stg_kz'] : $studiengang = NULL; +isset($_GET['lehreinheit_id']) ? $lehreinheit = $_GET['lehreinheit_id'] : $lehreinheit = NULL; + +$stg = new studiengang(); +$stg->load($lv->studiengang_kz); + +$lehrelisthelper = new LehreListHelper($db, $studiensemester, $lvid, $lv, $stg, $lehreinheit); +$arr_lehrende = $lehrelisthelper->getArr_Lehrende(); +$data = $lehrelisthelper->getData(); +$studentuids = $lehrelisthelper->getStudentUids(); + +$covidhelper = new CovidHelper(); +$covidhelper->fetchCovidStatus($studentuids); +$covidstatus = $covidhelper->getCovidStatus(); + +$now = new DateTime('now', new DateTimeZone('Europe/Vienna')); +header('Content-Type: text/html; charset=utf-8'); +?> + + + + FHC - Nachweisliste + + + + + +
+
+
+ +

Nachweisliste ""

+
    +
  • Gruppen:
  • +
  • Studiensemester:
  • +
  • Lehrende: getLehrende_String(); ?>
  • +
  • generiert: format('d.m.Y H:i'); ?>
  • +
  • Anzahl der Studierenden:
  • +
+ +
' . $db->convert_html_chars($uid) . ' ' . $db->convert_html_chars($data['nachname']) . '' . $db->convert_html_chars($data['vorname']) . '' . $db->convert_html_chars($data['vorname']) . $db->convert_html_chars($data['mobility']) .'
+ + + + + + + + + + + + + + + + + + + + +
lfd.Nr.NameKennzeichenGruppeNachweis
getIconHtml($tmpstudent['uid']); ?>
+ + + + + +
+
+ +
+
+
+				
+
+ +
+
+ + + + + + \ No newline at end of file diff --git a/cis/private/lehre/ects/Beispiel_Change_Management.pdf b/cis/private/lehre/ects/Beispiel_Change_Management.pdf deleted file mode 100644 index 31520b52c..000000000 Binary files a/cis/private/lehre/ects/Beispiel_Change_Management.pdf and /dev/null differ diff --git a/cis/private/lehre/ects/Beispiel_Computerarchitektur.pdf b/cis/private/lehre/ects/Beispiel_Computerarchitektur.pdf deleted file mode 100644 index 291500516..000000000 Binary files a/cis/private/lehre/ects/Beispiel_Computerarchitektur.pdf and /dev/null differ diff --git a/cis/private/lehre/ects/Beispiel_ITProjektarbeit_at.pdf b/cis/private/lehre/ects/Beispiel_ITProjektarbeit_at.pdf deleted file mode 100644 index 2f817ea95..000000000 Binary files a/cis/private/lehre/ects/Beispiel_ITProjektarbeit_at.pdf and /dev/null differ diff --git a/cis/private/lehre/ects/Beispiel_ITProjektarbeit_en.pdf b/cis/private/lehre/ects/Beispiel_ITProjektarbeit_en.pdf deleted file mode 100644 index d1e7e8ef2..000000000 Binary files a/cis/private/lehre/ects/Beispiel_ITProjektarbeit_en.pdf and /dev/null differ diff --git a/cis/private/lehre/ects/Beispiel_Projektmarketing.pdf b/cis/private/lehre/ects/Beispiel_Projektmarketing.pdf deleted file mode 100644 index 106a60428..000000000 Binary files a/cis/private/lehre/ects/Beispiel_Projektmarketing.pdf and /dev/null differ diff --git a/cis/private/lehre/ects/beispiele.php b/cis/private/lehre/ects/beispiele.php deleted file mode 100644 index 12e9984a8..000000000 --- a/cis/private/lehre/ects/beispiele.php +++ /dev/null @@ -1,78 +0,0 @@ -, - * Andreas Oesterreicher and - * Rudolf Hangl . - */ - -require_once('../../../../config/cis.config.inc.php'); -require_once('../../../../include/functions.inc.php'); -require_once('../../../../include/phrasen.class.php'); - -$sprache = getSprache(); -$p= new phrasen($sprache); - -?> - - - - - -<?php echo $p->t('courseInformation/ectsLvInfo');?> - - - -

t('courseInformation/lvInfoBeispiele');?>

- - - - - -
-   - - -
- - - - - - -
- -
- - - \ No newline at end of file diff --git a/cis/private/lehre/ects/freigabe.php b/cis/private/lehre/ects/freigabe.php deleted file mode 100644 index 3e0a242f3..000000000 --- a/cis/private/lehre/ects/freigabe.php +++ /dev/null @@ -1,363 +0,0 @@ -, - * Andreas Oesterreicher - * Rudolf Hangl < rudolf.hangl@technikum-wien.at > - * Gerald Simane-Sequens < gerald.simane-sequens@technikum-wien.at > - */ - -/* - @author Andres Oesterreicher - @date 20.10.2005 - @brief Formular zum Freigeben der LV Informationen aus der tabelle tbl_lvinfo - - @edit 08-11-2006 Versionierung entfernt. Studiensemester = WS2007 - 03-01-2006 Anpassung an neue DB -*/ - -require_once('../../../../config/cis.config.inc.php'); -require_once('../../../../include/basis_db.class.php'); -require_once('../../../../include/functions.inc.php'); -require_once('../../../../include/studiensemester.class.php'); -require_once('../../../../include/lvinfo.class.php'); -require_once('../../../../include/phrasen.class.php'); -require_once('../../../../include/benutzerberechtigung.class.php'); - -$sprache = getSprache(); -$p = new phrasen($sprache); - -if (!$db = new basis_db()) - die($p->t('global/fehlerBeimOeffnenDerDatenbankverbindung')); -$user = get_uid(); - -$rechte = new benutzerberechtigung(); -$rechte->getBerechtigungen($user); - -//if(!check_lektor($user)) -// die('
'.$p->t('global/keineBerechtigungFuerDieseSeite').'
'); - - /* WriteLog($qry,$uid) - * @brief Schreib die Querys im format: uid - datum - qry ins LogFile - * @param $qry Query anweisung - * $uid Username - * @return true wenn ok false wenn fehler beim oeffnen - */ - function WriteLog($qry,$uid) - { - if($fp=fopen(LOG_PATH.'lvinfo.log',"a")) - { - fwrite($fp,"\n"); - fwrite($fp,$uid." ". date("d.m.Y - H:i:s") . " ". $qry); - fclose($fp); - return true; - } - else - return false; - } - - - $lv=trim((isset($_REQUEST['lv']) ? $_REQUEST['lv']:'')); - - //Studiengang der Angezeigt werden soll - $stg=trim((isset($_REQUEST['stg']) ? $_REQUEST['stg']:'')); - //Semester das angezeigt werden soll - $sem=trim((isset($_REQUEST['sem']) ? $_REQUEST['sem']:'')); - - if (!$rechte->isBerechtigt('lehre/lvinfo_freigabe',$stg)) - die ($rechte->errormsg); - - if(isset($_GET["lv"])) //Id des DS der freigegeben/nicht freigegeben werden soll - $id=$_GET["lv"]; - - if(isset($_GET["del"])) //Wenn diese Variable gesetzt ist dann wird DS mit $idde und $iden geloescht - $del=$_GET["del"]; - - if(isset($_GET["changestat"])) //Wenn diese Variable gesetzt ist dann wird DS mit $id freigegeben/nicht freigegeben - $changestat=$_GET["changestat"]; - - if(isset($_POST["status"]) && $_POST["status"] =='changestg') - unset($sem); - - if(isset($del) && isset($lv)) - { - //Loeschen der beiden Datensaetze - - $lvinfo_obj = new lvinfo(); - $db->db_query('BEGIN'); - if($lvinfo_obj->delete($lv)) - { - if(!WriteLog($lvinfo_obj->lastqry,$user)) - { - echo "
".$p->t('courseInformation/fehlerBeimSchreibenDesLog')."
"; - } - $db->db_query('COMMIT'); - } - else - { - $db->db_query('ROLLBACK'); - echo "
".$p->t('global/fehleraufgetreten')."
"; - } - } - - if(isset($changestat) && isset($lv) && isset($_GET['lang'])) - { - //Setzt die Spalte genehmigt auf den entsprechenden Wert - //=Wenn Hackerl angeklickt wird - - $qry="SELECT genehmigt FROM campus.tbl_lvinfo WHERE lehrveranstaltung_id=".$db->db_add_param($lv)." AND sprache="; - if($_GET['lang']=='de') - $qry.= $db->db_add_param(ATTR_SPRACHE_DE); - else - $qry.= $db->db_add_param(ATTR_SPRACHE_EN); - - if($result=$db->db_query($qry)) - { - if($row=$db->db_fetch_object($result)) - { - $wert = $row->genehmigt=='t'?'false':'true'; - $qry="UPDATE campus.tbl_lvinfo SET genehmigt=$wert - WHERE lehrveranstaltung_id=".$db->db_add_param($lv)." AND sprache="; - if($_GET['lang']=='de') - $qry .= $db->db_add_param(ATTR_SPRACHE_DE); - else - $qry .= $db->db_add_param(ATTR_SPRACHE_EN); - - if($db->db_query($qry)) - WriteLog($qry,$user); - else - echo $p->t('global/fehlerBeimLesenAusDatenbank'); - } - else - echo $p->t('global/fehlerBeimLesenAusDatenbank'); - } - else - echo $p->t('global/fehlerBeimLesenAusDatenbank'); - } - -?> - - - - - - - - - - - - - -<?php echo $p->t('courseInformation/ectsLvInfo');?> - - - -

t('courseInformation/lvInfoFreigabe');?>

- - - - - - -
-   - - -
- - - "; - echo ""; - echo ""; - //stg Drop Down - $qry = "SELECT distinct tbl_studiengang.studiengang_kz, UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as kurzbzlang FROM campus.tbl_lvinfo, lehre.tbl_lehrveranstaltung, public.tbl_studiengang - WHERE tbl_lvinfo.aktiv=true - AND tbl_lvinfo.lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id - AND tbl_lehrveranstaltung.studiengang_kz=tbl_studiengang.studiengang_kz - ORDER by kurzbzlang"; - if(!$result=$db->db_query($qry)) - die ('
'.$p->t('global/fehlerBeimLesenAusDatenbank').'
'); - - echo $p->t('global/studiengang')." "; - - if(!$vorhanden) //Wenn $stg einen Wert enthaelt der nicht in der Liste vorkommt wird der erste Eintrag der Liste ausgewaehlt - $stg=$firststg; - - //Semester Drop Down - $qry = "SELECT distinct semester FROM campus.tbl_lvinfo, lehre.tbl_lehrveranstaltung - WHERE tbl_lvinfo.aktiv=true - AND tbl_lvinfo.lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id - AND tbl_lehrveranstaltung.studiengang_kz=".$db->db_add_param($stg)." - ORDER by semester"; - if(!$result=$db->db_query($qry)) - die ("
".$p->t('global/fehleraufgetreten')."
"); - - echo " ".$p->t('global/semester')." "; - if(!$vorhanden) //Wenn $sem einen Wert enthaelt der nicht in der Liste vorkommt wird der erste Eintrag der Liste ausgewaehlt - $sem=$firstsem; - - //Anzeigen der Liste mit den LV - Informationen - ?> -

- - - - -
- - - - - - - - - - - - - - db_add_param($stg)." - AND semester=".$db->db_add_param($sem)." AND tbl_lvinfo.aktiv=true - AND tbl_lvinfo.sprache=".$db->db_add_param(ATTR_SPRACHE_DE)." - ORDER BY tbl_lehrveranstaltung.bezeichnung ASC"; - - if(!$result=$db->db_query($qry)) - die("
Fehler bei einer Datenbankabfrage
"); - - $i=-1; - while($row=$db->db_fetch_object($result)) - { - $i++; - $qry1="SELECT *, - tbl_lehrveranstaltung.bezeichnung as bezeichnung, - tbl_lvinfo.updatevon as updatevon - FROM - campus.tbl_lvinfo - JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id) - WHERE - tbl_lvinfo.sprache=".$db->db_add_param(ATTR_SPRACHE_EN)." - AND lehrveranstaltung_id=".$db->db_add_param($row->lehrveranstaltung_id); - - if(!$result1=$db->db_query($qry1)) - die("
Fehler bei einer Datenbankabfrage
"); - - if(!$row1=$db->db_fetch_object($result1)) - die("
Fehler bei einer Datenbankabfrage
"); - - $qry2="SELECT vorname, nachname FROM campus.vw_mitarbeiter WHERE uid=".$db->db_add_param($row->updatevon); - - $style=''; - if ($lv==$row->lehrveranstaltung_id) - $style='style="background-color: #AAA; border-top: 1px solid black; border-bottom: 1px solid black"'; - - $bearbeitet=$row->updatevon; - if($result2=$db->db_query($qry2)) - if($row2=$db->db_fetch_object($result2)) - $bearbeitet=$row2->vorname.' '.$row2->nachname; - echo "\n"; - echo ""."\n"; - echo ""."\n"; - echo ""."\n"; - //echo ""."\n"; - echo ""."\n"; - echo ""."\n"; - echo ""."\n"; - echo ""."\n"; - echo ""; - } - ?> - -
t('global/lehrveranstaltung');?>t('courseInformation/bearbeitetVon');?>t('courseInformation/updateAm');?>t('global/anzeigen');?>t('courseInformation/freigeben');?>
lehrveranstaltung_id' onClick='return ask();'>Delete$row->bezeichnung$row->studiensemester_kurzbz$bearbeitet".$row->amum."German "; - echo "EnglishDE lehrveranstaltung_id&lang=de\";' ".($row->genehmigt=='t'?'checked':'').">"."\n"; - echo "lehrveranstaltung_id&lang=en\";' ".($row1->genehmigt=='t'?'checked':'')."> EN
-
- - - diff --git a/cis/private/lehre/ects/index.php b/cis/private/lehre/ects/index.php deleted file mode 100644 index 3253aa074..000000000 --- a/cis/private/lehre/ects/index.php +++ /dev/null @@ -1,914 +0,0 @@ -, - * Andreas Oesterreicher - * Rudolf Hangl < rudolf.hangl@technikum-wien.at > - * Gerald Simane-Sequens < gerald.simane-sequens@technikum-wien.at > - */ - -/* @author Andres Oesterreicher - @date 20.10.2005 - @brief Formular zum eintragen der ECTS Information auf Deutsch und Englisch - Die Informationen werden in der Tabelle tbl_lvinfo gespeichert. - - @edit 08-11-2006 Versionierung entfernt: Studiensemester=WS2007 - 02-01-2007 Umstellung auf die neue DB -*/ -require_once('../../../../config/cis.config.inc.php'); -require_once('../../../../config/global.config.inc.php'); -require_once('../../../../include/basis_db.class.php'); -require_once('../../../../include/functions.inc.php'); -require_once('../../../../include/studiengang.class.php'); -require_once('../../../../include/lehrveranstaltung.class.php'); -require_once('../../../../include/lvinfo.class.php'); -require_once('../../../../include/studiensemester.class.php'); -require_once('../../../../include/phrasen.class.php'); -require_once('../../../../include/safehtml/safehtml.class.php'); -require_once('../../../../include/benutzerberechtigung.class.php'); -require_once('../../../../include/lehreinheitmitarbeiter.class.php'); -require_once('../../../../include/mail.class.php'); -require_once('../../../../include/benutzer.class.php'); - -$user = get_uid(); - -$rechte = new benutzerberechtigung(); -$rechte->getBerechtigungen($user); - -$sprache1 = getSprache(); -$p=new phrasen($sprache1); - -if (!$db = new basis_db()) - die($p->t('global/fehlerBeimOeffnenDerDatenbankverbindung')); - - $output = ''; - $errormsg = ''; - $okmsg=''; - -$lv = ''; - -?> - - - - - -<?php echo $p->t('courseInformation/ectsInformation')?> - - - - -50) - return substr($string,0,47)."..."; - else - return $string; - } - - if(isset($_GET['lvid'])) - $lv=$_GET['lvid']; - - //Variablenuebernahme - if(isset($_POST['lv'])) //LehrveranstaltungsID - { - $lv = $_POST['lv']; - $lv_obj = new lehrveranstaltung(); - $lv_obj->load($lv); - $oe_kurzbz = $lv_obj->oe_kurzbz; - } - - if(isset($_GET['lvid'])) - { - $lv_obj = new lehrveranstaltung(); - $lv_obj->load($lv); - - if(!isset($stg)) - { - $stg = $lv_obj->studiengang_kz; - $oe_kurzbz = $lv_obj->oe_kurzbz; - } - if(!isset($sem)) - $sem = $lv_obj->semester; - } - else - { - $stg = ''; - } - - if(isset($_POST['stg'])) - { - $stg = $_POST['stg']; - if(!isset($oe_kurzbz)) - { - $oe = new studiengang(); - $oe->load($stg); - $oe_kurzbz = $oe->oe_kurzbz; - } - } - - if(!isset($sem) && isset($_POST['sem'])) - $sem = $_POST['sem']; - - - if(isset($_POST['changed'])) //Gibt an welches der Auswahlfelder geaendert wurde - $changed = $_POST['changed']; - - if(isset($_POST['status'])) - $status = $_POST['status']; - -// if(isset($_POST["freigeben"])) //Wird auf 'ja' gesetzt wenn gleich freigegebenwerden soll nach dem Speichern -// $freigeben = $_POST["freigeben"]; - - if(isset($_POST['sprache'])) //Sprache fuer dieses Lehrfach - $sprache = $_POST['sprache']; - - // Berechtigungen ueberpruefen - $lektor_der_lv = false; - $lektor = new lehreinheitmitarbeiter(); - $lektor_der_lv = $lektor->existsLV($lv, null, $user); - - // Bearbeiten nur moeglich, wenn Lektor der LV und bearbeiten fuer Lektoren aktiviert ist - // Oder Berechtigung zum Bearbeiten eingetragen ist - $berechtigt = true; - if(!( - (!defined('CIS_LEHRVERANSTALTUNG_LVINFO_LEKTOR_EDIT') && $lektor_der_lv) - || (defined('CIS_LEHRVERANSTALTUNG_LVINFO_LEKTOR_EDIT') && CIS_LEHRVERANSTALTUNG_LVINFO_LEKTOR_EDIT==true && $lektor_der_lv) - || $rechte->isBerechtigt('lehre/lvinfo',$oe_kurzbz) - || $rechte->isBerechtigt('lehre/lvinfo',$stg) - ) - ) - { - $berechtigt = false; - } - - //Variablen fuer das Formular - $lehrziele_de = (isset($_POST['lehrziele_de'])?$_POST['lehrziele_de']:''); - $lehrinhalte_de = (isset($_POST['lehrinhalte_de'])?$_POST['lehrinhalte_de']:''); - $voraussetzungen_de = (isset($_POST['voraussetzungen_de'])?$_POST['voraussetzungen_de']:''); - $unterlagen_de = (isset($_POST['unterlagen_de'])?$_POST['unterlagen_de']:''); - $pruefungsordnung_de = (isset($_POST['pruefungsordnung_de'])?$_POST['pruefungsordnung_de']:''); - $anmerkungen_de = (isset($_POST['anmerkungen_de'])?$_POST['anmerkungen_de']:''); - $kurzbeschreibung_de = (isset($_POST['kurzbeschreibung_de'])?$_POST['kurzbeschreibung_de']:''); - $anwesenheit_de = (isset($_POST['anwesenheit_de'])?$_POST['anwesenheit_de']:''); - $freig_de = (isset($_POST['freig_de'])?($_POST['freig_de']=='on' && ($rechte->isBerechtigt('lehre/lvinfo_freigabe',$oe_kurzbz) || $rechte->isBerechtigt('lehre/lvinfo_freigabe',$stg))?true:false):''); - $methodik_de = (isset($_POST['methodik_de'])?$_POST['methodik_de']:''); - //$titel_de = (isset($_POST['titel_de'])?$_POST['titel_de']:''); - - $parser = new SafeHTML(); - $lehrziele_de = $parser->parse($lehrziele_de); - $parser = new SafeHTML(); - $lehrinhalte_de = $parser->parse($lehrinhalte_de); - $parser = new SafeHTML(); - $voraussetzungen_de = $parser->parse($voraussetzungen_de); - $parser = new SafeHTML(); - $unterlagen_de = $parser->parse($unterlagen_de); - $parser = new SafeHTML(); - $pruefungsordnung_de = $parser->parse($pruefungsordnung_de); - $parser = new SafeHTML(); - $anmerkungen_de = $parser->parse($anmerkungen_de); - $parser = new SafeHTML(); - $kurzbeschreibung_de = $parser->parse($kurzbeschreibung_de); - $parser = new SafeHTML(); - $anwesenheit_de = $parser->parse($anwesenheit_de); - $parser = new SafeHTML(); - $freig_de = $parser->parse($freig_de); - $parser = new SafeHTML(); - $methodik_de = $parser->parse($methodik_de); - - $lehrziele_en = (isset($_POST['lehrziele_en'])?$_POST['lehrziele_en']:''); - $lehrinhalte_en = (isset($_POST['lehrinhalte_en'])?$_POST['lehrinhalte_en']:''); - $voraussetzungen_en = (isset($_POST['voraussetzungen_en'])?$_POST['voraussetzungen_en']:''); - $unterlagen_en = (isset($_POST['unterlagen_en'])?$_POST['unterlagen_en']:''); - $pruefungsordnung_en = (isset($_POST['pruefungsordnung_en'])?$_POST['pruefungsordnung_en']:''); - $anmerkungen_en = (isset($_POST['anmerkungen_en'])?$_POST['anmerkungen_en']:''); - $kurzbeschreibung_en = (isset($_POST['kurzbeschreibung_en'])?$_POST['kurzbeschreibung_en']:''); - $anwesenheit_en = (isset($_POST['anwesenheit_en'])?$_POST['anwesenheit_en']:''); - $freig_en = (isset($_POST['freig_en'])?($_POST['freig_en']=='on' && ($rechte->isBerechtigt('lehre/lvinfo_freigabe',$oe_kurzbz) || $rechte->isBerechtigt('lehre/lvinfo_freigabe',$stg))?true:false):''); - $methodik_en = (isset($_POST['methodik_en'])?$_POST['methodik_en']:''); - //$titel_en = (isset($_POST['titel_en'])?$_POST['titel_en']:''); - - $parser = new SafeHTML(); - $lehrziele_en = $parser->parse($lehrziele_en); - $parser = new SafeHTML(); - $lehrinhalte_en = $parser->parse($lehrinhalte_en); - $parser = new SafeHTML(); - $voraussetzungen_en = $parser->parse($voraussetzungen_en); - $parser = new SafeHTML(); - $unterlagen_en = $parser->parse($unterlagen_en); - $parser = new SafeHTML(); - $pruefungsordnung_en = $parser->parse($pruefungsordnung_en); - $parser = new SafeHTML(); - $anmerkungen_en = $parser->parse($anmerkungen_en); - $parser = new SafeHTML(); - $kurzbeschreibung_en = $parser->parse($kurzbeschreibung_en); - $parser = new SafeHTML(); - $anwesenheit_en = $parser->parse($anwesenheit_en); - $parser = new SafeHTML(); - $freig_en = $parser->parse($freig_en); - $parser = new SafeHTML(); - $methodik_en = $parser->parse($methodik_en); - - /* WriteLog($qry,$uid) - * @brief Schreib die Querys im format: uid - datum - qry ins LogFile - * @param $qry Query anweisung - * $uid Username - * @return true wenn ok false wenn fehler beim oeffnen - */ - function WriteLog($qry,$uid) - { - - if($fp=fopen(LOG_PATH.'lvinfo.log',"a")) - { - fwrite($fp,"\n"); - fwrite($fp,$uid." ". date("d.m.Y - H:i:s") . " ". $qry); - fclose($fp); - return true; - } - else - return false; - } - - if(isset($status)) - { - - if($status=='save') // Beim druecken auf "Speichern" - { - if ($berechtigt==false) - die($p->t('global/keineBerechtigungFuerDieseSeite')); - //Speichert die aenderungen in der Datenbank (de und en) - $lv_obj_sav= new lvinfo(); - $save_error=false; - $save_log_error=false; - //Deutsch - $lv_obj_sav->lehrziele=mb_eregi_replace("\r\n", "
", $lehrziele_de); - $lv_obj_sav->lehrinhalte=mb_eregi_replace("\r\n", "
", $lehrinhalte_de); - $lv_obj_sav->voraussetzungen=mb_eregi_replace("\r\n", "
", $voraussetzungen_de); - $lv_obj_sav->unterlagen=mb_eregi_replace("\r\n", "
", $unterlagen_de); - $lv_obj_sav->pruefungsordnung=mb_eregi_replace("\r\n", "
", $pruefungsordnung_de); - $lv_obj_sav->anmerkungen=mb_eregi_replace("\r\n", "
", $anmerkungen_de); - $lv_obj_sav->kurzbeschreibung=mb_eregi_replace("\r\n", "
", $kurzbeschreibung_de); - $lv_obj_sav->anwesenheit=mb_eregi_replace("\r\n", "
", $anwesenheit_de); - - $lv_obj_sav->genehmigt = ($freig_de==true && ($rechte->isBerechtigt('lehre/lvinfo_freigabe',$oe_kurzbz) || $rechte->isBerechtigt('lehre/lvinfo_freigabe',$stg))?true:false); - $lv_obj_sav->updateamum=date('Y-m-d H:i:s'); - $lv_obj_sav->updatevon=$user; - $lv_obj_sav->aktiv=true; - $lv_obj_sav->sprache=ATTR_SPRACHE_DE; - $lv_obj_sav->lehrveranstaltung_id=$lv; - $lv_obj_sav->methodik = mb_eregi_replace("\r\n", "
", $methodik_de); - //$lv_obj_sav->titel = mb_eregi_replace("\r\n", "
", $titel_de); - - $lv_obj1 = new lvinfo(); - $vorhanden=$lv_obj1->exists($lv, ATTR_SPRACHE_DE); - - if(!$vorhanden) - $lv_obj_sav->new=true; - else - $lv_obj_sav->new=false; - - if(!$lv_obj_sav->save()) - $save_error=true; - else - if(!WriteLog($lv_obj_sav->lastqry,$user)) - $save_log_error=true; - - //Englisch - $lv_obj_sav->lehrziele=mb_eregi_replace("\r\n", "
", $lehrziele_en); - $lv_obj_sav->lehrinhalte=mb_eregi_replace("\r\n", "
", $lehrinhalte_en); - $lv_obj_sav->voraussetzungen=mb_eregi_replace("\r\n", "
", $voraussetzungen_en); - $lv_obj_sav->unterlagen=mb_eregi_replace("\r\n", "
", $unterlagen_en); - $lv_obj_sav->pruefungsordnung=mb_eregi_replace("\r\n", "
", $pruefungsordnung_en); - $lv_obj_sav->anmerkungen=mb_eregi_replace("\r\n", "
", $anmerkungen_en); - $lv_obj_sav->kurzbeschreibung=mb_eregi_replace("\r\n", "
", $kurzbeschreibung_en); - $lv_obj_sav->anwesenheit=mb_eregi_replace("\r\n", "
", $anwesenheit_en); - $lv_obj_sav->genehmigt = ($freig_en==true && ($rechte->isBerechtigt('lehre/lvinfo_freigabe',$oe_kurzbz) || $rechte->isBerechtigt('lehre/lvinfo_freigabe',$stg))?true:false); - $lv_obj_sav->aktiv=true; - $lv_obj_sav->updateamum=date('Y-m-d H:i:s'); - $lv_obj_sav->updatevon=$user; - $lv_obj_sav->sprache=ATTR_SPRACHE_EN; - $lv_obj_sav->lehrveranstaltung_id=$lv; - $lv_obj_sav->methodik = mb_eregi_replace("\r\n", "
", $methodik_en); - //$lv_obj_sav->titel = mb_eregi_replace("\r\n", "
", $titel_en); - - $lv_obj1 = new lvinfo(); - $vorhanden = $lv_obj1->exists($lv, ATTR_SPRACHE_EN); - - if(!$vorhanden) - $lv_obj_sav->new=true; - else - $lv_obj_sav->new=false; - - if(!$lv_obj_sav->save()) - $save_error=true; - else - if(!WriteLog($lv_obj_sav->lastqry,$user)) - $save_log_error=true; - - if($save_error) - $errormsg.= $p->t('courseInformation/achtungFehlerBeimSpeichern'); - else - $okmsg.= $p->t('global/erfolgreichgespeichert'); - - if($save_log_error) - $errormsg.= $p->t('courseInformation/fehlerLogFile'); - } - if($status=='freigeben') // Beim druecken auf "Zur Freigabe abschicken" - { - if ($berechtigt==false) - die($p->t('global/keineBerechtigungFuerDieseSeite')); - - //Speichert die aenderungen in der Datenbank (de und en) - $lv_obj_sav= new lvinfo(); - $save_error=false; - $save_log_error=false; - //Deutsch - $lv_obj_sav->lehrziele=mb_eregi_replace("\r\n", "
", $lehrziele_de); - $lv_obj_sav->lehrinhalte=mb_eregi_replace("\r\n", "
", $lehrinhalte_de); - $lv_obj_sav->voraussetzungen=mb_eregi_replace("\r\n", "
", $voraussetzungen_de); - $lv_obj_sav->unterlagen=mb_eregi_replace("\r\n", "
", $unterlagen_de); - $lv_obj_sav->pruefungsordnung=mb_eregi_replace("\r\n", "
", $pruefungsordnung_de); - $lv_obj_sav->anmerkungen=mb_eregi_replace("\r\n", "
", $anmerkungen_de); - $lv_obj_sav->kurzbeschreibung=mb_eregi_replace("\r\n", "
", $kurzbeschreibung_de); - $lv_obj_sav->anwesenheit=mb_eregi_replace("\r\n", "
", $anwesenheit_de); - - $lv_obj_sav->genehmigt = ($freig_de==true && ($rechte->isBerechtigt('lehre/lvinfo_freigabe',$oe_kurzbz) || $rechte->isBerechtigt('lehre/lvinfo_freigabe',$stg))?true:false); - $lv_obj_sav->updateamum=date('Y-m-d H:i:s'); - $lv_obj_sav->updatevon=$user; - $lv_obj_sav->aktiv=true; - $lv_obj_sav->sprache=ATTR_SPRACHE_DE; - $lv_obj_sav->lehrveranstaltung_id=$lv; - $lv_obj_sav->methodik = mb_eregi_replace("\r\n", "
", $methodik_de); - //$lv_obj_sav->titel = mb_eregi_replace("\r\n", "
", $titel_de); - - $lv_obj1 = new lvinfo(); - $vorhanden=$lv_obj1->exists($lv, ATTR_SPRACHE_DE); - - if(!$vorhanden) - $lv_obj_sav->new=true; - else - $lv_obj_sav->new=false; - - if(!$lv_obj_sav->save()) - $save_error=true; - else - if(!WriteLog($lv_obj_sav->lastqry,$user)) - $save_log_error=true; - - //Englisch - $lv_obj_sav->lehrziele=mb_eregi_replace("\r\n", "
", $lehrziele_en); - $lv_obj_sav->lehrinhalte=mb_eregi_replace("\r\n", "
", $lehrinhalte_en); - $lv_obj_sav->voraussetzungen=mb_eregi_replace("\r\n", "
", $voraussetzungen_en); - $lv_obj_sav->unterlagen=mb_eregi_replace("\r\n", "
", $unterlagen_en); - $lv_obj_sav->pruefungsordnung=mb_eregi_replace("\r\n", "
", $pruefungsordnung_en); - $lv_obj_sav->anmerkungen=mb_eregi_replace("\r\n", "
", $anmerkungen_en); - $lv_obj_sav->kurzbeschreibung=mb_eregi_replace("\r\n", "
", $kurzbeschreibung_en); - $lv_obj_sav->anwesenheit=mb_eregi_replace("\r\n", "
", $anwesenheit_en); - $lv_obj_sav->genehmigt = ($freig_en==true && ($rechte->isBerechtigt('lehre/lvinfo_freigabe',$oe_kurzbz) || $rechte->isBerechtigt('lehre/lvinfo_freigabe',$stg))?true:false); - $lv_obj_sav->aktiv=true; - $lv_obj_sav->updateamum=date('Y-m-d H:i:s'); - $lv_obj_sav->updatevon=$user; - $lv_obj_sav->sprache=ATTR_SPRACHE_EN; - $lv_obj_sav->lehrveranstaltung_id=$lv; - $lv_obj_sav->methodik = mb_eregi_replace("\r\n", "
", $methodik_en); - //$lv_obj_sav->titel = mb_eregi_replace("\r\n", "
", $titel_en); - - $lv_obj1 = new lvinfo(); - $vorhanden = $lv_obj1->exists($lv, ATTR_SPRACHE_EN); - - if(!$vorhanden) - $lv_obj_sav->new=true; - else - $lv_obj_sav->new=false; - - if(!$lv_obj_sav->save()) - $save_error=true; - else - if(!WriteLog($lv_obj_sav->lastqry,$user)) - $save_log_error=true; - - if($save_error) - $errormsg.= $p->t('courseInformation/achtungFehlerBeimSpeichern'); - else - $okmsg.= $p->t('global/erfolgreichgespeichert'); - - if($save_log_error) - $errormsg.= $p->t('courseInformation/fehlerLogFile'); - - //Mail an Studiengangsleiter - $studiengangsleiter = new studiengang(); - $stgleiter = $studiengangsleiter->getLeitung($stg); - - if($stgleiter) - { - $to=''; - foreach($stgleiter as $leiter) - { - if($to!='') - { - $to.=', '.$leiter.'@'.DOMAIN; - } - else - { - $to.=$leiter.'@'.DOMAIN; - } - } - - $benutzer = new benutzer(); - $benutzer->load($user); - - $bezeichnung = new lehrveranstaltung(); - $bezeichnung->load($lv); - - $message = $p->t('courseInformation/diesIstEineAutomatischeMail').".\n". - $p->t('courseInformation/lvinfoWurdeUeberarbeitet',array($benutzer->nachname.' '.$benutzer->vorname,$bezeichnung->bezeichnung)).":\n"; - - $message.="\n".$p->t('courseInformation/sieKoennenDieseUnterFolgenderAdresseFreigeben').":\n". - APP_ROOT."cis/private/lehre/ects/freigabe.php?stg=".$stg."&sem=".$sem."&lv=".$lv; - - $mail = new mail($to, 'vilesci@'.DOMAIN,$p->t('courseInformation/freigabeLvinfo'), $message); - if($mail->send()) - { - $okmsg.="
".$p->t('courseInformation/freigabemailWurdeVersandt',array($to)).""; - } - else - { - $okmsg.="
".$p->t('courseInformation/fehlerBeimSendenAufgetreten',array($to))."!"; - } - } - else - { - $okmsg.="
".$p->t('courseInformation/konnteKeinFreigabemailVersendetWerden').""; - } - - } - } - - $output .= "\n"; - $output .= ""; - $output .= ""; - - $output .= "
"; - $output .= ""; - $stg_obj = new studiengang(); - - //Anzeigen des DropDown Menues mit Stg - if($stg_obj->getAll('typ, kurzbz')) - { - $output .= $p->t('global/studiengang')." "; - if(!$stgselected) - $stg=$firststg; - } - else - { - $errormsg .= "$stg_obj->errormsg"; - } - - - - //Anzeigen des DropDown Menues mit Semester - if(isset($changed) && $changed=='stg') - { - unset($sem); - unset($lvid); - } - - if($stg_obj->load($stg)) - { - $output .= $p->t('global/semester')." "; - - if(!$semselected) - $sem=$firstsem; - } - else - $errormsg .= "$stg_obj->errormsg"; - - //Anzeigen des DropDown Menues mit Lehrveranstaltungen - $lv_obj = new lehrveranstaltung(); - if($lv_obj->load_lva($stg,$sem,null,true,null,'orgform_kurzbz,semester, bezeichnung')) - { - $output .= $p->t('global/lehrveranstaltung')." "; - if(!$vorhanden) - $lv=$firstlv; - } - else - { - $errormsg .= "$lv_obj->errormsg"; - } - - $output .= ""; - $output .= ""; - $output .= ""; - $output .= ""; - //Menue ausgeben - $output .= "\n"; - $output .= ""; - $output .= "
"; - - $stg_obj->load($stg); - - //Kopfzeile hinausschreiben und $output ausgeben - echo "

 ".$p->t('courseInformation/lvInfoSemester',array($stg_obj->kuerzel, $sem))."

"; - echo $output; - - if ($berechtigt==false) - die($p->t('global/keineBerechtigungFuerDieseSeite')); - - if(isset($lv) && isset($stg) && isset($sem)) // Wenn oben alles Ausgewaehlt wurde - { - //Anzeige des Formulares - $stg_obj1 = new studiengang(); - $stg_obj1->load($stg); - - if(isset($errormsg) && $okmsg!='') - echo ''.$errormsg.'
'; - if(isset($okmsg) && $okmsg!='') - echo ''.$okmsg.'
'; - - $lv_obj_en = new lvinfo(); - $lv_obj_de = new lvinfo(); - - if($lv_obj_en->load($lv, ATTR_SPRACHE_EN)) - $lv_en=$lv_obj_en; - - if($lv_obj_de->load($lv, ATTR_SPRACHE_DE)) - $lv_de=$lv_obj_de; - - if(!isset($_POST['lehrziele_de']) && isset($lv_de)) - { - $lehrziele_de = $lv_de->lehrziele; - $lehrinhalte_de = $lv_de->lehrinhalte; - $voraussetzungen_de = $lv_de->voraussetzungen; - $unterlagen_de = $lv_de->unterlagen; - $pruefungsordnung_de = $lv_de->pruefungsordnung; - $anmerkungen_de = $lv_de->anmerkungen; - $kurzbeschreibung_de = $lv_de->kurzbeschreibung; - $anwesenheit_de = $lv_de->anwesenheit; - $freig_de = $lv_de->genehmigt; - $titel_de = $lv_de->titel; - $methodik_de = $lv_de->methodik; - - //Fuegt den Satz "Nach erfolgreichem Abschluss sind die Studierenden in der Lage, " vor den Lehrzielen ein, falls noch nicht vorhanden - if (substr_count($lehrziele_de, 'Nach erfolgreichem Abschluss sind die Studierenden in der Lage')==0) - $lehrziele_de = 'Nach erfolgreichem Abschluss sind die Studierenden in der Lage, '.$lehrziele_de; - } - - if(!isset($_POST['lehrziele_en']) && isset($lv_en)) - { - $lehrziele_en = $lv_en->lehrziele; - $lehrinhalte_en = $lv_en->lehrinhalte; - $voraussetzungen_en = $lv_en->voraussetzungen; - $unterlagen_en = $lv_en->unterlagen; - $pruefungsordnung_en = $lv_en->pruefungsordnung; - $anmerkungen_en = $lv_en->anmerkungen; - $kurzbeschreibung_en = $lv_en->kurzbeschreibung; - $anwesenheit_en = $lv_en->anwesenheit; - $freig_en = $lv_en->genehmigt; - $titel_en = $lv_en->titel; - $methodik_en = $lv_en->methodik; - - //Fuegt den Satz "Nach erfolgreichem Abschluss sind die Studierenden in der Lage, " vor den Lehrzielen ein, falls noch nicht vorhanden - if (substr_count($lehrziele_en, 'After passing this course successfully students are able to')==0) - $lehrziele_en = 'After passing this course successfully students are able to '.$lehrziele_en; - } - - $lv_obj = new lehrveranstaltung(); - $lv_obj->load($lv); - echo "
"; - - echo ""; - echo ""; - - $stsem_obj = new studiensemester(); - $stsem = $stsem_obj->getaktorNext(); - //Namen der Lehrenden Auslesen - $qry = "SELECT - * - FROM - campus.vw_mitarbeiter, lehre.tbl_lehreinheitmitarbeiter, lehre.tbl_lehreinheit - WHERE - lehrveranstaltung_id=".$db->db_add_param($lv, FHC_INTEGER)." - AND tbl_lehreinheitmitarbeiter.lehreinheit_id=tbl_lehreinheit.lehreinheit_id - AND studiensemester_kurzbz=(SELECT studiensemester_kurzbz FROM lehre.tbl_lehreinheit JOIN public.tbl_studiensemester USING(studiensemester_kurzbz) WHERE lehrveranstaltung_id=".$db->db_add_param($lv)." ORDER BY ende DESC LIMIT 1) - AND mitarbeiter_uid=uid"; - - echo ""; - - //FB Leiter auslesen - $qry = " SELECT - distinct titelpre, titelpost, vorname, nachname - FROM - public.tbl_benutzerfunktion JOIN campus.vw_mitarbeiter USING(uid) - WHERE - funktion_kurzbz='Leitung' AND - (tbl_benutzerfunktion.datum_von is null OR tbl_benutzerfunktion.datum_von<=now()) AND - (tbl_benutzerfunktion.datum_bis is null OR tbl_benutzerfunktion.datum_bis>=now()) AND - oe_kurzbz in (SELECT distinct lehrfach.oe_kurzbz - FROM - lehre.tbl_lehreinheit - JOIN lehre.tbl_lehrveranstaltung as lehrfach ON(tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id) - WHERE - tbl_lehreinheit.lehrveranstaltung_id=".$db->db_add_param($lv, FHC_INTEGER)." AND - studiensemester_kurzbz=(SELECT studiensemester_kurzbz - FROM lehre.tbl_lehreinheit JOIN public.tbl_studiensemester USING(studiensemester_kurzbz) - WHERE tbl_lehreinheit.lehrveranstaltung_id=".$db->db_add_param($lv, FHC_INTEGER)." - ORDER BY ende DESC LIMIT 1 - ) - )"; - - echo ""; - - //FB Koordinator auslesen - //$qry = "SELECT distinct vorname, nachname FROM public.tbl_benutzerfunktion JOIN campus.vw_mitarbeiter USING(uid) WHERE funktion_kurzbz='fbk' AND studiengang_kz='$stg' AND fachbereich_kurzbz in (SELECT fachbereich_kurzbz FROM lehre.tbl_lehrfach, lehre.tbl_lehreinheit WHERE lehrveranstaltung_id='$lv' AND tbl_lehrfach.lehrfach_id=tbl_lehreinheit.lehrfach_id AND tbl_lehreinheit.studiensemester_kurzbz=(SELECT studiensemester_kurzbz FROM lehre.tbl_lehreinheit JOIN public.tbl_studiensemester USING(studiensemester_kurzbz) WHERE tbl_lehreinheit.lehrveranstaltung_id='$lv' ORDER BY ende DESC LIMIT 1))"; - $qry = "SELECT - distinct titelpre, titelpost, vorname, nachname, tbl_fachbereich.fachbereich_kurzbz - FROM - lehre.tbl_lehrveranstaltung, lehre.tbl_lehreinheit, lehre.tbl_lehrveranstaltung as lehrfach, public.tbl_benutzerfunktion, campus.vw_mitarbeiter, public.tbl_fachbereich - WHERE - tbl_lehrveranstaltung.lehrveranstaltung_id=".$db->db_add_param($lv, FHC_INTEGER)." AND - 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_fachbereich.fachbereich_kurzbz=tbl_benutzerfunktion.fachbereich_kurzbz AND - tbl_benutzerfunktion.funktion_kurzbz='fbk' AND - (tbl_benutzerfunktion.datum_von is null OR tbl_benutzerfunktion.datum_von<=now()) AND - (tbl_benutzerfunktion.datum_bis is null OR tbl_benutzerfunktion.datum_bis>=now()) AND - vw_mitarbeiter.uid=COALESCE(tbl_lehrveranstaltung.koordinator, tbl_benutzerfunktion.uid) AND - tbl_lehrveranstaltung.studiengang_kz=(SELECT studiengang_kz FROM public.tbl_studiengang WHERE oe_kurzbz=tbl_benutzerfunktion.oe_kurzbz LIMIT 1)"; - - echo ""; - - //echo "
".$p->t('courseInformation/ectsCredits')."".($lv_obj->ects!=''?number_format($lv_obj->ects,1,'.',''):'')."
".$p->t('courseInformation/lehrendeLautLehrauftrag').""; - $helparray = array(); - if($result=$db->db_query($qry)) - { - while($row=$db->db_fetch_object($result)) - { - if(!in_array("$row->titelpre $row->vorname $row->nachname $row->titelpost",$helparray))//damit ein Name nicht doppelt vorkommt - $helparray[] = "$row->titelpre $row->vorname $row->nachname $row->titelpost"; - } - } - - foreach($helparray as $elem) - echo $elem."
"; - echo "
".$p->t('courseInformation/institutsleiter').""; - if($result=$db->db_query($qry)) - { - while($row=$db->db_fetch_object($result)) - { - echo "$row->titelpre $row->vorname $row->nachname $row->titelpost
"; - } - } - - echo "
".$p->t('courseInformation/institutskoordinator').""; - if($result=$db->db_query($qry)) - { - while($row=$db->db_fetch_object($result)) - { - echo "$row->titelpre $row->vorname $row->nachname $row->titelpost
"; - } - } - - echo "
"; - echo ""; - - - echo ""; - echo ""; - echo ""; - echo ""; - - echo ""; - //Sprache ausgeben - echo "".$p->t('courseInformation/unterrichtssprache')."$lv_obj->sprache"; - echo ""; - - //Anz. Incoming ausgeben - - if ($lv_obj->incoming > -1) - { - echo "".$p->t('courseInformation/incomingplaetze')."$lv_obj->incoming"; - } - else echo "".$p->t('courseInformation/incomingplaetze')."0"; - echo "".$p->t('courseInformation/beiFehlernInDenFixfeldern',array($stg_obj1->email)).""; - echo "

".$p->t('courseInformation/pflichtfelderWerdenAufDerExternenSeiteAngezeigt',array($stg_obj1->email))."."; - //echo "".$p->t('courseInformation/fallsSieAufzaehlungslistenVerwenden',array($stg_obj1->email)).""; --> Es sollten keine HTML-Tags gespeichert werden koennen. Hier muss eine andere Loesung gefunde werden. - echo "

"; - - //Eingabefelder anzeigen - echo ""; - - - echo ' - - - - '; - echo ' - - - '; - echo ' - - '; - - echo ' - - - - - - - - - - - - '; - echo ' - - - - - - - - - - - - - - - - - '; - echo ' - - - - - - - - - - - - - - - - - - - - - - - '; - if ($rechte->isBerechtigt('lehre/lvinfo_freigabe',$oe_kurzbz) || $rechte->isBerechtigt('lehre/lvinfo_freigabe',$stg)) - echo ' - - - - '; - - echo "

DEUTSCH

 

ENGLISH

'.($lv_de->genehmigt==false?''.$p->t('courseInformation/nochNichtFreigegeben').'':$p->t('courseInformation/freigegeben')).''.($lv_en->genehmigt==false?''.$p->t('courseInformation/nochNichtFreigegeben').'':$p->t('courseInformation/freigegeben')).'
 
'.$p->t('lvinfo/kurzbeschreibung').' (Pflichtfeld) '.$p->t('lvinfo/kurzbeschreibungEN').' (Required)
'.$p->t('lvinfo/methodik').' (Pflichtfeld) '.$p->t('lvinfo/methodikEN').' (Required)
'.$p->t('lvinfo/lernergebnisse').' (Pflichtfeld)'.$p->t('lvinfo/lernergebnisseEN').' (Required)
'.$p->t('lvinfo/lehrinhalte').' (Pflichtfeld)'.$p->t('lvinfo/lehrinhalteEN').' (Required)
'.$p->t('lvinfo/vorkenntnisse').' (Pflichtfeld) '.$p->t('lvinfo/vorkenntnisseEN').' (Required)
'.$p->t('lvinfo/literatur').' '.$p->t('lvinfo/literaturEN').'
'.$p->t('lvinfo/leistungsbeurteilung').''.$p->t('lvinfo/leistungsbeurteilungEN').'
'.$p->t('lvinfo/anwesenheit').''.$p->t('lvinfo/anwesenheitEN').'
'.$p->t('lvinfo/anmerkungen').''.$p->t('lvinfo/anmerkungenEN').'

'.$p->t('courseInformation/deutschFreigeben').'

'.$p->t('courseInformation/englischFreigeben').'

"; - echo "
"; - echo ""; - echo ""; - echo "

"; - if (!$berechtigt) - echo ""; - echo "
"; - echo "
"; - echo "











"; - if(isset($error) && $error!='') - echo $error; - } -?> - - - diff --git a/cis/private/lehre/ects/preview.php b/cis/private/lehre/ects/preview.php deleted file mode 100644 index ca2d696d8..000000000 --- a/cis/private/lehre/ects/preview.php +++ /dev/null @@ -1,746 +0,0 @@ -, - * Andreas Oesterreicher - * Rudolf Hangl < rudolf.hangl@technikum-wien.at > - * Gerald Simane-Sequens < gerald.simane-sequens@technikum-wien.at > - */ -/* @date 27.10.2005 - @brief Zeigt die Daten aus der tbl_lvinfo an - - @edit 08-11-2006 Versionierung wurde entfernt. Alle eintraege werden jetzt im WS2007 - abgespeichert - 03-02-2006 Anpassung an die neue Datenbank -*/ - -require_once('../../../../config/cis.config.inc.php'); -require_once('../../../../config/global.config.inc.php'); -require_once('../../../../include/studiensemester.class.php'); -require_once('../../../../include/lehrveranstaltung.class.php'); -require_once('../../../../include/lvinfo.class.php'); -require_once('../../../../include/studiengang.class.php'); -require_once('../../../../include/safehtml/safehtml.class.php'); -require_once '../../../../include/phrasen.class.php'; -require_once '../../../../include/lehreinheit.class.php'; -require_once '../../../../include/lehrstunde.class.php'; -require_once '../../../../include/datum.class.php'; -require_once '../../../../include/stunde.class.php'; - -if (!$db = new basis_db()) - die('Fehler beim Herstellen der Datenbankverbindung'); - -$phrasen = new phrasen(); - -function cmp($a, $b) -{ - if($a->datum == $b->datum && $a->stunde == $b->stunde) - { - return 0; - } - if($a->datum == $b->datum && $a->stunde < $b->stunde) - { - return -1; - } - else if($a->datum == $b->datum && $a->stunde >= $b->stunde) - { - return 1; - } - return ($a->datum < $b->datum) ? -1 : 1; - -} - -function getLastStundeByDatum(Array $array, $filterDatum) -{ - $callback = function($item) use ($filterDatum) - { - return ($filterDatum == $item->datum); - }; - return array_filter($array,$callback); -} - -$titel_de = ''; -$methodik_de = ''; -$kurzbeschreibung_de = ''; -$anwesenheit_de = ''; -$lehrziele_de = ''; -$lehrinhalte_de = ''; -$voraussetzungen_de = ''; -$unterlagen_de = ''; -$pruefungsordnung_de = ''; -$anmerkungen_de = ''; - -$titel_en = ''; -$methodik_en = ''; -$kurzbeschreibung_en = ''; -$anwesenheit_en = ''; -$lehrziele_en = ''; -$lehrinhalte_en = ''; -$voraussetzungen_en = ''; -$unterlagen_en = ''; -$pruefungsordnung_en = ''; -$anmerkungen_en = ''; - -?> - - - -ECTS - European Course Credit Transfer Systems (ECTS) - - - - - - - - -
- -
-





- - - - - - -
- -Deutsche Version
"; - echo "
  • Englische Version

  • "; - } - - if(isset($_POST['methodik_de'])) //Alle Variablen werden per POST Methode uebergeben (zB bei Voransicht) - { - //$sprache = stripslashes($_POST['sprache']); - //$semstunden = stripslashes($_POST["semstunden"]); - $lehrveranstaltung_id = $_POST['lv']; - - // german content variables - //$titel_de = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['titel_de'])); - $methodik_de = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['methodik_de'])); - $kurzbeschreibung_de = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['kurzbeschreibung_de'])); - $anwesenheit_de = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['anwesenheit_de'])); - $lehrziele_de = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['lehrziele_de'])); - $lehrinhalte_de = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['lehrinhalte_de'])); - $voraussetzungen_de = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['voraussetzungen_de'])); - $unterlagen_de = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['unterlagen_de'])); - $pruefungsordnung_de = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['pruefungsordnung_de'])); - $anmerkungen_de = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['anmerkungen_de'])); - - $parser = new SafeHTML(); - $lehrziele_de = $parser->parse($lehrziele_de); - $parser = new SafeHTML(); - $lehrinhalte_de = $parser->parse($lehrinhalte_de); - $parser = new SafeHTML(); - $voraussetzungen_de = $parser->parse($voraussetzungen_de); - $parser = new SafeHTML(); - $unterlagen_de = $parser->parse($unterlagen_de); - $parser = new SafeHTML(); - $pruefungsordnung_de = $parser->parse($pruefungsordnung_de); - $parser = new SafeHTML(); - $anmerkungen_de = $parser->parse($anmerkungen_de); - $parser = new SafeHTML(); - $kurzbeschreibung_de = $parser->parse($kurzbeschreibung_de); - $parser = new SafeHTML(); - $anwesenheit_de = $parser->parse($anwesenheit_de); - $parser = new SafeHTML(); - $methodik_de = $parser->parse($methodik_de); - - // Englisch content variables - //$titel_en = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['titel_en'])); - $methodik_en = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['methodik_en'])); - $kurzbeschreibung_en = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['kurzbeschreibung_en'])); - $anwesenheit_en = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['anwesenheit_en'])); - $lehrziele_en = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['lehrziele_en'])); - $lehrinhalte_en = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['lehrinhalte_en'])); - $voraussetzungen_en = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['voraussetzungen_en'])); - $unterlagen_en = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['unterlagen_en'])); - $pruefungsordnung_en = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['pruefungsordnung_en'])); - $anmerkungen_en = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['anmerkungen_en'])); - - $parser = new SafeHTML(); - $lehrziele_en = $parser->parse($lehrziele_en); - $parser = new SafeHTML(); - $lehrinhalte_en = $parser->parse($lehrinhalte_en); - $parser = new SafeHTML(); - $voraussetzungen_en = $parser->parse($voraussetzungen_en); - $parser = new SafeHTML(); - $unterlagen_en = $parser->parse($unterlagen_en); - $parser = new SafeHTML(); - $pruefungsordnung_en = $parser->parse($pruefungsordnung_en); - $parser = new SafeHTML(); - $anmerkungen_en = $parser->parse($anmerkungen_en); - $parser = new SafeHTML(); - $kurzbeschreibung_en = $parser->parse($kurzbeschreibung_en); - $parser = new SafeHTML(); - $anwesenheit_en = $parser->parse($anwesenheit_en); - $parser = new SafeHTML(); - $methodik_en = $parser->parse($methodik_en); - } - elseif(isset($_GET['lv'])) //LV Id wird uebergeben (zB bei Ansicht fuer alle von lesson.php) - { - $lehrveranstaltung_id=$_GET['lv']; - - $stsemobj = new studiensemester(); - $stsem = $stsemobj->getaktorNext(); - - $lvinfo_obj = new lvinfo(); - if($lvinfo_obj->load($lehrveranstaltung_id, ATTR_SPRACHE_DE)) - { - // german content variables - //$titel_de = $lvinfo_obj->titel; - $methodik_de = $lvinfo_obj->methodik; - $kurzbeschreibung_de = $lvinfo_obj->kurzbeschreibung; - $anwesenheit_de = $lvinfo_obj->anwesenheit; - $lehrziele_de = $lvinfo_obj->lehrziele; - $lehrinhalte_de = $lvinfo_obj->lehrinhalte; - $voraussetzungen_de = $lvinfo_obj->voraussetzungen; - $unterlagen_de = $lvinfo_obj->unterlagen; - $pruefungsordnung_de = $lvinfo_obj->pruefungsordnung; - $anmerkungen_de = $lvinfo_obj->anmerkungen; - } - - if($lvinfo_obj->load($lehrveranstaltung_id, ATTR_SPRACHE_EN)) - { - // Englisch content variables - //$titel_en = $lvinfo_obj->titel; - $methodik_en = $lvinfo_obj->methodik; - $kurzbeschreibung_en = $lvinfo_obj->kurzbeschreibung; - $anwesenheit_en = $lvinfo_obj->anwesenheit; - $lehrziele_en = $lvinfo_obj->lehrziele; - $lehrinhalte_en = $lvinfo_obj->lehrinhalte; - $voraussetzungen_en = $lvinfo_obj->voraussetzungen; - $unterlagen_en = $lvinfo_obj->unterlagen; - $pruefungsordnung_en = $lvinfo_obj->pruefungsordnung; - $anmerkungen_en = $lvinfo_obj->anmerkungen; - } - } - else - die('Fehler bei der Parameteruebergabe'); - - $stsemobj = new studiensemester(); - $stsem = $stsemobj->getaktorNext(); - - $lv_obj = new lehrveranstaltung(); - if(!$lv_obj->load($lehrveranstaltung_id)) - die($lv_obj->errormsg); - - $ects_points = $lv_obj->ects; - $stg = $lv_obj->studiengang_kz; - $sem = $lv_obj->semester; - $lang = $lv_obj->sprache; - $titel_de = $lv_obj->bezeichnung; - $titel_en = $lv_obj->bezeichnung_english; - $anz_incoming = $lv_obj->incoming; - - if (!isset($lv)) - $lv=0; - - - //Zugeteilte Fachbereiche auslesen - $qry = "SELECT distinct tbl_fachbereich.bezeichnung as bezeichnung, tbl_fachbereich.fachbereich_kurzbz as fachbereich_kurzbz - FROM public.tbl_fachbereich, lehre.tbl_lehreinheit, lehre.tbl_lehrveranstaltung as lehrfach - WHERE tbl_lehreinheit.studiensemester_kurzbz=( - SELECT studiensemester_kurzbz FROM lehre.tbl_lehreinheit JOIN public.tbl_studiensemester USING(studiensemester_kurzbz) - WHERE tbl_lehreinheit.lehrveranstaltung_id=".$db->db_add_param($lv, FHC_INTEGER)." ORDER BY ende DESC LIMIT 1) - AND tbl_lehreinheit.lehrveranstaltung_id=".$db->db_add_param($lv, FHC_INTEGER)." AND - tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id AND - tbl_fachbereich.oe_kurzbz=lehrfach.oe_kurzbz"; - - if(!$result=$db->db_query($qry)) - die('Fehler beim Lesen aus der Datenbank'); - - $fachbereiche="'1'"; - $fachbereich['kurzbz']=array(); - $fachbereich['bezeichnung']=array(); - - while($row=$db->db_fetch_object($result)) - { - $fachbereiche .= ", ".$db->db_add_param($row->fachbereich_kurzbz); - $fachbereich['kurzbz'][]=$row->fachbereich_kurzbz; - $fachbereich['bezeichnung'][]=$row->bezeichnung; - } - - //Studiengangsbezeichnung auslesen - $stg_hlp_obj = new studiengang(); - $stg_hlp_obj->load($stg); - - $stg_kurzbz = $stg_hlp_obj->kuerzel; - $stg_kurzbzlang = $stg_hlp_obj->kurzbzlang; - - //Lehrform auslesen - $qry = "Select distinct lehrform_kurzbz FROM lehre.tbl_lehreinheit WHERE lehrveranstaltung_id=".$db->db_add_param($lv, FHC_INTEGER)." AND studiensemester_kurzbz=".$db->db_add_param($stsem); - if(!$res = $db->db_query($qry)) - die('Fehler beim Lesen aus der Datenbank'); - //echo $fachbereiche; - while($row = $db->db_fetch_object($res)) - $lehrform_kurzbz[] = $row->lehrform_kurzbz; - //Fachbereichsleiter fuer alle FB ermitteln - $qry=" - SELECT - vorname, nachname, tbl_fachbereich.fachbereich_kurzbz - FROM - public.tbl_benutzerfunktion - JOIN public.tbl_fachbereich USING(oe_kurzbz) - JOIN campus.vw_mitarbeiter USING(uid) - WHERE - vw_mitarbeiter.aktiv AND - funktion_kurzbz='Leitung' AND tbl_fachbereich.fachbereich_kurzbz in($fachbereiche) AND - (tbl_benutzerfunktion.datum_von is null OR tbl_benutzerfunktion.datum_von<=now()) AND - (tbl_benutzerfunktion.datum_bis is null OR tbl_benutzerfunktion.datum_bis>=now())"; - - if(!$res=$db->db_query($qry)) - die('Fehler '.$db->errormsg); - - $fachbereichsleiter=array(); - while($row=$db->db_fetch_object($res)) - $fachbereichsleiter[$row->fachbereich_kurzbz] = $row->vorname." ".$row->nachname; - - //Fachbereichskoordinatoren fuer alle FB ermitteln - //$qry="SELECT * FROM public.tbl_benutzerfunktion JOIN campus.vw_mitarbeiter USING(uid) WHERE funktion_kurzbz='fbk' AND studiengang_kz='$stg' AND fachbereich_kurzbz in($fachbereiche)"; - $qry = "SELECT - distinct vorname, nachname, tbl_fachbereich.fachbereich_kurzbz - FROM - lehre.tbl_lehrveranstaltung, lehre.tbl_lehreinheit, lehre.tbl_lehrveranstaltung as lehrfach, public.tbl_benutzerfunktion, campus.vw_mitarbeiter, public.tbl_fachbereich - WHERE - vw_mitarbeiter.aktiv AND - tbl_lehrveranstaltung.lehrveranstaltung_id='$lv' AND - tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id AND - tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id AND - lehrfach.oe_kurzbz=tbl_fachbereich.oe_kurzbz AND - tbl_fachbereich.fachbereich_kurzbz=tbl_benutzerfunktion.fachbereich_kurzbz AND - tbl_benutzerfunktion.funktion_kurzbz='fbk' AND - vw_mitarbeiter.uid=COALESCE(tbl_lehrveranstaltung.koordinator, tbl_benutzerfunktion.uid) AND - (tbl_benutzerfunktion.datum_von is null OR tbl_benutzerfunktion.datum_von<=now()) AND - (tbl_benutzerfunktion.datum_bis is null OR tbl_benutzerfunktion.datum_bis>=now()) AND - tbl_lehrveranstaltung.studiengang_kz=(SELECT studiengang_kz FROM public.tbl_studiengang WHERE oe_kurzbz=tbl_benutzerfunktion.oe_kurzbz LIMIT 1) "; - - if(!$res=$db->db_query($qry)) - die('Fehler ! '.$db->errormsg); - - $fachbereichskoordinator=array(); - while($row=$db->db_fetch_object($res)) - { - $name = $row->vorname." ".$row->nachname; - - if(!isset($fachbereichskoordinator[$row->fachbereich_kurzbz]) || - !in_array($name, $fachbereichskoordinator[$row->fachbereich_kurzbz])) - { - $fachbereichskoordinator[$row->fachbereich_kurzbz][] = $name; - } - } - - //Namen der Lehrenden Auslesen - $qry = "SELECT distinct vorname, nachname FROM lehre.tbl_lehreinheit, lehre.tbl_lehreinheitmitarbeiter, campus.vw_mitarbeiter - WHERE tbl_lehreinheit.lehrveranstaltung_id=".$db->db_add_param($lehrveranstaltung_id, FHC_INTEGER)." - AND studiensemester_kurzbz=(SELECT studiensemester_kurzbz FROM public.tbl_studiensemester JOIN lehre.tbl_lehreinheit USING(studiensemester_kurzbz) WHERE tbl_lehreinheit.lehrveranstaltung_id=".$db->db_add_param($lehrveranstaltung_id, FHC_INTEGER)." ORDER BY ende DESC LIMIT 1) - AND tbl_lehreinheit.lehreinheit_id=tbl_lehreinheitmitarbeiter.lehreinheit_id - AND tbl_lehreinheitmitarbeiter.mitarbeiter_uid=uid"; - - $lehrendearray = array(); - if($result=$db->db_query($qry)) - { - while($row=$db->db_fetch_object($result)) - $lehrendearray[] = "$row->vorname $row->nachname"; - } - - //Ausgabe der LV-Information - - //Deutsch Version - if(!(isset($language) && $language=='en')) - { - echo "

    - - - - - - "; - - if ($kurzbeschreibung_de) - { - echo ""; - echo ""; - } - - if ($lehrziele_de) - { - echo ""; - echo ""; - } - - if ($lehrinhalte_de) - { - echo ""; - echo ""; - } - - if ($voraussetzungen_de) - { - echo ""; - echo ""; - } - - if ($methodik_de) - { - echo ""; - echo ""; - } - - if ($pruefungsordnung_de) - { - echo ""; - echo ""; - } - - if ($unterlagen_de) - { - echo ""; - echo ""; - } - - if ($anwesenheit_de) - { - echo ""; - echo ""; - } - - if ($anmerkungen_de) - { - echo ""; - echo ""; - } - - echo "
    - -

    - ".stripslashes($titel_de)."

    - -

    "; - echo ''; - echo ""; - echo ""; - echo ''; - if(($anz=count($lehrendearray))>0) - { - echo "'; - } - - if(isset($lehrform_kurzbz) && count($lehrform_kurzbz)>0) - { - echo "'; - } - - if ($lang > -1) - echo ''; - - if ($ects_points) - echo ''; - - if ($anz_incoming > -1) - { - echo ''; - } - else echo ''; - - echo ''; - //Fachbereiche und Leiter/Koordinatoren anzeigen - if (count($fachbereich['bezeichnung'])>0) - { - echo ''; - } - echo "
    Studiengang:$stg_kurzbz
    Semester:$sem
      
    ".$phrasen->t('lehre/lehrbeauftragter').": "; - - foreach($lehrendearray as $elem) - { - $anz--; - echo " $elem"; - if($anz!=0) - echo ','; - } - echo '
    Lehrform: "; - foreach ($lehrform_kurzbz as $lehrform_kurz) - echo "$lehrform_kurz
    "; - echo '
    Sprache: '.stripslashes($lang).'
    ECTS: '.number_format(stripslashes($ects_points),1,'.','').'
    Incomingplätze: '.stripslashes($anz_incoming).'
    Incomingplätze: 0
      
    Institut: '; - //Fachbereiche durchlaufen - for($i=0;$i
    "; - echo "

    ".$phrasen->t('lvinfo/kurzbeschreibung')."

    ".stripslashes($kurzbeschreibung_de)."

    ".$phrasen->t('lvinfo/lernergebnisse')."

    ".stripslashes($lehrziele_de)."

    ".$phrasen->t('lvinfo/lehrinhalte')."

    ".stripslashes($lehrinhalte_de)."

    ".$phrasen->t('lvinfo/vorkenntnisse')."

    ".stripslashes($voraussetzungen_de)."

    ".$phrasen->t('lvinfo/methodik')."

    ".stripslashes($methodik_de)."

    ".$phrasen->t('lvinfo/leistungsbeurteilung')."

    ".stripslashes($pruefungsordnung_de)."

    ".$phrasen->t('lvinfo/literatur')."

    ".stripslashes($unterlagen_de)."

    ".$phrasen->t('lvinfo/anwesenheit')."

    ".stripslashes($anwesenheit_de)."

    ".$phrasen->t('lvinfo/anmerkungen')."

    ".stripslashes($anmerkungen_de)." 

    "; - } - - //Englische Version - if(!(isset($language) && $language=='de')) - { - echo "

    "; - echo " - - - - '; - - if ($kurzbeschreibung_en) - { - echo ""; - echo ""; - } - - if ($lehrziele_en) - { - echo ""; - echo ""; - } - - if ($lehrinhalte_en) - { - echo ""; - echo ""; - } - - if ($voraussetzungen_en) - { - echo ""; - echo ""; - } - - if ($methodik_en) - { - echo ""; - echo ""; - } - - if ($pruefungsordnung_en) - { - echo ""; - echo ""; - } - - if ($unterlagen_en) - { - echo ""; - echo ""; - } - - if ($anwesenheit_en) - { - echo ""; - echo ""; - } - - if ($anmerkungen_en) - { - echo ""; - echo ""; - } - } - - echo "
    -

    - ".stripslashes($titel_en)." -

    -

    "; - - echo ''; - echo ""; - echo ""; - echo ""; - - if(($anz=count($lehrendearray))>0) - { - echo ""; - } - - if(isset($lehrform_kurzbz) && count($lehrform_kurzbz)>0) - { - echo ""; - } - - if ($lang > -1) - echo ""; - - if ($ects_points) - echo ""; - - if ($anz_incoming > -1) - { - echo ''; - } - else echo ''; - - echo ""; - - //Fachbereiche und Leiter/Koordinatoren anzeigen - if (count($fachbereich['bezeichnung'])>0) - { - echo ''; - } - - echo '
    Degree programme:$stg_kurzbz
    Semester:$sem
      
    Lecturer:"; - - foreach($lehrendearray as $elem) - { - $anz--; - echo " $elem"; - if($anz!=0) - echo ","; - } - echo "
    Course methods: "; - foreach ($lehrform_kurzbz as $lehrform_kurz) - echo "$lehrform_kurz
    "; - echo "
    Language: ".stripslashes($lang)."
    ECTS Credits: ".number_format(stripslashes($ects_points),1,'.','')."
    Places Available for Incoming Students: '.stripslashes($anz_incoming).'
    Places Available for Incoming Students: 0
      
    Department: '; - //Fachbereiche durchlaufen - for($i=0;$i
    '; - echo '

    ".$phrasen->t('lvinfo/kurzbeschreibungEN')."

    ".stripslashes($kurzbeschreibung_en)."

    ".$phrasen->t('lvinfo/lernergebnisseEN')."

    ".stripslashes($lehrziele_en)."

    ".$phrasen->t('lvinfo/lehrinhalteEN')."

    ".stripslashes($lehrinhalte_en)."

    ".$phrasen->t('lvinfo/vorkenntnisseEN')."

    ".stripslashes($voraussetzungen_en)."

    ".$phrasen->t('lvinfo/methodikEN')."

    ".stripslashes($methodik_en)."

    ".$phrasen->t('lvinfo/leistungsbeurteilungEN')."

    ".stripslashes($pruefungsordnung_en)."

    ".$phrasen->t('lvinfo/literaturEN')."

    ".stripslashes($unterlagen_en)."

    ".$phrasen->t('lvinfo/anwesenheitEN')."

    ".stripslashes($anwesenheit_en)."

    ".$phrasen->t('lvinfo/anmerkungenEN')."

    ".stripslashes($anmerkungen_en)." 
    "; - - $lehreinheit = new lehreinheit(); - $studiensemester = new studiensemester(); - $lehreinheit->load_lehreinheiten($lv, $studiensemester->getaktorNext()); - - if (CIS_LVINFO_TERMINE_ANZEIGEN == true) - { - if(!empty($lehreinheit->lehreinheiten)) - { - echo "

    Termine

    "; - foreach($lehreinheit->lehreinheiten as $lehreinheit_temp) - { - $lehrstunde = new lehrstunde(); - $lehrstunde->load_lehrstunden_le($lehreinheit_temp->lehreinheit_id); - $i = 1; - echo ""; - } - echo "
      "; - - $result = $lehrstunde->lehrstunden; - $last = ""; - $bis = ""; - usort($result, "cmp"); - $datum = new datum(); - $std_von = new stunde(); - $std_bis = new stunde(); - foreach($result as $key=>$stunde) - { - if($last !== $stunde->datum) - { - $temp = array_values(getLastStundeByDatum($result, $stunde->datum)); - $size = count($temp); - if($size != 0) - { - $std_von->load($temp[0]->stunde); - $std_bis->load($temp[$size-1]->stunde); - echo "
    • ".$datum->formatDatum($temp[0]->datum,"d.m.Y")." von ".mb_substr($std_von->beginn,0,5)." bis ".mb_substr($std_bis->ende,0,5)."
    • "; - } - $i++; - } - elseif($last == "") - { - $temp = getLastStundeByDatum($result, $stunde->datum); - var_dump($temp); - } - else - { - $bis = $stunde->stunde; - } - - if($i % 5 === 0) - { - // echo "
      "; - // $i++; - } - $last = $stunde->datum; - } - echo "
    "; - } - } - - //Ein paar Zeilenumbrueche damit er beim Sprung zum Anker weit genug nach unten springt - echo "



















    "; - -?> -
     
    - diff --git a/cis/private/lehre/ects/terminologie.php b/cis/private/lehre/ects/terminologie.php deleted file mode 100644 index 68cf250c1..000000000 --- a/cis/private/lehre/ects/terminologie.php +++ /dev/null @@ -1,921 +0,0 @@ -, - * Andreas Oesterreicher and - * Rudolf Hangl . - */ - -require_once('../../../../config/cis.config.inc.php'); -require_once('../../../../include/functions.inc.php'); -require_once('../../../../include/phrasen.class.php'); - -$sprache = getSprache(); -$p= new phrasen($sprache); - -?> - - - - - -<?php echo $p->t('courseInformation/terminologie');?> - - - -

    t('courseInformatoin/lvInfoTerminologie')?>

    - - - - - - -
    -   - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - t('courseInformation/terminologieDeutschEnglisch');?> -
    -
    - Deutsch - - Englisch -
    - Abschluss (einer Lehrveranstaltung) - - completion -
    - AnfängerIn - - beginner -
    - angerechnet - - recognized -
    - Anrechnung - - recognition -
    - Aufgaben - - tasks / responsibilities / assignment -
    - Bachelor-Studiengang - - bachelor's degree program -
    - Bachelor - - Bachelor -
    - Bachelor-Arbeiten - - bachelor's paper -
    - berufsbegleitend - - part-time study -
    - Berufspraktikum - - intership -
    - bestanden - - pass -
    - bestanden, mit gutem Erfolg - - pass with merit -
    - bestanden, mit ausgezeichnetem - Erfolg - - pass with distinction -
    - BetreuerIn - - supervisor -
    - Diplomarbeit - - master's thesis -
    - DI (FH) - - DI (FH) -
    - Diplom-Studiengang - - diploma degree program -
    - Erhalter - - operator -
    - Experte/in - - expert -
    - Fachbereich - - special field -
    - FachbereichskoordinatorIn - - special field coordinator -
    - FachbereichsleiterIn - - head of special field -
    - Fachhochschul-Beirat - - University of Applied Sciences Advisory Board (UAS Advisory Board) -
    - Fachhochschul-Kollegium - - University of Applied Sciences Council (UAS Council) -
    - Fachhochschul-KollegiumsleiterIn - - Head of University of Applied Sciences Council -
    - Fachhochschulrat - - FH Council -
    - Fachhochschulkonferenz - - Association of Universities of - Applied Sciences Austria -
    - Fernlehre - - distance learning -
    - Fernlehrelemente - - distance learning elements -
    - Fortgeschrittene/r - - advanced -
    - Gesamtnote, Gesamtbeurteilung - - final grade -
    - Grundlagen - - fundamentals -
    - hauptberuflich Lehrende/r - - full-time instructor -
    - Immanente Leistungsbeurteilung - - continuous assessment -
    - integrierte Lehrveranstaltung - - integrated course -
    - JahrgangssprecherIn - - class representative -
    - kommissionelle Prüfung - - panel exam -
    - Labor - - laboratory -
    - Lehrender - - instructor -
    - Lehrgang universitären - Charakters - - university - level course -
    - Lehrinhalte - - course contents -
    - Lehrkörper - - teaching staff -
    - Lehrmethode - - teaching method -
    - Lehrveranstaltung - - course -
    - Lehrziele - - course objectives -
    - Lernmethode - - study technique -
    - Magisterarbeit - - master's thesis -
    - Mag. (FH) - - Mag. (FH) -
    - Master-Studiengang - - master's degree program -
    - Matrikelnummer - - registration number -
    - Mündliche Prüfung - - oral examination -
    - nebenberuflich Lehrende/r - - part-time instructor -
    - Niveaustufe - - level -
    - Niveaustufen: - - levels -
    - Note - - grade -
    - Organisation der LV - - course organization -
    - Personenkennzeichen - - personal identification number -
    - Pflichtveranstaltung - - required course -
    - Präsentation - - presentation -
    - Programmverantwortlicher - - Program Director -
    - Projektarbeit - - project work -
    - Prüfung - - examination -
    - Prüfungsmodalitäten - - exam procedure -
    - Prüfungsordnung - - examination regulation -
    - Rektor - - rector -
    - Schriftliche Prüfung - - written examination -
    - Semester - - semester -
    - Seminar - - seminar -
    - Stellv. Studiengangsleiter - - Deputy Program Director -
    - AssistentIn - - Administrative Assistant -
    - ECTS-Leistungspunkte - - ECTS credits -
    - Semesterwochenstunden - - Semester periods per week (SP/W) -
    - Sommersemester - - summer semester / spring semester -
    - Spezialisten - - specialists -
    - Studiengang - - degree program -
    - StudiengangssprecherIn - - program representative -
    - StudiengangsleiterIn - - program director -
    - Studienjahr - - academic year -
    - Studienplan - - curriculum -
    - Studienplatz - - study place -
    - Studierendenvertretung - - student council -
    - Teilgebiet - - segment -
    - Test - - test -
    - Titel der Lehrveranstaltung - - course title -
    - Übung (einfache, mit Anleitung) - - exercise -
    - Übung (im Sinne einer LV) - - practice - session
    - Übung (im Sinne üben) - - practice -
    - Unterricht - - instruction -
    - Vollzeit - - full-time -
    - Voraussetzungen (für LVs) - - requirements -
    - Vorlesung - - lecture -
    - Vortragender - - lecturer -
    - Wintersemester - - autumn semester / winter semester -
    - Zeugnis - - certificate -
    - Unterrichtssprache - - Language of instruction -
    - Bewerbung - - application -
    - Zugangsvorraussetzungen - - admission requirements -
    - Matura - - Secondary School diploma -
    - Auslandssemester - - exchange semester -
    - Fachhochschule Technikum Wien - - University of Applied Sciences Technikum Wien (UAS Technikum Wien) -
    - Institut für - - department of -
    - Senat - - Senate -
    - - \ No newline at end of file diff --git a/cis/private/lehre/notenliste.php b/cis/private/lehre/notenliste.php index e7e7ae90f..842d4b603 100644 --- a/cis/private/lehre/notenliste.php +++ b/cis/private/lehre/notenliste.php @@ -197,8 +197,10 @@ else { $prestudent->getFirstStatus($prestudent_id, 'Student'); $firstStudiensemester = $prestudent->studiensemester_kurzbz; - $prestudent->getLastStatus($prestudent_id, null, 'Student'); - $lastStudiensemester = $prestudent->studiensemester_kurzbz; + if ($prestudent->getLastStatus($prestudent_id, null, 'Diplomand')) + $lastStudiensemester = $prestudent->studiensemester_kurzbz; + elseif ($prestudent->getLastStatus($prestudent_id, null, 'Student')) + $lastStudiensemester = $prestudent->studiensemester_kurzbz; } $stsem_obj->getStudiensemesterBetween($firstStudiensemester, $lastStudiensemester); @@ -241,7 +243,7 @@ else $qry = "SELECT tbl_lehrveranstaltung.lehrveranstaltung_id, tbl_zeugnisnote.note, tbl_zeugnisnote.punkte, tbl_lvgesamtnote.note as lvnote, tbl_lvgesamtnote.punkte as lvpunkte, - tbl_zeugnisnote.benotungsdatum, tbl_lvgesamtnote.freigabedatum, + tbl_zeugnisnote.benotungsdatum, tbl_lvgesamtnote.freigabedatum, tbl_zeugnisnote.uebernahmedatum, tbl_lvgesamtnote.benotungsdatum as lvbenotungsdatum, tbl_zeugnisnote.studiensemester_kurzbz AS studiensemester_zeugnis, tbl_lvgesamtnote.studiensemester_kurzbz AS studiensemester_lvnote, tbl_lehrveranstaltung.zeugnis, tbl_lehrveranstaltung.ects @@ -354,6 +356,7 @@ else if (count($pruefung->result) > 0) { + $freigabedatum = $row->uebernahmedatum; $tblBody .= ''; foreach ($pruefung->result as $row) { @@ -367,7 +370,8 @@ else else $punkte = ''; - $tblBody .= $row->pruefungstyp_beschreibung . ' ' . $datum_obj->formatDatum($row->datum, 'd.m.Y') . ' ' . $note . $punkte . '
    '; + if ($datum_obj->formatDatum($freigabedatum, "Y-m-d") >= $row->datum) + $tblBody .= $row->pruefungstyp_beschreibung . ' ' . $datum_obj->formatDatum($row->datum, 'd.m.Y') . ' ' . $note . $punkte . '
    '; } $tblBody .= ''; } diff --git a/cis/private/lehre/notenliste.xls.php b/cis/private/lehre/notenliste.xls.php index 4f6437358..7853600de 100644 --- a/cis/private/lehre/notenliste.xls.php +++ b/cis/private/lehre/notenliste.xls.php @@ -19,6 +19,7 @@ * Andreas Oesterreicher * Rudolf Hangl < rudolf.hangl@technikum-wien.at > * Gerald Simane-Sequens < gerald.simane-sequens@technikum-wien.at > + * Manuela Thamer */ /* * Erstellt Notenliste im Excel Format @@ -200,25 +201,31 @@ else $stsemdatumbis = $stsem_obj->ende; $qry = "SELECT - distinct on(nachname, vorname, person_id) vorname, nachname, matrikelnr, person_id, tbl_student.student_uid as uid, - tbl_studentlehrverband.semester, tbl_studentlehrverband.verband, tbl_studentlehrverband.gruppe, - (SELECT status_kurzbz FROM public.tbl_prestudentstatus WHERE prestudent_id=tbl_student.prestudent_id ORDER BY datum DESC, insertamum DESC, ext_id DESC LIMIT 1) as status, - tbl_bisio.bisio_id, tbl_bisio.bis, tbl_bisio.von, - tbl_zeugnisnote.note - FROM - campus.vw_student_lehrveranstaltung JOIN public.tbl_benutzer USING(uid) - JOIN public.tbl_person USING(person_id) JOIN public.tbl_student ON(uid=student_uid) - LEFT JOIN public.tbl_studentlehrverband USING(student_uid,studiensemester_kurzbz) - LEFT JOIN lehre.tbl_zeugnisnote on(vw_student_lehrveranstaltung.lehrveranstaltung_id=tbl_zeugnisnote.lehrveranstaltung_id AND tbl_zeugnisnote.student_uid=tbl_student.student_uid AND tbl_zeugnisnote.studiensemester_kurzbz=tbl_studentlehrverband.studiensemester_kurzbz) - LEFT JOIN bis.tbl_bisio ON(uid=tbl_bisio.student_uid) - WHERE - vw_student_lehrveranstaltung.lehrveranstaltung_id=".$db->db_add_param($lvid, FHC_INTEGER)." AND - vw_student_lehrveranstaltung.studiensemester_kurzbz=".$db->db_add_param($stsem); + distinct on(nachname, vorname, person_id) vorname, nachname, matrikelnr, person_id, tbl_student.student_uid as uid, + tbl_studentlehrverband.semester, tbl_studentlehrverband.verband, tbl_studentlehrverband.gruppe, + (SELECT status_kurzbz + FROM public.tbl_prestudentstatus + WHERE prestudent_id=tbl_student.prestudent_id + ORDER BY datum DESC, insertamum DESC, ext_id DESC LIMIT 1) as status, + tbl_bisio.bisio_id, tbl_bisio.bis, tbl_bisio.von, + tbl_zeugnisnote.note,tbl_mobilitaet.mobilitaetstyp_kurzbz, + (CASE WHEN bis.tbl_mobilitaet.studiensemester_kurzbz = vw_student_lehrveranstaltung.studiensemester_kurzbz THEN '1' ELSE '' END) as doubledegree + FROM campus.vw_student_lehrveranstaltung JOIN public.tbl_benutzer USING(uid) + JOIN public.tbl_person USING(person_id) JOIN public.tbl_student ON(uid=student_uid) + LEFT JOIN public.tbl_studentlehrverband USING(student_uid,studiensemester_kurzbz) + LEFT JOIN lehre.tbl_zeugnisnote on(vw_student_lehrveranstaltung.lehrveranstaltung_id=tbl_zeugnisnote.lehrveranstaltung_id + AND tbl_zeugnisnote.student_uid=tbl_student.student_uid + AND tbl_zeugnisnote.studiensemester_kurzbz=tbl_studentlehrverband.studiensemester_kurzbz) + LEFT JOIN bis.tbl_bisio ON(uid=tbl_bisio.student_uid) + LEFT JOIN bis.tbl_mobilitaet USING(prestudent_id) + WHERE + vw_student_lehrveranstaltung.lehrveranstaltung_id=".$db->db_add_param($lvid, FHC_INTEGER)." AND + vw_student_lehrveranstaltung.studiensemester_kurzbz=".$db->db_add_param($stsem);";"; if($lehreinheit_id!='') $qry.=" AND vw_student_lehrveranstaltung.lehreinheit_id=".$db->db_add_param($lehreinheit_id, FHC_INTEGER); - $qry.=' ORDER BY nachname, vorname, person_id, tbl_bisio.bis DESC'; + $qry.=' ORDER BY nachname, vorname, person_id, tbl_bisio.bis, doubledegree DESC'; if($result = $db->db_query($qry)) { @@ -226,6 +233,7 @@ else $lines++; while($elem = $db->db_fetch_object($result)) { + $note=''; if(!preg_match('*dummy*',$elem->uid) && $elem->semester!=10) { if($elem->status!='Abbrecher' && $elem->status!='Unterbrecher') @@ -243,8 +251,12 @@ else $inc.=' (ar)'; $note='ar'; } - else - $note=''; + + if ($elem->mobilitaetstyp_kurzbz !='' && $elem->doubledegree == 1) //dd-Program + { + $inc.=' (d.d.)'; + } + $worksheet->write($lines,1,$elem->uid); $worksheet->write($lines,2,$elem->nachname.$inc); $worksheet->write($lines,3,$elem->vorname); @@ -295,6 +307,8 @@ else $worksheet->write(++$lines,0,'(i) ... Incoming'); $worksheet->write(++$lines,0,'(o) ... Outgoing'); $worksheet->write(++$lines,0,'(ar) ... '.$p->t('anwesenheitsliste/angerechnet')); + $worksheet->write(++$lines,0,'(iar) ... '.$p->t('anwesenheitsliste/internangerechnet')); + $worksheet->write(++$lines,0,'(d.d.) ... Double Degree Program'); $worksheet->setColumn(0, 0, 5); $worksheet->setColumn(0, 1, 16); diff --git a/cis/private/lehre/swd.php b/cis/private/lehre/swd.php index b7fa82ac5..248779aac 100644 --- a/cis/private/lehre/swd.php +++ b/cis/private/lehre/swd.php @@ -1,5 +1,5 @@ getBerechtigungen($user); + if($rechte->isBerechtigt('admin')) + { + $user = $_GET['uid']; + } +} + echo ' @@ -49,11 +61,11 @@ echo ' '.$p->t('freebusy/titel').' - - - - - + + + + + '; + echo '

    '.$p->t("zeitaufzeichnung/zeitaufzeichnungVon").' '.$db->convert_html_chars($bn->vorname).' '.$db->convert_html_chars($bn->nachname).'

    '; // Wenn Kartennummer übergeben wurde dann hole uid von Karteninhaber @@ -786,388 +835,49 @@ if($kartennummer != '') } //Speichern der Daten -function checkVals ($oe_val, $project_val, $phase_val, $service_val) -{ - $error = 0; - if ($service_val && ( filter_var($service_val, FILTER_VALIDATE_INT) === false )) - $error = 1; - if ($phase_val && ( filter_var($phase_val, FILTER_VALIDATE_INT) === false )) - $error = 1; - if ($oe_val) - { - $oecheck = new organisationseinheit($oe_val); - if ($oecheck->errormsg) - $error = 1; - } - if ($project_val) - { - $procheck = new projekt($project_val); - if ($procheck->errormsg) - $error = 1; - } - return $error; -} - if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) { - $zeit = new zeitaufzeichnung(); - - $projects_of_user = new projekt(); - $projects= $projects_of_user->getProjekteListForMitarbeiter($user); - $project_kurzbz_array = array(); - $projektph_of_user = new projektphase(); $projektphasen = $projektph_of_user->getProjectphaseForMitarbeiter($user); - $projectphasen_kurzbz_array = array(); - - foreach($projects as $prjct) - { - array_push($project_kurzbz_array, (string) $prjct->projekt_kurzbz); - } - foreach ($projektphasen as $pp) - { - array_push($projectphasen_kurzbz_array, (string) $pp->projektphase_id); - } - - $projectphase = new projektphase(); if ($_FILES['csv']['error'] == 0 && isset($_POST['import'])) { - $name = $_FILES['csv']['name']; - $tmpName = $_FILES['csv']['tmp_name']; - $mimeType = mime_content_type($_FILES['csv']['tmp_name']); - //echo($mimeType); - if($mimeType=='text/plain') - { - if(($handle = fopen($tmpName, 'r')) !== FALSE) - { - if (mb_detect_encoding(fgets($handle), 'UTF-8', true)) - { - set_time_limit(0); - $anzahl = 0; - $importtage_array = array(); - $ende_vorher = date('Y-m-d H:i:s'); - - while(($data = fgetcsv($handle, 1000, ';', '"')) !== FALSE) - { - if($data[0] == $user){ - if(!empty($data[6]) && !in_array($data[6], $project_kurzbz_array) && empty($data[7])) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da Sie folgendem Projekt entweder nicht zugewiesen sind oder das Projekt schon abgeschlossen wurde: ('.$data[6].')
    '; - } - elseif(!empty($data[7]) && !in_array($data[7], $projectphasen_kurzbz_array)) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da Sie folgender Projektphase entweder nicht zugewiesen sind oder die Projektphase schon abgeschlossen wurde: ('.$data[7].')
    '; - } - else - { - $vonCSV = $datum->formatDatum($data[2], $format='Y-m-d'); - $bisCSV = $datum->formatDatum($data[3], $format='Y-m-d'); - $dateVonCSV = new DateTime($vonCSV); - $dateBisCSV = new DateTime($bisCSV); - - if (!isset($data[5])) - $data[5] = NULL; - if (!isset($data[6])) - $data[6] = NULL; - if (!isset($data[7])) - $data[7] = NULL; - if (!isset($data[8])) - $data[8] = NULL; - if ($datum->formatDatum($data[2], $format='Y-m-d H:i:s') < $sperrdatum) - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum ('.$data[2].')
    '; - elseif ($datum->formatDatum($data[2], $format='Y-m-d H:i:s') > $limitdatum) - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da ('.$data[2].') zu weit in der Zukunft liegt.
    '; - elseif ($dateVonCSV!=$dateBisCSV && $data[1]!="DienstreiseMT") - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da keine Zeitaufzeichnung über mehrere Tage erlaubt ist (ausgenommen Dienstreisen).
    '; - } - elseif (empty($data[7]) && !empty($data[6]) && !$projects_of_user->checkProjectInCorrectTime($data[6], $data[2], $data[3])) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektzeitrahmen fällt: ('.$data[2].') ('.$data[3].')
    '; - } - elseif (!empty($data[7]) && !$projektph_of_user ->checkProjectphaseInCorrectTime($data[7], $data[2], $data[3])) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektphasenzeitrahmen fällt: ('.$data[2].') ('.$data[3].')
    '; - } - elseif (checkVals($data[5],$data[6],$data[7],$data[8])) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Fehlerhafte Werte ('.$data[2].')
    '; - } - else - { - if ($data[1] == 'LehreIntern') - $data[1] = 'Lehre'; - $zeit->new = true; - $zeit->beschreibung = NULL; - $zeit->oe_kurzbz_1 = NULL; - $zeit->projekt_kurzbz = NULL; - $zeit->projektphase_id = NULL; - $zeit->service_id = NULL; - - $zeit->insertamum = date('Y-m-d H:i:s'); - $zeit->updateamum = date('Y-m-d H:i:s'); - $zeit->updatevon = $user; - $zeit->insertvon = $user; - $zeit->uid = $data[0]; - $zeit->aktivitaet_kurzbz = $data[1]; - $zeit->start = $datum->formatDatum($data[2], $format='Y-m-d H:i:s'); - $zeit->ende = $datum->formatDatum($data[3], $format='Y-m-d H:i:s'); - if (isset($data[4])) - $zeit->beschreibung = $data[4]; - if (isset($data[5])) - $zeit->oe_kurzbz_1 = $data[5]; - if (isset($data[6])) - $zeit->projekt_kurzbz = $data[6]; - if (isset($data[7])) - $zeit->projektphase_id = $data[7]; - if (isset($data[8])) - $zeit->service_id = $data[8]; - if (isset($data[9])) - { - if (strtolower($data[9] == 'true')) - { - // check, ob homeoffice gemäß Bisverwendung - $verwendung = new bisverwendung(); - $verwendung->getVerwendungDatum($data[0],$vonCSV); - - foreach ($verwendung->result as $v) - // echo "homeoffice für Tag " . $vonCSV . " ". $v->homeoffice . " " . $v->bisverwendung_id . "
    "; - - if ($v->homeoffice) - { - - // echo "homeoffice erlaubt
    "; - $zeit->homeoffice = true; - } - else - { - echo ''.$p->t("zeitaufzeichnung/homeofficeNichtErlaubt", ($vonCSV)) .'
    '; - - $zeit->homeoffice = false; - } - } - else - { - $zeit->homeoffice = false; - } - } - else - { - $zeit->homeoffice = false; - } - $tag = $datum->formatDatum($data[2], $format='Y-m-d'); - - if(!in_array($tag, $importtage_array)) - { - $importtage_array[] = $tag; - $zeit->deleteEntriesForUser($user, $tag); - $tag_aktuell = $tag; - } - else - { - if ($ende_vorher < $zeit->start) - { - $pause = new zeitaufzeichnung(); - $pause->new = true; - $pause->insertamum = date('Y-m-d H:i:s'); - $pause->updateamum = date('Y-m-d H:i:s'); - $pause->updatevon = $user; - $pause->insertvon = $user; - $pause->uid = $user; - $pause->aktivitaet_kurzbz = 'Pause'; - $pause->start = $ende_vorher; - $pause->ende = $zeit->start; - $pause->beschreibung = ''; - $pause->homeoffice = $homeoffice; - if(!$pause->save()) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$pause->errormsg.'
    '; - } - } - } - - $ende_vorher = $zeit->ende; - if($data[2] != $data[3]) - { - /* - if ($data[1] == 'LehreExtern') - { - $zeit->start = date('Y-m-d H:i:s', strtotime('+2 seconds', strtotime($data[2]))); - $zeit->ende = date('Y-m-d H:i:s', strtotime('-2 seconds', strtotime($data[3]))); - } - */ - if(!$zeit->save()) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.'('.$zeit->start.')
    '; - } - else - $anzahl++; - } - else - $anzahl++; - - } - } - } - else if (strpos($data[0],'#') === false) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Falsche UID nicht importiert ('.$data[0].')
    '; - } - } - if($anzahl>0) - { - echo ''.$p->t("global/datenWurdenGespeichert").' ('.$anzahl.')'; - foreach ($importtage_array as $ptag) - { - $zeit->cleanPausenForUser($user, $ptag); - } - } - } - else - echo 'Datei konnte nicht importiert werden. Encoding ist nicht UTF-8!'; - } - } + $zeit_csv_import = new zeitaufzeichnung_import_csv($p, $user, $sperrdatum, $_FILES['csv']['tmp_name']); + $zeit_csv_import->import(); + echo $zeit_csv_import->OutputToHTML(); } else if ($datum->formatDatum($von, $format='Y-m-d H:i:s') < $sperrdatum) - echo '' .$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum'; + echo '' .$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum'; + // NOTE(chris): Save else if (isset($_POST['save']) || isset($_POST['edit'])) { - - if(isset($_POST['edit'])) + $zeit_post_import = new zeitaufzeichnung_import_post($p, $user, isset($_POST['edit']), [ + 'aktivitaet_kurzbz' => $aktivitaet_kurzbz, + 'beschreibung' => $beschreibung, + 'bis' => $bis, + 'bis_pause' => $bis_pause, + 'homeoffice' => $homeoffice, + 'kunde_uid' => $kunde_uid, + 'oe_kurzbz_1' => $oe_kurzbz_1, + 'oe_kurzbz_2' => $oe_kurzbz_2, + 'projekt_kurzbz' => $projekt_kurzbz, + 'projektphase_id' => $projektphase_id, + 'service_id' => $service_id, + 'von' => $von, + 'von_pause' => $von_pause, + 'zeitaufzeichnung_id' => $zeitaufzeichnung_id, + ]); + $zeit_post_import->import(); + echo $zeit_post_import->OutputToHTML(); + if (!$zeit_post_import->hasErrors() && !$zeit_post_import->hasWarnings()) { - if(!$zeit->load($zeitaufzeichnung_id)) - die($p->t("global/fehlerBeimLadenDesDatensatzes")); - - $zeit->new = false; - } - else - { - $zeit->new = true; - $zeit->insertamum = date('Y-m-d H:i:s'); - $zeit->insertvon = $user; - } - - $zeit->uid = $user; - $zeit->aktivitaet_kurzbz = $aktivitaet_kurzbz; - $zeit->start = $datum->formatDatum($von, $format='Y-m-d H:i:s'); - $zeit->ende = $datum->formatDatum($bis, $format='Y-m-d H:i:s'); - $zeit->beschreibung = $beschreibung; - $zeit->oe_kurzbz_1 = $oe_kurzbz_1; - $zeit->oe_kurzbz_2 = $oe_kurzbz_2; - $zeit->updateamum = date('Y-m-d H:i:s'); - $zeit->updatevon = $user; - $zeit->projekt_kurzbz = $projekt_kurzbz; - $zeit->projektphase_id = $projektphase_id; - $zeit->homeoffice = $homeoffice; - $zeit->service_id = $service_id; - $zeit->kunde_uid = $kunde_uid; - $saveerror = 0; - - if (!$projects_of_user->checkProjectInCorrectTime($projekt_kurzbz, $datum->formatDatum($von, $format='Y-m-d'), $datum->formatDatum($bis, $format='Y-m-d'))) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektzeitrahmen fällt.
    '; - $saveerror = 1; - } - elseif ($datum->formatDatum($von, $format='Y-m-d') > $limitdatum || $datum->formatDatum($bis, $format='Y-m-d') > $limitdatum) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs oder Enddatum zu weit in der Zukunft liegt.
    '; - $saveerror = 1; - } - elseif (!$projectphase->checkProjectphaseInCorrectTime($projektphase_id, $datum->formatDatum($von, $format='Y-m-d'), $datum->formatDatum($bis, $format='Y-m-d'))) - { - echo '

    '.$p->t("global/fehlerBeimSpeichernDerDaten").': - Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektphasenzeitrahmen fällt.


    '; - $saveerror = 1; - - } - elseif (abs($von-$bis)>0 && $aktivitaet_kurzbz!="DienstreiseMT") - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da keine Zeitaufzeichnung über mehrere Tage erlaubt ist (ausgenommen Dienstreisen).
    '; - $saveerror = 1; - } - elseif (isset($_POST['genPause']) && (isset($_POST['save']) || isset($_POST['edit']))) - { - - $p_start = $datum->formatDatum($von_pause, $format='Y-m-d H:i:s'); - $p_end = $datum->formatDatum($bis_pause, $format='Y-m-d H:i:s'); - - // checken ob Pause innerhalb der Arbeitszeit ist - if ($zeit->start > $p_start || $zeit->ende < $p_end) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Pause außerhalb der Arbeitszeit
    '; - $saveerror = 1; - - } - elseif ($p_start > $p_end) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Fehlerhafte Pausenzeiten
    '; - $saveerror = 1; - } - else - { - //Eintrag Arbeit bis zur Pause - $zeit->ende = $datum->formatDatum($von_pause, $format='Y-m-d H:i:s'); - if(!$zeit->save()) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.'
    '; - $saveerror = 1; - } - //Eintrag für die Pause - $pause = new zeitaufzeichnung(); - $pause->new = true; - $pause->insertamum = date('Y-m-d H:i:s'); - $pause->updateamum = date('Y-m-d H:i:s'); - $pause->updatevon = $user; - $pause->insertvon = $user; - $pause->uid = $user; - $pause->aktivitaet_kurzbz = 'Pause'; - $pause->homeoffice = $homeoffice; - $pause->start = $datum->formatDatum($von_pause, $format='Y-m-d H:i:s'); - $pause->ende = $datum->formatDatum($bis_pause, $format='Y-m-d H:i:s'); - $pause->beschreibung = ''; - if(!$pause->save()) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$pause->errormsg.'
    '; - $saveerror = 1; - } - // Eintrag Arbeit ab der Pause - if ($zeit->new == false) - { - $zeit->new = true; - $zeit->insertamum = date('Y-m-d H:i:s'); - $zeit->insertvon = $user; - } - - $zeit->start = $datum->formatDatum($bis_pause, $format='Y-m-d H:i:s'); - $zeit->ende = $datum->formatDatum($bis, $format='Y-m-d H:i:s'); - if(!$zeit->save()) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.'
    '; - $saveerror = 1; - } - } - } - elseif (!isset($_POST['genPause'])) - { - if(!$zeit->save()) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.''; - $saveerror = 1; - } - } - - if ($saveerror == 0) - { - echo ''.$p->t("global/datenWurdenGespeichert").''; - // Nach dem Speichern in den neu Modus springen und als Von Zeit // das Ende des letzten Eintrages eintragen $zeitaufzeichnung_id = ''; - $uid = $zeit->uid; + $uid = $user; $aktivitaet_kurzbz = ''; - $von = date('d.m.Y H:i', $datum->mktime_fromtimestamp($zeit->ende)); - $bis = date('d.m.Y H:i', $datum->mktime_fromtimestamp($zeit->ende)+3600); + $von = date('d.m.Y H:i', $datum->mktime_fromtimestamp($datum->formatDatum($bis, $format = 'Y-m-d H:i:s'))); + $bis = date('d.m.Y H:i', $datum->mktime_fromtimestamp($datum->formatDatum($bis, $format = 'Y-m-d H:i:s'))+3600); $beschreibung = ''; $oe_kurzbz_1 = ''; $oe_kurzbz_2 = ''; @@ -1179,7 +889,6 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) } } - //Datensatz loeschen if(isset($_GET['type']) && $_GET['type']=='delete') { @@ -1189,13 +898,16 @@ if(isset($_GET['type']) && $_GET['type']=='delete') { if ($zeit->start < $sperrdatum) - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum'; + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum'; else { if($zeit->uid==$user) { if($zeit->delete($zeitaufzeichnung_id)) + { + $zeitaufzeichnung_id = ''; echo ''.$p->t("global/eintragWurdeGeloescht").''; + } else echo ''.$p->t("global/fehlerBeimLoeschenDesEintrags").''; } @@ -1250,7 +962,6 @@ if (isset($_GET['type']) && $_GET['type'] == 'edit') } } - //Projekte holen zu denen der Benutzer zugeteilt ist $projekt = new projekt(); @@ -1262,13 +973,19 @@ if ($projekt->getProjekteMitarbeiter($user, true)) echo " @@ -1287,13 +1004,32 @@ if ($projekt->getProjekteMitarbeiter($user, true)) } echo '

    '.$p->t("urlaubstool/meineZeitsperren").'

    '; echo $p->t("zeitaufzeichnung/supportAnfragen"); - echo ' - -
    - ".$p->t("zeitaufzeichnung/neu")." | + ".$p->t("zeitaufzeichnung/neu")." | "; - CSV Import | + if (!$adminView) + { + echo + " + CSV Import | - CSV Export | + CSV Export | + "; + } - Projektübersichtexport"; + echo " Projektübersichtexport"; if($anzprojekte > 0) echo " | ".$p->t("zeitaufzeichnung/projektexport").""; echo "
    '; + + //Dropdown timesheets Mitarbeiter + if ($untergebenen_arr) + { + $mitarbeiter = new mitarbeiter(); + $mitarbeiter->getMitarbeiterArray($untergebenen_arr); + + echo " +

    + + "; + } + echo ' + '; echo ''; - - echo ''; + echo ' - - - '; - - - - $tag=$datumtag; - $tagessumme='00:00'; - $pausesumme='00:00'; - $elsumme='00:00'; - $ersumme = '00:00'; - $extlehrearr = array(); - $tagesbeginn = ''; - $tagesende = ''; - $pflichtpause = false; - $wochensaldo = $datum_obj->sumZeit($wochensaldo,$tagessaldo ); - //} - //else - //{ - // echo ''; - //} + $lang = getSprache(); + if ($lang == 'German') + $langindex = 1; + else + $langindex = 2; + echo ''.$tagbez[$langindex][$datum->formatDatum($tag,'N')].' '.$datum->formatDatum($tag,'d.m.Y').''.$zeitsperre_text.''.$pausefehlt_str; + if ($ersumme != '00:00') + $erstr = ' (+ '.$ersumme.' ER)'; + else + { + $erstr = ''; + } + echo ' + + + '; + $tag=$datumtag; + $tagessumme='00:00'; + $pausesumme='00:00'; + $elsumme='00:00'; + $ersumme = '00:00'; + $extlehrearr = array(); + $tagesbeginn = ''; + $tagesende = ''; + $pflichtpause = false; + $wochensaldo = $datum_obj->sumZeit($wochensaldo,$tagessaldo ); } // Nach jeder Woche eine Summenzeile einfuegen und eine neue Tabelle beginnen @@ -1901,7 +1646,7 @@ if ($projekt->getProjekteMitarbeiter($user, true)) $ersumme_woche = '00:00'; } - // Diestreisen NEU + // Dienstreisen NEU if (array_key_exists($datumtag, $dr_arr)) { $colspan=($za_simple)?6:8; @@ -1920,8 +1665,6 @@ if ($projekt->getProjekteMitarbeiter($user, true)) echo ''; echo ''; echo '\n"; echo "\n"; - echo " \n"; - echo " \n"; + + if (!$adminView) + { + if(!isset($_GET['filter']) && ($row->uid==$user && $row->datum > $sperrdatum)) + echo ''.$p->t("global/bearbeiten").''; + } + echo "\n"; + echo " \n"; + echo " \n"; if (($tagesbeginn=='' || $datum->mktime_fromtimestamp($datum->formatDatum($tagesbeginn, $format='Y-m-d H:i:s')) > $datum->mktime_fromtimestamp($datum->formatDatum($row->start, $format='Y-m-d H:i:s'))) && $row->aktivitaet_kurzbz != 'LehreExtern' && $row->aktivitaet_kurzbz != 'Ersatzruhe') $tagesbeginn = $row->start; @@ -2015,17 +1766,8 @@ if ($projekt->getProjekteMitarbeiter($user, true)) '; } - - //echo $p->t("zeitaufzeichnung/gesamtdauer").": ".$db->convert_html_chars($summe); Aukommentiert. Irrelevant } echo '
    '; echo ''; + if (isset($_GET['projektexport'])) { $projektexpurl = dirname($_SERVER["PHP_SELF"]) .'/zeitaufzeichnung_projektliste.php'; @@ -1327,10 +1063,6 @@ if ($projekt->getProjekteMitarbeiter($user, true)) //Formular echo '
    '; -/* echo '
    - - '; + echo ''; + else + { + echo ''; + echo '  '; + echo ''; + } + } + echo '
    '; - echo '';*/ if (isset($_GET['csvimport'])) { echo ''; @@ -1356,29 +1088,23 @@ if ($projekt->getProjekteMitarbeiter($user, true)) if (isset($_GET['projektübersichtexport'])) { - echo ''; echo ''; echo ''; echo ''; echo ''; - } //Aktivitaet echo ''; echo ' + + + '; + //Zeitsperren + echo '

    '; + //Homeoffice Checkbox echo ' @@ -1628,23 +1363,30 @@ if ($projekt->getProjekteMitarbeiter($user, true)) '; - //Beschreibung - echo ''; - echo ''; - else - { - echo ''; - echo '  '; - echo ''; - } - echo '


    CSV-Export

    '.$p->t("zeitaufzeichnung/aktivitaet").''; - //if ($za_simple == 1) - $qry = "SELECT * FROM fue.tbl_aktivitaet where aktivitaet_kurzbz in (".$activities_str.") ORDER by sort,beschreibung"; - //else - // $qry = "SELECT * FROM fue.tbl_aktivitaet where sort != 5 or sort is null ORDER by sort,beschreibung"; + + $qry = "SELECT * FROM fue.tbl_aktivitaet where aktivitaet_kurzbz in (".$activities_str.") ORDER by sort,beschreibung"; + if($result = $db->db_query($qry)) { echo '
    '.$p->t("zeitaufzeichnung/organisationseinheiten").'
      +

    +
    '.$p->t("global/von").' - '.$p->t("global/bis").' @@ -1615,6 +1347,9 @@ if ($projekt->getProjekteMitarbeiter($user, true))
    '.$p->t("global/beschreibung").'
    '; - //SpeichernButton - if($zeitaufzeichnung_id=='') - echo '
    '; + if (!$adminView) + { + //Beschreibung + echo '
    '.$p->t("global/beschreibung").'
    '; + //SpeichernButton + if($zeitaufzeichnung_id == '') + echo '
    '; + echo '


    '; - echo '


    '; + if (!$adminView) + { + echo '
    '; + } + echo '
    '; // Summen Lehre anzeigen $bv = new bisverwendung(); @@ -1689,7 +1431,8 @@ if ($projekt->getProjekteMitarbeiter($user, true)) echo ''; else echo ''; - //echo ''; + + $za = new zeitaufzeichnung(); if(isset($_GET['filter'])) @@ -1707,8 +1450,6 @@ if ($projekt->getProjekteMitarbeiter($user, true)) $dr->getDienstreisenUser($user, 180); $dr_arr = $dr->result; - //var_dump($dr->result); - if(count($za->result)>0) { //Uebersichtstabelle @@ -1749,112 +1490,116 @@ if ($projekt->getProjekteMitarbeiter($user, true)) $tag = $datumtag; if($tag!=$datumtag) { + if ($datum->formatDatum($tag,'N') == '6' || $datum->formatDatum($tag,'N') == '7') + $style = 'style="background-color:#eeeeee; font-size: 8pt;"'; + else + $style = 'style="background-color:#DCE4EF; font-size: 8pt;"'; - //if ($row->uid) - //{ - if ($datum->formatDatum($tag,'N') == '6' || $datum->formatDatum($tag,'N') == '7') - $style = 'style="background-color:#eeeeee; font-size: 8pt;"'; - else - $style = 'style="background-color:#DCE4EF; font-size: 8pt;"'; + // zeitsperren anzeigen + if (array_key_exists($datum->formatDatum($tag,'Y-m-d'), $zeitsperren)) + { + $zeitsperre_text = " -- ".$zeitsperren[$datum->formatDatum($tag,'Y-m-d')]." -- "; + $style = 'style="background-color:#cccccc; font-size: 8pt;"'; + } + else + $zeitsperre_text = ''; + if (isset($_GET["von_datum"]) && $datum->formatDatum($tag, 'd.m.Y') == $_GET["von_datum"]) + $style = 'style="border-top: 3px solid #8DBDD8; border-bottom: 3px solid #8DBDD8"'; - // zeitsperren anzeigen - if (array_key_exists($datum->formatDatum($tag,'Y-m-d'), $zeitsperren)) + list($h1, $m1) = explode(':', $pausesumme); + $pausesumme = $h1*3600+$m1*60; + $tagessaldo = $datum->mktime_fromtimestamp($datum->formatDatum($tagesende, $format='Y-m-d H:i:s'))-$datum->mktime_fromtimestamp($datum->formatDatum($tagesbeginn, $format='Y-m-d H:i:s'))-3600; + foreach($extlehrearr as $el) + { + if ($el["start"] > $tagesbeginn && $el["ende"] < $tagesende) + $elsumme = $datum_obj->sumZeit($elsumme, $el["diff"]); + } + list($h2, $m2) = explode(':', $elsumme); + $elsumme = $h2*3600+$m2*60; + if ($datum->formatDatum($tag, 'Y-m-d') >= '2019-11-06') + { + $pausesumme = $pausesumme; + } + else if ($tagessaldo > 18000 && $tagessaldo < 19800 && $pflichtpause==false && $elsumme == 0) + { + $pausesumme = $tagessaldo-18000; + } + else if ($tagessaldo>18000 && $pflichtpause==false && $elsumme == 0) + { + $pausesumme = $pausesumme+1800; + } + + if ($elsumme > 0){ + $pausesumme = $pausesumme + $elsumme; + $pflichtpause = true; + } + + $tagessaldo = $tagessaldo-$pausesumme; + // fehlende Pausen berechnen + $pausefehlt_str = ''; + + //Prüfung auf azgrelevant und blockierende Pausenfehler + $linkExclamation = APP_ROOT. 'skin/images/exclamation.png'; + $linkInformation = APP_ROOT. 'skin/images/information.png'; + + $za = new zeitaufzeichnung(); + $verwendung = new bisverwendung(); + if ($za->checkPausenErrors($user, $tag)) + { + $verwendung->getVerwendungDatum($user, $tag); + foreach ($verwendung->result as $v) { - $zeitsperre_text = " -- ".$zeitsperren[$datum->formatDatum($tag,'Y-m-d')]." -- "; - $style = 'style="background-color:#cccccc; font-size: 8pt;"'; + if ($v->azgrelevant) + { + $pausefehlt_str = ' -- Pause fehlt oder zu kurz -- '; + } + else + { + $pausefehlt_str = ' -- Pause fehlt --'; + } } - else - $zeitsperre_text = ''; - //var_dump($zs->result); - if (isset($_GET["von_datum"]) && $datum->formatDatum($tag, 'd.m.Y') == $_GET["von_datum"]) - $style = 'style="border-top: 3px solid #8DBDD8; border-bottom: 3px solid #8DBDD8"'; + } - list($h1, $m1) = explode(':', $pausesumme); - $pausesumme = $h1*3600+$m1*60; - $tagessaldo = $datum->mktime_fromtimestamp($datum->formatDatum($tagesende, $format='Y-m-d H:i:s'))-$datum->mktime_fromtimestamp($datum->formatDatum($tagesbeginn, $format='Y-m-d H:i:s'))-3600; - foreach($extlehrearr as $el) - { - if ($el["start"] > $tagesbeginn && $el["ende"] < $tagesende) - $elsumme = $datum_obj->sumZeit($elsumme, $el["diff"]); - } - list($h2, $m2) = explode(':', $elsumme); - $elsumme = $h2*3600+$m2*60; - if ($datum->formatDatum($tag, 'Y-m-d') >= '2019-11-06') - { - $pausesumme = $pausesumme; - } - else if ($tagessaldo > 18000 && $tagessaldo < 19800 && $pflichtpause==false && $elsumme == 0) - { - $pausesumme = $tagessaldo-18000; - } - else if ($tagessaldo>18000 && $pflichtpause==false && $elsumme == 0) - { - $pausesumme = $pausesumme+1800; - } + $tagessaldo = date('H:i', ($tagessaldo)); + $colspan = ($za_simple)?6:8; + echo '
    '; - if ($elsumme > 0){ - $pausesumme = $pausesumme + $elsumme; - $pflichtpause = true; - } + // Zusaetzlicher span fuer Addon Informationen - $tagessaldo = $tagessaldo-$pausesumme; - // fehlende Pausen berechnen - $pausefehlt_str = ''; - if ($tagessaldo > 19800 && $pausesumme < 1800) - $pausefehlt_str = '-- Pause fehlt oder zu kurz --'; - elseif ($tagessaldo > 18000 && $tagessaldo < 19800 && $pausesumme < $tagessaldo - 18000) - $pausefehlt_str = '-- Pause fehlt oder zu kurz --'; - - - $tagessaldo = date('H:i', ($tagessaldo)); - $colspan = ($za_simple)?6:8; - echo '
    '; - - // Zusaetzlicher span fuer Addon Informationen - - $lang = getSprache(); - if ($lang == 'German') - $langindex = 1; - else - $langindex = 2; - echo ''.$tagbez[$langindex][$datum->formatDatum($tag,'N')].' '.$datum->formatDatum($tag,'d.m.Y').''.$zeitsperre_text.''.$pausefehlt_str; - if ($ersumme != '00:00') - $erstr = ' (+ '.$ersumme.' ER)'; - else - { - $erstr = ''; - } - echo ' - '.$p->t("zeitaufzeichnung/arbeitszeit").': '.$datum->formatDatum($tagesbeginn, $format='H:i').'-'.$datum->formatDatum($tagesende, $format='H:i').' '.$p->t("eventkalender/uhr").'
    - '.$p->t("zeitaufzeichnung/pause").': -
    '.$tagessaldo.$erstr.'
    '.date('H:i', ($pausesumme-3600)).'
    '; - if ($tag > $sperrdatum) - echo '<-'; - - echo '
    '.$datum->formatDatum($row->datum,'D d.m.Y').'
    + '.$p->t("zeitaufzeichnung/arbeitszeit").': '.$datum->formatDatum($tagesbeginn, $format='H:i').'-'.$datum->formatDatum($tagesende, $format='H:i').' '.$p->t("eventkalender/uhr").'
    + '.$p->t("zeitaufzeichnung/pause").': +
    '.$tagessaldo.$erstr.'
    '.date('H:i', ($pausesumme-3600)).'
    '; + if ($tag > $sperrdatum) + echo '<-'; + echo '
    '; -// if(!isset($_GET['filter']) && ($datumtag > $sperrdatum)) -// echo ''.$p->t("global/bearbeiten").''; echo ""; if(!isset($_GET['filter']) && ($datumtag > $sperrdatum)) @@ -1985,14 +1728,22 @@ if ($projekt->getProjekteMitarbeiter($user, true)) '.$db->convert_html_chars($row->diff).' beschreibung)).'">'.StringCut($db->convert_html_chars($row->beschreibung),20,null,'...').' '; - if(!isset($_GET['filter']) && ($row->uid==$user && $row->datum > $sperrdatum)) - echo ''.$p->t("global/bearbeiten").''; - echo ""; - if(!isset($_GET['filter']) && ($row->uid==$user && $row->start > $sperrdatum)) - echo ''.$p->t("global/loeschen").''; - echo "
    "; + + if (!$adminView) + { + if(!isset($_GET['filter']) && ($row->uid==$user && $row->start > $sperrdatum)) + echo ''.$p->t("global/loeschen").''; + } + echo "
    '; - /* - } - else - { - echo $p->t("zeitaufzeichnung/sieSindDerzeitKeinenProjektenZugeordnet"); - } - */ } else { @@ -2153,9 +1895,6 @@ function getZeitaufzeichnung($user, $von, $bis) * Exportiert Zeitaufzeichnungsdaten als CSV * @param $data Zeitaufzeichnungsdaten * @param string $delimiter CSV-Trennzeichen - * @param $fieldheadings Namen der Spaltenüberschriften - * @param bool $za_simple Zeitaufzeichnung lang (für Infrastrukturmitarbeiter) oder kurz (simple) - * @param $uid Id des Users für CSV-Filenamen "zeitaufzeichnung_uid" */ function exportProjectOverviewAsCSV($user, $delimiter = ',') { @@ -2177,6 +1916,7 @@ function exportProjectOverviewAsCSV($user, $delimiter = ',') function getDataForProjectOverviewCSV($user) { + $db = new basis_db(); $projects_of_user = new projekt(); $projects = $projects_of_user->getProjekteListForMitarbeiter($user); @@ -2184,10 +1924,12 @@ function getDataForProjectOverviewCSV($user) if($projektphase->getProjectphaseForMitarbeiter($user)) $projektphasen = $projektphase->result; else - $projetkphasen = array(); + $projektphasen = array(); $csvData = array(); + $exists = @$db->db_query('SELECT 1 FROM sync.tbl_projects_timesheets_project LIMIT 1;'); + foreach ($projects as $project) { $titel = $project->titel; @@ -2197,27 +1939,47 @@ function getDataForProjectOverviewCSV($user) $beginn = $project->beginn; $ende = $project->ende; - $csvData[] = array($titel, $projekt_kurzbz, $projekt_phase, $projekt_phase_id, $beginn, $ende); + $inhalt = array($titel, $projekt_kurzbz, $projekt_phase, $projekt_phase_id, $beginn, $ende); + + if ($exists) + { + $sap_projekt_id = $project->sap_project_id; + $inhalt[] = $sap_projekt_id; + } + + $csvData[] = $inhalt; } foreach ($projektphasen as $prjp) { if (true) { - $titel = $prjp->projekt_kurzbz; + $titel = $prjp->projekttitel; $projekt_kurzbz = $prjp->projekt_kurzbz; $projekt_phase = $prjp->bezeichnung; $projekt_phase_id = $prjp->projektphase_id; $beginn = $prjp->start; $ende = $prjp->ende; + $inhalt = array($titel, $projekt_kurzbz, $projekt_phase, $projekt_phase_id, $beginn, $ende); - array_push($csvData, array($titel, $projekt_kurzbz, $projekt_phase, $projekt_phase_id, $beginn, $ende) ); + if ($exists) + { + $project_task_id = $prjp->project_task_id; + $inhalt[] = $project_task_id; + } + + array_push($csvData, $inhalt); } } sort($csvData); //headers schreiben - array_unshift($csvData, array('PROJEKT', 'PROJEKT KURZBEZEICHNUNG', 'PROJEKTPHASE', 'PROJEKTPHASEN ID', 'START', 'PROJEKT ENDE')); + $header = array('PROJEKT', 'PROJEKT KURZBEZEICHNUNG', 'PROJEKTPHASE', 'PROJEKTPHASEN ID', 'START', 'PROJEKT ENDE'); + + if ($exists) + $header[] = 'SAP PROJEKTNUMMER'; + + array_unshift($csvData, $header); return $csvData; } ?> diff --git a/cis/private/tools/zeitaufzeichnung_projektliste.php b/cis/private/tools/zeitaufzeichnung_projektliste.php index 4621c4a66..c96e816df 100644 --- a/cis/private/tools/zeitaufzeichnung_projektliste.php +++ b/cis/private/tools/zeitaufzeichnung_projektliste.php @@ -48,6 +48,11 @@ $sprache_index = $sprache_obj->index; $uid = get_uid(); +$mitarbeiter = new mitarbeiter(); +$mitarbeiter->getUntergebene($uid, true); +$untergebenen_arr = array(); +$untergebenen_arr = $mitarbeiter->untergebene; + //Wenn User Administrator ist und UID uebergeben wurde, dann die Zeitaufzeichnung //des uebergebenen Users anzeigen if (isset($_GET['uid'])) @@ -55,7 +60,7 @@ if (isset($_GET['uid'])) $rechte = new benutzerberechtigung(); $rechte->getBerechtigungen($uid); - if ($rechte->isBerechtigt('admin')) + if ($rechte->isBerechtigt('admin') || (in_array($_GET['uid'], $untergebenen_arr))) { $uid = $_GET['uid']; } @@ -74,9 +79,9 @@ $year = $_GET['projexpjahr']; $monthtext = $monatsname[$sprache_index][$month - 1]; $username = $benutzer->vorname." ".$benutzer->nachname; -$mitarbeiter = new mitarbeiter(); $mitarbeiter->load($uid); $persnr = $mitarbeiter->personalnummer; + $daysinmonth = cal_days_in_month(CAL_GREGORIAN, $month, $year); $date = new datum(); @@ -559,9 +564,11 @@ $totalworktimewidth = 13; $worktimewidth = 14; $timecolumnswidth = 2 * $daywidth + $totalworktimewidth + $worktimewidth; -if ($nrProjects < 1)//no projekts - merge all cells and write notice +if ($nrProjects < 1) //no projekts - write notice { - $projektnames[] = "Keine Projekte vorhanden"; + $worksheet =& $workbook->addWorksheet('Tabelle'); + $worksheet->setInputEncoding('utf-8'); + $worksheet->write(0,0,'Für diesen Zeitraum sind keine Projekte zugeordnet'); } foreach ($projektnames as $projektname) @@ -748,7 +755,7 @@ foreach ($projektnames as $projektname) } $worksheet->setColumn($spalte, $spalte, $phasewidth); - $worksheet->write($zeile, $spalte++, $projekt->beschreibung, $format_cell_leftrightline); + $worksheet->writeString($zeile, $spalte++, $projekt->beschreibung, $format_cell_leftrightline); } } else diff --git a/cis/private/tools/zeitaufzeichnung_projektphasen.php b/cis/private/tools/zeitaufzeichnung_projektphasen.php index cd0acc0bd..053f38b91 100644 --- a/cis/private/tools/zeitaufzeichnung_projektphasen.php +++ b/cis/private/tools/zeitaufzeichnung_projektphasen.php @@ -27,12 +27,18 @@ require_once('../../../include/projektphase.class.php'); require_once('../../../include/datum.class.php'); require_once('../../../include/benutzerberechtigung.class.php'); require_once('../../../include/phrasen.class.php'); +require_once('../../../include/mitarbeiter.class.php'); if (!$db = new basis_db()) die('Es konnte keine Verbindung zum Server aufgebaut werden.'); $user = get_uid(); +$mitarbeiter = new mitarbeiter(); +$mitarbeiter->getUntergebene($user, true); +$untergebenen_arr = array(); +$untergebenen_arr = $mitarbeiter->untergebene; + //Wenn User Administrator ist und UID uebergeben wurde, dann die Phasen //des uebergebenen Users anzeigen if (isset($_GET['uid']) && $user != $_GET['uid']) @@ -40,7 +46,7 @@ if (isset($_GET['uid']) && $user != $_GET['uid']) $rechte = new benutzerberechtigung(); $rechte->getBerechtigungen($user); - if ($rechte->isBerechtigt('admin')) + if ($rechte->isBerechtigt('admin') || (in_array($_GET['uid'], $untergebenen_arr))) { $user = $_GET['uid']; } diff --git a/cis/private/tools/zeitaufzeichnung_zeitsperren.php b/cis/private/tools/zeitaufzeichnung_zeitsperren.php new file mode 100644 index 000000000..47611ba6f --- /dev/null +++ b/cis/private/tools/zeitaufzeichnung_zeitsperren.php @@ -0,0 +1,68 @@ + + */ +/** + * Checks, if there is a zeitsperre for a certain date. It should not be possible + * to add a zeitaufzeichnung with a holiday (or else) entry on the same day. + */ + + +require_once('../../../config/cis.config.inc.php'); +require_once('../../../include/globals.inc.php'); +require_once('../../../include/phrasen.class.php'); +require_once('../../../include/benutzerberechtigung.class.php'); +require_once('../../../include/zeitsperre.class.php'); + +header('Content-Type: application/json; charset=utf-8'); +$sprache = getSprache(); +$p = new phrasen($sprache); + +if ( isset($_GET['day']) ) +{ + $auth = new authentication(); + $uid = $auth->getUser(); + $day = $_GET['day']; + + $zs = new zeitsperre(); + $sperreVorhanden = false; + $typ = ''; + $zs->getSperreByDate($uid, $day, null, zeitsperre::NUR_BLOCKIERENDE_ZEITSPERREN); + $result_obj = array(); + $now = new DateTime($day); + $now = $now->format('d.m.Y'); + + foreach ($zs->result as $z) + { + if ($z->zeitsperretyp_kurzbz) + { + $item['typ'] = $z->zeitsperretyp_kurzbz; + $item['day'] = $now; + $item['sperreVorhanden'] = true; + $result_obj[] = $item; + } + } + echo json_encode($result_obj); +} else { + http_response_code(500); + echo json_encode(array( + array( + "error" => 'missing parameter day' + ) + )); +} diff --git a/cis/testtool/admin/auswertung_detail.php b/cis/testtool/admin/auswertung_detail.php index 05a6143ee..775234670 100644 --- a/cis/testtool/admin/auswertung_detail.php +++ b/cis/testtool/admin/auswertung_detail.php @@ -104,9 +104,11 @@ if(isset($_GET['show'])) SELECT distinct on(tbl_frage.frage_id) *, tbl_gebiet.kurzbz as gebiet FROM - testtool.tbl_frage - JOIN testtool.tbl_ablauf USING(gebiet_id) - JOIN testtool.tbl_frage_sprache USING(frage_id) + testtool.tbl_frage "; + if($stg_kz!='') + $qry.=" JOIN testtool.tbl_ablauf USING(gebiet_id) "; + + $qry.=" JOIN testtool.tbl_frage_sprache USING(frage_id) JOIN testtool.tbl_gebiet USING(gebiet_id) WHERE demo=false"; diff --git a/cis/testtool/login.php b/cis/testtool/login.php index b7cbc02b5..df4874a4c 100644 --- a/cis/testtool/login.php +++ b/cis/testtool/login.php @@ -1,734 +1,736 @@ -, - * Andreas Oesterreicher , - * Rudolf Hangl , - * Manfred Kindl - * Cristina Hainberger - */ - -require_once('../../config/cis.config.inc.php'); -require_once('../../config/global.config.inc.php'); -require_once('../../include/person.class.php'); -require_once('../../include/prestudent.class.php'); -require_once('../../include/pruefling.class.php'); -require_once('../../include/studiengang.class.php'); -require_once('../../include/studienplan.class.php'); -require_once('../../include/ablauf.class.php'); -require_once('../../include/reihungstest.class.php'); -require_once('../../include/sprache.class.php'); -require_once '../../include/phrasen.class.php'; -require_once '../../include/datum.class.php'; - -if (!$db = new basis_db()) - die('Fehler beim Oeffnen der Datenbankverbindung'); - -// Start session -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 = []; - - // Destroy session - session_destroy(); - - echo ' - - '; -} - -$gebdatum=''; -$date = new datum(); - -$reload_menu=false; -$alertmsg = ''; - -$sg_var = new studiengang(); - -if (isset($_POST['gebdatum']) && $_POST['gebdatum']!='') -{ - $gebdatum = $date->formatDatum($_POST['gebdatum'],'Y-m-d'); -} -else - $gebdatum=''; - -if (isset($_REQUEST['prestudent'])) -{ - $ps = new prestudent($_REQUEST['prestudent']); - - $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 - $rt = new reihungstest(); - - // 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 || - (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])) - $reihungstest_id = $rt->result[0]->reihungstest_id; - else - { - $alertmsg .= '
    '.$p->t('testtool/reihungstestKannNichtGeladenWerden').'
    '; - } - } - else - { - if ($rt->getReihungstestPersonDatum($ps->prestudent_id, date('Y-m-d'))) - { - // TODO Was ist wenn da mehrere Zurueckkommen?! - if (isset($rt->result[0])) - $reihungstest_id = $rt->result[0]->reihungstest_id; - else - { - $alertmsg .= '
    '.$p->t('testtool/reihungstestKannNichtGeladenWerden').'
    '; - } - } - else - { - echo 'Failed:'.$rt->errormsg; - } - } - if ($reihungstest_id != '' && $rt->load($reihungstest_id)) - { - if ($rt->freigeschaltet) - { - // regenerate Session ID after Login - session_regenerate_id(); - - $pruefling = new pruefling(); - if ($pruefling->getPruefling($ps->prestudent_id)) - { - $studiengang = $pruefling->studiengang_kz; - $semester = $pruefling->semester; - } - else - { - $studiengang = $ps->studiengang_kz; - $ps->getLastStatus($ps->prestudent_id); - $semester = $ps->ausbildungssemester; - } - if ($semester=='') - $semester=1; - - $_SESSION['prestudent_id']=$_REQUEST['prestudent']; - $_SESSION['studiengang_kz']=$studiengang; - $_SESSION['nachname']=$ps->nachname; - $_SESSION['vorname']=$ps->vorname; - $_SESSION['gebdatum']=$ps->gebdatum; - $stg_obj = new studiengang($studiengang); - - $_SESSION['semester']=$semester; - $_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($_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)) - { - $firstPrio_studienplan_id = $row->studienplan_id; - break; - } - } - foreach($ps->result as $row) - { - if (isset($row->studiengang_kz)) - { - $firstPrio_studiengang_kz = $row->studiengang_kz; - break; - } - } - // Sprachvorgaben zu STG mit höchster Prio 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])) - { - $ablauf->getAblaufGebiete($firstPrio_studiengang_kz); - } - - 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; - } - - // * 3. falls keine Sprache vorhanden -> Sprache über Studiengang ermitteln - if (empty($rt_sprache)) - { - $stg = new Studiengang($firstPrio_studiengang_kz); - $rt_sprache = $stg->sprache; - } - - // * 4. Sprache setzen. Falls keine Sprache vorhanden -> DEFAULT language verwenden - if (empty($rt_sprache)) - { - $_SESSION['sprache_user'] = DEFAULT_LANGUAGE; - } - else - { - $_SESSION['sprache_user'] = $rt_sprache; - } - } - else - { - $alertmsg .= '
    '.$p->t('testtool/reihungstestNichtFreigeschalten').'
    '; - } - } - else - { - $alertmsg .= '
    '.$p->t('testtool/reihungstestKannNichtGeladenWerden').'
    '; - } - } -} - -// Set language of user. -// NOTE: don't move the code in order to check first the right studies' reihungstest language -// (in case it was overruled by other STG with higher priority) - -// Start with default language on first login (before any prestudent has been selected) -$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']; -} -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 language is changed by language select menu, reset language variables -if (isset($_GET['sprache_user']) && !empty($_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 -$p = new phrasen($sprache_user); - -if (isset($_SESSION['prestudent_id'])) -{ - $prestudent_id=$_SESSION['prestudent_id']; -} -else -{ - //$prestudent_id=null; - $ps=new prestudent(); - $datum=date('Y-m-d'); - // An der FHTW wird ein Bewerber nur einmal ausgegeben (1. Prio) falls es mehrere Bewerbungen gibt - /*if (CAMPUS_NAME == 'FH Technikum Wien') - { - $ps->getFirstPrioPrestudentRT($datum); - } - else*/ - { - $ps->getPrestudentRT($datum); - } -} - - -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'])) - $pruefling->new = true; - else - $pruefling->new = false; - - $pruefling->studiengang_kz = $_SESSION['studiengang_kz']; - $pruefling->semester = $_SESSION['semester']; - - $pruefling->idnachweis = ''; - $pruefling->registriert = date('Y-m-d H:i:s'); - $pruefling->prestudent_id = $_SESSION['prestudent_id']; - if ($pruefling->save()) - { - $_SESSION['pruefling_id']=$pruefling->pruefling_id; - $reload_menu=true; - } -} - -if (isset($_POST['save']) && isset($_SESSION['prestudent_id'])) -{ - $pruefling = new pruefling(); - if ($_POST['pruefling_id']!='') - if (!$pruefling->load($_POST['pruefling_id'])) - die('Pruefling wurde nicht gefunden'); - else - $pruefling->new=false; - else - $pruefling->new=true; - - $pruefling->studiengang_kz = $_SESSION['studiengang_kz']; - $pruefling->idnachweis = isset($_POST['idnachweis'])?$_POST['idnachweis']:''; - $pruefling->registriert = date('Y-m-d H:i:s'); - $pruefling->prestudent_id = $_SESSION['prestudent_id']; - $pruefling->semester = $_POST['semester']; - if ($pruefling->save()) - { - $_SESSION['pruefling_id']=$pruefling->pruefling_id; - $_SESSION['semester']=$pruefling->semester; - $reload_menu=true; - } -} -?> - - - - - - - - - - - -parent.menu.location.reload();'; -?> - - - -
    - -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(); - - // * 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; - $firstPrio_studienplan_id = $row_prio->studienplan_id; - break; - } - } - } - - // Sprachwahl zu STG mit höchster Prio ermitteln - $ablauf = new Ablauf(); - $sprachwahl = false; - - $ablauf->getAblaufGebiete($firstPrio_studiengang_kz, $firstPrio_studienplan_id); - - if (empty($ablauf->result[0])) - { - $ablauf->getAblaufGebiete($firstPrio_studiengang_kz); - } - - if (isset($ablauf->result[0]) - && is_bool($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'). '


    - '; - - 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'). '


    - - - - - - - - - - '; - - // * 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); - - $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); - - 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 ' - -
    '. $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]. '
    '. $typ->bezeichnung.' '.($sprache_user=='English'?$stg_obj->english:$stg_obj->bezeichnung).''. $ps_master->status_mehrsprachig[$sprache_user]. '
    - '; - - 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) -{ - if (defined('TESTTOOL_LOGIN_BEWERBUNGSTOOL') && TESTTOOL_LOGIN_BEWERBUNGSTOOL) - { - echo '
    '; - echo '
    '.$alertmsg.'
    '; - echo $p->t('testtool/einfuehrungsText'); - - 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 '
    '; - - // 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. -
    -
    - '; - - // Begin form - echo '
    '; - echo '
    '; - - // Name select menu - echo '
    '; - echo ''; - echo '
    '; - echo ''; - echo '
    '; // end col-xs - echo '
    '; // end form-group - - // Datepicker input - echo '
    '; - echo ''; - echo '
    '; - echo ''; - echo '
    '; // end col-xs - echo '
    '; // end form-group - - // Login button - echo ''; - - echo '
    '; // end form - - echo '
    '; // end row - echo '
    '; // end col-xs-11 - } -} - -?> -
    - - +, + * Andreas Oesterreicher , + * Rudolf Hangl , + * Manfred Kindl + * Cristina Hainberger + */ + +require_once('../../config/cis.config.inc.php'); +require_once('../../config/global.config.inc.php'); +require_once('../../include/person.class.php'); +require_once('../../include/prestudent.class.php'); +require_once('../../include/pruefling.class.php'); +require_once('../../include/studiengang.class.php'); +require_once('../../include/studienplan.class.php'); +require_once('../../include/ablauf.class.php'); +require_once('../../include/reihungstest.class.php'); +require_once('../../include/sprache.class.php'); +require_once '../../include/phrasen.class.php'; +require_once '../../include/datum.class.php'; + +if (!$db = new basis_db()) + die('Fehler beim Oeffnen der Datenbankverbindung'); + +// Start session +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 = []; + + // Destroy session + session_destroy(); + + echo ' + + '; +} + +$gebdatum=''; +$date = new datum(); + +$reload_menu=false; +$alertmsg = ''; + +$sg_var = new studiengang(); + +if (isset($_POST['gebdatum']) && $_POST['gebdatum']!='') +{ + $gebdatum = $date->formatDatum($_POST['gebdatum'],'Y-m-d'); +} +else + $gebdatum=''; + +if (isset($_REQUEST['prestudent'])) +{ + $ps = new prestudent($_REQUEST['prestudent']); + + $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 + $rt = new reihungstest(); + + // 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 || + (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])) + $reihungstest_id = $rt->result[0]->reihungstest_id; + else + { + $alertmsg .= '
    '.$p->t('testtool/reihungstestKannNichtGeladenWerden').'
    '; + } + } + else + { + if ($rt->getReihungstestPersonDatum($ps->prestudent_id, date('Y-m-d'))) + { + // TODO Was ist wenn da mehrere Zurueckkommen?! + if (isset($rt->result[0])) + $reihungstest_id = $rt->result[0]->reihungstest_id; + else + { + $alertmsg .= '
    '.$p->t('testtool/reihungstestKannNichtGeladenWerden').'
    '; + } + } + else + { + echo 'Failed:'.$rt->errormsg; + } + } + if ($reihungstest_id != '' && $rt->load($reihungstest_id)) + { + if ($rt->freigeschaltet) + { + // regenerate Session ID after Login + session_regenerate_id(); + + $pruefling = new pruefling(); + if ($pruefling->getPruefling($ps->prestudent_id)) + { + $studiengang = $pruefling->studiengang_kz; + $semester = $pruefling->semester; + } + else + { + $studiengang = $ps->studiengang_kz; + $ps->getLastStatus($ps->prestudent_id); + $semester = $ps->ausbildungssemester; + } + if ($semester=='') + $semester=1; + + $_SESSION['prestudent_id']=$_REQUEST['prestudent']; + $_SESSION['studiengang_kz']=$studiengang; + $_SESSION['nachname']=$ps->nachname; + $_SESSION['vorname']=$ps->vorname; + $_SESSION['gebdatum']=$ps->gebdatum; + $stg_obj = new studiengang($studiengang); + + $_SESSION['semester']=$semester; + $_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($_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)) + { + $firstPrio_studienplan_id = $row->studienplan_id; + break; + } + } + foreach($ps->result as $row) + { + if (isset($row->studiengang_kz)) + { + $firstPrio_studiengang_kz = $row->studiengang_kz; + break; + } + } + // Sprachvorgaben zu STG mit höchster Prio 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])) + { + $ablauf->getAblaufGebiete($firstPrio_studiengang_kz); + } + + 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; + } + + // * 3. falls keine Sprache vorhanden -> Sprache über Studiengang ermitteln + if (empty($rt_sprache)) + { + $stg = new Studiengang($firstPrio_studiengang_kz); + $rt_sprache = $stg->sprache; + } + + // * 4. Sprache setzen. Falls keine Sprache vorhanden -> DEFAULT language verwenden + if (empty($rt_sprache)) + { + $_SESSION['sprache_user'] = DEFAULT_LANGUAGE; + } + else + { + $_SESSION['sprache_user'] = $rt_sprache; + } + } + else + { + $alertmsg .= '
    '.$p->t('testtool/reihungstestNichtFreigeschalten').'
    '; + } + } + else + { + $alertmsg .= '
    '.$p->t('testtool/reihungstestKannNichtGeladenWerden').'
    '; + } + } +} + +// Set language of user. +// NOTE: don't move the code in order to check first the right studies' reihungstest language +// (in case it was overruled by other STG with higher priority) + +// Start with default language on first login (before any prestudent has been selected) +$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']; +} +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 language is changed by language select menu, reset language variables +if (isset($_GET['sprache_user']) && !empty($_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 +$p = new phrasen($sprache_user); + +if (isset($_SESSION['prestudent_id'])) +{ + $prestudent_id=$_SESSION['prestudent_id']; +} +else +{ + //$prestudent_id=null; + $ps=new prestudent(); + $datum=date('Y-m-d'); + // An der FHTW wird ein Bewerber nur einmal ausgegeben (1. Prio) falls es mehrere Bewerbungen gibt + /*if (CAMPUS_NAME == 'FH Technikum Wien') + { + $ps->getFirstPrioPrestudentRT($datum); + } + else*/ + { + $ps->getPrestudentRT($datum); + } +} + + +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'])) + $pruefling->new = true; + else + $pruefling->new = false; + + $pruefling->studiengang_kz = $_SESSION['studiengang_kz']; + $pruefling->semester = $_SESSION['semester']; + + $pruefling->idnachweis = ''; + $pruefling->registriert = date('Y-m-d H:i:s'); + $pruefling->prestudent_id = $_SESSION['prestudent_id']; + if ($pruefling->save()) + { + $_SESSION['pruefling_id']=$pruefling->pruefling_id; + $reload_menu=true; + } +} + +if (isset($_POST['save']) && isset($_SESSION['prestudent_id'])) +{ + $pruefling = new pruefling(); + if ($_POST['pruefling_id']!='') + if (!$pruefling->load($_POST['pruefling_id'])) + die('Pruefling wurde nicht gefunden'); + else + $pruefling->new=false; + else + $pruefling->new=true; + + $pruefling->studiengang_kz = $_SESSION['studiengang_kz']; + $pruefling->idnachweis = isset($_POST['idnachweis'])?$_POST['idnachweis']:''; + $pruefling->registriert = date('Y-m-d H:i:s'); + $pruefling->prestudent_id = $_SESSION['prestudent_id']; + $pruefling->semester = $_POST['semester']; + if ($pruefling->save()) + { + $_SESSION['pruefling_id']=$pruefling->pruefling_id; + $_SESSION['semester']=$pruefling->semester; + $reload_menu=true; + } +} +?> + + + + + + + + + + + +parent.menu.location.reload();'; +?> + + + +
    + +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(); + + // * 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 + $firstPrio_studienplan_id = ''; + $firstPrio_studiengang_kz = ''; + 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; + $firstPrio_studienplan_id = $row_prio->studienplan_id; + break; + } + } + } + + // Sprachwahl zu STG mit höchster Prio ermitteln + $ablauf = new Ablauf(); + $sprachwahl = false; + + $ablauf->getAblaufGebiete($firstPrio_studiengang_kz, $firstPrio_studienplan_id); + + if (empty($ablauf->result[0])) + { + $ablauf->getAblaufGebiete($firstPrio_studiengang_kz); + } + + if (isset($ablauf->result[0]) + && is_bool($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'). '


    + '; + + 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'). '


    + + + + + + + + + + '; + + // * 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); + + $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); + + 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 ' + +
    '. $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]. '
    '. $typ->bezeichnung.' '.($sprache_user=='English'?$stg_obj->english:$stg_obj->bezeichnung).''. $ps_master->status_mehrsprachig[$sprache_user]. '
    + '; + + 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) +{ + if (defined('TESTTOOL_LOGIN_BEWERBUNGSTOOL') && TESTTOOL_LOGIN_BEWERBUNGSTOOL) + { + echo '
    '; + echo '
    '.$alertmsg.'
    '; + echo $p->t('testtool/einfuehrungsText'); + + 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 '
    '; + + // 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. +
    +
    + '; + + // Begin form + echo '
    '; + echo '
    '; + + // Name select menu + echo '
    '; + echo ''; + echo '
    '; + echo ''; + echo '
    '; // end col-xs + echo '
    '; // end form-group + + // Datepicker input + echo '
    '; + echo ''; + echo '
    '; + echo ''; + echo '
    '; // end col-xs + echo '
    '; // end form-group + + // Login button + echo ''; + + echo '
    '; // end form + + echo '
    '; // end row + echo '
    '; // end col-xs-11 + } +} + +?> +
    + + diff --git a/cis/testtool/logout.html b/cis/testtool/logout.html new file mode 100644 index 000000000..58a0b191f --- /dev/null +++ b/cis/testtool/logout.html @@ -0,0 +1,31 @@ + + + + TestTool - FH Technikum Wien + + + + + +
    +
    +
    +
    +

    Vielen Dank für die Teilnahme an unserem Aufnahmeverfahren.

    +

    + Die zuständige Assistenz wird sich in den nächsten Tagen bei Ihnen melden. +

    + Zurück zur Startseite +
    +
    +

    Thank you for participating in our admission procedure.

    +

    + The assistant in charge will contact you in the next few days. +

    + Back to startpage +
    +
    +
    +
    + + diff --git a/cms/tinymce_dms.php b/cms/tinymce_dms.php index 7aff94860..f15695be8 100644 --- a/cms/tinymce_dms.php +++ b/cms/tinymce_dms.php @@ -332,6 +332,7 @@ if (isset($_POST['fileupload'])) $dms_id = $_POST['dms_id']; $beschreibung = $_POST['beschreibung']; $schlagworte = $_POST['schlagworte']; + $mimetype = isset($_POST['mimetype']) ? $_POST['mimetype'] : ''; $cis_suche = isset($_POST['cis_suche']) ? true : false; $ext = pathinfo($_FILES['userfile']['name'], PATHINFO_EXTENSION); $filename = uniqid(); @@ -363,7 +364,14 @@ if (isset($_POST['fileupload'])) $dms->insertamum = date('Y-m-d H:i:s'); $dms->insertvon = $user; - $dms->mimetype = finfo_file($finfo, $uploadfile); // Davor deprecated: $_FILES['userfile']['type']; + if ($mimetype != '') + { + $dms->mimetype = $mimetype; + } + else + { + $dms->mimetype = finfo_file($finfo, $uploadfile); + } $dms->filename = $filename; $dms->name = $_FILES['userfile']['name']; $dms->beschreibung = $beschreibung; @@ -404,6 +412,7 @@ if (isset($_POST['action']) && $_POST['action'] == 'rename') $version = $_POST['version']; $beschreibung = $_POST['beschreibung']; $schlagworte = $_POST['schlagworte']; + $mimetype = isset($_POST['mimetype']) ? $_POST['mimetype'] : ''; $cis_suche = isset($_POST['cis_suche']) ? true : false; $dms = new dms(); @@ -413,6 +422,14 @@ if (isset($_POST['action']) && $_POST['action'] == 'rename') $dms->beschreibung = $beschreibung; $dms->schlagworte = $schlagworte; $dms->cis_suche = $cis_suche; + if ($mimetype != '') + { + $dms->mimetype = $mimetype; + } + else + { + $dms->mimetype = finfo_file($finfo, $uploadfile); + } $dms->updateamum = date('Y-m-d H:i:s'); $dms->updatevon = $user; @@ -1012,6 +1029,10 @@ else Schlagworte
    (Semikolon getrennt) + + Mimetype + + CIS-Suche @@ -1088,6 +1109,7 @@ function drawAllVersions($id) CIS-Suche Kategorie Filename intern + Mimetype Datum User @@ -1102,6 +1124,7 @@ function drawAllVersions($id) '.($dms_help->cis_suche == 'true'?'Ja':'Nein').' '.$dms_help->kategorie_kurzbz.' '.$dms_help->filename.' + '.$dms_help->mimetype.' '.$dms_help->insertamum.' '.$dms_help->insertvon.' @@ -1568,6 +1591,10 @@ function drawRenameForm($dms_id, $version, $page = NULL, $dpp = NULL, $searching Schlagworte
    (Semikolon getrennt): + + Mimetype + + CIS-Suche: cis_suche == 'true'?'checked="checked"':'').'> diff --git a/composer.json b/composer.json index 145927be0..4d1c2a896 100644 --- a/composer.json +++ b/composer.json @@ -246,7 +246,7 @@ "afarkas/html5shiv": "3.7.*", - "chriskacerguis/codeigniter-restserver": "3.0.*", + "chriskacerguis/codeigniter-restserver": "3.0.3", "christianbach/tablesorter": "1.0.*", "codeigniter/framework": "3.*", "components/jquery": "3.*", diff --git a/composer.lock b/composer.lock index 467af9461..6fc201986 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "d9941245360c86434d18413999bdc812", - "content-hash": "fbeb5d4ef943f6d1d55220cb844d11f1", + "hash": "ab181b377c4128ccde03cc50571b7ab6", + "content-hash": "e19ca762a6a929e69ae3b0e649fa4f6d", "packages": [ { "name": "BlackrockDigital/startbootstrap-sb-admin-2", @@ -130,24 +130,24 @@ }, { "name": "codeigniter/framework", - "version": "3.1.11", + "version": "3.1.13", "source": { "type": "git", "url": "https://github.com/bcit-ci/CodeIgniter.git", - "reference": "b73eb19aed66190c10c9cad476da7c36c271d6dc" + "reference": "bcb17eb8ba53a85de154439d0ab8ff1bed047bc9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bcit-ci/CodeIgniter/zipball/b73eb19aed66190c10c9cad476da7c36c271d6dc", - "reference": "b73eb19aed66190c10c9cad476da7c36c271d6dc", + "url": "https://api.github.com/repos/bcit-ci/CodeIgniter/zipball/bcb17eb8ba53a85de154439d0ab8ff1bed047bc9", + "reference": "bcb17eb8ba53a85de154439d0ab8ff1bed047bc9", "shasum": "" }, "require": { "php": ">=5.3.7" }, "require-dev": { - "mikey179/vfsstream": "1.1.*", - "phpunit/phpunit": "4.* || 5.*" + "mikey179/vfsstream": "1.6.*", + "phpunit/phpunit": "4.* || 5.* || 9.*" }, "suggest": { "paragonie/random_compat": "Provides better randomness in PHP 5.x" @@ -159,7 +159,7 @@ ], "description": "The CodeIgniter framework", "homepage": "https://codeigniter.com", - "time": "2019-09-19 12:08:45" + "time": "2022-03-03 13:21:49" }, { "name": "components/angular.js", @@ -502,16 +502,16 @@ }, { "name": "components/jquery", - "version": "3.4.1", + "version": "3.6.0", "source": { "type": "git", "url": "https://github.com/components/jquery.git", - "reference": "901828b7968b18319e377dc23d466f28426ee083" + "reference": "6cf38ee1fd04b6adf8e7dda161283aa35be818c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/components/jquery/zipball/901828b7968b18319e377dc23d466f28426ee083", - "reference": "901828b7968b18319e377dc23d466f28426ee083", + "url": "https://api.github.com/repos/components/jquery/zipball/6cf38ee1fd04b6adf8e7dda161283aa35be818c3", + "reference": "6cf38ee1fd04b6adf8e7dda161283aa35be818c3", "shasum": "" }, "type": "component", @@ -540,7 +540,7 @@ ], "description": "jQuery JavaScript Library", "homepage": "http://jquery.com", - "time": "2019-10-23 05:15:13" + "time": "2021-03-20 19:13:42" }, { "name": "components/jqueryui", @@ -674,6 +674,7 @@ "captcha", "security" ], + "abandoned": true, "time": "2018-03-09 06:07:41" }, { @@ -750,16 +751,16 @@ }, { "name": "fzaninotto/faker", - "version": "v1.9.1", + "version": "v1.9.2", "source": { "type": "git", "url": "https://github.com/fzaninotto/Faker.git", - "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f" + "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/fc10d778e4b84d5bd315dad194661e091d307c6f", - "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f", + "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/848d8125239d7dbf8ab25cb7f054f1a630e68c2e", + "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e", "shasum": "" }, "require": { @@ -797,7 +798,7 @@ "fixtures" ], "abandoned": true, - "time": "2019-12-12 13:22:17" + "time": "2020-12-11 09:56:16" }, { "name": "joeldbirch/superfish", @@ -1086,16 +1087,16 @@ }, { "name": "ml/json-ld", - "version": "1.1.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/lanthaler/JsonLD.git", - "reference": "b5f82820c255cb64067b1c7adbb819cad4afa70a" + "reference": "c74a1aed5979ed1cfb1be35a55a305fd30e30b93" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lanthaler/JsonLD/zipball/b5f82820c255cb64067b1c7adbb819cad4afa70a", - "reference": "b5f82820c255cb64067b1c7adbb819cad4afa70a", + "url": "https://api.github.com/repos/lanthaler/JsonLD/zipball/c74a1aed5979ed1cfb1be35a55a305fd30e30b93", + "reference": "c74a1aed5979ed1cfb1be35a55a305fd30e30b93", "shasum": "" }, "require": { @@ -1131,7 +1132,7 @@ "JSON-LD", "jsonld" ], - "time": "2018-11-18 20:26:18" + "time": "2020-06-16 17:45:06" }, { "name": "moment/momentjs", @@ -1146,16 +1147,16 @@ }, { "name": "mottie/tablesorter", - "version": "v2.31.2", + "version": "v2.31.3", "source": { "type": "git", "url": "https://github.com/Mottie/tablesorter.git", - "reference": "6a32e5acc294be5b6c420c83d70d66e096533d8f" + "reference": "7202d5faf8105a5ecd1a2b7a653777618713ffe5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Mottie/tablesorter/zipball/6a32e5acc294be5b6c420c83d70d66e096533d8f", - "reference": "6a32e5acc294be5b6c420c83d70d66e096533d8f", + "url": "https://api.github.com/repos/Mottie/tablesorter/zipball/7202d5faf8105a5ecd1a2b7a653777618713ffe5", + "reference": "7202d5faf8105a5ecd1a2b7a653777618713ffe5", "shasum": "" }, "require": { @@ -1193,7 +1194,7 @@ "sorting", "table" ], - "time": "2019-12-01 13:49:52" + "time": "2020-03-03 13:46:03" }, { "name": "nategood/httpful", @@ -1322,16 +1323,16 @@ }, { "name": "phpseclib/phpseclib", - "version": "2.0.31", + "version": "2.0.36", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "233a920cb38636a43b18d428f9a8db1f0a1a08f4" + "reference": "a97547126396548c224703a267a30af1592be146" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/233a920cb38636a43b18d428f9a8db1f0a1a08f4", - "reference": "233a920cb38636a43b18d428f9a8db1f0a1a08f4", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/a97547126396548c224703a267a30af1592be146", + "reference": "a97547126396548c224703a267a30af1592be146", "shasum": "" }, "require": { @@ -1409,7 +1410,7 @@ "x.509", "x509" ], - "time": "2021-04-06 13:56:45" + "time": "2022-01-30 08:48:36" }, { "name": "rmariuzzo/jquery-checkboxes", @@ -1435,16 +1436,16 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.13.1", + "version": "v1.19.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3" + "reference": "aed596913b70fae57be53d86faa2e9ef85a2297b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f8f0b461be3385e56d6de3dbb5a0df24c0c275e3", - "reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/aed596913b70fae57be53d86faa2e9ef85a2297b", + "reference": "aed596913b70fae57be53d86faa2e9ef85a2297b", "shasum": "" }, "require": { @@ -1456,16 +1457,20 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-main": "1.19-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1489,7 +1494,7 @@ "polyfill", "portable" ], - "time": "2019-11-27 13:56:44" + "time": "2020-10-23 09:01:57" }, { "name": "tapmodo/Jcrop", @@ -1504,16 +1509,16 @@ }, { "name": "tinymce/tinymce", - "version": "4.9.8", + "version": "4.9.11", "source": { "type": "git", "url": "https://github.com/tinymce/tinymce-dist.git", - "reference": "912df2bc85015c758e32d1262219f1653bbf9783" + "reference": "3a68b67d1120ab89c6760afeb787291703c9a7d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tinymce/tinymce-dist/zipball/912df2bc85015c758e32d1262219f1653bbf9783", - "reference": "912df2bc85015c758e32d1262219f1653bbf9783", + "url": "https://api.github.com/repos/tinymce/tinymce-dist/zipball/3a68b67d1120ab89c6760afeb787291703c9a7d5", + "reference": "3a68b67d1120ab89c6760afeb787291703c9a7d5", "shasum": "" }, "type": "component", @@ -1546,7 +1551,7 @@ "tinymce", "wysiwyg" ], - "time": "2020-01-28 05:03:01" + "time": "2020-07-13 05:29:19" }, { "name": "tomazdragar/SimpleCropper", @@ -1611,16 +1616,16 @@ }, { "name": "twig/twig", - "version": "v1.42.4", + "version": "v1.42.5", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "e587180584c3d2d6cb864a0454e777bb6dcb6152" + "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/e587180584c3d2d6cb864a0454e777bb6dcb6152", - "reference": "e587180584c3d2d6cb864a0454e777bb6dcb6152", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e", + "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e", "shasum": "" }, "require": { @@ -1629,8 +1634,7 @@ }, "require-dev": { "psr/container": "^1.0", - "symfony/debug": "^3.4|^4.2", - "symfony/phpunit-bridge": "^4.4@dev|^5.0" + "symfony/phpunit-bridge": "^4.4|^5.0" }, "type": "library", "extra": { @@ -1659,7 +1663,6 @@ }, { "name": "Twig Team", - "homepage": "https://twig.symfony.com/contributors", "role": "Contributors" }, { @@ -1673,24 +1676,24 @@ "keywords": [ "templating" ], - "time": "2019-11-11 16:49:32" + "time": "2020-02-11 05:59:23" }, { "name": "zetacomponents/base", - "version": "1.9.1", + "version": "1.9.3", "source": { "type": "git", "url": "https://github.com/zetacomponents/Base.git", - "reference": "489e20235989ddc97fdd793af31ac803972454f1" + "reference": "2f432f4117a5aa2164d4fb1784f84db91dbdd3b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zetacomponents/Base/zipball/489e20235989ddc97fdd793af31ac803972454f1", - "reference": "489e20235989ddc97fdd793af31ac803972454f1", + "url": "https://api.github.com/repos/zetacomponents/Base/zipball/2f432f4117a5aa2164d4fb1784f84db91dbdd3b8", + "reference": "2f432f4117a5aa2164d4fb1784f84db91dbdd3b8", "shasum": "" }, "require-dev": { - "phpunit/phpunit": "~5.7", + "phpunit/phpunit": "~8.0", "zetacomponents/unit-test": "*" }, "type": "library", @@ -1737,27 +1740,27 @@ ], "description": "The Base package provides the basic infrastructure that all packages rely on. Therefore every component relies on this package.", "homepage": "https://github.com/zetacomponents", - "time": "2017-11-28 11:30:00" + "time": "2021-07-25 15:46:08" }, { "name": "zetacomponents/database", - "version": "1.5.1", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/zetacomponents/Database.git", - "reference": "1750d34bf64b62f064c5b1aeb5374fbd06400904" + "reference": "85a2fd2af4e49f64d5c7616b6fb82c1b88de53b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zetacomponents/Database/zipball/1750d34bf64b62f064c5b1aeb5374fbd06400904", - "reference": "1750d34bf64b62f064c5b1aeb5374fbd06400904", + "url": "https://api.github.com/repos/zetacomponents/Database/zipball/85a2fd2af4e49f64d5c7616b6fb82c1b88de53b4", + "reference": "85a2fd2af4e49f64d5c7616b6fb82c1b88de53b4", "shasum": "" }, "require": { "zetacomponents/base": "~1.8" }, "require-dev": { - "phpunit/phpunit": "~5.7", + "phpunit/phpunit": "~8.0", "zetacomponents/database-schema": "~1.5", "zetacomponents/unit-test": "*" }, @@ -1814,27 +1817,28 @@ ], "description": "A lightweight database layer on top of PHP's PDO that allows you to utilize a database without having to take care of differences in SQL dialects.", "homepage": "https://github.com/zetacomponents", - "time": "2017-11-28 10:55:26" + "time": "2022-02-11 17:18:33" }, { "name": "zetacomponents/document", - "version": "1.3.1", + "version": "1.3.3", "source": { "type": "git", "url": "https://github.com/zetacomponents/Document.git", - "reference": "688abfde573cf3fe0730f82538fbd7aa9fc95bc8" + "reference": "196884f00871ea7dcbca9ab8bc85716f626e9cc3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zetacomponents/Document/zipball/688abfde573cf3fe0730f82538fbd7aa9fc95bc8", - "reference": "688abfde573cf3fe0730f82538fbd7aa9fc95bc8", + "url": "https://api.github.com/repos/zetacomponents/Document/zipball/196884f00871ea7dcbca9ab8bc85716f626e9cc3", + "reference": "196884f00871ea7dcbca9ab8bc85716f626e9cc3", "shasum": "" }, "require": { - "zetacomponents/base": "*" + "zetacomponents/base": "~1.8" }, "require-dev": { - "zetacomponents/unit-test": "dev-master" + "phpunit/phpunit": "~8.0", + "zetacomponents/unit-test": "*" }, "type": "library", "autoload": { @@ -1865,7 +1869,7 @@ ], "description": "The Document components provides a general conversion framework for different semantic document markup languages like XHTML, Docbook, RST and similar.", "homepage": "https://github.com/zetacomponents", - "time": "2013-12-19 11:40:00" + "time": "2022-02-11 17:26:31" }, { "name": "zetacomponents/workflow", diff --git a/config/cis.config-default.inc.php b/config/cis.config-default.inc.php index 64fcb9a7c..9d31548f6 100644 --- a/config/cis.config-default.inc.php +++ b/config/cis.config-default.inc.php @@ -254,4 +254,6 @@ define('JAHRESPLAN_TICKET_LINK','https://bug.technikum-wien.at/otrs/index.pl?Act //Gibt an ob der Block zu Verplanung in geteilter Arbeitszeit bei den Zeitwünschen angezeigt wird. Default: false define('CIS_ZEITWUNSCH_GD', false); +// Covid-Status anzeigen +define('CIS_SHOW_COVID_STATUS', false); ?> diff --git a/config/global.config-default.inc.php b/config/global.config-default.inc.php index f4909ba5c..df27bdcd3 100644 --- a/config/global.config-default.inc.php +++ b/config/global.config-default.inc.php @@ -194,6 +194,9 @@ define('REIHUNGSTEST_CHECK', true); // Bei Statuswechsel auf Bewerber bzw. Student -> soll ZGV brücksichtigt werden define('ZGV_CHECK', true); +define ('ZGV_DOKTOR_ANZEIGEN', false); +define ('ZGV_ERFUELLT_ANZEIGEN', false); + // Bei Statuswechsel auf Bewerber -> bei true wird email (INFOMAIL_BEWERBER) an den Bewerber geschickt define('SEND_BEWERBER_INFOMAIL', false); diff --git a/content/adressedialog.xul.php b/content/adressedialog.xul.php index f4f530bf0..50fb92b00 100644 --- a/content/adressedialog.xul.php +++ b/content/adressedialog.xul.php @@ -70,13 +70,15 @@ else diff --git a/content/betriebsmitteloverlay.xul.php b/content/betriebsmitteloverlay.xul.php index ec0e9f0d5..d9da9269b 100644 --- a/content/betriebsmitteloverlay.xul.php +++ b/content/betriebsmitteloverlay.xul.php @@ -204,7 +204,7 @@ else diff --git a/content/fas.xul.php b/content/fas.xul.php index d1d43f473..19b24b0f0 100644 --- a/content/fas.xul.php +++ b/content/fas.xul.php @@ -903,7 +903,7 @@ foreach($addon_obj->result as $addon) echo ''; //echo ''; echo ''; - echo ''; + echo ''; } if($rechte->isBerechtigt('admin') || $rechte->isBerechtigt('mitarbeiter')) { diff --git a/content/fasDBDML.php b/content/fasDBDML.php index 9beea99db..1c5a7a4c4 100644 --- a/content/fasDBDML.php +++ b/content/fasDBDML.php @@ -413,6 +413,12 @@ if(!$error) } if(!$error) { + //Check, ob OE aktiv ist, sonst Hinweis ausgeben + $oe = new organisationseinheit($_POST['oe_kurzbz']); + if ($oe->aktiv === false) + { + $errormsg = 'ACHTUNG: Die Organisationseinheit ist inaktiv. Änderungen wurden gespeichert.'; + } $benutzerfunktion->oe_kurzbz = $_POST['oe_kurzbz']; $benutzerfunktion->semester = $_POST['semester']; $benutzerfunktion->fachbereich_kurzbz = $_POST['fachbereich_kurzbz']; diff --git a/content/fasoverlay.js.php b/content/fasoverlay.js.php index db26a9180..fcdc20228 100644 --- a/content/fasoverlay.js.php +++ b/content/fasoverlay.js.php @@ -741,6 +741,10 @@ function onLektorSelect(event) var uid=tree.view.getCellText(tree.currentIndex,col); var stg_idx = tree.view.getParentIndex(tree.currentIndex); + //Wenn der Filter angewendet wurde, gibt es keinen Parent. Daher wird hier der stg_idx auf 0 gesetzt. + if(stg_idx == -1 && uid != '') + stg_idx = 0; + //wenn direkt ein studiengang markiert wurde dann abbrechen if(stg_idx==-1) return; @@ -789,6 +793,58 @@ function onLektorSelect(event) } } +// Lektorenliste aktualisieren +function onLektorRefresh() +{ + netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); + var treeLektorenTree=document.getElementById('tree-lektor'); + // Input-Feld leeren + document.getElementById('fas-lektor-filter').value = ''; + var url = 'rdf/mitarbeiter.rdf.php?user=true&'+gettimestamp(); + + var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService); + var datasource = rdfService.GetDataSource(url); + var oldDatasources = treeLektorenTree.database.GetDataSources(); + + datasource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource); + datasource.QueryInterface(Components.interfaces.nsIRDFXMLSink); + + treeLektorenTree.database.RemoveDataSource(oldDatasources.getNext()); + treeLektorenTree.database.AddDataSource(datasource); + treeLektorenTree.builder.rebuild(); +} + +// Lektorenliste filtern +function onLektorFilter() +{ + netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); + var filter=document.getElementById('fas-lektor-filter').value; + + var treeLektorenTree=document.getElementById('tree-lektor'); + + if(filter.length>2) + { + var url = 'rdf/mitarbeiter.rdf.php?filter='+encodeURIComponent(filter)+'&'+gettimestamp(); + var oldDatasources = treeLektorenTree.database.GetDataSources(); + + //Refresh damit die entfernten DS auch wirklich entfernt werden + treeLektorenTree.builder.rebuild(); + + var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService); + if(typeof(filter)=='undefined') + var datasource = rdfService.GetDataSource(url); + else + var datasource = rdfService.GetDataSourceBlocking(url); + datasource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource); + datasource.QueryInterface(Components.interfaces.nsIRDFXMLSink); + treeLektorenTree.database.RemoveDataSource(oldDatasources.getNext()); + treeLektorenTree.database.AddDataSource(datasource); + if(typeof(filter)!='undefined') + treeLektorenTree.builder.rebuild(); + treeLektorenTree.builder.addListener(LektorTreeListener); + } +} + function loadURL(event) { var contentFrame = document.getElementById('contentFrame'); diff --git a/content/fasoverlay.xul.php b/content/fasoverlay.xul.php index 51564dc19..eea32279b 100644 --- a/content/fasoverlay.xul.php +++ b/content/fasoverlay.xul.php @@ -133,52 +133,68 @@ echo ' - - - - - + + + + + + + + + + + + + + + + - - + + + summe>$max_stunden) { - if(!$fixangestellt) + if(!$fixangestellt && !$rechte->isBerechtigt('admin')) { if(!LehrauftragAufFirma($lem->mitarbeiter_uid)) { @@ -624,7 +624,7 @@ if(!$error) if($row_std = $db->db_fetch_object($result_std)) { //Grenze ueberschritten - if($row_std->summe>=$max_stunden) + if($row_std->summe>=$max_stunden && !$rechte->isBerechtigt('admin')) { $return = false; $error = true; diff --git a/content/lvplanung/lehrveranstaltungnotenoverlay.xul.php b/content/lvplanung/lehrveranstaltungnotenoverlay.xul.php index ebb525cbc..fda16c07a 100644 --- a/content/lvplanung/lehrveranstaltungnotenoverlay.xul.php +++ b/content/lvplanung/lehrveranstaltungnotenoverlay.xul.php @@ -49,8 +49,11 @@ echo " + + + @@ -448,7 +580,6 @@ echo ''; -