From ec62250b414dbab064c7769b84aae928ec02c51b Mon Sep 17 00:00:00 2001 From: Andreas Oesterreicher Date: Mon, 25 Sep 2017 08:10:39 +0200 Subject: [PATCH 1/9] =?UTF-8?q?Fehlende=20Tabellenspalten=20hinzugef=C3=BC?= =?UTF-8?q?gt=20Tabellenspalten=20sind=20im=20Check=20jetzt=20in=20doppelt?= =?UTF-8?q?en=20Hochkomma=20damit=20die=20Spalte=20"table"=20korrekt=20abg?= =?UTF-8?q?efragt=20wird?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- system/dbupdate_3.3.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 8538e1122..c4a18d61e 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -624,7 +624,7 @@ $tabellen=array( "public.tbl_ortraumtyp" => array("ort_kurzbz","hierarchie","raumtyp_kurzbz"), "public.tbl_organisationseinheit" => array("oe_kurzbz", "oe_parent_kurzbz", "bezeichnung","organisationseinheittyp_kurzbz", "aktiv","mailverteiler","freigabegrenze","kurzzeichen","lehre","standort","warn_semesterstunden_frei","warn_semesterstunden_fix","standort_id"), "public.tbl_organisationseinheittyp" => array("organisationseinheittyp_kurzbz", "bezeichnung", "beschreibung"), - "public.tbl_person" => array("person_id","staatsbuergerschaft","geburtsnation","sprache","anrede","titelpost","titelpre","nachname","vorname","vornamen","gebdatum","gebort","gebzeit","foto","anmerkung","homepage","svnr","ersatzkennzeichen","familienstand","geschlecht","anzahlkinder","aktiv","insertamum","insertvon","updateamum","updatevon","ext_id","bundesland_code","kompetenzen","kurzbeschreibung","zugangscode", "foto_sperre","matr_nr","zugangscode_timestamp"), + "public.tbl_person" => array("person_id","staatsbuergerschaft","geburtsnation","sprache","anrede","titelpost","titelpre","nachname","vorname","vornamen","gebdatum","gebort","gebzeit","foto","anmerkung","homepage","svnr","ersatzkennzeichen","familienstand","geschlecht","anzahlkinder","aktiv","insertamum","insertvon","updateamum","updatevon","ext_id","bundesland_code","kompetenzen","kurzbeschreibung","zugangscode", "foto_sperre","matr_nr","zugangscode_timestamp","udf_values"), "public.tbl_person_fotostatus" => array("person_fotostatus_id","person_id","fotostatus_kurzbz","datum","insertamum","insertvon","updateamum","updatevon"), "public.tbl_personfunktionstandort" => array("personfunktionstandort_id","funktion_kurzbz","person_id","standort_id","position","anrede"), "public.tbl_preincoming" => array("preincoming_id","person_id","mobilitaetsprogramm_code","zweck_code","firma_id","universitaet","aktiv","bachelorthesis","masterthesis","von","bis","uebernommen","insertamum","insertvon","updateamum","updatevon","anmerkung","zgv","zgv_ort","zgv_datum","zgv_name","zgvmaster","zgvmaster_datum","zgvmaster_ort","zgvmaster_name","program_name","bachelor","master","jahre","person_id_emergency","person_id_coordinator_dep","person_id_coordinator_int","code","deutschkurs1","deutschkurs2","research_area","deutschkurs3","ext_id"), @@ -636,7 +636,7 @@ $tabellen=array( "public.tbl_preoutgoing_lehrveranstaltung" => array("preoutgoing_lehrveranstaltung_id","preoutgoing_id","bezeichnung","ects","endversion","insertamum","insertvon","updateamum","updatevon","wochenstunden","unitcode"), "public.tbl_preoutgoing_preoutgoing_status" => array("status_id","preoutgoing_status_kurzbz","preoutgoing_id","datum","insertamum","insertvon","updateamum","updatevon"), "public.tbl_preoutgoing_status" => array("preoutgoing_status_kurzbz","bezeichnung"), - "public.tbl_prestudent" => array("prestudent_id","aufmerksamdurch_kurzbz","person_id","studiengang_kz","berufstaetigkeit_code","ausbildungcode","zgv_code","zgvort","zgvdatum","zgvmas_code","zgvmaort","zgvmadatum","aufnahmeschluessel","facheinschlberuf","reihungstest_id","anmeldungreihungstest","reihungstestangetreten","rt_gesamtpunkte","rt_punkte1","rt_punkte2","bismelden","anmerkung","dual","insertamum","insertvon","updateamum","updatevon","ext_id","ausstellungsstaat","rt_punkte3", "zgvdoktor_code", "zgvdoktorort", "zgvdoktordatum","mentor","zgvnation","zgvmanation","zgvdoktornation","gsstudientyp_kurzbz","aufnahmegruppe_kurzbz"), + "public.tbl_prestudent" => array("prestudent_id","aufmerksamdurch_kurzbz","person_id","studiengang_kz","berufstaetigkeit_code","ausbildungcode","zgv_code","zgvort","zgvdatum","zgvmas_code","zgvmaort","zgvmadatum","aufnahmeschluessel","facheinschlberuf","reihungstest_id","anmeldungreihungstest","reihungstestangetreten","rt_gesamtpunkte","rt_punkte1","rt_punkte2","bismelden","anmerkung","dual","insertamum","insertvon","updateamum","updatevon","ext_id","ausstellungsstaat","rt_punkte3", "zgvdoktor_code", "zgvdoktorort", "zgvdoktordatum","mentor","zgvnation","zgvmanation","zgvdoktornation","gsstudientyp_kurzbz","aufnahmegruppe_kurzbz","udf_values"), "public.tbl_prestudentstatus" => array("prestudent_id","status_kurzbz","studiensemester_kurzbz","ausbildungssemester","datum","orgform_kurzbz","insertamum","insertvon","updateamum","updatevon","ext_id","studienplan_id","bestaetigtam","bestaetigtvon","fgm","faktiv", "anmerkung","bewerbung_abgeschicktamum","rt_stufe","statusgrund_id"), "public.tbl_raumtyp" => array("raumtyp_kurzbz","beschreibung","kosten"), "public.tbl_reihungstest" => array("reihungstest_id","studiengang_kz","ort_kurzbz","anmerkung","datum","uhrzeit","updateamum","updatevon","insertamum","insertvon","ext_id","freigeschaltet","max_teilnehmer","oeffentlich","studiensemester_kurzbz","aufnahmegruppe_kurzbz","stufe","anmeldefrist"), @@ -686,7 +686,7 @@ $tabellen=array( "system.tbl_webservicerecht" => array("webservicerecht_id","berechtigung_kurzbz","methode","attribut","insertamum","insertvon","updateamum","updatevon","klasse"), "system.tbl_webservicetyp" => array("webservicetyp_kurzbz","beschreibung"), "system.tbl_server" => array("server_kurzbz","beschreibung"), - "system.tbl_udf" => array("schema", "tbl_udf.table", "jsons"), + "system.tbl_udf" => array("schema", "table", "jsons"), "wawi.tbl_betriebsmittelperson" => array("betriebsmittelperson_id","betriebsmittel_id","person_id", "anmerkung", "kaution", "ausgegebenam", "retouram","insertamum", "insertvon","updateamum", "updatevon","ext_id","uid"), "wawi.tbl_betriebsmittel" => array("betriebsmittel_id","betriebsmitteltyp","oe_kurzbz", "ort_kurzbz", "beschreibung", "nummer", "hersteller","seriennummer", "bestellung_id","bestelldetail_id", "afa","verwendung","anmerkung","reservieren","updateamum","updatevon","insertamum","insertvon","ext_id","inventarnummer","leasing_bis","inventuramum","inventurvon","anschaffungsdatum","anschaffungswert","hoehe","breite","tiefe","nummer2","verplanen"), "wawi.tbl_betriebsmittel_betriebsmittelstatus" => array("betriebsmittelbetriebsmittelstatus_id","betriebsmittel_id","betriebsmittelstatus_kurzbz", "datum", "updateamum", "updatevon", "insertamum", "insertvon","anmerkung"), @@ -720,7 +720,7 @@ foreach ($tabellen AS $attribute) { $sql_attr=''; foreach($attribute AS $attr) - $sql_attr.=$attr.','; + $sql_attr.='"'.$attr.'",'; $sql_attr=substr($sql_attr, 0, -1); if (!@$db->db_query('SELECT '.$sql_attr.' FROM '.$tabs[$i].' LIMIT 1;')) From 3cf42c4545807066a4184df1d79b42934127ab3e Mon Sep 17 00:00:00 2001 From: Paolo Date: Mon, 25 Sep 2017 17:11:44 +0200 Subject: [PATCH 2/9] - Moved all the code related to authentication to AuthLib - Changed configuration files autoload.php and rest.php to use AuthLib - Added new method getCheckUserAuth to controller CheckUserAuth.php - Removed libraries/FHC_Auth.php - Removed models/CheckUserAuth_model.php - Removed include/AddonAuthentication.php --- application/config/autoload.php | 2 +- application/config/rest.php | 2 +- .../controllers/api/v1/CheckUserAuth.php | 62 ++++++++++++++--- application/libraries/FHC_Auth.php | 69 ------------------- application/models/CheckUserAuth_model.php | 18 ----- include/AddonAuthentication.php | 46 ------------- 6 files changed, 56 insertions(+), 143 deletions(-) delete mode 100644 application/libraries/FHC_Auth.php delete mode 100644 application/models/CheckUserAuth_model.php delete mode 100644 include/AddonAuthentication.php diff --git a/application/config/autoload.php b/application/config/autoload.php index 97eac47b8..76835381d 100755 --- a/application/config/autoload.php +++ b/application/config/autoload.php @@ -58,7 +58,7 @@ $autoload['packages'] = array(); | | $autoload['libraries'] = array('user_agent' => 'ua'); */ -$autoload['libraries'] = array('Session', 'FHC_Auth'); +$autoload['libraries'] = array('Session', 'AuthLib'); /* | ------------------------------------------------------------------- diff --git a/application/config/rest.php b/application/config/rest.php index ec2d6f5ad..4f3a78972 100644 --- a/application/config/rest.php +++ b/application/config/rest.php @@ -143,7 +143,7 @@ $config['auth_source'] = 'library'; | password for that username, even if it is hashed | */ -$config['auth_library_class'] = 'FHC_Auth'; +$config['auth_library_class'] = 'AuthLib'; // rest_auth is basic $config['auth_library_function'] = 'basicAuthentication'; diff --git a/application/controllers/api/v1/CheckUserAuth.php b/application/controllers/api/v1/CheckUserAuth.php index a793845a7..ac4195808 100644 --- a/application/controllers/api/v1/CheckUserAuth.php +++ b/application/controllers/api/v1/CheckUserAuth.php @@ -22,18 +22,23 @@ class CheckUserAuth extends APIv1_Controller public function __construct() { parent::__construct(); - $this->load->model('CheckUserAuth_model', 'CheckUserAuthModel'); + + // Loads the authentication library + $this->load->library('AuthLib'); } - + + /** + * Checks if username and password of a final user are valid + */ public function getCheckByUsernamePassword() { - $username = $this->get("username"); - $password = $this->get("password"); - + $username = $this->get('username'); + $password = $this->get('password'); + if (isset($username) && isset($password)) { - $result = $this->CheckUserAuthModel->checkByUsernamePassword($username, $password); - + $result = $this->authlib->CheckUserAuthByUsernamePassword($username, $password); + $this->response($result, REST_Controller::HTTP_OK); } else @@ -41,4 +46,45 @@ class CheckUserAuth extends APIv1_Controller $this->response(); } } -} \ No newline at end of file + + /** + * Checks if username and password of a final user are valid + * Returns all the keys with which is possible to obtain all the personal data about a final user + */ + public function getCheckUserAuth() + { + $code = $this->get('code'); + $email = $this->get('email'); + $username = $this->get('username'); + $password = $this->get('password'); + + $result = null; + $httpCode = null; + + // If username and password are given then check authentication using them + if (isset($username) && isset($password)) + { + $result = $this->authlib->CheckUserAuthByUsernamePassword($username, $password, true); + } + elseif (isset($code) || isset($email)) + { + // If code and email are given then check authentication using them + if (isset($code) && isset($email)) + { + $result = $this->authlib->CheckUserAuthByCodeEmail($code, $email); + } + else // otherwise check authentication using only code + { + $result = $this->authlib->CheckUserAuthByCode($code); + } + } + + // If is a success and contains data + if (hasData($result)) + { + $httpCode = REST_Controller::HTTP_OK; + } + + $this->response($result, $httpCode); + } +} diff --git a/application/libraries/FHC_Auth.php b/application/libraries/FHC_Auth.php deleted file mode 100644 index dd7bb09e2..000000000 --- a/application/libraries/FHC_Auth.php +++ /dev/null @@ -1,69 +0,0 @@ -checkpassword($username, $password)) - { - return true; - } - else - { - return false; - } - } - - /** - * - * TO BE UPDATED - * - * Get the md5 hashed password by the addon username - * - * @param string $username addon username - * @return string md5 hashed string - */ - public function digestAuthentication($username) - { - $aam = new AddonAuthentication(); - - return md5($aam->getPasswordByUsername($username)); - } -} diff --git a/application/models/CheckUserAuth_model.php b/application/models/CheckUserAuth_model.php deleted file mode 100644 index 503251268..000000000 --- a/application/models/CheckUserAuth_model.php +++ /dev/null @@ -1,18 +0,0 @@ -load->library('fhc_auth'); - } - - public function checkByUsernamePassword($username, $password) - { - return success($this->fhc_auth->checkpassword($username, $password)); - } -} \ No newline at end of file diff --git a/include/AddonAuthentication.php b/include/AddonAuthentication.php deleted file mode 100644 index a67ea260b..000000000 --- a/include/AddonAuthentication.php +++ /dev/null @@ -1,46 +0,0 @@ -db->query($sql, array($username)); - - if(!is_null($result) && $result->num_rows() > 0) - { - $password = $result->row()->password; - } - - return $password; - } -} \ No newline at end of file From ff233e3f169b6104273e9659b7b093857f2d87b3 Mon Sep 17 00:00:00 2001 From: Paolo Date: Mon, 25 Sep 2017 17:16:52 +0200 Subject: [PATCH 3/9] Added AuthLib --- application/libraries/AuthLib.php | 190 ++++++++++++++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 application/libraries/AuthLib.php diff --git a/application/libraries/AuthLib.php b/application/libraries/AuthLib.php new file mode 100644 index 000000000..80351cd45 --- /dev/null +++ b/application/libraries/AuthLib.php @@ -0,0 +1,190 @@ +ci =& get_instance(); + + // Loads helper message to manage returning messages + $this->ci->load->helper('Message'); + } + + /** + * Checks the authentication of an addon + * returns TRUE if valid, otherwise FALSE + */ + public function basicAuthentication($username, $password) + { + return $this->checkpassword($username, $password); + } + + /** + * Checks if the given username and password of a final user are valid + */ + public function CheckUserAuthByUsernamePassword($username, $password, $keys = false) + { + $result = error(false); + + if (isset($username) && isset($password)) + { + if ($this->checkpassword($username, $password) === true) + { + if ($keys === true) + { + $result = $this->_getFinalUserBasicDataByUID($username); + } + else + { + $result = success(true); + } + } + } + + return $result; + } + + /** + * Checks if the given code of a final user is valid + */ + public function CheckUserAuthByCode($code) + { + $result = error(false); + + // Load model PersonModel + $this->ci->load->model('person/person_model', 'PersonModel'); + + $person = $this->ci->PersonModel->loadWhere(array('zugangscode' => $code)); + + if (hasData($person)) + { + $result = $this->_getFinalUserBasicDataByPersonID($person->retval[0]->person_id); + } + + return $result; + } + + /** + * Checks if the given code and email of a final user are valid + */ + public function CheckUserAuthByCodeEmail($code, $email) + { + $result = error(false); + + // Load model PersonModel + $this->ci->load->model('person/person_model', 'PersonModel'); + + $person = $this->ci->PersonModel->getPersonKontaktByZugangscode($code, $email); + + if (hasData($person)) + { + $result = $this->_getFinalUserBasicDataByPersonID($person->retval[0]->person_id); + } + + return $result; + } + + /** + * Returns all the keys with which is possible to obtain personal data about a final user + * using the given username (uid) + */ + private function _getFinalUserBasicDataByUID($uid) + { + $finalUserBasicDataByUID = null; + + // Load model BenutzerModel + $this->ci->load->model('person/Benutzer_model', 'BenutzerModel'); + + $benutzer = $this->ci->BenutzerModel->load($uid); + + if (hasData($benutzer)) + { + $finalUserBasicDataByUID = $this->_getFinalUserBasicDataByPersonID($benutzer->retval[0]->person_id, $uid); + } + + return $finalUserBasicDataByUID; + } + + /** + * Returns all the keys with which is possible to obtain personal data about a final user + * using the given person_id. The uid is optional + */ + private function _getFinalUserBasicDataByPersonID($person_id, $uid = null) + { + $finalUserBasicDataByPersonID = new stdClass(); // returned object + + // Store the person_id and eventually all the uids and prestudent_ids related to this final user + $finalUserBasicDataByPersonID->person_id = $person_id; + $finalUserBasicDataByPersonID->uids = array(); + $finalUserBasicDataByPersonID->prestudent_ids = array(); + + // If the UID has not been given as a parameter + if ($uid != null) + { + $finalUserBasicDataByPersonID->uid[0] = $uid; + } + else + { + // Load model BenutzerModel + $this->ci->load->model('person/Benutzer_model', 'BenutzerModel'); + + // Loads all the benutzer whith that person_id + $benutzer = $this->ci->BenutzerModel->loadWhere(array('person_id' => $person_id)); + + if (hasData($benutzer)) // store all the uids + { + foreach ($benutzer->retval as $rownum => $rowdata) + { + $finalUserBasicDataByPersonID->uids[$rownum] = $rowdata->uid; + } + } + } + + // Load model PrestudentModel + $this->ci->load->model('crm/Prestudent_model', 'PrestudentModel'); + + // Loads all the prestudent whith that person_id + $prestudent = $this->ci->PrestudentModel->loadWhere(array('person_id' => $person_id)); + + if (hasData($prestudent)) // store all the prestudent_ids + { + foreach ($prestudent->retval as $rownum => $rowdata) + { + $finalUserBasicDataByPersonID->prestudent_ids[$rownum] = $rowdata->prestudent_id; + } + } + + return success($finalUserBasicDataByPersonID); + } +} From 2ba2c628e8d74461102cb850b70fc49c7e7f8a6e Mon Sep 17 00:00:00 2001 From: Andreas Oesterreicher Date: Tue, 26 Sep 2017 09:19:34 +0200 Subject: [PATCH 4/9] Problem behoben wodurch die Studierenden im FAS nicht angezeigt wurden wenn nur eine Anzeigesprache definiert ist --- include/pgsql.class.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/pgsql.class.php b/include/pgsql.class.php index 81c444dfd..52ac9b4f8 100644 --- a/include/pgsql.class.php +++ b/include/pgsql.class.php @@ -406,7 +406,8 @@ class basis_db extends db foreach ($matches as $mk => $match) { - $values[$languages[$mk+1]] = $match[3] != '' ? stripcslashes($match[3]) : (strtolower($match[2]) == 'null' ? null : $match[2]); + if(isset($languages[$mk+1])) + $values[$languages[$mk+1]] = $match[3] != '' ? stripcslashes($match[3]) : (strtolower($match[2]) == 'null' ? null : $match[2]); } return $values; } From 3ed42cd4ed692be71034bb9b1298d5dcbf4fefa2 Mon Sep 17 00:00:00 2001 From: Andreas Oesterreicher Date: Tue, 26 Sep 2017 17:13:22 +0200 Subject: [PATCH 5/9] =?UTF-8?q?Eigener=20Verteiler=20f=C3=BCr=20BIF=20Dual?= =?UTF-8?q?=20Lektoren?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- system/mlists/mlists_generate.php | 168 ++++++++++++++++-------------- 1 file changed, 91 insertions(+), 77 deletions(-) diff --git a/system/mlists/mlists_generate.php b/system/mlists/mlists_generate.php index 7ce919eef..7059e2e4b 100644 --- a/system/mlists/mlists_generate.php +++ b/system/mlists/mlists_generate.php @@ -76,55 +76,55 @@ $error_msg=''; $qry = "UPDATE public.tbl_gruppe SET generiert=true WHERE UPPER(gruppe_kurzbz)=UPPER('".addslashes($gruppe)."')"; $db->db_query($qry); } - + /** * Einfache Verteiler, deren Erstellung ohne Schleifen-Logik moeglich ist, werden ueber dieses Array erstellt * Benoetigt werden die 3 Attribute: * $verteilerArray['name_des_verteilers']['bezeichnung'] = 'Bezeichnung des Verteilers (32 Zeichen)'; * $verteilerArray['name_des_verteilers']['beschreibung'] = 'Beschreibung des Verteilers (Anzeige im CIS)(128 Zeichen)'; * $verteilerArray['name_des_verteilers']['sql'] = 'UIDs, die im Verteiler enthalten sein sollen (kein Semikolon am Ende)'; - * + * * Die Verteiler werden dann alle gleich erstellt: * - Pruefen, ob Gruppe existiert, wenn nicht, anlegen mit Default-Werten * - Gruppe auf generiert setzen * - UIDs loeschen, die nicht mehr in den Verteiler gehoeren * - UIDs hinzufuegen, die im Verteiler fehlen */ - + $verteilerArray = array(); - + // Sql-Schema: SELECT foo AS uid FROM bar WHERE foobar - + //Aktive MitarbeiterInnen mit Personalnummer > 0 $verteilerArray['tw_ma']['bezeichnung'] = 'Alle aktiven MitarbeiterInnen'; $verteilerArray['tw_ma']['beschreibung'] = 'Alle aktiven MitarbeiterInnen'; - $verteilerArray['tw_ma']['sql'] = " SELECT DISTINCT mitarbeiter_uid AS uid - FROM public.tbl_mitarbeiter - JOIN public.tbl_benutzer ON (mitarbeiter_uid=uid) - WHERE aktiv + $verteilerArray['tw_ma']['sql'] = " SELECT DISTINCT mitarbeiter_uid AS uid + FROM public.tbl_mitarbeiter + JOIN public.tbl_benutzer ON (mitarbeiter_uid=uid) + WHERE aktiv AND personalnummer >= 0"; //Aktive weibliche MitarbeiterInnen mit Personalnummer > 0 $verteilerArray['tw_ma_w']['bezeichnung'] = 'Weibliche Mitarbeiterinnen'; $verteilerArray['tw_ma_w']['beschreibung'] = 'Weibliche Mitarbeiterinnen'; - $verteilerArray['tw_ma_w']['sql'] = " SELECT DISTINCT mitarbeiter_uid AS uid - FROM public.tbl_mitarbeiter - JOIN public.tbl_benutzer ON (mitarbeiter_uid=uid) - JOIN public.tbl_person USING(person_id) - WHERE tbl_benutzer.aktiv - AND geschlecht='w' + $verteilerArray['tw_ma_w']['sql'] = " SELECT DISTINCT mitarbeiter_uid AS uid + FROM public.tbl_mitarbeiter + JOIN public.tbl_benutzer ON (mitarbeiter_uid=uid) + JOIN public.tbl_person USING(person_id) + WHERE tbl_benutzer.aktiv + AND geschlecht='w' AND personalnummer >=0"; //Alle aktiven MitarbeiterInnen mit Attribut lektor=true $verteilerArray['tw_lkt']['bezeichnung'] = 'Alle LektorInnen'; $verteilerArray['tw_lkt']['beschreibung'] = 'Alle LektorInnen an der FH Technikum Wien'; - $verteilerArray['tw_lkt']['sql'] = " SELECT mitarbeiter_uid AS uid - FROM public.tbl_mitarbeiter - JOIN public.tbl_benutzer ON (mitarbeiter_uid=uid) - WHERE lektor + $verteilerArray['tw_lkt']['sql'] = " SELECT DISTINCT mitarbeiter_uid AS uid + FROM public.tbl_mitarbeiter + JOIN public.tbl_benutzer ON (mitarbeiter_uid=uid) + WHERE lektor AND aktiv"; //MitarbeiterInnen mit gueltiger Funktion "ass" (assistenz) $verteilerArray['tw_sek']['bezeichnung'] = 'Alle Sekretariate'; $verteilerArray['tw_sek']['beschreibung'] = 'Alle Sekretariate an der FH Technikum Wien'; - $verteilerArray['tw_sek']['sql'] = " SELECT mitarbeiter_uid AS uid + $verteilerArray['tw_sek']['sql'] = " SELECT DISTINCT mitarbeiter_uid AS uid FROM public.tbl_mitarbeiter JOIN public.tbl_benutzer ON (mitarbeiter_uid=uid) @@ -147,7 +147,7 @@ $error_msg=''; AND (tbl_benutzerfunktion.funktion_kurzbz='Leitung' OR funktion_kurzbz='gLtg' OR funktion_kurzbz='stvLtg') 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 mitarbeiter_uid NOT LIKE '\\\\_%' + AND mitarbeiter_uid NOT LIKE '\\\\_%' AND tbl_studiengang.aktiv=true"; //Aktive MitarbeiterInnen mit gueltiger Funktion "Leitung", "gLtg" oder "stvLtg" in aktiven Bachelor- oder Master-Studiengaengen mit Kennzahl>0 und Kennzahl<10000 $verteilerArray['tw_stgl_bama']['bezeichnung'] = 'Studiengangsleitung BAMA'; @@ -171,36 +171,36 @@ $error_msg=''; //Alle aktiven MitarbeiterInnen mit Attribut fixangestellt=true $verteilerArray['tw_fix']['bezeichnung'] = 'Alle Fix-Angestellten'; $verteilerArray['tw_fix']['beschreibung'] = 'Alle Fix-Angestellten an der FH Technikum Wien'; - $verteilerArray['tw_fix']['sql'] = " SELECT mitarbeiter_uid AS uid - FROM public.tbl_mitarbeiter - JOIN public.tbl_benutzer ON(uid=mitarbeiter_uid) - WHERE fixangestellt - AND aktiv + $verteilerArray['tw_fix']['sql'] = " SELECT DISTINCT mitarbeiter_uid AS uid + FROM public.tbl_mitarbeiter + JOIN public.tbl_benutzer ON(uid=mitarbeiter_uid) + WHERE fixangestellt + AND aktiv AND mitarbeiter_uid NOT LIKE '\\\\_%'"; //Alle aktiven MitarbeiterInnen mit Attribut fixangestellt=true und lektor=true $verteilerArray['tw_fix_lkt']['bezeichnung'] = 'Alle fixangestellten LektorInnen'; $verteilerArray['tw_fix_lkt']['beschreibung'] = 'Alle fixangestellten LektorInnen an der FH Technikum Wien'; - $verteilerArray['tw_fix_lkt']['sql'] = " SELECT mitarbeiter_uid AS uid - FROM public.tbl_mitarbeiter - JOIN public.tbl_benutzer ON(uid=mitarbeiter_uid) - WHERE fixangestellt - AND lektor - AND aktiv + $verteilerArray['tw_fix_lkt']['sql'] = " SELECT DISTINCT mitarbeiter_uid AS uid + FROM public.tbl_mitarbeiter + JOIN public.tbl_benutzer ON(uid=mitarbeiter_uid) + WHERE fixangestellt + AND lektor + AND aktiv AND mitarbeiter_uid NOT LIKE '\\\\_%'"; //Alle aktiven MitarbeiterInnen mit Attribut fixangestellt=false und lektor=true $verteilerArray['tw_ext_lkt']['bezeichnung'] = 'Externe LektorInnen'; $verteilerArray['tw_ext_lkt']['beschreibung'] = 'Alle externen LektorInnen an der FH Technikum Wien'; - $verteilerArray['tw_ext_lkt']['sql'] = " SELECT mitarbeiter_uid AS uid - FROM public.tbl_mitarbeiter - JOIN public.tbl_benutzer ON(uid=mitarbeiter_uid) - WHERE NOT fixangestellt - AND lektor - AND aktiv + $verteilerArray['tw_ext_lkt']['sql'] = " SELECT DISTINCT mitarbeiter_uid AS uid + FROM public.tbl_mitarbeiter + JOIN public.tbl_benutzer ON(uid=mitarbeiter_uid) + WHERE NOT fixangestellt + AND lektor + AND aktiv AND mitarbeiter_uid NOT LIKE '\\\\_%'"; //Hochschulvertretung. Studierende mit gueltiger Funktion 'hsv'. $verteilerArray['tw_hsv']['bezeichnung'] = 'Hochschulvertretung FHTW'; $verteilerArray['tw_hsv']['beschreibung'] = 'Hochschulvertretung FHTW'; - $verteilerArray['tw_hsv']['sql'] = " SELECT uid + $verteilerArray['tw_hsv']['sql'] = " SELECT DISTINCT uid FROM public.tbl_benutzerfunktion JOIN public.tbl_benutzer USING(uid) @@ -212,7 +212,7 @@ $error_msg=''; //Studienvertretung. Studierende mit gueltiger Funktion 'stdv'. $verteilerArray['tw_stdv']['bezeichnung'] = 'Alle StudierendenvertreterInnen'; $verteilerArray['tw_stdv']['beschreibung'] = 'Alle StudierendenvertreterInnen'; - $verteilerArray['tw_stdv']['sql'] = " SELECT uid + $verteilerArray['tw_stdv']['sql'] = " SELECT DISTINCT uid FROM public.tbl_benutzerfunktion JOIN public.tbl_benutzer USING(uid) @@ -224,7 +224,7 @@ $error_msg=''; //Jahrgangsvertretung. Studierende mit gueltiger Funktion 'jgv'. $verteilerArray['tw_jgv']['bezeichnung'] = 'Alle JahrgangsvertreterInnen'; $verteilerArray['tw_jgv']['beschreibung'] = 'Alle JahrgangsvertreterInnen'; - $verteilerArray['tw_jgv']['sql'] = " SELECT uid + $verteilerArray['tw_jgv']['sql'] = " SELECT DISTINCT uid FROM public.tbl_benutzerfunktion JOIN public.tbl_benutzer USING(uid) @@ -233,12 +233,12 @@ $error_msg=''; AND tbl_benutzer.aktiv 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())"; - //Alle aktiven Studierenden + //Alle aktiven Studierenden //Abbrecher bleiben noch 3 Wochen im Verteiler andere inaktive noch fuer 20 Wochen //damit im CIS die Menuepunkte fuer Studierende richtig angezeigt werden $verteilerArray['tw_std']['bezeichnung'] = 'Alle Studierenden'; $verteilerArray['tw_std']['beschreibung'] = 'Alle ordentlichen, außerordentlichen und fiktiven Studierenden'; - $verteilerArray['tw_std']['sql'] = " SELECT uid + $verteilerArray['tw_std']['sql'] = " SELECT DISTINCT uid FROM campus.vw_student WHERE ( aktiv @@ -251,7 +251,7 @@ $error_msg=''; //Abbrecher bleiben noch 3 Wochen im Verteiler andere inaktive noch fuer 20 Wochen $verteilerArray['tw_std_m']['bezeichnung'] = 'Alle männlichen Studenten'; $verteilerArray['tw_std_m']['beschreibung'] = 'Alle männlichen Studenten an der FHTW'; - $verteilerArray['tw_std_m']['sql'] = " SELECT uid + $verteilerArray['tw_std_m']['sql'] = " SELECT DISTINCT uid FROM campus.vw_student WHERE ( aktiv @@ -265,7 +265,7 @@ $error_msg=''; //Abbrecher bleiben noch 3 Wochen im Verteiler andere inaktive noch fuer 20 Wochen $verteilerArray['tw_std_w']['bezeichnung'] = 'Alle weiblichen Studentinnen'; $verteilerArray['tw_std_w']['beschreibung'] = 'Alle weiblichen Studentinnen an der FHTW'; - $verteilerArray['tw_std_w']['sql'] = " SELECT uid + $verteilerArray['tw_std_w']['sql'] = " SELECT DISTINCT uid FROM campus.vw_student WHERE ( aktiv @@ -279,7 +279,7 @@ $error_msg=''; //Absolventen bleiben noch 20 Wochen im Verteiler $verteilerArray['tw_bama']['bezeichnung'] = 'Alle BaMa-Studierenden'; $verteilerArray['tw_bama']['beschreibung'] = 'Alle ordentlichen Bachelor- und Master-Studierenden'; - $verteilerArray['tw_bama']['sql'] = " SELECT uid + $verteilerArray['tw_bama']['sql'] = " SELECT DISTINCT uid FROM campus.vw_student WHERE ( aktiv @@ -287,7 +287,7 @@ $error_msg=''; (aktiv=false AND get_rolle_prestudent(vw_student.prestudent_id, null)='Absolvent' AND updateaktivam>now()-'20 weeks'::interval) AND studiengang_kz IN (SELECT studiengang_kz FROM public.tbl_studiengang WHERE typ IN ('b','m')) )"; - //Moodle-LektorenVerteiler + //Moodle-LektorenVerteiler $verteilerArray['moodle_lkt']['bezeichnung'] = 'Moodle Lektoren'; $verteilerArray['moodle_lkt']['beschreibung'] = 'Moodle Lektoren'; $verteilerArray['moodle_lkt']['sql'] = " SELECT distinct mitarbeiter_uid AS uid @@ -310,7 +310,7 @@ $error_msg=''; JOIN public.tbl_benutzer ON (mitarbeiter_uid=uid) JOIN public.tbl_benutzerfunktion USING(uid) JOIN public.tbl_organisationseinheit USING(oe_kurzbz) - WHERE tbl_benutzer.aktiv AND (funktion_kurzbz='Leitung') + WHERE tbl_benutzer.aktiv AND (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 tbl_organisationseinheit.organisationseinheittyp_kurzbz='Abteilung'"; @@ -387,10 +387,10 @@ $error_msg=''; //Alle aktiven MitarbeiterInnen mit Funktion Leitung oder stvLeitung oder gfLtg $verteilerArray['tw_leitung']['bezeichnung'] = 'Alle MA mit Leitungsfunktion'; $verteilerArray['tw_leitung']['beschreibung'] = 'Alle MA mit Funktion Leitung, stellvertretende Leitung oder geschäftsführende Leitung'; - $verteilerArray['tw_leitung']['sql'] = " SELECT DISTINCT uid - FROM - public.tbl_person - JOIN public.tbl_benutzer USING (person_id) + $verteilerArray['tw_leitung']['sql'] = " SELECT DISTINCT uid + FROM + public.tbl_person + JOIN public.tbl_benutzer USING (person_id) JOIN tbl_benutzerfunktion USING (uid) WHERE funktion_kurzbz IN('Leitung','stvLtg','gLtg') AND tbl_benutzer.aktiv @@ -412,7 +412,21 @@ $error_msg=''; (vw_student.aktiv=false AND get_rolle_prestudent(vw_student.prestudent_id, null)!='Abbrecher' AND vw_student.updateaktivam>now()-'20 weeks'::interval)) AND tbl_organisationseinheit.oe_parent_kurzbz='lehrgang' AND organisationseinheittyp_kurzbz='Lehrgang'"; - + //Alle aktiven Lektoren von BIF DUA + $verteilerArray['bif_lkt_dua']['bezeichnung'] = 'Alle Lektoren von BIF DUAL'; + $verteilerArray['bif_lkt_dua']['beschreibung'] = 'Alle Lektoren von BIF DUAL'; + $verteilerArray['bif_lkt_dua']['sql'] = "SELECT distinct mitarbeiter_uid as uid + FROM + lehre.tbl_lehrveranstaltung + JOIN lehre.tbl_lehreinheit USING(lehrveranstaltung_id) + JOIN lehre.tbl_lehreinheitmitarbeiter USING(lehreinheit_id) + WHERE + (studiensemester_kurzbz='$studiensemester' OR + studiensemester_kurzbz='$stsem2') + AND mitarbeiter_uid NOT LIKE '\\\\_%' + AND tbl_lehrveranstaltung.studiengang_kz=257 + AND tbl_lehrveranstaltung.orgform_kurzbz='DUA' + "; $bezeichnung = ''; $beschreibung = ''; foreach ($verteilerArray AS $listname => $data) @@ -423,14 +437,14 @@ $error_msg=''; { if (strlen($data['bezeichnung']) > 32) $bezeichnung = substr($data['bezeichnung'], 0, 32); - else + else $bezeichnung = $data['bezeichnung']; - + if (strlen($data['beschreibung']) > 128) $beschreibung = substr($data['beschreibung'], 0, 128); else $beschreibung = $data['beschreibung']; - + $grp->gruppe_kurzbz = $listname; $grp->studiengang_kz = '0'; $grp->semester = '0'; @@ -447,7 +461,7 @@ $error_msg=''; $grp->aufnahmegruppe = false; $grp->insertamum = date('Y-m-d H:i:s'); $grp->insertvon = 'mlists_generate'; - + if(!$grp->save(true, true)) { $error_msg .= 'Fehler beim Anlegen der Gruppe '.$listname.': '.$grp->errormsg; @@ -464,36 +478,36 @@ $error_msg=''; if (substr($data['sql'], -1) == ';') $data['sql'] = substr($data['sql'], 0, strlen($data['sql'])-1); - $qry_delete = " DELETE FROM - public.tbl_benutzergruppe - WHERE - UPPER(gruppe_kurzbz)=UPPER(".$db->db_add_param($listname).") - AND + $qry_delete = " DELETE FROM + public.tbl_benutzergruppe + WHERE + UPPER(gruppe_kurzbz)=UPPER(".$db->db_add_param($listname).") + AND uid NOT IN (".$data['sql'].");"; if(!($result = $db->db_query($qry_delete))) $error_msg .= $db->db_last_error().$qry_delete.'

'; - + echo strtoupper($listname).' '.$db->db_affected_rows($result).' Einträge gelöscht
'; - + flush(); - $qry_insert = " WITH + $qry_insert = " WITH uids AS (".$data['sql'].") - INSERT INTO - public.tbl_benutzergruppe(uid, gruppe_kurzbz, insertamum, insertvon) - SELECT - *, UPPER(".$db->db_add_param($listname)."), now(), 'mlists_generate' - FROM - uids - WHERE + INSERT INTO + public.tbl_benutzergruppe(uid, gruppe_kurzbz, insertamum, insertvon) + SELECT + *, UPPER(".$db->db_add_param($listname)."), now(), 'mlists_generate' + FROM + uids + WHERE uid NOT IN (SELECT uid FROM public.tbl_benutzergruppe WHERE UPPER(gruppe_kurzbz)=UPPER(".$db->db_add_param($listname)."));"; if(!($result = $db->db_query($qry_insert))) $error_msg .= $db->db_last_error().$qry_insert.'

'; - + echo strtoupper($listname).' '.$db->db_affected_rows($result).' Einträge hinzugefügt

'; - + flush(); } @@ -501,7 +515,7 @@ $error_msg=''; // Erstellen der Mailinglisten mit Schleifen-Logik // ************************************************************** - + // ************************************************************** // Lektoren-Verteiler innerhalb der Studiengaenge abgleichen // Lektoren holen die nicht mehr in den Verteiler gehoeren @@ -998,7 +1012,7 @@ $error_msg=''; } } echo '
'; - + // ************************************************************** // Studierendenverteiler fuer die einzelnen Organisationseinheiten bei Mischformen echo '
Abgleich der Mischformverteiler'; @@ -1103,7 +1117,7 @@ $error_msg=''; $error_msg.=$db->db_last_error().' '.$sql_query; echo $error_msg; - + // Send Mail to admin if error occurs if ($error_msg != '') { From 210a05bc18042b8eb62c9826334e4c74b6c26a80 Mon Sep 17 00:00:00 2001 From: Andreas Oesterreicher Date: Tue, 26 Sep 2017 18:30:46 +0200 Subject: [PATCH 6/9] =?UTF-8?q?Anpassung=20an=20BIS-Verordnung=20Version?= =?UTF-8?q?=206.5:=20Bei=20der=20Meldung=20von=20Studierenden=20vom=20Stud?= =?UTF-8?q?Typ=20=3D=20E=20(externe=20Studierende=20von=20gemeinsamen=20or?= =?UTF-8?q?dentlichen=20Studien)=20sind=20die=20Elemente=20=E2=80=9EStudSt?= =?UTF-8?q?atusCode=E2=80=9C=20und=20=E2=80=9EAusbildungssemester=E2=80=9C?= =?UTF-8?q?=20im=20Container=20=E2=80=9EStudentIn=E2=80=9C=20nicht=20(mehr?= =?UTF-8?q?)=20zu=20melden=20=E2=80=93=20ebenso=20wie=20das=20Element=20?= =?UTF-8?q?=E2=80=9EBeginnDatum=E2=80=9C.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vilesci/bis/studentenmeldung.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/vilesci/bis/studentenmeldung.php b/vilesci/bis/studentenmeldung.php index 5b194fc8e..5222093d0 100644 --- a/vilesci/bis/studentenmeldung.php +++ b/vilesci/bis/studentenmeldung.php @@ -803,6 +803,7 @@ function GenerateXMLStudentBlock($row) AND studiensemester_kurzbz=".$db->db_add_param($aktstatus_stsem)." ORDER BY tbl_mobilitaet.insertamum DESC limit 1;"; + $studtyp = ''; if($resultgs = $db->db_query($qrygs)) { while($rowgs = $db->db_fetch_object($resultgs)) @@ -1021,7 +1022,7 @@ function GenerateXMLStudentBlock($row) } } - if($beginndatum!='' && !$ausserordentlich) + if($beginndatum!='' && !$ausserordentlich && $studtyp!='E') { $datei.=" ".date("dmY", $datumobj->mktime_fromdate($beginndatum)).""; @@ -1037,14 +1038,17 @@ function GenerateXMLStudentBlock($row) Incoming Ausserordentlich Studierender */ - if($aktstatus!='Incoming' && !$ausserordentlich) + if($aktstatus!='Incoming' && !$ausserordentlich && $studtyp!='E') { $datei.=" ".$sem.""; } - $datei.=" - ".$status.""; + if($studtyp!='E') + { + $datei.=" + ".$status.""; + } if($orgform_code_array[$storgform]!=1 && !$ausserordentlich) // Wenn nicht Vollzeit und nicht Ausserordentlich { From 3bd4c50f8b41d898b1d7b578627894164f74f615 Mon Sep 17 00:00:00 2001 From: Andreas Oesterreicher Date: Tue, 26 Sep 2017 18:44:24 +0200 Subject: [PATCH 7/9] Problem bei der Sortierung von Aufnahmeterminen nach Datum behoben --- content/student/aufnahmetermine.xul.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/content/student/aufnahmetermine.xul.php b/content/student/aufnahmetermine.xul.php index ef5fcd387..62e273da2 100644 --- a/content/student/aufnahmetermine.xul.php +++ b/content/student/aufnahmetermine.xul.php @@ -139,7 +139,7 @@ echo ']>