diff --git a/application/controllers/lehre/Pruefungsprotokoll.php b/application/controllers/lehre/Pruefungsprotokoll.php index d9793ef06..467a7dc71 100644 --- a/application/controllers/lehre/Pruefungsprotokoll.php +++ b/application/controllers/lehre/Pruefungsprotokoll.php @@ -115,9 +115,11 @@ class Pruefungsprotokoll extends Auth_Controller public function saveProtokoll() { $abschlusspruefung_id = $this->input->post('abschlusspruefung_id'); - $data = $this->input->post('protocoldata'); + $freigebendata = $this->input->post('freigebendata'); + $protocoldata = $this->input->post('protocoldata'); - if (isset($abschlusspruefung_id) && is_numeric($abschlusspruefung_id) && isset($data)) + if (isset($abschlusspruefung_id) && is_numeric($abschlusspruefung_id) + && isset($freigebendata['freigeben']) && isset($protocoldata)) { // check permission $berechtigt = $this->_getAbschlusspruefungBerechtigt($abschlusspruefung_id); @@ -125,15 +127,14 @@ class Pruefungsprotokoll extends Auth_Controller $this->outputJsonError(getError($berechtigt)); else { - $freigabe = isset($data['freigabedatum']) && $data['freigabedatum']; + $freigabe = $freigebendata['freigeben'] === 'true'; if ($freigabe) { // Verify password - $password = $data['password']; - unset($data['password']); - if (!isEmptyString($password)) + if (isset($freigebendata['password']) && !isEmptyString($freigebendata['password'])) { + $password = $freigebendata['password']; $result = $this->authlib->checkUserAuthByUsernamePassword($this->_uid, $password); if (isError($result)) { @@ -146,7 +147,8 @@ class Pruefungsprotokoll extends Auth_Controller } } - $data = $this->_prepareAbschlusspruefungDataForSave($data); + $data = $this->_prepareAbschlusspruefungDataForSave($protocoldata, $freigabe); + $result = $this->AbschlusspruefungModel->update($abschlusspruefung_id, $data); if (hasData($result)) @@ -213,7 +215,7 @@ class Pruefungsprotokoll extends Auth_Controller * @param $data * @return array */ - private function _prepareAbschlusspruefungDataForSave($data) + private function _prepareAbschlusspruefungDataForSave($data, $freigabe) { $nullfields = array('uhrzeit', 'endezeit', 'abschlussbeurteilung_kurzbz', 'protokoll'); foreach ($data as $idx => $item) @@ -222,7 +224,7 @@ class Pruefungsprotokoll extends Auth_Controller $data[$idx] = null; } - if (isset($data['freigabedatum']) && $data['freigabedatum']) + if ($freigabe === true) $data['freigabedatum'] = date('Y-m-d'); return $data; diff --git a/application/controllers/lehre/lehrauftrag/Lehrauftrag.php b/application/controllers/lehre/lehrauftrag/Lehrauftrag.php index b7140c7c3..8a096338e 100644 --- a/application/controllers/lehre/lehrauftrag/Lehrauftrag.php +++ b/application/controllers/lehre/lehrauftrag/Lehrauftrag.php @@ -92,7 +92,8 @@ class Lehrauftrag extends Auth_Controller // Retrieve studiengaenge the user is entitled for to populate studiengang dropdown if (!$studiengang_kz_arr = $this->permissionlib->getSTG_isEntitledFor(self::BERECHTIGUNG_LEHRAUFTRAG_BESTELLEN)) { - show_error('Fehler bei Berechtigungsprüfung'); + show_error('Keine Studiengänge gefunden.
+ Es muss eine passende Organisationseinheit hinterlegt werden.
'); } // If studiengang_kz get param was set, check against entitled stg diff --git a/application/core/JOB_Controller.php b/application/core/JOB_Controller.php index 2d3d3873e..8b32ba0f5 100644 --- a/application/core/JOB_Controller.php +++ b/application/core/JOB_Controller.php @@ -18,7 +18,8 @@ abstract class JOB_Controller extends CLI_Controller // Loads LogLib with different debug trace levels to get data of the job that extends this class // It also specify parameters to set database fields - $this->load->library('LogLib', + $this->load->library( + 'LogLib', array( 'classIndex' => 5, 'functionIndex' => 5, @@ -29,7 +30,8 @@ abstract class JOB_Controller extends CLI_Controller 'requestDataFormatter' => function($data) { return json_encode($data); } - ) + ), + 'LogLibJob' // library alias case sensitive ); } @@ -84,16 +86,16 @@ abstract class JOB_Controller extends CLI_Controller switch($level) { case LogLib::INFO: - $this->loglib->logInfoDB($data); + $this->LogLibJob->logInfoDB($data); break; case LogLib::DEBUG: - $this->loglib->logDebugDB($data); + $this->LogLibJob->logDebugDB($data); break; case LogLib::WARNING: - $this->loglib->logWarningDB($data); + $this->LogLibJob->logWarningDB($data); break; case LogLib::ERROR: - $this->loglib->logErrorDB($data); + $this->LogLibJob->logErrorDB($data); break; } } diff --git a/application/core/JQW_Controller.php b/application/core/JQW_Controller.php index cec2f7943..72a2a972b 100644 --- a/application/core/JQW_Controller.php +++ b/application/core/JQW_Controller.php @@ -20,7 +20,7 @@ abstract class JQW_Controller extends JOB_Controller parent::__construct(); // Changes the needed configs for LogLib - $this->loglib->setConfigs( + $this->LogLibJob->setConfigs( array( 'dbExecuteUser' => 'Jobs queue system', 'requestId' => 'JQW' diff --git a/application/libraries/MessageLib.php b/application/libraries/MessageLib.php index fd2051f48..be496fe4a 100644 --- a/application/libraries/MessageLib.php +++ b/application/libraries/MessageLib.php @@ -215,6 +215,31 @@ class MessageLib return $messageVars; // otherwise returns the error } + + /** + * Retrieves message vars of the logged in user from view vw_msg_vars_user + */ + public function getMessageVarsLoggedInUser() + { + // Retrieves message vars from view vw_msg_vars + $messageVars = $this->_ci->MessageModel->getMsgVarsLoggedInUser(); + if (isSuccess($messageVars)) // if everything is ok + { + $variablesArray = array(); + $tmpVariablesArray = getData($messageVars); + + // Starts from 1 to skip the first element which is uid + for ($i = 1; $i < count($tmpVariablesArray); $i++) + { + $variablesArray['{'.str_replace(' ', '_', strtolower($tmpVariablesArray[$i])).'}'] + = strtoupper($tmpVariablesArray[$i]); + } + + return success($variablesArray); + } + + return $messageVars; // otherwise returns the error + } /** * Retrieves organisation units for each role that a user plays inside that organisation unit @@ -595,11 +620,24 @@ class MessageLib $this->_ci->load->model('person/Benutzer_model', 'BenutzerModel'); // And the receiver has an active account for the given organisation unit - $benutzerResult = $this->_ci->BenutzerModel->getActiveUserByPersonIdAndOrganisationUnit($message->receiver_id, $message->sender_ou); + $benutzerResult = $this->_ci->BenutzerModel->getActiveUserByPersonIdAndOrganisationUnit( + $message->receiver_id, + $message->sender_ou + ); + if (isError($benutzerResult)) return $benutzerResult; // if an error occured then return it - // Use the uid + domain email - if (hasData($benutzerResult)) $message->receiverContact = getData($benutzerResult)[0]->uid .'@'.DOMAIN; + // If an active user for the given organization unit was found + if (hasData($benutzerResult)) + { + // Checks if the user was NOT created in the last 24 hours + if (getData($benutzerResult)[0]->insertamum < date('Y-m-d H:i:s', strtotime('-1 day'))) + { + // Use the uid + domain email + $message->receiverContact = getData($benutzerResult)[0]->uid .'@'.DOMAIN; + } + // otherwise do NOT use the internal email account + } } // Otherwise try with the private email @@ -644,7 +682,7 @@ class MessageLib // If there are presetudent if (hasData($prestudentResults)) { - $inArray = true; + $privateOnly = false; $organisationUnits = getData($prestudentResults); // Look if any of the organization units of this prestudent are in the list of the @@ -652,16 +690,21 @@ class MessageLib foreach ($organisationUnits as $organisationUnit) { // If the recipient organisation unit is NOT in the list of organisation units that sent only to private emails + // NOTE: done in this way because it is easyer to check the result of array_search if (array_search($organisationUnit, $this->_ci->config->item(self::CFG_OU_RECEIVERS_PRIVATE)) === false) { - $inArray = false; + // NOP + } + else // otherwise If the recipient organisation unit is the list of organisation units that sent only to private emails + { + $privateOnly = true; break; } } // If the recipient prestudent organization unit is not in in the list of the // organization units that will not send the notice email to the internal account - if (!$inArray) + if ($privateOnly) { // Then use the private email $privateEmailResult = $this->_getPrivateEmail($message->receiver_id); @@ -676,10 +719,37 @@ class MessageLib $this->_ci->BenutzerModel->addOrder('updateamum', 'DESC'); $this->_ci->BenutzerModel->addOrder('insertamum', 'DESC'); - $benutzerResult = $this->_ci->BenutzerModel->loadWhere(array('person_id' => $message->receiver_id)); + $benutzerResult = $this->_ci->BenutzerModel->loadWhere( + array( + 'person_id' => $message->receiver_id + ) + ); if (isError($benutzerResult)) return $benutzerResult; // if an error occured then return it - $message->receiverContact = getData($benutzerResult)[0]->uid .'@'.DOMAIN; // Use the uid + domain email + // If an active user for the given organization unit was found + if (hasData($benutzerResult)) + { + // For each benutzer found for this person + foreach (getData($benutzerResult) as $benutzer) + { + // Checks if the user was NOT created in the last 24 hours + if (getData($benutzerResult)[0]->insertamum < date('Y-m-d H:i:s', strtotime('-1 day'))) + { + // Use the uid + domain as email address + $message->receiverContact = getData($benutzerResult)[0]->uid .'@'.DOMAIN; + } + } + } + + // Otherwise try with the private email + if (isEmptyString($message->receiverContact)) + { + // Then use the private email + $privateEmailResult = $this->_getPrivateEmail($message->receiver_id); + if (isError($privateEmailResult)) return $privateEmailResult; // if an error occured then return it + + if (hasData($privateEmailResult)) $message->receiverContact = getData($privateEmailResult); + } } } } diff --git a/application/models/CL/Messages_model.php b/application/models/CL/Messages_model.php index 17824bbb8..9ffd12cf6 100644 --- a/application/models/CL/Messages_model.php +++ b/application/models/CL/Messages_model.php @@ -48,6 +48,9 @@ class Messages_model extends CI_Model $this->load->model('system/Benutzerrolle_model', 'BenutzerrolleModel'); // Loads model Prestudent_model $this->load->model('crm/Prestudent_model', 'PrestudentModel'); + // Loads model Benutzer_model + $this->load->model('person/Benutzer_model', 'BenutzerModel'); + } //------------------------------------------------------------------------------------------------------------------ @@ -402,7 +405,10 @@ class Messages_model extends CI_Model // Looping on receivers data foreach (getData($msgVarsData) as $receiver) { - $msgVarsDataArray = $this->_lowerReplaceSpaceArrayKeys((array)$receiver); // replaces array keys + // Merge receivers data with logged in user data + $msgVarsDataArray = $this->_addMsgVarsDataOfLoggedInUser($receiver); + + $msgVarsDataArray = $this->_lowerReplaceSpaceArrayKeys((array)getData($msgVarsDataArray)[0]); // replaces array keys $parsedSubject = parseText($subject, $msgVarsDataArray); $parsedBody = parseText($body, $msgVarsDataArray); @@ -466,6 +472,15 @@ class Messages_model extends CI_Model if (!hasData($msgVarsData)) show_error('No recipients were given'); $prestudentsData = $this->PrestudentModel->getOrganisationunits($prestudents); + + // Get the senders uid (if user is an active employee) + $this->BenutzerModel->addSelect('uid'); + $this->BenutzerModel->addJoin('public.tbl_mitarbeiter ma', 'ma.mitarbeiter_uid = uid'); + if (!$result = getData($this->BenutzerModel->getFromPersonId($sender_id))) + { + show_error('No sender_uid found'); + } + $sender_uid = $result[0]->uid; // Adds the organisation unit to each prestudent if (isEmptyString($oe_kurzbz) && hasData($msgVarsData) && hasData($prestudentsData)) @@ -475,7 +490,15 @@ class Messages_model extends CI_Model foreach (getData($msgVarsData) as $receiver) { - $msgVarsDataArray = $this->_lowerReplaceSpaceArrayKeys((array)$receiver); // replaces array keys + /** + * Merge receivers data with senders data + * NOTE: _addMsgVarsDataOfLoggedInUser usually retrieves data of the logged in user that is set in the + * templates user fields. As sendExplicitTemplateSenderId is run by a job, a sender uid is passed to be used + * instead the logged in user. + */ + $msgVarsDataArray = $this->_addMsgVarsDataOfLoggedInUser($receiver, $sender_uid); + + $msgVarsDataArray = $this->_lowerReplaceSpaceArrayKeys((array)getData($msgVarsDataArray)[0]); // replaces array keys // Additional message variables if (is_array($msgVars)) $msgVarsDataArray = array_merge($msgVarsDataArray, $msgVars); @@ -606,6 +629,9 @@ class Messages_model extends CI_Model $parseMessageText = error('The given person_id is not a valid number'); if (is_numeric($person_id)) $parseMessageText = $this->MessageModel->getMsgVarsDataByPersonId($person_id); + + // Add message vars data of the logged in user + $parseMessageText = $this->_addMsgVarsDataOfLoggedInUser($parseMessageText); if (hasData($parseMessageText)) { @@ -629,7 +655,10 @@ class Messages_model extends CI_Model $parseMessageText = error('The given prestudent_id is not a valid number'); if (is_numeric($prestudent_id)) $parseMessageText = $this->MessageModel->getMsgVarsDataByPrestudentId($prestudent_id); - + + // Add message vars data of the logged in user + $parseMessageText = $this->_addMsgVarsDataOfLoggedInUser($parseMessageText); + if (hasData($parseMessageText)) { $parseMessageText = success( @@ -839,6 +868,26 @@ class Messages_model extends CI_Model $variables[] = $tmpVar; } + + // --------------------------------------------------------------------------------------- + // Retrieves message vars of logged in user from database view vw_msg_vars_person + $result = null; + + // If data contains a prestudent id + $result = $this->messagelib->getMessageVarsLoggedInUser(); + + if (isError($result)) show_error(getError($result)); + + // Then builds an array that contains objects with field name and field description of logged in user data + $user_fields = array(); + foreach (getData($result) as $id => $description) + { + $obj = new stdClass(); + $obj->id = $id; + $obj->description = $description; + + $user_fields[] = $obj; + } // --------------------------------------------------------------------------------------- // Retrieves the sender id @@ -859,6 +908,7 @@ class Messages_model extends CI_Model 'subject' => $replySubject, 'body' => $replyBody, 'variables' => $variables, + 'user_fields' => $user_fields, 'organisationUnits' => getData($organisationUnits), 'senderIsAdmin' => getData($senderIsAdmin), 'recipientsArray' => $recipientsArray, @@ -867,4 +917,30 @@ class Messages_model extends CI_Model 'type' => $type ); } + + /** + * Adds message vars data of the logged in user to the given object (that should also have message vars data) + * @param object $otherMsgVarsDataObj Can be success object or simple object. + * @return object Returns success object. + */ + public function _addMsgVarsDataOfLoggedInUser($otherMsgVarsDataObj, $uid = null) + { + // First check if param type is object + if (!is_object($otherMsgVarsDataObj)) show_error('Must pass an object to merge with data of logged in user'); + + // If it is a return object, extract the simple data object + if (isSuccess($otherMsgVarsDataObj)) + { + $otherMsgVarsDataObj = getData($otherMsgVarsDataObj)[0]; + } + + // Retrieve message vars data of the logged in user + if (!$msgVarsDataLoggedInUser = getData($this->MessageModel->getMsgVarsDataByLoggedInUser($uid))[0]) + { + return success($otherMsgVarsDataObj); // If failed, return at least given object as expected success object + } + + return success(array((object)(array_merge((array) $otherMsgVarsDataObj, (array) $msgVarsDataLoggedInUser)))); + + } } diff --git a/application/models/education/Lehrveranstaltung_model.php b/application/models/education/Lehrveranstaltung_model.php index 4941ba9bd..d80d02b41 100644 --- a/application/models/education/Lehrveranstaltung_model.php +++ b/application/models/education/Lehrveranstaltung_model.php @@ -119,9 +119,10 @@ class Lehrveranstaltung_model extends DB_Model * Gets all students of a Lehrveranstaltung * @param $studiensemester_kurzbz * @param $lehrveranstaltung_id + * @param $active optional, if true, only active students retrieved, false - only inactive, all students otherwise * @return array|null */ - public function getStudentsByLv($studiensemester_kurzbz, $lehrveranstaltung_id) + public function getStudentsByLv($studiensemester_kurzbz, $lehrveranstaltung_id, $active = null) { $query = "SELECT distinct on(nachname, vorname, person_id) vorname, nachname, matrikelnr, @@ -144,8 +145,18 @@ class Lehrveranstaltung_model extends DB_Model WHERE vw_student_lehrveranstaltung.studiensemester_kurzbz=? AND - vw_student_lehrveranstaltung.lehrveranstaltung_id=? - ORDER BY nachname, vorname, person_id, tbl_bisio.bis DESC"; + vw_student_lehrveranstaltung.lehrveranstaltung_id=?"; + + if (isset($active)) + { + if ($active === true) + $query .= " AND tbl_benutzer.aktiv"; + elseif ($active === false) + $query .= " AND tbl_benutzer.aktiv = false"; + } + + $query .= + " ORDER BY nachname, vorname, person_id, tbl_bisio.bis DESC"; return $this->execQuery($query, array($studiensemester_kurzbz, $lehrveranstaltung_id)); } diff --git a/application/models/organisation/Organisationseinheit_model.php b/application/models/organisation/Organisationseinheit_model.php index 6439bc8d6..bec4aee47 100644 --- a/application/models/organisation/Organisationseinheit_model.php +++ b/application/models/organisation/Organisationseinheit_model.php @@ -33,7 +33,7 @@ class Organisationseinheit_model extends DB_Model FROM tree JOIN tbl_organisationseinheit oe ON (tree.oe_kurzbz = oe.oe_parent_kurzbz) ) SELECT oe_kurzbz AS id, - SUBSTRING(REGEXP_REPLACE(path, '[A-z]+\|', '-', 'g') || bezeichnung, 2) AS description + SUBSTRING(REGEXP_REPLACE(path, '[A-z0-9]+\|', '-', 'g') || bezeichnung, 2) AS description FROM tree"; $parametersArray = array(); diff --git a/application/models/organisation/Studiensemester_model.php b/application/models/organisation/Studiensemester_model.php index 41baf2489..07783cf0d 100644 --- a/application/models/organisation/Studiensemester_model.php +++ b/application/models/organisation/Studiensemester_model.php @@ -132,7 +132,7 @@ class Studiensemester_model extends DB_Model $query .= ' WHERE SUBSTRING(studiensemester_kurzbz FROM 1 FOR 2) = \'' . $ss . '\''; } - $query .= ' ORDER BY delta LIMIT 1'; + $query .= ' ORDER BY delta, start LIMIT 1'; return $this->execQuery($query); } @@ -188,7 +188,7 @@ class Studiensemester_model extends DB_Model { $query = "SELECT studiensemester_kurzbz, start, ende FROM public.vw_studiensemester WHERE studiensemester_kurzbz <> ? - ORDER BY delta LIMIT 1"; + ORDER BY delta, start LIMIT 1"; return $this->execQuery($query, array($studiensemester_kurzbz)); } diff --git a/application/models/person/Benutzer_model.php b/application/models/person/Benutzer_model.php index 45edf5122..c1e76ce38 100644 --- a/application/models/person/Benutzer_model.php +++ b/application/models/person/Benutzer_model.php @@ -23,13 +23,17 @@ class Benutzer_model extends DB_Model */ public function getActiveUserByPersonIdAndOrganisationUnit($person_id, $oe_kurzbz) { - $sql = 'SELECT b.uid - FROM public.tbl_benutzer b - JOIN public.tbl_prestudent ps USING (person_id) - JOIN public.tbl_studiengang sg USING (studiengang_kz) - WHERE ps.person_id = ? - AND sg.oe_kurzbz = ? - AND b.aktiv = TRUE'; + $sql = 'SELECT + b.uid, + b.insertamum + FROM + public.tbl_prestudent ps + JOIN public.tbl_studiengang sg USING (studiengang_kz) + JOIN public.tbl_student USING(prestudent_id) + JOIN public.tbl_benutzer b ON(uid = student_uid) + WHERE ps.person_id = ? + AND sg.oe_kurzbz = ? + AND b.aktiv = TRUE'; return $this->execQuery($sql, array($person_id, $oe_kurzbz)); } diff --git a/application/models/person/Kontakt_model.php b/application/models/person/Kontakt_model.php index 50ef18e15..c35794fc8 100644 --- a/application/models/person/Kontakt_model.php +++ b/application/models/person/Kontakt_model.php @@ -169,4 +169,33 @@ class Kontakt_model extends DB_Model return $this->execQuery($qry, array($person_id)); } + + /** + * Loads main contact, i.e. most recent Zustellkontakt with the given kontakttypes. + * @param $person_id + * @param $kontakttypen array of kontakttypen, one chronologically last Zustellkontakt for all given types + * @return object + */ + public function getZustellKontakt($person_id, $kontakttypen) + { + if (is_string($kontakttypen)) + $kontakttypen = array($kontakttypen); + + if (!isEmptyArray($kontakttypen)) + { + $qry = " + SELECT + kontakt + FROM + public.tbl_kontakt + WHERE person_id = ? + AND kontakttyp IN ? + ORDER BY zustellung DESC NULLS LAST, updateamum DESC, insertamum DESC + LIMIT 1"; + + return $this->execQuery($qry, array($person_id, $kontakttypen)); + } + else + return success(array()); + } } diff --git a/application/models/system/Message_model.php b/application/models/system/Message_model.php index 764c3ae14..d9f8585ed 100644 --- a/application/models/system/Message_model.php +++ b/application/models/system/Message_model.php @@ -171,6 +171,23 @@ class Message_model extends DB_Model return error($this->db->error(), FHC_DB_ERROR); } } + + /** + * Get message variables for logged in user + */ + public function getMsgVarsLoggedInUser() + { + $result = $this->db->query('SELECT * FROM public.vw_msg_vars_user WHERE 0 = 1'); + + if ($result) + { + return success($result->list_fields()); + } + else + { + return error($this->db->error(), FHC_DB_ERROR); + } + } /** * getMsgVarsDataByPrestudentId @@ -191,4 +208,26 @@ class Message_model extends DB_Model return $this->execQuery(sprintf($query, is_array($person_id) ? 'IN' : '='), array($person_id)); } + + /** + * Get message vars data for logged in user + * @param string uid The UID should ONLY be passed if this method is called by a cronjob. + * This is to enable jobs to use templates which use logged-in-user fields ('Eigene Felder'). + * @return array|null + */ + public function getMsgVarsDataByLoggedInUser($uid = null) + { + if (is_string($uid)) + { + $params = array($uid); + } + else + { + $params = array(getAuthUID()); + } + + $query = 'SELECT * FROM public.vw_msg_vars_user WHERE my_uid = ?'; + + return $this->execQuery($query, $params); + } } diff --git a/application/views/system/messages/htmlWriteTemplate.php b/application/views/system/messages/htmlWriteTemplate.php index 199a88cfa..95ab12630 100644 --- a/application/views/system/messages/htmlWriteTemplate.php +++ b/application/views/system/messages/htmlWriteTemplate.php @@ -83,19 +83,41 @@ 19 ? 19 : count($variables); echo $this->widgetlib->widget( 'MultipleDropdown_widget', array('elements' => success($variables)), array( 'name' => 'variables[]', 'id' => 'variables', - 'size' => count($variables), + 'size' => $size, 'multiple' => true ) ); ?> - +
+
+ + + 5 ? 5 : count($user_fields); + echo $this->widgetlib->widget( + 'MultipleDropdown_widget', + array('elements' => success($user_fields)), + array( + 'name' => 'user_fields[]', + 'id' => 'user_fields', + 'size' => $size, + 'multiple' => true + ) + ); + ?> +

@@ -111,14 +133,15 @@ ?> -
-
+

diff --git a/cis/private/lehre/pruefung/pruefung.js.php b/cis/private/lehre/pruefung/pruefung.js.php index 5376dd5f7..f2435828d 100644 --- a/cis/private/lehre/pruefung/pruefung.js.php +++ b/cis/private/lehre/pruefung/pruefung.js.php @@ -1626,8 +1626,9 @@ function loadPruefungsDetails(prfId) { $("#termin"+j+"sammelklausur").text("false"); } - $("#termin"+j+"Id").closest("tr").append("t('global/löschen'); ?>"); - $("#termin"+j+"Id").closest("tr").append("t('global/editieren'); ?>"); + //$("#termin"+j+"Id").closest("tr").append("t('global/löschen'); ?>"); + $("#termin"+j+"Id").closest("tr").append("t('global/löschen'); ?>"); + $("#termin"+j+"Id").closest("tr").append("t('global/editieren'); ?>"); terminHinzufuegen("span"); } }); @@ -1971,6 +1972,36 @@ function terminLoeschen(pruefung_id, pruefungstermin_id) }); } +/** + * Löscht einen Termin ohne im Anschluss die Prüfungen neu zu laden + * @param {int} pruefung_id ID der Prüfung + * @param {int} pruefungstermin_id ID des Prüfungstermines + * @returns {undefined} + */ +function terminLoeschenOhneLaden(pruefung_id, pruefungstermin_id) +{ + $.ajax({ + dataType: 'json', + url: "./pruefungstermin.json.php", + type: "POST", + data: { + method: "deleteTermin", + pruefung_id: pruefung_id, + pruefungstermin_id: pruefungstermin_id + }, + error: loadError + }).done(function(data){ + if(data.error === "false") + { + messageBox("message", "t('pruefung/terminGeloescht'); ?>", "green", "highlight", 10000); + } + else + { + messageBox("message", data.errormsg, "red", "highlight", 10000); + } + }); +} + /** * Lädt alle Prüfungen * @returns {void} diff --git a/cis/private/lehre/pruefung/pruefungstermin_loeschen.php b/cis/private/lehre/pruefung/pruefungstermin_loeschen.php new file mode 100644 index 000000000..d345d20ce --- /dev/null +++ b/cis/private/lehre/pruefung/pruefungstermin_loeschen.php @@ -0,0 +1,223 @@ + + */ + +require_once('../../../../config/cis.config.inc.php'); +require_once('../../../../include/functions.inc.php'); +require_once('../../../../include/benutzerberechtigung.class.php'); +require_once('../../../../include/studiensemester.class.php'); +require_once('../../../../include/datum.class.php'); +require_once('../../../../include/pruefungsfenster.class.php'); +require_once('../../../../include/pruefungsanmeldung.class.php'); +require_once('../../../../include/lehrveranstaltung.class.php'); +require_once('../../../../include/pruefungstermin.class.php'); +require_once('../../../../include/studiengang.class.php'); +require_once('../../../../include/pruefungCis.class.php'); +require_once('../../../../include/mitarbeiter.class.php'); +require_once('../../../../include/phrasen.class.php'); +require_once('../../../../include/globals.inc.php'); +require_once('../../../../include/sprache.class.php'); +require_once('../../../../include/mail.class.php'); + + +$sprache = getSprache(); +$lang = new sprache(); +$lang->load($sprache); +$p = new phrasen($sprache); + +$maildebug = ''; +$uid = get_uid(); +$db = new basis_db(); +$rechte = new benutzerberechtigung(); +$rechte->getBerechtigungen($uid); + +$studiensemester = new studiensemester(); +$lehrveranstaltung = new lehrveranstaltung(); +$lehrveranstaltung->loadLVAfromMitarbeiter(0, $uid, $studiensemester->getaktorNext()); +if(empty($lehrveranstaltung->lehrveranstaltungen) && !$rechte->isBerechtigt('lehre/pruefungsterminAdmin')) + die('Sie haben keine Berechtigung für diese Seite'); + +if (!ctype_digit($_GET['termin_id']) || !ctype_digit($_GET['pruefung_id'])) + die('Wrong Parameter'); +else +{ + $termin_id = $_GET['termin_id']; + $pruefung_id = $_GET['pruefung_id']; +} + +if (isset($_GET["sendmail"], $_GET["message"]) && $_GET["message"] != "") +{ + $pruefung = new pruefungCis($pruefung_id); + $pruefung->getLehrveranstaltungenByPruefung(); + $lvstr = ""; + foreach ($pruefung->lehrveranstaltungen as $lv) + { + $lv_objekt = new lehrveranstaltung($lv->lehrveranstaltung_id); + $lvstr .= "*".$lv_objekt->bezeichnung."* "; + } + $maildebug = 'Mail gesendet an:
'; + $anmeldung = new pruefungsanmeldung(); + $anmeldungen = $anmeldung->getAnmeldungenByTermin($termin_id); + foreach ($anmeldungen as $row) + { + $uid = $row->uid; + $to = $uid.'@'.DOMAIN; + $from = 'no-reply@'.DOMAIN; + $subject = $p->t('pruefung/pruefungStorniert'); + $text = $_GET["message"]; + $msg = new mail($to, $from, $subject, $text); + if ($msg->send()) + $maildebug .= $to." OK
"; + else + $maildebug .= $to.' Fehler
'; + } +} + +$prfgtermin = new pruefungstermin($termin_id); +$datum = new DateTime(explode(" ", $prfgtermin->von)[0]); +$datum = $datum->format('d.m.Y'); +$vonzeit = substr(explode(" ", $prfgtermin->von)[1],0,5); +$biszeit = substr(explode(" ", $prfgtermin->bis)[1],0,5); +$pruefung_id = $prfgtermin->pruefung_id; + +$pruefung = new pruefungCis($pruefung_id); +$pruefung->getLehrveranstaltungenByPruefung(); +$lvstr = ""; +foreach ($pruefung->lehrveranstaltungen as $lv) +{ + $lv_objekt = new lehrveranstaltung($lv->lehrveranstaltung_id); + $lvstr .= "*".$lv_objekt->bezeichnung."*"; +} + +$uids = ''; +$anmeldung = new pruefungsanmeldung(); +$anmeldungen = $anmeldung->getAnmeldungenByTermin($termin_id); +foreach ($anmeldungen as $row) +{ + $uids .= $row->uid.'@'.DOMAIN.'
'; +} + +$nachricht = "Sehr geehrte Studierende,\n\ndie Prüfung zur LV $lvstr am $datum um $vonzeit Uhr wurde abgesagt."; + +?> + + + + <?php echo $p->t('pruefung/titlePruefungstermin'); ?> + + + + + + + + + + + + + + + + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
t('global/lehrveranstaltung'); ?>
t('global/datum'); ?>
t('global/von'); ?> Uhr
t('global/bis'); ?> Uhr
t('pruefung/pruefungsbewertungAnmeldungen'); ?>:
+
***
+ +
***
+
+

Das Infomail ist optional und muss bei Bedarf vor dem Löschen des Termins versendet werden!

+ + + + +
+ + + +
+
+ + diff --git a/cis/private/lvplan/stpl_week_anzahl_studenten.php b/cis/private/lvplan/stpl_week_anzahl_studenten.php index afd24773e..eeec45145 100644 --- a/cis/private/lvplan/stpl_week_anzahl_studenten.php +++ b/cis/private/lvplan/stpl_week_anzahl_studenten.php @@ -1,456 +1,456 @@ -, - * Andreas Oesterreicher , - * Rudolf Hangl and - * Gerald Simane-Sequens . - */ - require_once('../../../config/cis.config.inc.php'); - require_once('../../../include/functions.inc.php'); - require_once('../../../include/datum.class.php'); - require_once('../../../include/benutzer.class.php'); - require_once('../../../include/student.class.php'); - require_once('../../../include/studiengang.class.php'); - require_once('../../../include/benutzerberechtigung.class.php'); - require_once('../../../include/studiensemester.class.php'); - - if (!$db = new basis_db()) - die('Fehler beim Oeffnen der Datenbankverbindung'); - $uid=isset($_GET['uid'])?$_GET['uid']:(isset($_POST['uid'])?$_POST['uid']:get_uid()); - $uid=trim($uid); - - $rechte = new benutzerberechtigung(); - $rechte->getBerechtigungen($uid); - - if(!$rechte->isBerechtigt('lehre/reservierung:begrenzt', null, 's') || !$rechte->isBerechtigt('admin')) - die($rechte->errormsg); - unset($rechte); - - header('Content-Type: text/html;charset=UTF-8'); -?> - - - - - Anzahl Studenten Lehrveranstaltungsplan FH Technikum-Wien - +, + * Andreas Oesterreicher , + * Rudolf Hangl and + * Gerald Simane-Sequens . + */ + require_once('../../../config/cis.config.inc.php'); + require_once('../../../include/functions.inc.php'); + require_once('../../../include/datum.class.php'); + require_once('../../../include/benutzer.class.php'); + require_once('../../../include/student.class.php'); + require_once('../../../include/studiengang.class.php'); + require_once('../../../include/benutzerberechtigung.class.php'); + require_once('../../../include/studiensemester.class.php'); + + if (!$db = new basis_db()) + die('Fehler beim Oeffnen der Datenbankverbindung'); + $uid=isset($_GET['uid'])?$_GET['uid']:(isset($_POST['uid'])?$_POST['uid']:get_uid()); + $uid=trim($uid); + + $rechte = new benutzerberechtigung(); + $rechte->getBerechtigungen($uid); + + if(!$rechte->isBerechtigt('lehre/reservierung:begrenzt', null, 's') && !$rechte->isBerechtigt('admin')) + die($rechte->errormsg); + unset($rechte); + + header('Content-Type: text/html;charset=UTF-8'); +?> + + + + + Anzahl Studenten Lehrveranstaltungsplan FH Technikum-Wien + - - - - - - - -
-
-
-
-
-
- - - -
-
drucken
- -
-
schliessen  
- -
-
-
-
-
-
-getaktorNext(); - $objSS->load($ss); - $datum_obj = new datum(); - $ss_begin=$datum_obj->mktime_fromdate($objSS->start); - $ss_ende=$datum_obj->mktime_fromdate($objSS->ende); - - - $sql_query=' select tbl_adresse.plz,tbl_adresse.name, sum(tbl_ort.max_person) as summe '; - $sql_query.=' from public.tbl_ort,public.tbl_standort, public.tbl_adresse '; - $sql_query.=" where tbl_standort.standort_id=tbl_ort.standort_id "; - $sql_query.=" and tbl_adresse.adresse_id=tbl_standort.adresse_id "; - $sql_query.=" and tbl_adresse.adresse_id=".$db->db_add_param($adresse_id, FHC_INTEGER)." "; - $sql_query.=" and tbl_ort.aktiv and tbl_ort.lehre "; - $sql_query.=" group by tbl_adresse.plz,tbl_adresse.name "; - // Gibt es fuer das Datum und Stunde einen Stundenplaneintrag - if(!$results_anzahl=$db->db_query($sql_query)) - die($db->db_last_error()); - $raum_max_anz=0; - $fh_name='FH lese fehler'; - if ($num_rows_anzahl=$db->db_num_rows($results_anzahl)) - { - $fh_name = $db->db_result($results_anzahl,0,"name").', '.$db->db_result($results_anzahl,0,"plz"); - $raum_max_anz = $db->db_result($results_anzahl,0,"summe"); - } - - $stg=array(); - echo '

-  Lehrveranstaltungsplan >> Wochenplan - Anzahl Studenten -    << - Wochenplan  Kw '.$kw.' -  >> -    Heute -

'; - - // Stundentafel abfragen - $sql_query="SELECT stunde, beginn, ende FROM lehre.tbl_stunde ORDER BY stunde"; - if(!$results=$db->db_query($sql_query)) - die($db->db_last_error()); - - - echo ''; - echo ''; - echo ''; - echo ''; - for ($i=0; $i'.strftime('%a',mktime(0,0,0,date('m',$montag),date('d',$montag) + $i,date('Y',$montag))).' '.date('d M',mktime(0,0,0,date('m',$montag),date('d',$montag) + $i,date('Y',$montag))).''; - } - echo ''; - - $max_person_array=array(); - $num_rows_stunde=$db->db_num_rows($results); - echo ''; - for ($k=0; $k<$num_rows_stunde; $k++) - { - $row = $db->db_fetch_object($results, $k); - $row->show_beginn=substr($row->beginn,0,5); - $row->show_ende=substr($row->ende,0,5); - $row->check_beginn=str_replace(':','',substr($row->beginn,0,5)); - $row->check_ende=str_replace(':','',substr($row->ende,0,5)); - - echo ''; - $lehreinheiten=array(); - - for ($i=0; $i= $row->check_beginn && date('Hi')<=$row->check_ende ) - $aktiv=true; - - echo ''; - else - $tooltip.=''; - $tooltip.=''; - $gefunden_anz+=$row_anz->anz; - } - - if (!empty($gefunden_anz)) - { - $tooltip.=''; - - echo '
Gesamt: '.$gefunden_anz; - echo ''; - } - echo ''; - - - if (!isset($max_person_array[$i]['tag'])) - $max_person_array[$i]['tag']=0; - $max_person_array[$i]['tag']=$max_person_array[$i]['tag']+$gefunden_anz; - if (!isset($max_person_array[$i]['tag_max'])) - $max_person_array[$i]['tag_max']=0; - $max_person_array[$i]['tag_max']=$max_person_array[$i]['tag_max']+$max_person; - - if (!isset($max_person_array[$k]['stunde'])) - $max_person_array[$k]['stunde']=0; - $max_person_array[$k]['stunde']=$max_person_array[$k]['stunde']+$gefunden_anz; - if (!isset($max_person_array[$k]['stunde_max'])) - $max_person_array[$k]['stunde_max']=0; - $max_person_array[$k]['stunde_max']=$max_person_array[$k]['stunde_max']+$max_person; - - if (!isset($max_person_array[$i][$k]['tag_stunde'])) - $max_person_array[$i][$k]['tag_stunde']=0; - $max_person_array[$i][$k]['tag_stunde']=$max_person_array[$i][$k]['tag_stunde']+$gefunden_anz; - if (!isset($max_person_array[$i][$k]['tag_stunde_max'])) - $max_person_array[$i][$k]['tag_stunde_max']=0; - $max_person_array[$i][$k]['tag_stunde_max']=$max_person_array[$i][$k]['tag_stunde_max']+$max_person; - - } - echo ''; - - } - echo '
'. $fh_name .'      '. (date('Ym',$montag)==date('Ym',$letzterTagAnzeige)?$tag:(date('Y',$montag)==date('Y',$letzterTagAnzeige)?$tag_monat:$tag_monat_jahr)) .' - '. $letzter_tag_monat_jahr.'
Stunde
'.$row->show_beginn.'
'.$row->show_ende.'
'; - - $sql_query=' select distinct vw_'.$stpl_table.'.stg_bezeichnung as bezeichnung,vw_'.$stpl_table.'.stg_kurzbzlang as kurzbzlang,vw_'.$stpl_table.'.stg_kurzbz as kurzbz, vw_'.$stpl_table.'.'.$stpl_table.'_id,vw_'.$stpl_table.'.lehrform, vw_'.$stpl_table.'.gruppe, vw_'.$stpl_table.'.gruppe_kurzbz, vw_'.$stpl_table.'.unr,vw_'.$stpl_table.'.verband,vw_'.$stpl_table.'.ort_kurzbz,vw_'.$stpl_table.'.lehreinheit_id,vw_'.$stpl_table.'.studiengang_kz,vw_'.$stpl_table.'.semester,tbl_ort.max_person,tbl_standort.adresse_id,tbl_adresse.plz,tbl_adresse.name '; - $sql_query.=' from lehre.vw_'.$stpl_table.', public.tbl_ort,public.tbl_standort, public.tbl_adresse '; - $sql_query.=" where vw_".$stpl_table.".datum=".$db->db_add_param(date('Y-m-d',mktime(0,0,0,date('m',$montag),date('d',$montag) + $i,date('Y',$montag))))." "; - $sql_query.=" and vw_".$stpl_table.".stunde=".$db->db_add_param($row->stunde, FHC_INTEGER)." "; - $sql_query.=" and tbl_ort.ort_kurzbz=vw_".$stpl_table.".ort_kurzbz "; - $sql_query.=" and tbl_standort.standort_id=tbl_ort.standort_id "; - $sql_query.=" and tbl_adresse.adresse_id=tbl_standort.adresse_id "; - $sql_query.=" and tbl_adresse.adresse_id=".$db->db_add_param($adresse_id, FHC_INTEGER)." "; - $sql_query.=" order by tbl_adresse.plz,vw_".$stpl_table.".ort_kurzbz "; - - // Gibt es fuer das Datum und Stunde einen Stundenplaneintrag - if(!$results_anzahl=$db->db_query($sql_query)) - die($db->db_last_error()); - $num_rows_anzahl=$db->db_num_rows($results_anzahl); - - $gefunden_anz=0; - $tooltip=''; - for ($k_anz=0; $k_anz<$num_rows_anzahl; $k_anz++) - { - $row_anz = $db->db_fetch_object($results_anzahl, $k_anz); - // Lehreinheit wird aufgeteilt in zwei Raeume - nicht verarbeiten , das sind die selben Personen - if (isset($lehreinheiten[trim($row_anz->lehreinheit_id).trim($row_anz->gruppe_kurzbz)])) - continue; - $lehreinheiten[$row_anz->lehreinheit_id]=trim($row_anz->lehreinheit_id).trim($row_anz->gruppe_kurzbz); - - $max_person=$row_anz->max_person+$max_person; - $row_anz->verband=trim($row_anz->verband); - $row_anz->gruppe=trim($row_anz->gruppe); - $row_anz->gruppe_kurzbz=trim($row_anz->gruppe_kurzbz); - - $stsem=$ss; - - $gruppe=($row_anz->gruppe_kurzbz?$row_anz->gruppe_kurzbz:null); - $student=new student(); - - $row_anz->anz=0; - if ($result=$student->getStudents($row_anz->studiengang_kz,$row_anz->semester,$row_anz->verband,$row_anz->gruppe,$gruppe, $stsem)) - $row_anz->anz=count($result); - - - if (empty($row_anz->anz)) - $fehler=true; - - $lvb=$row_anz->kurzbzlang.'-'.$row_anz->semester; - if (!is_null($row_anz->verband) && !empty($row_anz->verband)) - { - $lvb.=$row_anz->verband; - if (!is_null($row_anz->gruppe) && !empty($row_anz->gruppe) ) - $lvb.=$row_anz->gruppe; - } - if (!empty($k_anz)) - $tooltip.='
'. date('d M Y',mktime(0,0,0,date('m',$montag),date('d',$montag) + $i,date('Y',$montag))).' '.$row->show_beginn.' - '.$row->show_ende.'Anzahl
stundenplan_id:$row_anz->stundenplandev_id).'\'>'.trim($row_anz->ort_kurzbz).' ort_kurzbz).'\' target=\'_blank\' titel=\'Studiengang Kz '.$row_anz->studiengang_kz.'\'>'.$lvb.' '.$row_anz->gruppe_kurzbz.' '.(!$row_anz->anz?'':'').$row_anz->bezeichnung.(!$row_anz->anz?'':'').' '.$row_anz->anz.'
max.Personen:'.$max_person.' Belegung:'. number_format($gefunden_anz / $max_person,2)*100 .'% Ges.:'.$gefunden_anz.'
'; - - - $rechte = new benutzerberechtigung(); - $rechte->getBerechtigungen($uid); - if($rechte->isBerechtigt('admin')) - { - echo ''; - echo ''; - - echo ''; - echo ''; - for ($i=0; $i'.strftime('%a',mktime(0,0,0,date('m',$montag),date('d',$montag) + $i,date('Y',$montag))).' '. date('d M Y',mktime(0,0,0,date('m',$montag),date('d',$montag) + $i,date('Y',$montag))).''; - } - echo ''; - $stunde_proz=0; - $stunde=0; - $stunde_max=0; - for ($k=0; $k<$num_rows_stunde; $k++) - { - $row = $db->db_fetch_object($results, $k); - $row->show_beginn=substr($row->beginn,0,5); - $row->show_ende=substr($row->ende,0,5); - $row->check_beginn=str_replace(':','',substr($row->beginn,0,5)); - $row->check_ende=str_replace(':','',substr($row->ende,0,5)); - echo ''; - echo ''; - echo ''; - - $stunde=$stunde+$max_person_array[$k]['stunde']; - $stunde_max=$stunde_max+$max_person_array[$k]['stunde_max']; - - for ($i=0; $i'; - echo 'anz.:'.$max_person_array[$i][$k]['tag_stunde']; - echo '
'; - echo 'FH   max.:'. $raum_max_anz; - echo '
'; - echo ' '.($max_person_array[$i][$k]['tag_stunde']?number_format($max_person_array[$i][$k]['tag_stunde'] / $raum_max_anz,2)*100:0).'%'; - echo '
'; - echo 'Raum max.:'. $max_person_array[$i][$k]['tag_stunde_max']; - echo '
'; - echo ' '.($max_person_array[$i][$k]['tag_stunde']?number_format($max_person_array[$i][$k]['tag_stunde'] / $max_person_array[$i][$k]['tag_stunde_max'],2)*100:0).'%'; - echo ''; - } - echo '
'; - } - - - echo ''; - echo ''; - - echo ''; - - - for ($i=0; $i'; - echo 'FH      Ø '.($max_person_array[$i]['tag']?number_format($max_person_array[$i]['tag'] / ($raum_max_anz *$num_rows_stunde),2)*100:0).'%'; - echo '
'; - echo 'Raum Ø '.($max_person_array[$i]['tag']?number_format($max_person_array[$i]['tag'] / $max_person_array[$i]['tag_max'],2)*100:0).'%'; - echo ''; - } - - echo '
'; - - - echo '
'. $fh_name .'      '. (date('Ym',$montag)==date('Ym',$letzterTagAnzeige)?$tag:(date('Y',$montag)==date('Y',$letzterTagAnzeige)?$tag_monat:$tag_monat_jahr)) .' - '. $letzter_tag_monat_jahr.'
Zeit / Datum – 
'.$row->show_beginn.'
'.$row->show_ende.'
'; - echo 'anz.:'.$max_person_array[$k]['stunde']; - echo '
'; - echo 'FH   '.($raum_max_anz*TAGE_PRO_WOCHE); - echo '
'; - echo ' Ø '.($max_person_array[$k]['stunde']?number_format(($max_person_array[$k]['stunde'])/TAGE_PRO_WOCHE / ($raum_max_anz),2)*100:0).'%'; - echo '
'; - echo 'Raum '.$max_person_array[$k]['stunde_max']; - echo '
'; - echo ' Ø '.($max_person_array[$k]['stunde']?number_format(($max_person_array[$k]['stunde']/TAGE_PRO_WOCHE) / ($max_person_array[$k]['stunde_max']/TAGE_PRO_WOCHE),2)*100:0).'%'; - echo '
Ø'; - echo 'FH      Ø '.($stunde?number_format(($stunde)/$num_rows_stunde/TAGE_PRO_WOCHE / ($raum_max_anz),2)*100:0).'%'; - echo '
'; - echo 'Raum Ø '.($stunde_max?number_format(($stunde/$num_rows_stunde/TAGE_PRO_WOCHE) / ($stunde_max/$num_rows_stunde/TAGE_PRO_WOCHE),2)*100:0).'%'; - echo '
'; - } -?> - - + + + + + + + +
+
+
+
+
+
+ + + +
+
drucken
+ +
+
schliessen  
+ +
+
+
+
+
+
+getaktorNext(); + $objSS->load($ss); + $datum_obj = new datum(); + $ss_begin=$datum_obj->mktime_fromdate($objSS->start); + $ss_ende=$datum_obj->mktime_fromdate($objSS->ende); + + + $sql_query=' select tbl_adresse.plz,tbl_adresse.name, sum(tbl_ort.max_person) as summe '; + $sql_query.=' from public.tbl_ort,public.tbl_standort, public.tbl_adresse '; + $sql_query.=" where tbl_standort.standort_id=tbl_ort.standort_id "; + $sql_query.=" and tbl_adresse.adresse_id=tbl_standort.adresse_id "; + $sql_query.=" and tbl_adresse.adresse_id=".$db->db_add_param($adresse_id, FHC_INTEGER)." "; + $sql_query.=" and tbl_ort.aktiv and tbl_ort.lehre "; + $sql_query.=" group by tbl_adresse.plz,tbl_adresse.name "; + // Gibt es fuer das Datum und Stunde einen Stundenplaneintrag + if(!$results_anzahl=$db->db_query($sql_query)) + die($db->db_last_error()); + $raum_max_anz=0; + $fh_name='FH lese fehler'; + if ($num_rows_anzahl=$db->db_num_rows($results_anzahl)) + { + $fh_name = $db->db_result($results_anzahl,0,"name").', '.$db->db_result($results_anzahl,0,"plz"); + $raum_max_anz = $db->db_result($results_anzahl,0,"summe"); + } + + $stg=array(); + echo '

+  Lehrveranstaltungsplan >> Wochenplan - Anzahl Studenten +    << + Wochenplan  Kw '.$kw.' +  >> +    Heute +

'; + + // Stundentafel abfragen + $sql_query="SELECT stunde, beginn, ende FROM lehre.tbl_stunde ORDER BY stunde"; + if(!$results=$db->db_query($sql_query)) + die($db->db_last_error()); + + + echo ''; + echo ''; + echo ''; + echo ''; + for ($i=0; $i'.strftime('%a',mktime(0,0,0,date('m',$montag),date('d',$montag) + $i,date('Y',$montag))).' '.date('d M',mktime(0,0,0,date('m',$montag),date('d',$montag) + $i,date('Y',$montag))).''; + } + echo ''; + + $max_person_array=array(); + $num_rows_stunde=$db->db_num_rows($results); + echo ''; + for ($k=0; $k<$num_rows_stunde; $k++) + { + $row = $db->db_fetch_object($results, $k); + $row->show_beginn=substr($row->beginn,0,5); + $row->show_ende=substr($row->ende,0,5); + $row->check_beginn=str_replace(':','',substr($row->beginn,0,5)); + $row->check_ende=str_replace(':','',substr($row->ende,0,5)); + + echo ''; + $lehreinheiten=array(); + + for ($i=0; $i= $row->check_beginn && date('Hi')<=$row->check_ende ) + $aktiv=true; + + echo ''; + else + $tooltip.=''; + $tooltip.=''; + $gefunden_anz+=$row_anz->anz; + } + + if (!empty($gefunden_anz)) + { + $tooltip.=''; + + echo '
Gesamt: '.$gefunden_anz; + echo ''; + } + echo ''; + + + if (!isset($max_person_array[$i]['tag'])) + $max_person_array[$i]['tag']=0; + $max_person_array[$i]['tag']=$max_person_array[$i]['tag']+$gefunden_anz; + if (!isset($max_person_array[$i]['tag_max'])) + $max_person_array[$i]['tag_max']=0; + $max_person_array[$i]['tag_max']=$max_person_array[$i]['tag_max']+$max_person; + + if (!isset($max_person_array[$k]['stunde'])) + $max_person_array[$k]['stunde']=0; + $max_person_array[$k]['stunde']=$max_person_array[$k]['stunde']+$gefunden_anz; + if (!isset($max_person_array[$k]['stunde_max'])) + $max_person_array[$k]['stunde_max']=0; + $max_person_array[$k]['stunde_max']=$max_person_array[$k]['stunde_max']+$max_person; + + if (!isset($max_person_array[$i][$k]['tag_stunde'])) + $max_person_array[$i][$k]['tag_stunde']=0; + $max_person_array[$i][$k]['tag_stunde']=$max_person_array[$i][$k]['tag_stunde']+$gefunden_anz; + if (!isset($max_person_array[$i][$k]['tag_stunde_max'])) + $max_person_array[$i][$k]['tag_stunde_max']=0; + $max_person_array[$i][$k]['tag_stunde_max']=$max_person_array[$i][$k]['tag_stunde_max']+$max_person; + + } + echo ''; + + } + echo '
'. $fh_name .'      '. (date('Ym',$montag)==date('Ym',$letzterTagAnzeige)?$tag:(date('Y',$montag)==date('Y',$letzterTagAnzeige)?$tag_monat:$tag_monat_jahr)) .' - '. $letzter_tag_monat_jahr.'
Stunde
'.$row->show_beginn.'
'.$row->show_ende.'
'; + + $sql_query=' select distinct vw_'.$stpl_table.'.stg_bezeichnung as bezeichnung,vw_'.$stpl_table.'.stg_kurzbzlang as kurzbzlang,vw_'.$stpl_table.'.stg_kurzbz as kurzbz, vw_'.$stpl_table.'.'.$stpl_table.'_id,vw_'.$stpl_table.'.lehrform, vw_'.$stpl_table.'.gruppe, vw_'.$stpl_table.'.gruppe_kurzbz, vw_'.$stpl_table.'.unr,vw_'.$stpl_table.'.verband,vw_'.$stpl_table.'.ort_kurzbz,vw_'.$stpl_table.'.lehreinheit_id,vw_'.$stpl_table.'.studiengang_kz,vw_'.$stpl_table.'.semester,tbl_ort.max_person,tbl_standort.adresse_id,tbl_adresse.plz,tbl_adresse.name '; + $sql_query.=' from lehre.vw_'.$stpl_table.', public.tbl_ort,public.tbl_standort, public.tbl_adresse '; + $sql_query.=" where vw_".$stpl_table.".datum=".$db->db_add_param(date('Y-m-d',mktime(0,0,0,date('m',$montag),date('d',$montag) + $i,date('Y',$montag))))." "; + $sql_query.=" and vw_".$stpl_table.".stunde=".$db->db_add_param($row->stunde, FHC_INTEGER)." "; + $sql_query.=" and tbl_ort.ort_kurzbz=vw_".$stpl_table.".ort_kurzbz "; + $sql_query.=" and tbl_standort.standort_id=tbl_ort.standort_id "; + $sql_query.=" and tbl_adresse.adresse_id=tbl_standort.adresse_id "; + $sql_query.=" and tbl_adresse.adresse_id=".$db->db_add_param($adresse_id, FHC_INTEGER)." "; + $sql_query.=" order by tbl_adresse.plz,vw_".$stpl_table.".ort_kurzbz "; + + // Gibt es fuer das Datum und Stunde einen Stundenplaneintrag + if(!$results_anzahl=$db->db_query($sql_query)) + die($db->db_last_error()); + $num_rows_anzahl=$db->db_num_rows($results_anzahl); + + $gefunden_anz=0; + $tooltip=''; + for ($k_anz=0; $k_anz<$num_rows_anzahl; $k_anz++) + { + $row_anz = $db->db_fetch_object($results_anzahl, $k_anz); + // Lehreinheit wird aufgeteilt in zwei Raeume - nicht verarbeiten , das sind die selben Personen + if (isset($lehreinheiten[trim($row_anz->lehreinheit_id).trim($row_anz->gruppe_kurzbz)])) + continue; + $lehreinheiten[$row_anz->lehreinheit_id]=trim($row_anz->lehreinheit_id).trim($row_anz->gruppe_kurzbz); + + $max_person=$row_anz->max_person+$max_person; + $row_anz->verband=trim($row_anz->verband); + $row_anz->gruppe=trim($row_anz->gruppe); + $row_anz->gruppe_kurzbz=trim($row_anz->gruppe_kurzbz); + + $stsem=$ss; + + $gruppe=($row_anz->gruppe_kurzbz?$row_anz->gruppe_kurzbz:null); + $student=new student(); + + $row_anz->anz=0; + if ($result=$student->getStudents($row_anz->studiengang_kz,$row_anz->semester,$row_anz->verband,$row_anz->gruppe,$gruppe, $stsem)) + $row_anz->anz=count($result); + + + if (empty($row_anz->anz)) + $fehler=true; + + $lvb=$row_anz->kurzbzlang.'-'.$row_anz->semester; + if (!is_null($row_anz->verband) && !empty($row_anz->verband)) + { + $lvb.=$row_anz->verband; + if (!is_null($row_anz->gruppe) && !empty($row_anz->gruppe) ) + $lvb.=$row_anz->gruppe; + } + if (!empty($k_anz)) + $tooltip.='
'. date('d M Y',mktime(0,0,0,date('m',$montag),date('d',$montag) + $i,date('Y',$montag))).' '.$row->show_beginn.' - '.$row->show_ende.'Anzahl
stundenplan_id:$row_anz->stundenplandev_id).'\'>'.trim($row_anz->ort_kurzbz).' ort_kurzbz).'\' target=\'_blank\' titel=\'Studiengang Kz '.$row_anz->studiengang_kz.'\'>'.$lvb.' '.$row_anz->gruppe_kurzbz.' '.(!$row_anz->anz?'':'').$row_anz->bezeichnung.(!$row_anz->anz?'':'').' '.$row_anz->anz.'
max.Personen:'.$max_person.' Belegung:'. number_format($gefunden_anz / $max_person,2)*100 .'% Ges.:'.$gefunden_anz.'
'; + + + $rechte = new benutzerberechtigung(); + $rechte->getBerechtigungen($uid); + if($rechte->isBerechtigt('admin')) + { + echo ''; + echo ''; + + echo ''; + echo ''; + for ($i=0; $i'.strftime('%a',mktime(0,0,0,date('m',$montag),date('d',$montag) + $i,date('Y',$montag))).' '. date('d M Y',mktime(0,0,0,date('m',$montag),date('d',$montag) + $i,date('Y',$montag))).''; + } + echo ''; + $stunde_proz=0; + $stunde=0; + $stunde_max=0; + for ($k=0; $k<$num_rows_stunde; $k++) + { + $row = $db->db_fetch_object($results, $k); + $row->show_beginn=substr($row->beginn,0,5); + $row->show_ende=substr($row->ende,0,5); + $row->check_beginn=str_replace(':','',substr($row->beginn,0,5)); + $row->check_ende=str_replace(':','',substr($row->ende,0,5)); + echo ''; + echo ''; + echo ''; + + $stunde=$stunde+$max_person_array[$k]['stunde']; + $stunde_max=$stunde_max+$max_person_array[$k]['stunde_max']; + + for ($i=0; $i'; + echo 'anz.:'.$max_person_array[$i][$k]['tag_stunde']; + echo '
'; + echo 'FH   max.:'. $raum_max_anz; + echo '
'; + echo ' '.($max_person_array[$i][$k]['tag_stunde']?number_format($max_person_array[$i][$k]['tag_stunde'] / $raum_max_anz,2)*100:0).'%'; + echo '
'; + echo 'Raum max.:'. $max_person_array[$i][$k]['tag_stunde_max']; + echo '
'; + echo ' '.($max_person_array[$i][$k]['tag_stunde']?number_format($max_person_array[$i][$k]['tag_stunde'] / $max_person_array[$i][$k]['tag_stunde_max'],2)*100:0).'%'; + echo ''; + } + echo '
'; + } + + + echo ''; + echo ''; + + echo ''; + + + for ($i=0; $i'; + echo 'FH      Ø '.($max_person_array[$i]['tag']?number_format($max_person_array[$i]['tag'] / ($raum_max_anz *$num_rows_stunde),2)*100:0).'%'; + echo '
'; + echo 'Raum Ø '.($max_person_array[$i]['tag']?number_format($max_person_array[$i]['tag'] / $max_person_array[$i]['tag_max'],2)*100:0).'%'; + echo ''; + } + + echo '
'; + + + echo '
'. $fh_name .'      '. (date('Ym',$montag)==date('Ym',$letzterTagAnzeige)?$tag:(date('Y',$montag)==date('Y',$letzterTagAnzeige)?$tag_monat:$tag_monat_jahr)) .' - '. $letzter_tag_monat_jahr.'
Zeit / Datum – 
'.$row->show_beginn.'
'.$row->show_ende.'
'; + echo 'anz.:'.$max_person_array[$k]['stunde']; + echo '
'; + echo 'FH   '.($raum_max_anz*TAGE_PRO_WOCHE); + echo '
'; + echo ' Ø '.($max_person_array[$k]['stunde']?number_format(($max_person_array[$k]['stunde'])/TAGE_PRO_WOCHE / ($raum_max_anz),2)*100:0).'%'; + echo '
'; + echo 'Raum '.$max_person_array[$k]['stunde_max']; + echo '
'; + echo ' Ø '.($max_person_array[$k]['stunde']?number_format(($max_person_array[$k]['stunde']/TAGE_PRO_WOCHE) / ($max_person_array[$k]['stunde_max']/TAGE_PRO_WOCHE),2)*100:0).'%'; + echo '
Ø'; + echo 'FH      Ø '.($stunde?number_format(($stunde)/$num_rows_stunde/TAGE_PRO_WOCHE / ($raum_max_anz),2)*100:0).'%'; + echo '
'; + echo 'Raum Ø '.($stunde_max?number_format(($stunde/$num_rows_stunde/TAGE_PRO_WOCHE) / ($stunde_max/$num_rows_stunde/TAGE_PRO_WOCHE),2)*100:0).'%'; + echo '
'; + } +?> + + diff --git a/cis/private/profile/index.php b/cis/private/profile/index.php index 5b3a645da..dd39cf301 100644 --- a/cis/private/profile/index.php +++ b/cis/private/profile/index.php @@ -56,6 +56,12 @@ $uid = get_uid(); $rechte = new benutzerberechtigung(); $rechte->getBerechtigungen($uid); +$is_employee = false; +if (check_lektor($uid)) +{ + $is_employee = true; +} + $datum_obj = new datum(); // Wenn ein anderer User sich das Profil ansieht (Bei Personensuche) sollen bestimmte persönliche Daten nicht angezeigt werden @@ -346,7 +352,7 @@ if ($type == 'mitarbeiter') $kontakt->load_pers($user->person_id); foreach($kontakt->result as $k) { - if ($k->kontakttyp == 'firmenhandy') + if ($k->kontakttyp == 'firmenhandy' && $is_employee) echo 'Firmenhandy: '.$k->kontakt.'
'; } diff --git a/cis/private/profile/urlaubstool.php b/cis/private/profile/urlaubstool.php index 9d33b25ae..11620a99a 100644 --- a/cis/private/profile/urlaubstool.php +++ b/cis/private/profile/urlaubstool.php @@ -163,6 +163,68 @@ if (isset($_GET['rechts_x']) || isset($_POST['rechts_x'])) $wjahr=$wjahr; } } + +//Bereits freigegebenen Eintrag löschen +//Eintragung löschen +if((isset($_GET['delete']) && isset($_GET['informSupervisor'])) || (isset($_POST['delete']) && isset($_POST['informSupervisor']))) +{ + $zeitsperre = new zeitsperre(); + $zeitsperre->load($_GET['delete']); + + $vondatum = $zeitsperre->getVonDatum(); + $bisdatum = $zeitsperre->getBisDatum(); + + if(!$zeitsperre->delete($_GET['delete'])) + echo $zeitsperre->errormsg; + + //Mail an Vorgesetzten + $prsn = new person(); + + $vorgesetzter = $ma->getVorgesetzte($uid); + if($vorgesetzter) + { + $to=''; + $fullName =''; + foreach($ma->vorgesetzte as $vg) + { + if($to!='') + { + $to.=', '.$vg.'@'.DOMAIN; + $name = $prsn->getFullNameFromBenutzer($vg); + $fullName.=', '.$name; + } + else + { + $to.=$vg.'@'.DOMAIN; + $name = $prsn->getFullNameFromBenutzer($vg); + $fullName.=$name; + } + } + + $benutzer = new benutzer(); + $benutzer->load($uid); + $message = $p->t('urlaubstool/diesIstEineAutomatischeMail')."\n". + $p->t('urlaubstool/xHatUrlaubGeloescht',array($benutzer->nachname,$benutzer->vorname)).":\n"; + $message.= $p->t('urlaubstool/von')." ".date("d.m.Y", strtotime($vondatum))." ".$p->t('urlaubstool/bis')." ".date("d.m.Y", strtotime($bisdatum))."\n"; + + + $mail = new mail($to, 'vilesci@'.DOMAIN,$p->t('urlaubstool/freigegebenerUrlaubGeloescht'), $message); + if($mail->send()) + { + $vgmail="".$p->t('urlaubstool/VorgesetzteInformiert',array($fullName)).""; + } + else + { + $vgmail="
".$p->t('urlaubstool/fehlerBeimSendenAufgetreten',array($fullName))."!"; + } + } + else + { + $vgmail="
".$p->t('urlaubstool/konnteKeinFreigabemailVersendetWerden').""; + } +} + + //Eintragung löschen if((isset($_GET['delete']) || isset($_POST['delete']))) { @@ -257,19 +319,26 @@ if(isset($_GET['speichern']) && isset($_GET['wtag'])) if(!$error) { //Mail an Vorgesetzten + $prsn = new person(); + $vorgesetzter = $ma->getVorgesetzte($uid); if($vorgesetzter) { $to=''; + $fullName =''; foreach($ma->vorgesetzte as $vg) { if($to!='') { $to.=', '.$vg.'@'.DOMAIN; + $name = $prsn->getFullNameFromBenutzer($vg); + $fullName.=', '.$name; } else { $to.=$vg.'@'.DOMAIN; + $name = $prsn->getFullNameFromBenutzer($vg); + $fullName.=$name; } } @@ -295,7 +364,7 @@ if(isset($_GET['speichern']) && isset($_GET['wtag'])) $mail = new mail($to, 'vilesci@'.DOMAIN,$p->t('urlaubstool/freigabeansuchenUrlaub'), $message); if($mail->send()) { - $vgmail="".$p->t('urlaubstool/freigabemailWurdeVersandt',array($to)).""; + $vgmail="".$p->t('urlaubstool/freigabemailWurdeVersandt',array($fullName)).""; } else { @@ -373,10 +442,14 @@ if ((isset($wmonat) || isset($wmonat))&&(isset($wjahr) || isset($wjahr))) if(date("Y-m-d",mktime(0, 0, 0, ($wmonat+1) , $i-$wotag+1, $jahre[$wjahr]))>=$row->vondatum && date("Y-m-d",mktime(0, 0, 0, ($wmonat+1) , $i-$wotag+1, $jahre[$wjahr]))<=$row->bisdatum) { - if($row->freigabevon!='' || $row->bisdatumfreigabevon!='' && $row->vondatum<=date("Y-m-d",time())) { $hgfarbe[$i]='#bbb'; } + elseif ($row->freigabevon!='' && $row->vondatum>date("Y-m-d",time())) + { + $hgfarbe[$i]='#CDDDEE'; + } else { $hgfarbe[$i]='#FFFC7F'; @@ -389,7 +462,7 @@ if ((isset($wmonat) || isset($wmonat))&&(isset($wjahr) || isset($wjahr))) } else { - if($hgfarbe[$i]!='#FFFC7F' && $hgfarbe[$i]!='#bbb') + if($hgfarbe[$i]!='#FFFC7F' && $hgfarbe[$i]!='#bbb' && $hgfarbe[$i]!='#CDDDEE') { $hgfarbe[$i]='#E9ECEE'; @@ -696,7 +769,7 @@ for ($i=0;$i<6;$i++) } if($tage[$j+7*$i]!='') { - if($hgfarbe[$j+7*$i]=='#FFFC7F') + if($hgfarbe[$j+7*$i]=='#FFFC7F' )//|| $hgfarbe[$j+7*$i]=='#CDDDEE') { echo 't('urlaubstool/erreichbar').': '.$erreichbarkeit_kurzbz[$j+7*$i].'">'.$tage[$j+7*$i].'
';; $k=$j+7*$i; @@ -724,7 +797,13 @@ for ($i=0;$i<6;$i++) } elseif(isset($freigabeamum[$j+7*$i])) { - echo 'freigegeben'; + echo 'freigegeben '; + if($hgfarbe[$j+7*$i]=='#CDDDEE') + { + $k=$j+7*$i; + echo ""; + echo 'loeschen'; + } } else { diff --git a/cis/private/profile/zahlungen.php b/cis/private/profile/zahlungen.php index e255e805b..d94e66f91 100644 --- a/cis/private/profile/zahlungen.php +++ b/cis/private/profile/zahlungen.php @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * - * Authors: Christian Paminger , + * Authors: Christian Paminger , * Andreas Oesterreicher and * Rudolf Hangl . */ @@ -31,16 +31,16 @@ require_once('../../../include/studiengang.class.php'); require_once('../../../include/phrasen.class.php'); require_once('../../../include/benutzerberechtigung.class.php'); - + $sprache = getSprache(); $p = new phrasen($sprache); $uid=get_uid(); - + if(isset($_GET['uid'])) { // Administratoren duerfen die UID als Parameter uebergeben um die Zahlungen // von anderen Personen anzuzeigen - + $rechte = new benutzerberechtigung(); $rechte->getBerechtigungen($uid); if($rechte->isBerechtigt('admin')) @@ -58,7 +58,7 @@ { die('Um diese Seite anzuzeigen, ist ein entsprechender Eintrag in der Konfigurationsdatei nötig.'); } - + $datum_obj = new datum(); echo ' @@ -127,20 +127,20 @@ echo ' '; if ($rechte->isBerechtigt('admin')) { @@ -569,7 +608,8 @@ if(file_exists($eee)) echo 'BIS-Meldeübersicht der BIS-Meldung Stg '.$stg_kz.'

'; } -echo ' +echo '
+ @@ -579,16 +619,25 @@ echo '
UID PersKZ
+ + ',$stlist,' +
Semester Orgform
'; echo '
Bewerberübersicht'; -echo ' +echo '
+ + + + + ',$bwlist,' +
Nachname VornameOrgformGeschlecht
'; echo ''; @@ -612,6 +661,7 @@ function GenerateXMLStudentBlock($row) global $stg_kz; $error_log=''; $error_log1=''; + $error_log_io = ''; $datei = ''; $datumobj = new datum(); @@ -624,6 +674,9 @@ function GenerateXMLStudentBlock($row) else $ausserordentlich=false; + // Pruefen, ob Incoming (3.Stelle in Personenkennzeichen = 0) + $incoming = mb_substr($row->matrikelnr,2,1) == '0' ? true : false; + $qryadr="SELECT * FROM public.tbl_adresse WHERE heimatadresse IS TRUE AND person_id=".$db->db_add_param($row->pers_id).";"; $results=$db->db_query($qryadr); @@ -637,6 +690,7 @@ function GenerateXMLStudentBlock($row) $gemeinde=$rowadr->gemeinde; $strasse=$rowadr->strasse; $nation=$rowadr->nation; + $co_name = $rowadr->co_name; } else { @@ -644,7 +698,43 @@ function GenerateXMLStudentBlock($row) $gemeinde=''; $strasse=''; $nation=''; + $co_name = ''; } + + // Zustelladresse & c/o Name(=abweichender Empfaenger) + $qryzustelladr = " + SELECT * + FROM public.tbl_adresse + WHERE zustelladresse IS TRUE + AND person_id=". $db->db_add_param($row->pers_id). "; + "; + $results = $db->db_query($qryzustelladr); + + if ($db->db_num_rows($results) != 1) + { + $error_log1.= "Es sind ".$db->db_num_rows($results)." Zustelladressen eingetragen\n"; + } + + $zustell_plz = ''; + $zustell_gemeinde = ''; + $zustell_strasse = ''; + $zustell_nation = ''; + + if ($rowzustelladr = $db->db_fetch_object($results)) + { + $zustell_plz = $rowzustelladr->plz; + $zustell_gemeinde = $rowzustelladr->gemeinde; + $zustell_strasse = $rowzustelladr->strasse; + $zustell_nation = $rowzustelladr->nation; + } + + // FH eMail-Adresse FH aus UID@Domain + $email = ''; + if ($row->student_uid != '') + { + $email = $row->student_uid. '@'. DOMAIN; + } + if($row->gebdatum<'1920-01-01' OR $row->gebdatum==null OR $row->gebdatum=='') { $error_log.=(!empty($error_log)?', ':'')."Geburtsdatum ('".$row->gebdatum."')"; @@ -709,6 +799,51 @@ function GenerateXMLStudentBlock($row) { $error_log.=(!empty($error_log)?', ':'')."Heimat-Nation ('".$nation."')"; } + /*if($row->bpk == '' || $row->bpk == null) + { + $error_log .= (!empty($error_log) ? ', ' : '') . "bPK fehlt"; + } + if($row->bpk != '' && $row->bpk != null) + { + if (!preg_match('/[a-zA-Z0-9\+\/]{27}=/', $row->bpk)) + { + $error_log.=(!empty($error_log) ? ', ' : ''). "bPK-Zeichenfolge ist ungültig"; + } + + if (strlen($row->bpk) != 28) + { + $error_log.=(!empty($error_log) ? ', ' : ''). "bPK ist nicht 28 Zeichen lang"; + } + }*/ + if (!$ausserordentlich && !$incoming) + { + if ($zustell_plz == '' || $zustell_plz == null) + { + $error_log.=(!empty($error_log)?', ':'')."Zustell-PLZ fehlt"; + } + + if ($zustell_gemeinde == '' || $zustell_gemeinde == null) + { + $error_log.=(!empty($error_log)?', ':'')."Zustell-Gemeinde fehlt"; + } + + if ($zustell_strasse == '' || $zustell_strasse == null) + { + $error_log.=(!empty($error_log)?', ':'')."Zustell-Strasse fehlt"; + } + + if ($zustell_nation == '' || $zustell_nation == null) + { + $error_log.=(!empty($error_log)?', ':'')."Zustell-Nation fehlt"; + } + + if ($email == '' || $email == null) + { + $error_log.=(!empty($error_log)?', ':'')."Studenten-eMail Adresse fehlt (keine Student-UID eingetragen)."; + } + + } + if(!$ausserordentlich) { if($row->zgv_code=='' || $row->zgv_code==null) @@ -806,7 +941,7 @@ function GenerateXMLStudentBlock($row) } else { - $error_log.= "$row->vorname $row->nachname wird nicht gemeldet da kein gueltiger Status vorhanden ist!"; + $error_log.= (!empty($error_log)?', ':''). "$row->vorname $row->nachname wird nicht gemeldet da kein gueltiger Status vorhanden ist!"; return ''; } $aktstatus=$rowstatus->status_kurzbz; @@ -861,7 +996,7 @@ function GenerateXMLStudentBlock($row) } else { - $error_log.= "$row->vorname $row->nachname wird nicht gemeldet da kein gueltiger Status vorhanden ist!"; + $error_log.= (!empty($error_log)?', ':''). "$row->vorname $row->nachname wird nicht gemeldet da kein gueltiger Status vorhanden ist!"; return ''; } $aktstatus=$rowstatus->status_kurzbz; @@ -876,7 +1011,7 @@ function GenerateXMLStudentBlock($row) $aktstatus_datum=''; $aktstatus_stsem=''; $sem=''; - $error_log.= "kein gueltiger Status vorhanden"; + $error_log.= (!empty($error_log)?', ':''). "kein gueltiger Status vorhanden"; } } @@ -887,7 +1022,7 @@ function GenerateXMLStudentBlock($row) $aktstatus_datum=''; $aktstatus_stsem=''; $sem=''; - $error_log.= "kein gueltiger Status vorhanden"; + $error_log.= (!empty($error_log)?', ':''). "kein gueltiger Status vorhanden"; } } @@ -1066,44 +1201,85 @@ function GenerateXMLStudentBlock($row) return ''; } else - { - $datei.=" + { + $datei .= " - ".trim($row->matrikelnr).""; + " . trim($row->matrikelnr) . ""; - $datei.=" - ".$row->matr_nr.""; + $datei .= " + " . $row->matr_nr . ""; - if(!$ausserordentlich) + if (!$ausserordentlich) { - $datei.=" - ".$orgform_code_array[$storgform].""; + $datei .= " + " . $orgform_code_array[$storgform] . ""; } - $datei.=" - ".date("dmY", $datumobj->mktime_fromdate($row->gebdatum))." - ".strtoupper($row->geschlecht).""; - $datei.=" - ".$row->vorname." - ".$row->nachname.""; + $datei .= " + " . date("dmY", $datumobj->mktime_fromdate($row->gebdatum)) . " + " . strtoupper($row->geschlecht) . ""; - if($row->svnr!='') + if ($row->titelpre != '') { - $datei.=" - ".$row->svnr.""; - } - if($row->ersatzkennzeichen!='') - { - $datei.=" - ".$row->ersatzkennzeichen.""; + $datei .= " + " . $row->titelpre . ""; + } + + if ($row->titelpost != '') + { + $datei .= " + " . $row->titelpost . ""; + } + + $datei .= " + " . $row->vorname . " + " . $row->nachname . ""; + + if ($row->svnr != '') + { + $datei .= " + " . $row->svnr . ""; + } + if ($row->ersatzkennzeichen != '') + { + $datei .= " + " . $row->ersatzkennzeichen . ""; + } + + /*$datei .= " + " . $row->bpk . " + ";*/ + + $datei .= " + " . $row->staatsbuergerschaft . " + " . $plz . " + " . $gemeinde . " + + " . $nation . ""; + + if (!$ausserordentlich && !$incoming) + { + $datei .= " + " . $zustell_plz . " + " . $zustell_gemeinde . " + " . $zustell_strasse . " + " . $zustell_nation . ""; + } + + if ($co_name != '') + { + $datei .= " + " . $co_name . " + "; + } + + if ($email != '') + { + $datei .= " + " . $email . " + "; } - $datei.=" - ".$row->staatsbuergerschaft." - ".$plz." - ".$gemeinde." - - ".$nation.""; if(!$ausserordentlich) { $datei.=" @@ -1206,48 +1382,151 @@ function GenerateXMLStudentBlock($row) $gast=$rowio->nation_code; $avon=date("dmY", $datumobj->mktime_fromdate($rowio->von)); $abis=date("dmY", $datumobj->mktime_fromdate($rowio->bis)); + $adauer = (is_null($rowio->von) || is_null($rowio->bis)) + ? null + : $datumobj->DateDiff($rowio->von, $rowio->bis); - $datei.=" - - ".$mob." - ".$gast." - ".$avon.""; - if($datumobj->mktime_fromdate($rowio->bis)<$datumobj->mktime_fromdate($bisdatum) && $datumobj->mktime_fromdate($rowio->bis)>$datumobj->mktime_fromdate($bisprevious)) - { - $datei.=" - ".$abis.""; - } - + // Aufenthaltszweckcode -------------------------------------------------------------------------------- $bisio_zweck = new bisio(); $bisio_zweck->getZweck($rowio->bisio_id); - foreach ($bisio_zweck->result as $row_zweck) + $zweck_code_arr = array(); + + // Bei Incomings... + if ($aktstatus == 'Incoming') { - $datei.=" - ".$row_zweck->zweck_code.""; - } - if ($aktstatus != 'Incoming' && $rowio->ects_erworben != '') - { - $datei.=" - ".$rowio->ects_erworben.""; - } - if ($aktstatus != 'Incoming' && $rowio->ects_angerechnet != '') - { - $datei.=" - ".$rowio->ects_angerechnet.""; - } - if ($aktstatus != 'Incoming') - { - $bisio_foerderung = new bisio(); - $bisio_foerderung->getFoerderungen($rowio->bisio_id); - foreach ($bisio_foerderung->result as $row_foerderung) + // ...max 1 Aufenthaltszweck + if (count($bisio_zweck->result) > 1) { - $datei.=" - ".$row_foerderung->aufenthaltfoerderung_code.""; + $error_log_io .= (!empty($error_log_io) ? ', ' : ''). "Es sind". count($bisio_zweck->result). + " Aufenthaltszwecke eingetragen (max. 1 Zweck für Incomings)"; + } + + //...nur Zweck 1, 2 oder 3 erlaubt + if (count($bisio_zweck->result) == 1 && + empty(array_intersect(array(1, 2, 3), array_column($bisio_zweck->result, 'zweck_code')))) + { + $error_log_io .= (!empty($error_log_io) ? ', ' : ''). "Aufenthaltszweckcode ist ". + $bisio_zweck->result[0]->zweck_code. " (für Incomings ist nur Zweck 1, 2, 3 erlaubt)"; } } - $datei.=" - "; + foreach ($bisio_zweck->result as $row_zweck) + { + // Nur eindeutige Werte (bei Mehrfachangaben; trifft auf Outgoings zu) + if (!in_array($row_zweck->zweck_code, $zweck_code_arr)) + { + // Aufenthaltszweck 1, 2, 3 nicht gemeinsam melden + if (in_array(1,$zweck_code_arr) && in_array(2,$zweck_code_arr) && in_array(3,$zweck_code_arr)) + { + $error_log_io .= (!empty($error_log_io) ? ', ' : ''). + "Aufenthaltzweckcode 1, 2, 3 dürfen nicht gemeinsam gemeldet werden"; + } + + $zweck_code_arr []= $row_zweck->zweck_code; + } + } + + // Aufenthaltfoerderungscode --------------------------------------------------------------------------- + $aufenthaltfoerderung_code_arr = array(); + + // Nur bei Outgoings Aufenthaltsfoerderungscode melden + if ($aktstatus != 'Incoming') { + $bisio_foerderung = new bisio(); + $bisio_foerderung->getFoerderungen($rowio->bisio_id); + + // ... mindestens 1 Aufenthaltfoerderung melden, wenn Auslandsaufenthalt >= 29 Tage + if ((!$bisio_foerderung->result || count($bisio_foerderung->result) == 0) && $adauer >= 29) + { + $error_log_io .= (!empty($error_log_io) ? ', ' : '') . + "Keine Aufenthaltsfoerderung angegeben (bei Outgoings >= 29 Tage Monat im Ausland muss mind. 1 gemeldet werden)"; + } + + foreach ($bisio_foerderung->result as $row_foerderung) + { + // ...wenn code = 5, nur ein Wert erlaubt (keine Mehrfachangaben) + if ($row_foerderung->aufenthaltfoerderung_code == 5) { + unset($aufenthaltfoerderung_code_arr); + $aufenthaltfoerderung_code_arr [] = $row_foerderung->aufenthaltfoerderung_code; + break; + } + + // nur eindeutige Werte + if (!in_array($row_foerderung->aufenthaltfoerderung_code, $aufenthaltfoerderung_code_arr)) { + $aufenthaltfoerderung_code_arr [] = $row_foerderung->aufenthaltfoerderung_code; + } + } + + if($datumobj->mktime_fromdate($rowio->bis) < $datumobj->mktime_fromdate($bisdatum)) + $aufenthalt_finished = true; + else + $aufenthalt_finished = false; + + if ($rowio->ects_erworben == '' && $adauer >= 29 && $aufenthalt_finished) + { + $error_log_io .= (!empty($error_log_io) ? ', ' : '') . + "Erworbene ECTS fehlen (Meldepflicht bei Outgoings >= 29 Tage Monat im Ausland)"; + } + + if ($rowio->ects_angerechnet == '' && $adauer >= 29 && $aufenthalt_finished) + { + $error_log_io .= (!empty($error_log_io) ? ', ' : '') . + "Angerechnete ECTS fehlen (Meldepflicht bei Outgoings >= 29 Tage Monat im Ausland)"; + } + } + + // Bei validen Daten errorlog ausgeben + if($error_log_io != '') + { + $v.="Bei Student (UID, Vorname, Nachname) '".$row->student_uid."', '".$row->nachname."', '".$row->vorname."' ($laststatus->status_kurzbz): \n"; + if($error_log_io != '') + { + $v.="      Fehler: ".$error_log_io. "\n"; + } + $v.="\n"; + $error_log_io = ''; + return ''; + } + // Bei validen Daten XML-Datensatz bauen + else + { + $datei.=" + + ".$mob." + ".$gast." + ".$avon.""; + if($datumobj->mktime_fromdate($rowio->bis)<$datumobj->mktime_fromdate($bisdatum) && $datumobj->mktime_fromdate($rowio->bis)>$datumobj->mktime_fromdate($bisprevious)) + { + $datei.=" + ".$abis.""; + } + + foreach ($zweck_code_arr as $zweck) + { + $datei.=" + ". $zweck. ""; + } + if ($aktstatus != 'Incoming' && $rowio->ects_erworben != '') + { + $datei.=" + ".$rowio->ects_erworben.""; + } + if ($aktstatus != 'Incoming' && $rowio->ects_angerechnet != '') + { + $datei.=" + ".$rowio->ects_angerechnet.""; + } + foreach ($aufenthaltfoerderung_code_arr as $aufenthaltfoerderung_code) + { + $datei.=" + ". $aufenthaltfoerderung_code. ""; + } + + $datei.=" + "; + } + + + if($aktstatus!='Incoming') { if(!isset($iosem[$storgform][$sem])) diff --git a/vilesci/cronjobs/jobwatcher.php b/vilesci/cronjobs/jobwatcher.php new file mode 100644 index 000000000..e46e442f4 --- /dev/null +++ b/vilesci/cronjobs/jobwatcher.php @@ -0,0 +1,61 @@ + + */ +/** + * Prueft ob aktuelle Jobs sich im Status running befinden. + * Falls dies der Fall ist wird ein Warn Mail an den Admin verschickt. + * Dies soll verhindern dass Jobs die stecken geblieben sind nicht mehr gestartet werden da diese im + * Running Status hängen und daher nicht erneut gestartet werden. + */ +require_once(dirname(__FILE__).'/../../config/vilesci.config.inc.php'); +require_once(dirname(__FILE__).'/../../include/mail.class.php'); +require_once(dirname(__FILE__).'/../../include/cronjob.class.php'); + +//ID des Cronjobs holen +$cj = new cronjob(); +if($cj->isJobRunning()) +{ + $cj->getAll(); + + $text = ''; + $found = false; + + foreach($cj->result as $row) + { + if($row->running && (mb_strstr($row->file, 'jobwatcher.php')===false)) + { + $found = true; + $text.="Der Cronjob \"$row->titel\" mit ID $row->cronjob_id ist im Status RUNNING\n"; + $text.="Er wurde zuletzt am \"$row->last_execute\" Uhr gestartet.\n"; + } + } + + if ($found) + { + $text.="Der Status muss gegebenenfalls manuell zurückgesetzt werden da der Job sonst nicht erneut startet\n"; + + $mail = new mail(MAIL_ADMIN, 'no-reply@'.DOMAIN,'CronJob - RUNNING ALERT',$text); + + if(!$mail->send()) + die('Fehler beim Senden des Mails!'); + else + echo 'Cronjob Running Alert verschickt'; + } +} +?>