From 8033c12665e79aa569c27cd6a3025fc32a523308 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 21 Oct 2021 13:03:16 +0200 Subject: [PATCH 001/122] Added / Adapted tables for Zeitwunsch Gueltigkeit pro Studiensemester - Added table campus.tbl_zeitwunsch_gueltigkeit and migrated initial data - Added column zeitwunsch_id (as new primary key) and zeitwunsch_gueltigkeit_id to campus.tbl_zeitwunsch - Initially copied all Zeitwunsch entries -- The basic entries are joined with Zeitwunsch Gueltigkeit for actual Studiensemester -- The copied entries are joined with Zeitwunsch Gueltigkeit for next Studiensemester This is necessary because the actual Zeitwunschplan represent for some lectors the plan for the actual semester, and for some - who have already planned forward - for the next semester. --- system/dbupdate_3.3.php | 161 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 160 insertions(+), 1 deletion(-) diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index ffdd28bc3..a454ada77 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -5493,6 +5493,164 @@ if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berecht } } +// Add table campus.tbl_zeitwunsch_gueltigkeit and migrate initial data +if(!$result = @$db->db_query("SELECT 1 FROM campus.tbl_zeitwunsch_gueltigkeit LIMIT 1;")) +{ + $qry = " + CREATE TABLE campus.tbl_zeitwunsch_gueltigkeit + ( + zeitwunsch_gueltigkeit_id INTEGER NOT NULL, + mitarbeiter_uid CHARACTER VARYING(32) NOT NULL, + von DATE, + bis DATE, + insertamum TIMESTAMP WITHOUT TIME ZONE, + insertvon CHARACTER VARYING(32), + updateamum TIMESTAMP WITHOUT TIME ZONE, + updatevon CHARACTER VARYING(32) + ); + + CREATE SEQUENCE campus.seq_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id + INCREMENT BY 1 + NO MAXVALUE + NO MINVALUE + CACHE 1; + + -- Add Primary Key + ALTER TABLE campus.tbl_zeitwunsch_gueltigkeit ADD CONSTRAINT pk_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id PRIMARY KEY (zeitwunsch_gueltigkeit_id); + ALTER TABLE campus.tbl_zeitwunsch_gueltigkeit ALTER COLUMN zeitwunsch_gueltigkeit_id SET DEFAULT nextval('campus.seq_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id'); + + -- Add Permissions + GRANT SELECT, UPDATE ON SEQUENCE campus.seq_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id TO vilesci; + + GRANT SELECT, INSERT, UPDATE, DELETE ON campus.tbl_zeitwunsch_gueltigkeit TO vilesci; + GRANT SELECT, INSERT, UPDATE ON campus.tbl_zeitwunsch_gueltigkeit TO web; + + -- Initial data migration + INSERT INTO campus.tbl_zeitwunsch_gueltigkeit + ( + mitarbeiter_uid, + von, + bis, + insertamum, + insertvon, + updateamum, + updatevon + ) + SELECT * FROM + ( + -- Unique Mitarbeiter from Zeitwunsch Tabelle, Start and End of actual Studiensemester + SELECT DISTINCT mitarbeiter_uid, + (SELECT start FROM public.tbl_studiensemester WHERE start <= NOW() AND ende >= NOW()), + (SELECT ende FROM public.tbl_studiensemester WHERE start <= NOW() AND ende >= NOW()), + NOW(), + 'system', + NOW(), + 'system' + FROM campus.tbl_zeitwunsch + + UNION + + -- Unique Mitarbeiter from Zeitwunsch Tabelle, Start of next Studiensemester and open end + SELECT DISTINCT mitarbeiter_uid, + (SELECT start FROM public.tbl_studiensemester WHERE ende > NOW() LIMIT 1), + NULL::DATE AS \"ende\", + NOW(), + 'system', + NOW(), + 'system' + FROM campus.tbl_zeitwunsch + ORDER BY start, mitarbeiter_uid + ) AS init_data + "; + + if(!$db->db_query($qry)) + echo 'campus.tbl_zeitwunsch_gueltigkeit: '.$db->db_last_error().'
'; + else + echo 'campus.tbl_zeitwunsch_gueltigkeit: Tabelle hinzugefuegt
'; +} + +// Add column zeitwunsch_id (as new primary key) and zeitwunsch_gueltigkeit_id to campus.tbl_zeitwunsch +if (!$result = @$db->db_query("SELECT zeitwunsch_id FROM campus.tbl_zeitwunsch LIMIT 1")) +{ + $qry = " + ALTER TABLE campus.tbl_zeitwunsch DROP CONSTRAINT IF EXISTS pk_tbl_zeitwunsch; -- Drop combined pk stunde/mitarbeiter_uid/tag + + -- Add primary key and foreign key + ALTER TABLE campus.tbl_zeitwunsch ADD COLUMN zeitwunsch_id INTEGER; + ALTER TABLE campus.tbl_zeitwunsch ADD COLUMN zeitwunsch_gueltigkeit_id INTEGER; + + -- Add comments + COMMENT ON COLUMN campus.tbl_zeitwunsch.zeitwunsch_gueltigkeit_id IS 'Ordnet die Zeitwuensche einer Gueltigkeitsdauer von-bis zu'; + COMMENT ON COLUMN campus.tbl_zeitwunsch.mitarbeiter_uid IS 'DEPRECATED'; + + CREATE SEQUENCE campus.seq_zeitwunsch_zeitwunsch_id + INCREMENT BY 1 + NO MAXVALUE + NO MINVALUE + CACHE 1; + + ALTER TABLE campus.tbl_zeitwunsch ALTER COLUMN zeitwunsch_id SET DEFAULT nextval('campus.seq_zeitwunsch_zeitwunsch_id'); + UPDATE campus.tbl_zeitwunsch SET zeitwunsch_id = nextval('campus.seq_zeitwunsch_zeitwunsch_id'); + + ALTER TABLE campus.tbl_zeitwunsch ADD CONSTRAINT pk_zeitwunsch_zeitwunsch_id PRIMARY KEY (zeitwunsch_id); + ALTER TABLE campus.tbl_zeitwunsch ADD CONSTRAINT fk_zeitwunsch_zeitwunsch_gueltigkeit_id FOREIGN KEY (zeitwunsch_gueltigkeit_id) REFERENCES campus.tbl_zeitwunsch_gueltigkeit(zeitwunsch_gueltigkeit_id) ON DELETE RESTRICT ON UPDATE CASCADE; + + -- Set initial zeitwunsch_gueltigkeit_id values to Gueltigkeitszeitraum of actual Studiensemester + UPDATE campus.tbl_zeitwunsch + SET zeitwunsch_gueltigkeit_id = ( + SELECT zeitwunsch_gueltigkeit_id + FROM campus.tbl_zeitwunsch_gueltigkeit zwg + WHERE tbl_zeitwunsch.mitarbeiter_uid = zwg.mitarbeiter_uid + AND (zwg.von <= NOW() AND zwg.bis >= NOW()) + ); + + -- Duplicate existing data and set initial zeitwunsch_gueltigkeit_id values to Gueltigkeitszeitraum of next Studiensemester + INSERT INTO campus.tbl_zeitwunsch + ( + stunde, + mitarbeiter_uid, + tag, + gewicht, + updateamum, + updatevon, + insertamum, + insertvon, + zeitwunsch_gueltigkeit_id + ) + SELECT * FROM + ( + SELECT + stunde, + mitarbeiter_uid, + tag, + gewicht, + NOW(), + 'system', + NOW(), + 'system', + ( + SELECT zeitwunsch_gueltigkeit_id + FROM campus.tbl_zeitwunsch_gueltigkeit zwg + WHERE campus.tbl_zeitwunsch.mitarbeiter_uid = zwg.mitarbeiter_uid + AND bis IS NULL + ) AS \"zeitwunsch_gueltigkeit_id\" + FROM campus.tbl_zeitwunsch + ) AS basic_zeitwunsch_data; + + -- Set primary key and foreign key NOT NULL + ALTER TABLE campus.tbl_zeitwunsch ALTER COLUMN zeitwunsch_id SET NOT NULL; + ALTER TABLE campus.tbl_zeitwunsch ALTER COLUMN zeitwunsch_gueltigkeit_id SET NOT NULL; + + -- Set permissions + GRANT SELECT, UPDATE ON SEQUENCE campus.seq_zeitwunsch_zeitwunsch_id TO vilesci; + "; + + if(!$db->db_query($qry)) + echo 'campus.tbl_zeitwunsch: '.$db->db_last_error().'
'; + else + echo '
campus.tbl_zeitwunsch: Neue Spalte zeitwunsch_id hinzugefuegt.'; +} + // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; @@ -5585,7 +5743,8 @@ $tabellen=array( "campus.tbl_zeitaufzeichnung_gd" => array("zeitaufzeichnung_gd_id","uid","studiensemester_kurzbz","selbstverwaltete_pause","insertamum","insertvon","updateamum","updatevon"), "campus.tbl_zeitsperre" => array("zeitsperre_id","zeitsperretyp_kurzbz","mitarbeiter_uid","bezeichnung","vondatum","vonstunde","bisdatum","bisstunde","vertretung_uid","updateamum","updatevon","insertamum","insertvon","erreichbarkeit_kurzbz","freigabeamum","freigabevon"), "campus.tbl_zeitsperretyp" => array("zeitsperretyp_kurzbz","beschreibung","farbe"), - "campus.tbl_zeitwunsch" => array("stunde","mitarbeiter_uid","tag","gewicht","updateamum","updatevon","insertamum","insertvon"), + "campus.tbl_zeitwunsch" => array("stunde","mitarbeiter_uid","tag","gewicht","updateamum","updatevon","insertamum","insertvon", "zeitwunsch_id", "zeitwunsch_gueltigkeit_id"), + "campus.tbl_zeitwunsch_gueltigkeit" => array("zeitwunsch_gueltigkeit_id","mitarbeiter_uid","von","bis","insertamum","insertvon", "updateamum","updatevon"), "fue.tbl_aktivitaet" => array("aktivitaet_kurzbz","beschreibung","sort"), "fue.tbl_aufwandstyp" => array("aufwandstyp_kurzbz","bezeichnung"), "fue.tbl_projekt" => array("projekt_kurzbz","nummer","titel","beschreibung","beginn","ende","oe_kurzbz","budget","farbe","aufwandstyp_kurzbz","ressource_id","anzahl_ma","aufwand_pt","projekt_id","projekttyp_kurzbz"), From 8cb8c4da6485e1625b1c0648f14d5101e0a9ca20 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Thu, 4 Nov 2021 10:27:21 +0100 Subject: [PATCH 002/122] Erweiterung Funktion checkKontostand() --- include/konto.class.php | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/include/konto.class.php b/include/konto.class.php index 09afa5303..f5de5b439 100644 --- a/include/konto.class.php +++ b/include/konto.class.php @@ -553,31 +553,38 @@ class konto extends basis_db /** * Überprüft, ob das Konto einer Person ausgeglichen ist, oder ob noch Zahlungen offen sind - * @param $person_id ID der Person, die geprüft werden soll - * @return true wenn ausgeglichen, false wenn Zahlungen offen, false mit errormsg wenn ein Fehler aufgetreten ist + * @param int $person_id ID der Person, die geprüft werden soll. + * @param bool $aktuelleBuchungenOnly True, wenn nur Zahlungen mit Buchungsdatum <= aktuelles Datum berücksichtigt werden sollen. + * @return boolean true wenn ausgeglichen, false wenn Zahlungen offen, false mit errormsg wenn ein Fehler aufgetreten ist */ - public function checkKontostand($person_id) + public function checkKontostand($person_id, $aktuelleBuchungenOnly = false) { - $qry="SELECT sum(betrag) as summe FROM public.tbl_konto WHERE person_id=".$this->db_add_param($person_id); - if($result=$this->db_query($qry)) + $qry = "SELECT sum(betrag) as summe + FROM public.tbl_konto + WHERE person_id=".$this->db_add_param($person_id); + + if($aktuelleBuchungenOnly) + $qry .= " AND buchungsdatum <= now()"; + + if ($result = $this->db_query($qry)) { - if($row=$this->db_fetch_object()) + if ($row = $this->db_fetch_object()) { - if($row->summe>=0) + if ($row->summe >= 0) return true; else return false; } else { + $this->errormsg = "Fehler beim Holen der Daten"; return false; - $this->errormsg="Fehler beim Holen der Daten"; } } else { + $this->errormsg = "Fehler bei der Datenbankabfrage"; return false; - $this->errormsg="Fehler bei der Datenbankabfrage"; } } From 70c24899d03cbe061734f6ad6c92b2d601a18ed9 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Tue, 9 Nov 2021 09:32:05 +0100 Subject: [PATCH 003/122] =?UTF-8?q?Verhalten=20MessageAnOEs=20f=C3=BCr=20M?= =?UTF-8?q?aster=20angepasst?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/models/crm/Prestudent_model.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/application/models/crm/Prestudent_model.php b/application/models/crm/Prestudent_model.php index 2d8ac4a7e..3038b62cc 100644 --- a/application/models/crm/Prestudent_model.php +++ b/application/models/crm/Prestudent_model.php @@ -560,7 +560,7 @@ class Prestudent_model extends DB_Model o.bezeichnung, (CASE WHEN sg.typ = \'b\' THEN ps.prestudent_id - WHEN sg.typ = \'m\' THEN p.prestudent_id + WHEN sg.typ = \'m\' THEN ps.prestudent_id ELSE NULL END) AS prestudent_id FROM public.tbl_prestudent p @@ -581,7 +581,7 @@ class Prestudent_model extends DB_Model return $this->execQuery($query, array($person_id)); } - + /** * Get latest ZGV Bezeichnung of Prestudent. * @@ -593,19 +593,19 @@ class Prestudent_model extends DB_Model { show_error('Prestudent_id is not numeric.'); } - + $language_index = getUserLanguage() == 'German' ? 0 : 1; - + $this->addSelect(' COALESCE( array_to_json(zgvmaster.bezeichnung::varchar[])->>' . $language_index . ', array_to_json(zgv.bezeichnung::varchar[])->>' . $language_index . ' ) AS bezeichnung' ); - + $this->addJoin('bis.tbl_zgv zgv', 'zgv_code', 'LEFT'); $this->addJoin('bis.tbl_zgvmaster zgvmaster', 'zgvmas_code', 'LEFT'); - + return $this->loadWhere(array( 'prestudent_id' => $prestudent_id )); @@ -629,7 +629,7 @@ class Prestudent_model extends DB_Model $query .= " NOT EXISTS"; $query .= " (SELECT 1 FROM public.tbl_prestudentstatus spss - JOIN public.tbl_prestudent sps USING(prestudent_id) + JOIN public.tbl_prestudent sps USING(prestudent_id) WHERE sps.prestudent_id = ps.prestudent_id AND spss.bewerbung_abgeschicktamum IS NOT NULL)"; From cf1b34769c1044a4c6a9bc216b5220a9c0c04704 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Fri, 12 Nov 2021 12:16:35 +0100 Subject: [PATCH 004/122] api & anpassungen fuer das kartenterminal --- application/models/crm/Konto_model.php | 23 +++++++++++++++++++ .../models/person/Fotostatusperson_model.php | 22 ++++++++++++++++++ application/models/person/Person_model.php | 2 +- .../ressource/Betriebsmittelperson_model.php | 17 ++++++++++++++ composer.json | 4 +++- 5 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 application/models/person/Fotostatusperson_model.php diff --git a/application/models/crm/Konto_model.php b/application/models/crm/Konto_model.php index a3b5cdbb6..aba861895 100644 --- a/application/models/crm/Konto_model.php +++ b/application/models/crm/Konto_model.php @@ -68,4 +68,27 @@ class Konto_model extends DB_Model return error('Failed to load Payment'); } } + + public function getLastStudienbeitrag($uid, $buchungstypen) + { + $query = 'SELECT konto.studiensemester_kurzbz + FROM public.tbl_konto konto, + public.tbl_benutzer, + public.tbl_student + WHERE tbl_benutzer.uid = \'' . $uid . '\' + AND tbl_benutzer.uid = tbl_student.student_uid + AND tbl_benutzer.person_id = konto.person_id + AND konto.studiengang_kz = tbl_student.studiengang_kz + AND konto.buchungstyp_kurzbz IN (\'' . $buchungstypen . '\') + AND 0 = ( + SELECT sum(betrag) + FROM public.tbl_konto skonto + WHERE skonto.buchungsnr = konto.buchungsnr_verweis + OR skonto.buchungsnr_verweis = konto.buchungsnr_verweis + ) + ORDER BY buchungsnr DESC LIMIT 1; + '; + + return $this->execQuery($query); + } } diff --git a/application/models/person/Fotostatusperson_model.php b/application/models/person/Fotostatusperson_model.php new file mode 100644 index 000000000..7f701063d --- /dev/null +++ b/application/models/person/Fotostatusperson_model.php @@ -0,0 +1,22 @@ +dbTable = 'public.tbl_person_fotostatus'; + $this->pk = 'person_fotostatus_id'; + } + + public function getLastFotoStatus($person_id) + { + $this->addOrder('datum', 'DESC'); + $this->addOrder('person_fotostatus_id', 'DESC'); + $this->addLimit(1); + + return $this->loadWhere(array('person_id' => $person_id)); + } + +} \ No newline at end of file diff --git a/application/models/person/Person_model.php b/application/models/person/Person_model.php index ec5522674..a43b63287 100644 --- a/application/models/person/Person_model.php +++ b/application/models/person/Person_model.php @@ -193,7 +193,7 @@ class Person_model extends DB_Model */ public function getByUid($uid) { - $this->addSelect('vorname, nachname, gebdatum, person_id, bpk, matr_nr'); + $this->addSelect('vorname, nachname, gebdatum, person_id, bpk, matr_nr, foto'); $this->addJoin('tbl_benutzer', 'person_id'); return $this->loadWhere(array('uid' => $uid)); diff --git a/application/models/ressource/Betriebsmittelperson_model.php b/application/models/ressource/Betriebsmittelperson_model.php index 1a97d9e38..7d9689753 100644 --- a/application/models/ressource/Betriebsmittelperson_model.php +++ b/application/models/ressource/Betriebsmittelperson_model.php @@ -55,4 +55,21 @@ class Betriebsmittelperson_model extends DB_Model return $this->loadWhere($condition); } + + public function getBetriebsmittelZuordnung($cardIdentifier, $typ = 'Zutrittskarte', $ausgegeben = true) + { + $this->addJoin('wawi.tbl_betriebsmittel', 'betriebsmittel_id'); + + $where = 'wawi.tbl_betriebsmittel.nummer2 = \'' . $cardIdentifier . '\' + AND wawi.tbl_betriebsmittel.betriebsmitteltyp = \''. $typ .'\' + AND (retouram >= now() OR retouram IS NULL) + '; + + if ($ausgegeben) + $where .= 'AND ausgegebenam <= now()'; + else + $where .= 'AND (ausgegebenam <= now() OR ausgegebenam IS NULL)'; + + return $this->loadWhere($where); + } } diff --git a/composer.json b/composer.json index 145927be0..042042b0e 100644 --- a/composer.json +++ b/composer.json @@ -309,7 +309,9 @@ "scottjehl/Respond": "1.4.2", "tapmodo/Jcrop": "2.0.4", - "tomazdragar/SimpleCropper": "1.0" + "tomazdragar/SimpleCropper": "1.0", + + "chillerlan/php-qrcode": "2.0.*" }, "config": { "bin-dir": "vendor/bin" From 70f3cebd3680e41d795aa2fd92cd65a39b102f43 Mon Sep 17 00:00:00 2001 From: Cris Date: Wed, 3 Nov 2021 13:41:36 +0100 Subject: [PATCH 005/122] Changed DB default entry to NOW() for insertamum / updateaumum in tbl_zeitwunschgueltigkeit --- system/dbupdate_3.3.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 7799527a7..192755a23 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -5517,9 +5517,9 @@ if(!$result = @$db->db_query("SELECT 1 FROM campus.tbl_zeitwunsch_gueltigkeit LI mitarbeiter_uid CHARACTER VARYING(32) NOT NULL, von DATE, bis DATE, - insertamum TIMESTAMP WITHOUT TIME ZONE, + insertamum TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(), insertvon CHARACTER VARYING(32), - updateamum TIMESTAMP WITHOUT TIME ZONE, + updateamum TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(), updatevon CHARACTER VARYING(32) ); @@ -5535,6 +5535,7 @@ if(!$result = @$db->db_query("SELECT 1 FROM campus.tbl_zeitwunsch_gueltigkeit LI -- Add Permissions GRANT SELECT, UPDATE ON SEQUENCE campus.seq_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id TO vilesci; + GRANT SELECT, UPDATE ON SEQUENCE campus.seq_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id TO web; GRANT SELECT, INSERT, UPDATE, DELETE ON campus.tbl_zeitwunsch_gueltigkeit TO vilesci; GRANT SELECT, INSERT, UPDATE ON campus.tbl_zeitwunsch_gueltigkeit TO web; @@ -5657,6 +5658,7 @@ if (!$result = @$db->db_query("SELECT zeitwunsch_id FROM campus.tbl_zeitwunsch L -- Set permissions GRANT SELECT, UPDATE ON SEQUENCE campus.seq_zeitwunsch_zeitwunsch_id TO vilesci; + GRANT SELECT, UPDATE ON SEQUENCE campus.seq_zeitwunsch_zeitwunsch_id TO web; "; if(!$db->db_query($qry)) From c8ebcdf5a12702c6949c19ea5040093bd3feb02e Mon Sep 17 00:00:00 2001 From: Paolo Date: Tue, 23 Nov 2021 09:53:24 +0100 Subject: [PATCH 006/122] Updated composer.json --- composer.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index 042042b0e..81c487814 100644 --- a/composer.json +++ b/composer.json @@ -246,6 +246,8 @@ "afarkas/html5shiv": "3.7.*", + "chillerlan/php-qrcode": "2.0.*", + "chriskacerguis/codeigniter-restserver": "3.0.*", "christianbach/tablesorter": "1.0.*", "codeigniter/framework": "3.*", @@ -309,9 +311,7 @@ "scottjehl/Respond": "1.4.2", "tapmodo/Jcrop": "2.0.4", - "tomazdragar/SimpleCropper": "1.0", - - "chillerlan/php-qrcode": "2.0.*" + "tomazdragar/SimpleCropper": "1.0" }, "config": { "bin-dir": "vendor/bin" From f1bf3bb4be2685c196f2da90246102338f7f0441 Mon Sep 17 00:00:00 2001 From: Paolo Date: Tue, 23 Nov 2021 09:54:56 +0100 Subject: [PATCH 007/122] Updated composer.lock --- composer.lock | 206 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 154 insertions(+), 52 deletions(-) diff --git a/composer.lock b/composer.lock index 467af9461..d8d00562c 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "d9941245360c86434d18413999bdc812", - "content-hash": "fbeb5d4ef943f6d1d55220cb844d11f1", + "hash": "698d18072d5bdca35f006abb48135f97", + "content-hash": "5d7d0ed8a6755422fedde68f26823701", "packages": [ { "name": "BlackrockDigital/startbootstrap-sb-admin-2", @@ -71,6 +71,105 @@ }, "type": "library" }, + { + "name": "chillerlan/php-qrcode", + "version": "2.0.8", + "source": { + "type": "git", + "url": "https://github.com/chillerlan/php-qrcode.git", + "reference": "bf0382aaf2f79fa41c2dcb0f216675f74d633fe7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/bf0382aaf2f79fa41c2dcb0f216675f74d633fe7", + "reference": "bf0382aaf2f79fa41c2dcb0f216675f74d633fe7", + "shasum": "" + }, + "require": { + "chillerlan/php-traits": "^1.1", + "php": ">=7.0.3" + }, + "require-dev": { + "chillerlan/php-authenticator": "^2.0", + "phpunit/phpunit": "^6.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "chillerlan\\QRCode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kazuhiko Arase", + "homepage": "https://github.com/kazuhikoarase" + }, + { + "name": "Smiley", + "email": "smiley@chillerlan.net", + "homepage": "https://github.com/codemasher" + } + ], + "description": "A QR code generator. PHP 7+", + "homepage": "https://github.com/chillerlan/php-qrcode", + "keywords": [ + "qr code" + ], + "time": "2020-04-12 07:38:35" + }, + { + "name": "chillerlan/php-traits", + "version": "1.1.13", + "source": { + "type": "git", + "url": "https://github.com/chillerlan/php-traits.git", + "reference": "264759946b6aaeb427346b749fc9639b790b8e7f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/chillerlan/php-traits/zipball/264759946b6aaeb427346b749fc9639b790b8e7f", + "reference": "264759946b6aaeb427346b749fc9639b790b8e7f", + "shasum": "" + }, + "require": { + "php": ">=7.0.3" + }, + "require-dev": { + "phpunit/phpunit": "^6.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "chillerlan\\Traits\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Smiley", + "email": "smiley@chillerlan.net", + "homepage": "https://github.com/codemasher" + } + ], + "description": "Some useful traits for PHP 7+", + "homepage": "https://github.com/chillerlan/php-traits", + "keywords": [ + "PHP7", + "container", + "dotenv", + "helper", + "trait" + ], + "abandoned": true, + "time": "2018-06-22 00:30:47" + }, { "name": "chriskacerguis/codeigniter-restserver", "version": "3.0.3", @@ -502,16 +601,16 @@ }, { "name": "components/jquery", - "version": "3.4.1", + "version": "3.6.0", "source": { "type": "git", "url": "https://github.com/components/jquery.git", - "reference": "901828b7968b18319e377dc23d466f28426ee083" + "reference": "6cf38ee1fd04b6adf8e7dda161283aa35be818c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/components/jquery/zipball/901828b7968b18319e377dc23d466f28426ee083", - "reference": "901828b7968b18319e377dc23d466f28426ee083", + "url": "https://api.github.com/repos/components/jquery/zipball/6cf38ee1fd04b6adf8e7dda161283aa35be818c3", + "reference": "6cf38ee1fd04b6adf8e7dda161283aa35be818c3", "shasum": "" }, "type": "component", @@ -540,7 +639,7 @@ ], "description": "jQuery JavaScript Library", "homepage": "http://jquery.com", - "time": "2019-10-23 05:15:13" + "time": "2021-03-20 19:13:42" }, { "name": "components/jqueryui", @@ -674,6 +773,7 @@ "captcha", "security" ], + "abandoned": true, "time": "2018-03-09 06:07:41" }, { @@ -750,16 +850,16 @@ }, { "name": "fzaninotto/faker", - "version": "v1.9.1", + "version": "v1.9.2", "source": { "type": "git", "url": "https://github.com/fzaninotto/Faker.git", - "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f" + "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/fc10d778e4b84d5bd315dad194661e091d307c6f", - "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f", + "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/848d8125239d7dbf8ab25cb7f054f1a630e68c2e", + "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e", "shasum": "" }, "require": { @@ -797,7 +897,7 @@ "fixtures" ], "abandoned": true, - "time": "2019-12-12 13:22:17" + "time": "2020-12-11 09:56:16" }, { "name": "joeldbirch/superfish", @@ -1086,16 +1186,16 @@ }, { "name": "ml/json-ld", - "version": "1.1.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/lanthaler/JsonLD.git", - "reference": "b5f82820c255cb64067b1c7adbb819cad4afa70a" + "reference": "c74a1aed5979ed1cfb1be35a55a305fd30e30b93" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lanthaler/JsonLD/zipball/b5f82820c255cb64067b1c7adbb819cad4afa70a", - "reference": "b5f82820c255cb64067b1c7adbb819cad4afa70a", + "url": "https://api.github.com/repos/lanthaler/JsonLD/zipball/c74a1aed5979ed1cfb1be35a55a305fd30e30b93", + "reference": "c74a1aed5979ed1cfb1be35a55a305fd30e30b93", "shasum": "" }, "require": { @@ -1131,7 +1231,7 @@ "JSON-LD", "jsonld" ], - "time": "2018-11-18 20:26:18" + "time": "2020-06-16 17:45:06" }, { "name": "moment/momentjs", @@ -1146,16 +1246,16 @@ }, { "name": "mottie/tablesorter", - "version": "v2.31.2", + "version": "v2.31.3", "source": { "type": "git", "url": "https://github.com/Mottie/tablesorter.git", - "reference": "6a32e5acc294be5b6c420c83d70d66e096533d8f" + "reference": "7202d5faf8105a5ecd1a2b7a653777618713ffe5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Mottie/tablesorter/zipball/6a32e5acc294be5b6c420c83d70d66e096533d8f", - "reference": "6a32e5acc294be5b6c420c83d70d66e096533d8f", + "url": "https://api.github.com/repos/Mottie/tablesorter/zipball/7202d5faf8105a5ecd1a2b7a653777618713ffe5", + "reference": "7202d5faf8105a5ecd1a2b7a653777618713ffe5", "shasum": "" }, "require": { @@ -1193,7 +1293,7 @@ "sorting", "table" ], - "time": "2019-12-01 13:49:52" + "time": "2020-03-03 13:46:03" }, { "name": "nategood/httpful", @@ -1322,16 +1422,16 @@ }, { "name": "phpseclib/phpseclib", - "version": "2.0.31", + "version": "2.0.34", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "233a920cb38636a43b18d428f9a8db1f0a1a08f4" + "reference": "98a6fe587f3481aea319eef7e656d02cfe1675ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/233a920cb38636a43b18d428f9a8db1f0a1a08f4", - "reference": "233a920cb38636a43b18d428f9a8db1f0a1a08f4", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/98a6fe587f3481aea319eef7e656d02cfe1675ec", + "reference": "98a6fe587f3481aea319eef7e656d02cfe1675ec", "shasum": "" }, "require": { @@ -1409,7 +1509,7 @@ "x.509", "x509" ], - "time": "2021-04-06 13:56:45" + "time": "2021-10-27 02:46:30" }, { "name": "rmariuzzo/jquery-checkboxes", @@ -1435,16 +1535,16 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.13.1", + "version": "v1.19.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3" + "reference": "aed596913b70fae57be53d86faa2e9ef85a2297b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f8f0b461be3385e56d6de3dbb5a0df24c0c275e3", - "reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/aed596913b70fae57be53d86faa2e9ef85a2297b", + "reference": "aed596913b70fae57be53d86faa2e9ef85a2297b", "shasum": "" }, "require": { @@ -1456,7 +1556,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-main": "1.19-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -1489,7 +1593,7 @@ "polyfill", "portable" ], - "time": "2019-11-27 13:56:44" + "time": "2020-10-23 09:01:57" }, { "name": "tapmodo/Jcrop", @@ -1504,16 +1608,16 @@ }, { "name": "tinymce/tinymce", - "version": "4.9.8", + "version": "4.9.11", "source": { "type": "git", "url": "https://github.com/tinymce/tinymce-dist.git", - "reference": "912df2bc85015c758e32d1262219f1653bbf9783" + "reference": "3a68b67d1120ab89c6760afeb787291703c9a7d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tinymce/tinymce-dist/zipball/912df2bc85015c758e32d1262219f1653bbf9783", - "reference": "912df2bc85015c758e32d1262219f1653bbf9783", + "url": "https://api.github.com/repos/tinymce/tinymce-dist/zipball/3a68b67d1120ab89c6760afeb787291703c9a7d5", + "reference": "3a68b67d1120ab89c6760afeb787291703c9a7d5", "shasum": "" }, "type": "component", @@ -1546,7 +1650,7 @@ "tinymce", "wysiwyg" ], - "time": "2020-01-28 05:03:01" + "time": "2020-07-13 05:29:19" }, { "name": "tomazdragar/SimpleCropper", @@ -1611,16 +1715,16 @@ }, { "name": "twig/twig", - "version": "v1.42.4", + "version": "v1.42.5", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "e587180584c3d2d6cb864a0454e777bb6dcb6152" + "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/e587180584c3d2d6cb864a0454e777bb6dcb6152", - "reference": "e587180584c3d2d6cb864a0454e777bb6dcb6152", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e", + "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e", "shasum": "" }, "require": { @@ -1629,8 +1733,7 @@ }, "require-dev": { "psr/container": "^1.0", - "symfony/debug": "^3.4|^4.2", - "symfony/phpunit-bridge": "^4.4@dev|^5.0" + "symfony/phpunit-bridge": "^4.4|^5.0" }, "type": "library", "extra": { @@ -1659,7 +1762,6 @@ }, { "name": "Twig Team", - "homepage": "https://twig.symfony.com/contributors", "role": "Contributors" }, { @@ -1673,24 +1775,24 @@ "keywords": [ "templating" ], - "time": "2019-11-11 16:49:32" + "time": "2020-02-11 05:59:23" }, { "name": "zetacomponents/base", - "version": "1.9.1", + "version": "1.9.3", "source": { "type": "git", "url": "https://github.com/zetacomponents/Base.git", - "reference": "489e20235989ddc97fdd793af31ac803972454f1" + "reference": "2f432f4117a5aa2164d4fb1784f84db91dbdd3b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zetacomponents/Base/zipball/489e20235989ddc97fdd793af31ac803972454f1", - "reference": "489e20235989ddc97fdd793af31ac803972454f1", + "url": "https://api.github.com/repos/zetacomponents/Base/zipball/2f432f4117a5aa2164d4fb1784f84db91dbdd3b8", + "reference": "2f432f4117a5aa2164d4fb1784f84db91dbdd3b8", "shasum": "" }, "require-dev": { - "phpunit/phpunit": "~5.7", + "phpunit/phpunit": "~8.0", "zetacomponents/unit-test": "*" }, "type": "library", @@ -1737,7 +1839,7 @@ ], "description": "The Base package provides the basic infrastructure that all packages rely on. Therefore every component relies on this package.", "homepage": "https://github.com/zetacomponents", - "time": "2017-11-28 11:30:00" + "time": "2021-07-25 15:46:08" }, { "name": "zetacomponents/database", From e485257458bf4b9238fce2fea1c667e482192404 Mon Sep 17 00:00:00 2001 From: Cris Date: Tue, 23 Nov 2021 15:39:52 +0100 Subject: [PATCH 008/122] Created Zeitwunsch_gueltigkeit Class Methods: - load: Ladet eine Zeitwunschgueltigkeit. - save: Speichert eine Zeitwunschgueltigkeit (insert/update) - getByUID: Ladet Zeitwunschgueltigkeiten einer UID mitsamt den zugehoerigen Studiensemestern. - getByStudiensemester: Ladet Zeitwunschgueltigkeiten einer UID und eines bestimmten Semesters --- include/zeitwunsch_gueltigkeit.class.php | 271 +++++++++++++++++++++++ 1 file changed, 271 insertions(+) create mode 100644 include/zeitwunsch_gueltigkeit.class.php diff --git a/include/zeitwunsch_gueltigkeit.class.php b/include/zeitwunsch_gueltigkeit.class.php new file mode 100644 index 000000000..20d1d367d --- /dev/null +++ b/include/zeitwunsch_gueltigkeit.class.php @@ -0,0 +1,271 @@ +load($zeitwunsch_gueltigkeit_id); + } + } + + /** + * Ladet eine Zeitwunschgueltigkeit. + * @param $zeitwunsch_gueltigkeit_id + * @return bool + */ + public function load($zeitwunsch_gueltigkeit_id) + { + if (!is_numeric($zeitwunsch_gueltigkeit_id)) + { + $this->errormsg = 'Wrong parameter zeitwunsch_gueltigkeit_id.'; + return false; + } + + $qry = ' + SELECT * + FROM campus.tbl_zeitwunsch_gueltigkeit + WHERE zeitwunsch_gueltigkeit_id = '.$this->db_add_param($zeitwunsch_gueltigkeit_id). ' + ORDER BY von DESC + '; + + if ($result = $this->db_query($qry)) + { + while ($row = $this->db_fetch_object($result)) + { + $this->zeitwunsch_gueltigkeit_id = $row->zeitwunsch_gueltigkeit_id; + $this->von = $row->von; + $this->bis = $row->bis; + $this->insertamum = $row->insertamum; + $this->insertvon = $row->insertvon; + $this->updateamum = $row->updateamum; + $this->updatevon = $row->updatevon; + } + return true; + } + else + { + $this->errormsg = 'Fehler bei der Datenbankabfrage'; + return false; + } + + } + + /** + * Speichert eine Zeitwunschgueltigkeit + */ + public function save() + { + if($this->new) + { + $qry = ' + INSERT INTO campus.tbl_zeitwunsch_gueltigkeit (mitarbeiter_uid, von, bis, insertvon) + VALUES ('. + $this->db_add_param($this->mitarbeiter_uid).', '. + $this->db_add_param($this->von).', '. + $this->db_add_param($this->bis).', '. + $this->db_add_param($this->insertvon). ') + RETURNING zeitwunsch_gueltigkeit_id; + '; + } + else + { + $qry = ' + UPDATE campus.tbl_zeitwunsch_gueltigkeit SET'. + ' bis = '. $this->db_add_param($this->bis). ', '. + ' updateamum = NOW(), '. + ' updatevon = '.$this->db_add_param($this->updatevon). + ' WHERE zeitwunsch_gueltigkeit_id = ' .$this->db_add_param($this->zeitwunsch_gueltigkeit_id, FHC_INTEGER); + + } + + if($result = $this->db_query($qry)) + { + // Wenn neuer Eintrag + if ($this->new) + { + if($row = $this->db_fetch_object($result)) + { + // ZWG ID des neuen ZWG Eintrags zurueckgeben + $this->zeitwunsch_gueltigkeit_id = $row->zeitwunsch_gueltigkeit_id; + } + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Speichern der Zeitwunschgueltigkeit'; + return false; + } + } + + /** + * Ladet Zeitwunschgueltigkeiten einer UID mitsamt den zugehoerigen Studiensemestern. + * @param $uid + * @param numeric $limit limit = null liefert alle ZWG; limit = 1 liefert die letztgueltige Zeitwunsch-Gueltigkeit. + * @param bool $activeOnly Wenn während des laufenden Semesters der Zeitwunsch geaendert werden, werden mehrere ZWG im Semester hinterlegt. + * true liefert pro Studiensemester nur die letztgueltigen ZWG; + * false liefert alle ZWG pro Studiensemester + * @param string $bis string date, z.B. 2022-01-31 + * @return bool + */ + public function getByUID($uid, $limit = null, $activeOnly = true, $bis = null) + { + $studiensemester = new Studiensemester(); + $studiensemester->getNextStudiensemester(); + + $qry = ' + SELECT zwg.*, studiensemester_kurzbz, start, ende + FROM campus.tbl_zeitwunsch_gueltigkeit zwg, public.tbl_studiensemester + WHERE zwg.mitarbeiter_uid = '.$this->db_add_param($uid); + + // Wenn Bis-Datum angegeben + if (!is_null($bis)) + { + // Zeitwuensche nur bis zum angegebenen Bis-Datum + $qry.= ' + AND (von < ende AND '. $this->db_add_param($bis). '::date > start) + '; + } + else + { + // Alle Zeitwuensche + $qry.= ' + AND (von < ende AND COALESCE(bis, '. $this->db_add_param($studiensemester->ende).'::date ) > start) + '; + } + + // Nach Gueltigkeits-Startdatum sortieren, zuerst die zuletzt gueltigen + $qry.= ' + ORDER BY zeitwunsch_gueltigkeit_id DESC, start DESC + '; + + // Wenn nur aktive Zeitwunschgueltigkeiten angezeigt werden sollen + if ($activeOnly) + { + // ...mit distinct die zuletzt erstellten pro Studiensemester filtern + $qry = ' + SELECT DISTINCT ON (start, studiensemester_kurzbz) start, studiensemester_kurzbz, + ende, zeitwunsch_gueltigkeit_id, mitarbeiter_uid, von, bis, + insertamum, insertvon, updateamum, updatevon + FROM ('. $qry. ') temp + ORDER BY start DESC, studiensemester_kurzbz + '; + } + + // Wenn Limit angegeben + if (!is_null($limit)) + { + // Ausgabe limitieren + $qry.= 'LIMIT '.$this->db_add_param($limit); + } + + if ($result = $this->db_query($qry)) + { + $this->result = array(); + + while ($row = $this->db_fetch_object($result)) + { + $obj = new StdClass(); + $obj->zeitwunsch_gueltigkeit_id = $row->zeitwunsch_gueltigkeit_id; + $obj->von = $row->von; + $obj->bis = $row->bis; + $obj->studiensemester_kurzbz = $row->studiensemester_kurzbz; + $obj->start = $row->start; + $obj->ende = $row->ende; + $obj->insertamum = $row->insertamum; + $obj->insertvon = $row->insertvon; + $obj->updateamum = $row->updateamum; + $obj->updatevon = $row->updatevon; + + $this->result[]= $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler bei der Datenbankabfrage'; + return false; + } + } + + /** + * Ladet Zeitwunschgueltigkeiten einer UID und eines bestimmten Semesters (defaultmaeßig nur die letztgueltige) + * @param $uid + * @param $studiensemester_kurzbz + * @param null $limit limit = null liefert alle ZWG des Studiensemesters; limit = 1 liefert die letztgueltige ZWG. + * @return bool + */ + public function getByStudiensemester($uid, $studiensemester_kurzbz, $limit = 1) + { + $qry = ' + WITH studiensemester AS + ( + SELECT studiensemester_kurzbz, start, ende + FROM public.tbl_studiensemester + WHERE studiensemester_kurzbz = '.$this->db_add_param($studiensemester_kurzbz). ' + ) + + SELECT zwg.*, studiensemester_kurzbz, start, ende + FROM campus.tbl_zeitwunsch_gueltigkeit zwg, studiensemester ss + WHERE zwg.mitarbeiter_uid = '.$this->db_add_param($uid). ' + AND (zwg.von < ss.ende AND COALESCE(zwg.bis, ss.ende) >= ss.start) + ORDER BY von DESC + '; + + // Wenn Limit angegeben + if (!is_null($limit)) + { + // Ausgabe limitieren + $qry.= 'LIMIT '.$this->db_add_param($limit); + } + + if ($result = $this->db_query($qry)) + { + $this->result = array(); + + while ($row = $this->db_fetch_object($result)) + { + $obj = new StdClass(); + $obj->zeitwunsch_gueltigkeit_id = $row->zeitwunsch_gueltigkeit_id; + $obj->von = $row->von; + $obj->bis = $row->bis; + $obj->studiensemester_kurzbz = $row->studiensemester_kurzbz; + $obj->start = $row->start; + $obj->ende = $row->ende; + $obj->insertamum = $row->insertamum; + $obj->insertvon = $row->insertvon; + $obj->updateamum = $row->updateamum; + $obj->updatevon = $row->updatevon; + + $this->result[]= $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler bei der Datenbankabfrage'; + return false; + } + } +} + From 976e79447a0985b516d6ad33235d9f4a7c29f2e9 Mon Sep 17 00:00:00 2001 From: Cris Date: Tue, 23 Nov 2021 15:41:52 +0100 Subject: [PATCH 009/122] Added / Adapted methods of Zeitwunsch Class to use Zeitwunschgueltigkeit Added: - loadByZWG: Zeitwunsch einer Person zu bestimmter Zeitwunschgueltigkeit laden. Adapted: - loadPerson - save - exists --- include/zeitwunsch.class.php | 792 ++++++++++++++++++----------------- 1 file changed, 419 insertions(+), 373 deletions(-) diff --git a/include/zeitwunsch.class.php b/include/zeitwunsch.class.php index ca15fdb4d..9c60c3a7a 100644 --- a/include/zeitwunsch.class.php +++ b/include/zeitwunsch.class.php @@ -1,374 +1,420 @@ -, - * Andreas Oesterreicher and - * Rudolf Hangl . - */ -require_once(dirname(__FILE__).'/basis_db.class.php'); - -class zeitwunsch extends basis_db -{ - public $new; // boolean - public $zeitwunsch; - - //Tabellenspalten - public $stunde; // smalint - public $mitarbeiter_uid; // varchar(32) - public $tag; // smalint - public $gewicht; // smalint - public $min_stunde; - public $max_stunde; - public $insertamum; - public $insertvon; - public $updateamum; - public $updatevon; - - /** - * Konstruktor - */ - public function __construct() - { - parent::__construct(); - - $this->init(); - } - - /** - * Initialisierung - * - */ - private function init() - { - // Stundenraster abfragen - $sql='SELECT min(stunde) AS min_stunde,max(stunde) AS max_stunde FROM lehre.tbl_stunde;'; - if(!$this->db_query($sql)) - { - $this->errormsg=$this->db_last_error(); - return false; - } - else - { - $row=$this->db_fetch_object(); - $this->min_stunde=$row->min_stunde; - $this->max_stunde=$row->max_stunde; - } - return true; - } - - /** - * Prueft die Variablen vor dem Speichern - * auf Gueltigkeit. - * @return true wenn ok, false im Fehlerfall - */ - protected function validate() - { - if(mb_strlen($this->mitarbeiter_uid)>32) - { - $this->errormsg = 'UID darf nicht laenger als 32 Zeichen sein.'; - return false; - } - if($this->mitarbeiter_uid == '') - { - $this->errormsg = 'UID muss angegeben werden'; - return false; - } - if(!is_numeric($this->stunde)) - { - $this->errormsg = 'Stunde muss eine gueltige Zahl sein'; - return false; - } - if(!is_numeric($this->gewicht)) - { - $this->errormsg = 'Gewicht muss eine gueltige Zahl sein'; - return false; - } - if(!is_numeric($this->tag)) - { - $this->errormsg = 'Tag muss eine gueltige Zahl sein'; - return false; - } - - return true; - } - - /** - * Speichert einen Zeitwunsch in die Datenbank - * Wenn $new auf true gesetzt ist wird ein neuer Datensatz - * angelegt, ansonsten der Datensatz upgedated - * @return true wenn erfolgreich, false im Fehlerfall - */ - public function save() - { - //Variablen auf Gueltigkeit pruefen - if(!$this->validate()) - return false; - - if($this->new) - { - $qry = 'INSERT INTO campus.tbl_zeitwunsch (mitarbeiter_uid, tag, stunde, gewicht, - insertamum, insertvon, updateamum, updatevon) VALUES('. - $this->db_add_param($this->mitarbeiter_uid).','. - $this->db_add_param($this->tag, FHC_INTEGER).','. - $this->db_add_param($this->stunde, FHC_INTEGER).','. - $this->db_add_param($this->gewicht, FHC_INTEGER).','. - $this->db_add_param($this->insertamum).','. - $this->db_add_param($this->insertvon).','. - $this->db_add_param($this->updateamum).','. - $this->db_add_param($this->updatevon).');'; - } - else - { - $qry = 'UPDATE campus.tbl_zeitwunsch SET'. - ' gewicht='.$this->db_add_param($this->gewicht, FHC_INTEGER).', '. - ' updateamum='.$this->db_add_param($this->updateamum).', '. - ' updatevon='.$this->db_add_param($this->updatevon). - " WHERE - mitarbeiter_uid=".$this->db_add_param($this->mitarbeiter_uid, FHC_STRING, false)." - AND tag=".$this->db_add_param($this->tag, FHC_INTEGER)." - AND stunde=".$this->db_add_param($this->stunde, FHC_INTEGER); - } - - if($this->db_query($qry)) - { - return true; - } - else - { - $this->errormsg = 'Fehler beim Speichern des Zeitwunsches'; - return false; - } - } - - /** - * Zeitwunsch einer Person laden - * @param uid - * @param datum - * @return boolean Ergebnis steht in Array $zeitwunsch wenn true - */ - public function loadPerson($uid,$datum=null) - { - // Zeitwuensche abfragen - if(!$this->db_query("SELECT * FROM campus.tbl_zeitwunsch WHERE mitarbeiter_uid=".$this->db_add_param($uid))) - { - $this->errormsg = $this->db_last_error(); - return false; - } - else - { - while ($row = $this->db_fetch_object()) - { - $this->zeitwunsch[$row->tag][$row->stunde]=$row->gewicht; - $this->insertamum = $row->insertamum; - $this->insertvon = $row->insertvon; - $this->updateamum = $row->updateamum; - $this->updatevon = $row->updatevon; - } - } - - if (!is_null($datum)) - { - $beginn=montag($datum); - $start=date('Y-m-d',$beginn); - $ende=date('Y-m-d',jump_day($beginn,7)); - - // Zeitsperren abfragen - $sql=" - SELECT - vondatum,vonstunde,bisdatum,bisstunde - FROM - campus.tbl_zeitsperre - WHERE - mitarbeiter_uid=".$this->db_add_param($uid)." - AND vondatum<=".$this->db_add_param($ende)." - AND bisdatum>=".$this->db_add_param($start); - - if(!$this->db_query($sql)) - { - $this->errormsg=$this->db_last_error(); - return false; - } - else - { - while($row = $this->db_fetch_object()) - { - $beginn=montag($datum); - for ($i=1;$i<=7;$i++) - { - $date_iso=date('Y-m-d',$beginn); - //echo "\n".$date_iso."\n".$row->vondatum."\n"; - if ($date_iso>$row->vondatum && $date_iso<$row->bisdatum) - for ($j=$this->min_stunde;$j<=$this->max_stunde;$j++) - $this->zeitwunsch[$i][$j]=-3; - if ($date_iso==$row->vondatum && $date_iso<$row->bisdatum) - { - if (is_null($row->vonstunde)) - $row->vonstunde=$this->min_stunde; - for ($j=$row->vonstunde;$j<=$this->max_stunde;$j++) - $this->zeitwunsch[$i][$j]=-3; - } - if ($date_iso>$row->vondatum && $date_iso==$row->bisdatum) - { - if (is_null($row->bisstunde)) - $row->bisstunde=$this->max_stunde; - for ($j=$this->min_stunde;$j<=$row->bisstunde;$j++) - $this->zeitwunsch[$i][$j]=-3; - } - if ($date_iso==$row->vondatum && $date_iso==$row->bisdatum) - { - if (is_null($row->vonstunde)) - $row->vonstunde=$this->min_stunde; - if (is_null($row->bisstunde)) - $row->bisstunde=$this->max_stunde; - for ($j=$row->vonstunde;$j<=$row->bisstunde;$j++) - $this->zeitwunsch[$i][$j]=-3; - } - $beginn=jump_day($beginn,1); - } - } - } - } - return true; - } - - - /** - * Zeitwunsch der Personen in Lehreinheiten laden - * @param $le_id LehreinheitID Array - * @param $datum - * @return true oder false - */ - public function loadZwLE($le_id,$datum=null) - { - //$this->init(); - // SUB-Select fuer LVAs - $sql_query_leid=''; - $sql_query_le='SELECT DISTINCT mitarbeiter_uid FROM campus.vw_lehreinheit WHERE '; - for ($i=0;$idb_add_param($le_id[$i], FHC_INTEGER); - $sql_query_leid=mb_substr($sql_query_leid,3); - $sql_query_le.=$sql_query_leid; - - // Schlechteste Zeitwuensche holen - $sql_query='SELECT tag,stunde,min(gewicht) AS gewicht - FROM campus.tbl_zeitwunsch WHERE mitarbeiter_uid IN ('.$sql_query_le.') GROUP BY tag,stunde'; - - // Zeitwuensche abfragen - if(!$this->db_query($sql_query)) - { - $this->errormsg = $this->db_last_error(); - return false; - } - else - while($row = $this->db_fetch_object()) - $this->zeitwunsch[$row->tag][$row->stunde]=$row->gewicht; - - // *********************************************************** - // Zeitsperren fuer die aktuelle Woche holen - - if (!is_null($datum)) - { - $beginn=montag($datum); - $start=date('Y-m-d',$beginn); - $ende=date('Y-m-d',jump_day($beginn,7)); - - // Zeitsperren abfragen - $sql=" - SELECT - vondatum,vonstunde,bisdatum,bisstunde - FROM - campus.tbl_zeitsperre - WHERE - mitarbeiter_uid IN ($sql_query_le) - AND vondatum<=".$this->db_add_param($ende)." - AND bisdatum>=".$this->db_add_param($start); - - if(!$this->db_query($sql)) - { - $this->errormsg = $this->db_last_error(); - return false; - } - while($row = $this->db_fetch_object()) - { - $beginn=montag($datum); - for ($i=1;$i<=7;$i++) - { - $date_iso=date('Y-m-d',$beginn); - //echo "\n".$date_iso."\n".$row->vondatum."\n"; - if ($date_iso>$row->vondatum && $date_iso<$row->bisdatum) - for ($j=$this->min_stunde;$j<=$this->max_stunde;$j++) - $this->zeitwunsch[$i][$j]=-3; - if ($date_iso==$row->vondatum && $date_iso<$row->bisdatum) - { - if (is_null($row->vonstunde)) - $row->vonstunde=$this->min_stunde; - for ($j=$row->vonstunde;$j<=$this->max_stunde;$j++) - $this->zeitwunsch[$i][$j]=-3; - } - if ($date_iso>$row->vondatum && $date_iso==$row->bisdatum) - { - if (is_null($row->bisstunde)) - $row->bisstunde=$this->max_stunde; - for ($j=$this->min_stunde;$j<=$row->bisstunde;$j++) - $this->zeitwunsch[$i][$j]=-3; - } - if ($date_iso==$row->vondatum && $date_iso==$row->bisdatum) - { - if (is_null($row->vonstunde)) - $row->vonstunde=$this->min_stunde; - if (is_null($row->bisstunde)) - $row->bisstunde=$this->max_stunde; - for ($j=$row->vonstunde;$j<=$row->bisstunde;$j++) - $this->zeitwunsch[$i][$j]=-3; - } - $beginn=jump_day($beginn,1); - } - } - } - return true; - } - - /** - * Prueft ob bereits ein Zeitwunsch eingetragen ist - * - * @param $uid - * @param $stunde - * @param $tag - * @return true wenn vorhanden sonst false - */ - function exists($uid, $stunde, $tag) - { - $qry = "SELECT 1 FROM campus.tbl_zeitwunsch - WHERE - mitarbeiter_uid=".$this->db_add_param($uid)." - AND stunde=".$this->db_add_param($stunde, FHC_INTEGER)." - AND tag=".$this->db_add_param($tag, FHC_INTEGER); - if($this->db_query($qry)) - { - if($this->db_num_rows()>0) - return true; - else - return false; - } - else - { - $this->errormsg='Fehler beim Abfragen des Zeitwunsches'; - return false; - } - } -} +, + * Andreas Oesterreicher and + * Rudolf Hangl . + */ +require_once(dirname(__FILE__).'/basis_db.class.php'); + +class zeitwunsch extends basis_db +{ + public $new; // boolean + public $zeitwunsch; + + //Tabellenspalten + public $stunde; // smalint + public $mitarbeiter_uid; // varchar(32) + public $tag; // smalint + public $gewicht; // smalint + public $min_stunde; + public $max_stunde; + public $insertamum; + public $insertvon; + public $updateamum; + public $updatevon; + public $zeitwunsch_id; + public $zeitwunsch_gueltigkeit_id; + + /** + * Konstruktor + */ + public function __construct() + { + parent::__construct(); + + $this->init(); + } + + /** + * Initialisierung + * + */ + private function init() + { + // Stundenraster abfragen + $sql='SELECT min(stunde) AS min_stunde,max(stunde) AS max_stunde FROM lehre.tbl_stunde;'; + if(!$this->db_query($sql)) + { + $this->errormsg=$this->db_last_error(); + return false; + } + else + { + $row=$this->db_fetch_object(); + $this->min_stunde=$row->min_stunde; + $this->max_stunde=$row->max_stunde; + } + return true; + } + + /** + * Prueft die Variablen vor dem Speichern + * auf Gueltigkeit. + * @return true wenn ok, false im Fehlerfall + */ + protected function validate() + { + if(mb_strlen($this->mitarbeiter_uid)>32) + { + $this->errormsg = 'UID darf nicht laenger als 32 Zeichen sein.'; + return false; + } + if($this->mitarbeiter_uid == '') + { + $this->errormsg = 'UID muss angegeben werden'; + return false; + } + if(!is_numeric($this->stunde)) + { + $this->errormsg = 'Stunde muss eine gueltige Zahl sein'; + return false; + } + if(!is_numeric($this->gewicht)) + { + $this->errormsg = 'Gewicht muss eine gueltige Zahl sein'; + return false; + } + if(!is_numeric($this->tag)) + { + $this->errormsg = 'Tag muss eine gueltige Zahl sein'; + return false; + } + + return true; + } + + /** + * Speichert einen Zeitwunsch in die Datenbank + * Wenn $new auf true gesetzt ist wird ein neuer Datensatz + * angelegt, ansonsten der Datensatz upgedated + * @return true wenn erfolgreich, false im Fehlerfall + */ + public function save() + { + //Variablen auf Gueltigkeit pruefen + if(!$this->validate()) + return false; + + if($this->new) + { + $qry = 'INSERT INTO campus.tbl_zeitwunsch (mitarbeiter_uid, tag, stunde, gewicht, + insertamum, insertvon, updateamum, updatevon, zeitwunsch_gueltigkeit_id) VALUES('. + $this->db_add_param($this->mitarbeiter_uid).','. + $this->db_add_param($this->tag, FHC_INTEGER).','. + $this->db_add_param($this->stunde, FHC_INTEGER).','. + $this->db_add_param($this->gewicht, FHC_INTEGER).','. + $this->db_add_param($this->insertamum).','. + $this->db_add_param($this->insertvon).','. + $this->db_add_param($this->updateamum).','. + $this->db_add_param($this->updatevon).','. + $this->db_add_param($this->zeitwunsch_gueltigkeit_id).');'; + } + else + { + $qry = 'UPDATE campus.tbl_zeitwunsch SET'. + ' gewicht='.$this->db_add_param($this->gewicht, FHC_INTEGER).', '. + ' updateamum='.$this->db_add_param($this->updateamum).', '. + ' updatevon='.$this->db_add_param($this->updatevon). + " WHERE + mitarbeiter_uid=".$this->db_add_param($this->mitarbeiter_uid, FHC_STRING, false)." + AND tag=".$this->db_add_param($this->tag, FHC_INTEGER)." + AND stunde=".$this->db_add_param($this->stunde, FHC_INTEGER). " + AND zeitwunsch_gueltigkeit_id=".$this->db_add_param($this->zeitwunsch_gueltigkeit_id, FHC_INTEGER); + } + + if($this->db_query($qry)) + { + return true; + } + else + { + $this->errormsg = 'Fehler beim Speichern des Zeitwunsches'; + return false; + } + } + + /** + * Zeitwunsch einer Person zu bestimmter Zeitwunschgueltigkeit laden + * @param $uid + * @param $zeitwunsch_gueltigkeit_id + * @return boolean + */ + public function loadByZWG($uid, $zeitwunsch_gueltigkeit_id) + { + $qry = ' + SELECT * + FROM campus.tbl_zeitwunsch + JOIN campus.tbl_zeitwunsch_gueltigkeit zwg USING (zeitwunsch_gueltigkeit_id) + WHERE zwg.mitarbeiter_uid = ' . $this->db_add_param($uid) . ' + AND zeitwunsch_gueltigkeit_id = ' . $this->db_add_param($zeitwunsch_gueltigkeit_id) . ' + ORDER BY tag, stunde + '; + + if ($this->db_query($qry)) + { + while ($row = $this->db_fetch_object()) + { + $this->zeitwunsch[$row->tag][$row->stunde] = $row->gewicht; + $this->insertamum = $row->insertamum; + $this->insertvon = $row->insertvon; + $this->updateamum = $row->updateamum; + $this->updatevon = $row->updatevon; + $this->zeitwunsch_id = $row->zeitwunsch_id; + $this->zeitwunsch_gueltigkeit_id = $row->zeitwunsch_gueltigkeit_id; + } + return true; + } + else + { + $this->errormsg = $this->db_last_error(); + return false; + } + } + + /** + * Alle Zeitwuensche einer Person laden + * @param uid + * @param datum + * @return boolean Ergebnis steht in Array $zeitwunsch wenn true + */ + public function loadPerson($uid,$datum=null) + { + // Zeitwuensche abfragen + if(!$this->db_query("SELECT * FROM campus.tbl_zeitwunsch WHERE mitarbeiter_uid=".$this->db_add_param($uid))) + { + $this->errormsg = $this->db_last_error(); + return false; + } + else + { + while ($row = $this->db_fetch_object()) + { + $this->zeitwunsch[$row->tag][$row->stunde]=$row->gewicht; + $this->insertamum = $row->insertamum; + $this->insertvon = $row->insertvon; + $this->updateamum = $row->updateamum; + $this->updatevon = $row->updatevon; + $this->zeitwunsch_id = $row->zeitwunsch_id; + $this->zeitwunsch_gueltigkeit_id = $row->zeitwunsch_gueltigkeit_id; + } + } + + if (!is_null($datum)) + { + $beginn=montag($datum); + $start=date('Y-m-d',$beginn); + $ende=date('Y-m-d',jump_day($beginn,7)); + + // Zeitsperren abfragen + $sql=" + SELECT + vondatum,vonstunde,bisdatum,bisstunde + FROM + campus.tbl_zeitsperre + WHERE + mitarbeiter_uid=".$this->db_add_param($uid)." + AND vondatum<=".$this->db_add_param($ende)." + AND bisdatum>=".$this->db_add_param($start); + + if(!$this->db_query($sql)) + { + $this->errormsg=$this->db_last_error(); + return false; + } + else + { + while($row = $this->db_fetch_object()) + { + $beginn=montag($datum); + for ($i=1;$i<=7;$i++) + { + $date_iso=date('Y-m-d',$beginn); + //echo "\n".$date_iso."\n".$row->vondatum."\n"; + if ($date_iso>$row->vondatum && $date_iso<$row->bisdatum) + for ($j=$this->min_stunde;$j<=$this->max_stunde;$j++) + $this->zeitwunsch[$i][$j]=-3; + if ($date_iso==$row->vondatum && $date_iso<$row->bisdatum) + { + if (is_null($row->vonstunde)) + $row->vonstunde=$this->min_stunde; + for ($j=$row->vonstunde;$j<=$this->max_stunde;$j++) + $this->zeitwunsch[$i][$j]=-3; + } + if ($date_iso>$row->vondatum && $date_iso==$row->bisdatum) + { + if (is_null($row->bisstunde)) + $row->bisstunde=$this->max_stunde; + for ($j=$this->min_stunde;$j<=$row->bisstunde;$j++) + $this->zeitwunsch[$i][$j]=-3; + } + if ($date_iso==$row->vondatum && $date_iso==$row->bisdatum) + { + if (is_null($row->vonstunde)) + $row->vonstunde=$this->min_stunde; + if (is_null($row->bisstunde)) + $row->bisstunde=$this->max_stunde; + for ($j=$row->vonstunde;$j<=$row->bisstunde;$j++) + $this->zeitwunsch[$i][$j]=-3; + } + $beginn=jump_day($beginn,1); + } + } + } + } + return true; + } + + /** + * Zeitwunsch der Personen in Lehreinheiten laden + * @param $le_id LehreinheitID Array + * @param $datum + * @return true oder false + */ + public function loadZwLE($le_id,$datum=null) + { + //$this->init(); + // SUB-Select fuer LVAs + $sql_query_leid=''; + $sql_query_le='SELECT DISTINCT mitarbeiter_uid FROM campus.vw_lehreinheit WHERE '; + for ($i=0;$idb_add_param($le_id[$i], FHC_INTEGER); + $sql_query_leid=mb_substr($sql_query_leid,3); + $sql_query_le.=$sql_query_leid; + + // Schlechteste Zeitwuensche holen + $sql_query='SELECT tag,stunde,min(gewicht) AS gewicht + FROM campus.tbl_zeitwunsch WHERE mitarbeiter_uid IN ('.$sql_query_le.') GROUP BY tag,stunde'; + + // Zeitwuensche abfragen + if(!$this->db_query($sql_query)) + { + $this->errormsg = $this->db_last_error(); + return false; + } + else + while($row = $this->db_fetch_object()) + $this->zeitwunsch[$row->tag][$row->stunde]=$row->gewicht; + + // *********************************************************** + // Zeitsperren fuer die aktuelle Woche holen + + if (!is_null($datum)) + { + $beginn=montag($datum); + $start=date('Y-m-d',$beginn); + $ende=date('Y-m-d',jump_day($beginn,7)); + + // Zeitsperren abfragen + $sql=" + SELECT + vondatum,vonstunde,bisdatum,bisstunde + FROM + campus.tbl_zeitsperre + WHERE + mitarbeiter_uid IN ($sql_query_le) + AND vondatum<=".$this->db_add_param($ende)." + AND bisdatum>=".$this->db_add_param($start); + + if(!$this->db_query($sql)) + { + $this->errormsg = $this->db_last_error(); + return false; + } + while($row = $this->db_fetch_object()) + { + $beginn=montag($datum); + for ($i=1;$i<=7;$i++) + { + $date_iso=date('Y-m-d',$beginn); + //echo "\n".$date_iso."\n".$row->vondatum."\n"; + if ($date_iso>$row->vondatum && $date_iso<$row->bisdatum) + for ($j=$this->min_stunde;$j<=$this->max_stunde;$j++) + $this->zeitwunsch[$i][$j]=-3; + if ($date_iso==$row->vondatum && $date_iso<$row->bisdatum) + { + if (is_null($row->vonstunde)) + $row->vonstunde=$this->min_stunde; + for ($j=$row->vonstunde;$j<=$this->max_stunde;$j++) + $this->zeitwunsch[$i][$j]=-3; + } + if ($date_iso>$row->vondatum && $date_iso==$row->bisdatum) + { + if (is_null($row->bisstunde)) + $row->bisstunde=$this->max_stunde; + for ($j=$this->min_stunde;$j<=$row->bisstunde;$j++) + $this->zeitwunsch[$i][$j]=-3; + } + if ($date_iso==$row->vondatum && $date_iso==$row->bisdatum) + { + if (is_null($row->vonstunde)) + $row->vonstunde=$this->min_stunde; + if (is_null($row->bisstunde)) + $row->bisstunde=$this->max_stunde; + for ($j=$row->vonstunde;$j<=$row->bisstunde;$j++) + $this->zeitwunsch[$i][$j]=-3; + } + $beginn=jump_day($beginn,1); + } + } + } + return true; + } + + /** + * Prueft ob bereits ein Zeitwunsch eingetragen ist + * + * @param $uid + * @param $zwg_id + * @param $stunde + * @param $tag + * @return true wenn vorhanden sonst false + */ + function exists($uid, $zwg_id, $stunde, $tag) + { + $qry = "SELECT 1 FROM campus.tbl_zeitwunsch + WHERE + mitarbeiter_uid=".$this->db_add_param($uid)." + AND stunde=".$this->db_add_param($stunde, FHC_INTEGER)." + AND tag=".$this->db_add_param($tag, FHC_INTEGER). " + AND zeitwunsch_gueltigkeit_id = ".$this->db_add_param($zwg_id, FHC_INTEGER); + if($this->db_query($qry)) + { + if($this->db_num_rows()>0) + return true; + else + return false; + } + else + { + $this->errormsg='Fehler beim Abfragen des Zeitwunsches'; + return false; + } + } +} + ?> \ No newline at end of file From 7c65e2ff5377e35948461488313c9cdc2b5395a2 Mon Sep 17 00:00:00 2001 From: Cris Date: Tue, 23 Nov 2021 15:56:07 +0100 Subject: [PATCH 010/122] Adapted Zeitwunsch GUI to use Zeitwunschgueltigkeit and save by Studiensemester Major adaptation in GUI: - Added Dropdown to select actual / next Studiensemester to edit Zeitwunsch - Added Radiobuttons to allow changing or copying from earlier Studiensemester - By selecting an earlier Studiensemester, the earlier Zeitwunsch is displayed in the table and is ready to edit or just to save. --- cis/private/profile/zeitwunsch.php | 607 +++++++++++++++++++++-------- locale/de-AT/zeitwunsch.php | 1 + locale/en-US/zeitwunsch.php | 1 + 3 files changed, 442 insertions(+), 167 deletions(-) diff --git a/cis/private/profile/zeitwunsch.php b/cis/private/profile/zeitwunsch.php index ff4c35ebd..6e1f800b4 100644 --- a/cis/private/profile/zeitwunsch.php +++ b/cis/private/profile/zeitwunsch.php @@ -18,6 +18,7 @@ * Authors: Christian Paminger , * Andreas Oesterreicher and * Rudolf Hangl . + * Cristina Hainberger */ /** * @brief bietet die Moeglichkeit zur Anzeige und @@ -29,6 +30,7 @@ require_once('../../../include/globals.inc.php'); require_once('../../../include/functions.inc.php'); require_once('../../../include/datum.class.php'); require_once('../../../include/zeitwunsch.class.php'); +require_once('../../../include/zeitwunsch_gueltigkeit.class.php'); require_once('../../../include/studiensemester.class.php'); require_once('../../../include/zeitaufzeichnung_gd.class.php'); require_once('../../../include/benutzer.class.php'); @@ -49,63 +51,192 @@ $uid = get_uid(); if(!check_lektor($uid)) die($p->t('global/keineBerechtigungFuerDieseSeite')); - -$PHP_SELF = $_SERVER['PHP_SELF']; - -if(isset($_GET['type'])) - $type=$_GET['type']; - $datum_obj = new datum(); +// Nächstes Studiensemester +$next_ss = new Studiensemester(); +$next_ss->getNextStudiensemester(); + +// Aktuelles Studiensemester +$akt_ss = new Studiensemester(); +$akt_ss->load($akt_ss->getAkt()); + +// Dropdown: Aktuelles/naechstes Studiensemester zum Bearbeiten +$selected_ss = (isset($_GET['stsem']) && is_string($_GET['stsem'])) ? $_GET['stsem'] : $next_ss->studiensemester_kurzbz; // Default: Nächstes Studiensemester + +// Dropdown: Vergangene Studiensemester zum Kopieren +$selected_past_ss = (isset($_GET['pastStsem']) && is_string($_GET['pastStsem'])) ? $_GET['pastStsem'] : null; // Default: null + //Stundentabelleholen if(! $result_stunde=$db->db_query('SELECT * FROM lehre.tbl_stunde ORDER BY stunde')) die($db->db_last_error()); $num_rows_stunde=$db->db_num_rows($result_stunde); // Zeitwuensche speichern -if (isset($type) && $type=='save') +if (isset($_GET['type']) && $_GET['type'] == 'save') { - $zw = new zeitwunsch(); + // Letzte Zeitwunschgueltigkeit (ZWG) holen + $zwg = new Zeitwunsch_gueltigkeit(); + $zwg->getByUID($uid, 1); + $lastZwg = !empty($zwg->result) ? $zwg->result[0] : null; - for ($t=1;$t<7;$t++) - { - for ($i=0;$i<$num_rows_stunde;$i++) - { - $var='wunsch'.$t.'_'.$i; - if(!isset($_POST[$var])) - continue; - $gewicht=$_POST[$var]; - $stunde=$i+1; + // Check, ob letzte ZWG im nächsten Studiensemester startet. D.h. es existiert ein neuer Zeitwunsch in der Zukunft + $lastZwgStartsNextSemester = (!is_null($lastZwg) && $lastZwg->von >= $next_ss->start) ? true : false; + $zw_zwg_id = null; // ZWG ID, die zum Speichern / Updaten des Zeitwunsches uebergeben wird - $zw->mitarbeiter_uid = $uid; - $zw->stunde = $stunde; - $zw->tag = $t; - $zw->gewicht = $gewicht; - $zw->updateamum = date('Y-m-d H:i:s'); - $zw->updatevon = $uid; + // Wenn allererster Zeitwunsch, also noch keine ZWG vorhanden + if (is_null($lastZwg)) + { + // Wenn ZW fuer naechstes Studiensemester ist + if ($selected_ss == $next_ss->studiensemester_kurzbz) + { + // Neue ZWG setzen: von = Start nächstes Studiensemester, bis offen lassen + $zw_zwg_id = insertZWG($uid, $next_ss->start, null); + } - if (!$zw->exists($uid, $stunde, $t)) - { - $zw->new = true; - $zw->insertamum = date('Y-m-d H:i:s'); - $zw->insertvon = $uid; - } - else - $zw->new = false; + // Wenn Zeitwunsch fuer aktuelles Studiensemester ist + if ($selected_ss == $akt_ss->studiensemester_kurzbz) + { + // Neue ZWG setzen: von = now(), bis offen lassen + $zw_zwg_id = insertZWG($uid, (new DateTime())->format('Y-m-d H:i:s'), null); + } + } - if(!$zw->save()) - echo $zw->errormsg; - } - } + // Wenn mindestens eine ZWG vorhanden + if (!is_null($lastZwg)) + { + // Wenn Zeitwunsch fuer naechstes Studiensemester ist + if ($selected_ss == $next_ss->studiensemester_kurzbz) + { + // Wenn naechstes Studiensemester schon eine eigene ZWG hat + if ($lastZwgStartsNextSemester) + { + // Nur Zeitwunsch dieser ZWG updaten + $zw_zwg_id = $lastZwg->zeitwunsch_gueltigkeit_id; + } + + // Wenn naechstes Studiensemester keine eigene ZWG hat + if (!$lastZwgStartsNextSemester) + { + // Fuer bisher letzte ZWG ein Endedatum setzen: bis = Ende aktuelles Studiensemester + updateZWG($uid, $lastZwg->zeitwunsch_gueltigkeit_id, $akt_ss->ende); + + // Neue ZWG setzen: von = Start nächstes Studiensemester, bis offen lassen + $zw_zwg_id = insertZWG($uid, $next_ss->start, null); + } + } + + // Wenn Zeitwunsch fuer aktuelles Studiensemester ist + if ($selected_ss == $akt_ss->studiensemester_kurzbz) + { + /** + * Check, ob aktuelles Studiensemester eine ZWG hat. + * Wenn die allererste ZWG fuer das naechste Studiensemester erstellt wurde, dann hat das + * aktuelle Studiensemester noch keine ZWG. + * */ + $zwg = new Zeitwunsch_gueltigkeit(); + $zwg->getByStudiensemester($uid, $akt_ss->studiensemester_kurzbz); + $akt_ss_zwg = !empty($zwg->result) ? $zwg->result[0] : null; + + // Keine ZWG fuer aktuelles Studiensemester vorhanden. + // Da eine ZWG ID aber schon vorhanden: USER HAT ERSTMALIG MIT NAECHSTEM STUDIENSEMESTER EINTRAG BEGONNEN + if (is_null($akt_ss_zwg)) + { + // Neue ZWG setzen: von = now(), ende = Ende aktuelles Studiensemester + $zw_zwg_id = insertZWG($uid, (new DateTime())->format('Y-m-d H:i:s'), $akt_ss->ende); + } + + // ZWG für aktuelles Studiensemester ist vorhanden --> SPLIT AKTUELLE STUDIENSEMESTER + if ((!is_null($akt_ss_zwg))) + { + // Wenn am selben Tag schon neue ZWG gespeichert wurde, keine neue ZWG anlegen, sondern diese nur updaten + // Verhindert mehrfache Eintraege, wenn oefters zwischengespeichert wird. + if ((new DateTime($akt_ss_zwg->insertamum))->format('Y-m-d') == (new Datetime())->format('Y-m-d')) + { + updateZWG($uid, $akt_ss_zwg->zeitwunsch_gueltigkeit_id, $akt_ss_zwg->bis); + + $zw_zwg_id = $akt_ss_zwg->zeitwunsch_gueltigkeit_id; + } + else + { + // Neue ZWG setzen: von = now(), bis = Bis von ZWG des aktuellen Studiensemesters uebernehmen: + // -> bis ist entweder Ende aktuelles Studiensemester (wenn ZWG für nächstes Studiensemester vorhanden ist) + // -> sonst ist bis null + $zw_zwg_id = insertZWG($uid, (new DateTime())->format('Y-m-d H:i:s'), $akt_ss_zwg->bis); + + // Fuer bisher letzte ZWG das Endedatum auf heute setzen: bis = now() + // NOTE: MUSS nach dem insert sein + updateZWG($uid, $akt_ss_zwg->zeitwunsch_gueltigkeit_id, (new DateTime())->format('Y-m-d H:i:s')); + } + } + } + } + + // Insert Zeitwunsch mit Zeitwunsch ZWG ID + if (is_numeric($zw_zwg_id)) + { + $zw = new zeitwunsch(); + + for ($t=1;$t<7;$t++) + { + for ($i=0;$i<$num_rows_stunde;$i++) + { + $var='wunsch'.$t.'_'.$i; + if(!isset($_POST[$var])) + continue; + $gewicht=$_POST[$var]; + $stunde=$i+1; + + $zw->mitarbeiter_uid = $uid; + $zw->stunde = $stunde; + $zw->tag = $t; + $zw->gewicht = $gewicht; + $zw->updateamum = date('Y-m-d H:i:s'); + $zw->updatevon = $uid; + $zw->zeitwunsch_gueltigkeit_id = $zw_zwg_id; + + if (!$zw->exists($uid, $zw_zwg_id, $stunde, $t)) + { + $zw->new = true; + $zw->insertamum = date('Y-m-d H:i:s'); + $zw->insertvon = $uid; + } + else + { + $zw->new = false; + } + + if(!$zw->save()) + echo $zw->errormsg; + } + } + } } +/** + * Zeitwunschgueltigkeit fuer Tabelle holen. + * Der Zeitwunsch wird anhand der Zeitwunschgueltigkeit (ZWG) des gewaehlten Studiensemesters ermittelt. + * Das Studiensemester wird, je nach Vorhandensein, in dieser Reihenfolge herangezogen: + * 1. Wenn in Dropdown ausgewaehlt: Vergangenes Studiensemester (zum Kopieren von Zeitwunsch) + * 2. Wenn in Dropdown ausgewaehlt: Aktuelles Studiensemester + * 3: Default: Nächstes Studiensemesters + */ +$zwg = new zeitwunsch_gueltigkeit(); +$tmp_ss = is_null($selected_past_ss) ? $selected_ss : $selected_past_ss; +$zwg->getByStudiensemester($uid, $tmp_ss); +$zwg_id = !empty($zwg->result[0]) ? $zwg->result[0]->zeitwunsch_gueltigkeit_id : null; //null, wenn noch kein ZW + +/** + * Zeitwunsch fuer Tabelle holen + * Wenn noch kein Zeitwunsch vorhanden, bleibt die Zeitwunsch Instanz leer + * */ $zw = new zeitwunsch(); -if(!$zw->loadPerson($uid)) - die($zw->errormsg); - +if (!$zw->loadByZWG($uid, $zwg_id)) +{ + die($zw->errormsg); +} $wunsch = $zw->zeitwunsch; - // Personendaten $person = new benutzer(); if(!$person->load($uid)) @@ -114,12 +245,6 @@ if(!$person->load($uid)) $ma = new mitarbeiter($uid); $fixangestellt = $ma->fixangestellt; -// Nächstes Studiensemester -$ss = new Studiensemester(); -$ss->getNextStudiensemester(); -$next_ss = $ss->studiensemester_kurzbz; -$current_ss = $ss->getakt(); - // Erklärung zu Pausen bei geteilten Arbeitszeiten speichern if (isset($_GET['selbstverwaltete-pause-akt']) && !empty($_GET['submit-akt'])) { @@ -127,10 +252,10 @@ if (isset($_GET['selbstverwaltete-pause-akt']) && !empty($_GET['submit-akt'])) $zeitaufzeichnung_gd = new Zeitaufzeichnung_gd(); $zeitaufzeichnung_gd->uid = $uid; - $zeitaufzeichnung_gd->studiensemester_kurzbz = $current_ss; + $zeitaufzeichnung_gd->studiensemester_kurzbz = $akt_ss->studiensemester_kurzbz; $zeitaufzeichnung_gd->selbstverwaltete_pause = $selbstverwaltete_pause; $za_gd = new Zeitaufzeichnung_gd(); - $za_gd->load($uid, $current_ss); + $za_gd->load($uid, $akt_ss->studiensemester_kurzbz); if ($za_gd->uid) { echo 'Bereits eingetragen'; @@ -147,10 +272,10 @@ if (isset($_GET['selbstverwaltete-pause']) && !empty($_GET['submit'])) $zeitaufzeichnung_gd = new Zeitaufzeichnung_gd(); $zeitaufzeichnung_gd->uid = $uid; - $zeitaufzeichnung_gd->studiensemester_kurzbz = $next_ss; + $zeitaufzeichnung_gd->studiensemester_kurzbz = $next_ss->studiensemester_kurzbz; $zeitaufzeichnung_gd->selbstverwaltete_pause = $selbstverwaltete_pause; $za_gd = new Zeitaufzeichnung_gd(); - $za_gd->load($uid, $next_ss); + $za_gd->load($uid, $next_ss->studiensemester_kurzbz); if ($za_gd->uid) { echo 'Bereits eingetragen'; @@ -162,14 +287,58 @@ if (isset($_GET['selbstverwaltete-pause']) && !empty($_GET['submit'])) } +/** + * Init ZWG Objekt zum Erstellen einer neuen ZWG + */ +function insertZWG($uid, $von, $bis) +{ + $zwg = new Zeitwunsch_gueltigkeit(); + $zwg->new = true; + $zwg->mitarbeiter_uid = $uid; + $zwg->von = $von; + $zwg->bis = $bis; + $zwg->insertvon = $uid; + if ($zwg->save()) + { + return $zwg->zeitwunsch_gueltigkeit_id; + } + else + { + die($zwg->errormsg); + } +} + +/** + * Init ZWG Objekt zum Updaten einer bestehenden ZWG + */ +function updateZWG($uid, $zwg_id, $bis) +{ + $zwg = new Zeitwunsch_gueltigkeit(); + $zwg->new = false; + $zwg->zeitwunsch_gueltigkeit_id = $zwg_id; + $zwg->mitarbeiter_uid = $uid; + $zwg->bis = $bis; + $zwg->updatevon = $uid; + + if (!$zwg->save()) + { + die($zwg->errormsg); + } + + return; +} + + ?> <?php echo $p->t('zeitwunsch/zeitwunsch');?> - + + +
- +
@@ -212,10 +413,10 @@ if (isset($_GET['selbstverwaltete-pause']) && !empty($_GET['submit'])) t('zeitwunsch/geteilteArbeitszeit'); $gd = new zeitaufzeichnung_gd(); - $gd->load($uid, $current_ss); + $gd->load($uid, $akt_ss->studiensemester_kurzbz); if ( ! $gd->uid ) { - echo '

Zustimmung für '.$current_ss.': '; + echo '

Zustimmung für '.$akt_ss->studiensemester_kurzbz.': '; echo 'ja'; echo 'nein'; echo '




'; @@ -223,13 +424,13 @@ if (isset($_GET['selbstverwaltete-pause']) && !empty($_GET['submit'])) else { $zustimmung = ($gd->selbstverwaltete_pause) ? ' erteilt' : 'abgelehnt'; - echo '

Zustimmung für '.$current_ss.': '.$zustimmung.' am '.$datum_obj->formatDatum($gd->insertamum,'d.m.Y H:i:s').'

'; + echo '

Zustimmung für '.$akt_ss->studiensemester_kurzbz.': '.$zustimmung.' am '.$datum_obj->formatDatum($gd->insertamum,'d.m.Y H:i:s').'

'; } $gd = new zeitaufzeichnung_gd(); - $gd->load($uid, $next_ss); + $gd->load($uid, $next_ss->studiensemester_kurzbz); if ( ! $gd->uid ) { - echo '

Zustimmung für '.$next_ss.': '; + echo '

Zustimmung für '.$next_ss->studiensemester_kurzbz.': '; echo 'ja'; echo 'nein'; echo '




'; @@ -237,7 +438,7 @@ if (isset($_GET['selbstverwaltete-pause']) && !empty($_GET['submit'])) else { $zustimmung = ($gd->selbstverwaltete_pause) ? ' erteilt' : 'abgelehnt'; - echo '

Zustimmung für '.$next_ss.': '.$zustimmung.' am '.$datum_obj->formatDatum($gd->insertamum,'d.m.Y H:i:s').'

'; + echo '

Zustimmung für '.$next_ss->studiensemester_kurzbz.': '.$zustimmung.' am '.$datum_obj->formatDatum($gd->insertamum,'d.m.Y H:i:s').'

'; } //var_dump($gd); ?> @@ -250,125 +451,197 @@ if (isset($_GET['selbstverwaltete-pause']) && !empty($_GET['submit'])) - -
-

t('zeitwunsch/zeitwunsch');?>

- ".$p->t('zeitwunsch/zeitwunschVon')." $person->titelpre $person->vorname $person->nachname $person->titelpost
"; - echo $p->t('zeitwunsch/tragenSieInDiesesNormwochenraster')."

"; - echo '
- - '; - echo ''; - for ($i=0;$i<$num_rows_stunde; $i++) - { - $beginn=$db->db_result($result_stunde,$i,'"beginn"'); - $beginn=substr($beginn,0,5); - $ende=$db->db_result($result_stunde,$i,'"ende"'); - $ende=substr($ende,0,5); - $stunde=$db->db_result($result_stunde,$i,'"stunde"'); - echo ""; - } + // FORM Begin + echo ''; + echo ''; - echo ''; + // Mein Zeitwunsch-Semesterplan Dropdown, Default = naechstes Studiensemester + $next_ss_selected = $next_ss->studiensemester_kurzbz == $selected_ss ? 'selected' : ''; + $akt_ss_selected = $akt_ss->studiensemester_kurzbz == $selected_ss ? 'selected' : ''; - for ($j=1; $j<7; $j++) - { - echo ''; - for ($i=0;$i<$num_rows_stunde;$i++) - { - if (isset($wunsch[$j][$i+1])) - $index=$wunsch[$j][$i+1]; - else - $index=1; - //$id='bgcolor'; - //$id.=$index+3; - $bgcolor=$cfgStdBgcolor[$index+3]; - echo ''; - } - echo ''; - } + echo '

Mein Zeitwunsch gültig im: '; + echo ''; + echo '


'; - echo ' -
'.$p->t('global/stunde').'
'.$p->t('global/beginn').'
'.$p->t('global/ende').'
$stunde
$beginn
$ende
'.$tagbez[$lang->index][$j].'

- - - '; + // Tabelle Zeitwunsch-Semesterplan + echo ''; + // Tabelle Kopfzeile + echo ''; + echo ''; + for ($i=0;$i<$num_rows_stunde; $i++) + { + $beginn=$db->db_result($result_stunde,$i,'"beginn"'); + $beginn=substr($beginn,0,5); + $ende=$db->db_result($result_stunde,$i,'"ende"'); + $ende=substr($ende,0,5); + $stunde=$db->db_result($result_stunde,$i,'"stunde"'); + echo ""; + } + echo ''; + // Tabelle Zellen + for ($j=1; $j<7; $j++) + { + echo ''; + for ($i=0;$i<$num_rows_stunde;$i++) + { + if (isset($wunsch[$j][$i+1])) + $index=$wunsch[$j][$i+1]; + else + $index=1; // Defaultwert, wenn kein Zeitwunsch vorhanden - if($zw->updateamum!='') - { - echo ''.$p->t('zeitwunsch/letzteAenderung').': '.$datum_obj->formatDatum($zw->updateamum,'d.m.Y H:i:s').' '.$p->t('zeitwunsch/von').' '.$zw->updatevon.''; - } - ?> + $bgcolor=$cfgStdBgcolor[$index+3]; + echo ''; + } + echo ''; + } + echo '
'.$p->t('global/stunde').'
'.$p->t('global/beginn').'
'.$p->t('global/ende').'
$stunde
$beginn
$ende
'.$tagbez[$lang->index][$j].'
'; -
+ // Zeitwunsch aendern / kopieren + echo '
'; + echo '
'; + echo 'Sie können Ihren Zeitwunsch direkt in der Tabelle bearbeiten oder einen Zeitwunsch eines vergangenen Studiensemester kopieren.
+ Solange Sie keine Änderungen vornehmen, wird Ihr Zeitwunsch immer ins nächste Studiensemester übernommen.


'; -
+ // Radiobuttons aendern / kopieren + $radioChangeChecked = is_null($selected_past_ss) ? 'checked' : ''; + $radioCopyChecked = !is_null($selected_past_ss) ? 'checked' : ''; -

t('zeitwunsch/erklärung');?>:

+ echo '
'; + echo 'Zeitwunsch für '. $selected_ss. ' '; + echo ''; + echo ''; + echo '
'; - "; - echo $p->t('zeitwunsch/formularZumEintragenDerZeitsperren', array($href)); - ?> - -

t('zeitwunsch/kontrollierenSieIhreZeitwuensche');?>!

-

- - - - - - - - - - - - - - - - - - - - - - -
t('zeitwunsch/wert');?> -
t('zeitwunsch/bedeutung');?>
-
-
2
-
  t('zeitwunsch/hierMoechteIchUnterrichten');?>
-
1
-
  t('zeitwunsch/hierKannIchUnterrichten');?>
-
-1
-
  t('zeitwunsch/nurInNotfaellen');?>
-
-2
-
  t('zeitwunsch/hierAufGarKeinenFall');?>
-

t('zeitwunsch/folgendePunkteSindZuBeachten');?>:

-
    -
  1. t('zeitwunsch/verwendenSieDenWertNur');?>
  2. -
  3. t('zeitwunsch/sperrenSieNurTermine');?>
  4. -
  5. t('zeitwunsch/esSolltenFuerJedeStunde');?>
  6. -
-

t('lvplan/fehlerUndFeedback');?> t('lvplan/lvKoordinationsstelle');?>.

-
-
+ echo ''; // end col-xs-12 + echo ''; // end row + + echo '
'; + + $divChangeHidden = !is_null($selected_past_ss) ? 'hidden' : ''; + $divCopyHidden = is_null($selected_past_ss) ? 'hidden' : ''; + + echo '
'; + echo '
'; + echo '' . $p->t('zeitwunsch/tragenSieInDiesesNormwochenraster') .' Klicken Sie danach auf \'Speichern\''; + echo '
'; // end col + echo '
'; + // BLANK + echo '
'; // end col + echo '
'; // end divChangeZWG + + echo '
'; + echo '
'; + echo 'Wählen Sie das gewünschte Studiensemester aus dem rechten Dropdown aus. + Der Zeitwunsch wird dann automatisch in die Tabelle übernommen.
+ Nehmen Sie gegebenenfalls Änderungen vor und klicken Sie dann auf \'Speichern\'.
'; + echo '
'; // end col + + $studiensemester = new Studiensemester(); + $tmp_ss = $selected_ss == $akt_ss->studiensemester_kurzbz ? $studiensemester->getPrevious() : $akt_ss->studiensemester_kurzbz; + $studiensemester->load($tmp_ss); + + $zwg = new Zeitwunsch_gueltigkeit(); + $zwg->getByUID($uid, 4, true, $studiensemester->ende); + $past_zwg_arr = $zwg->result; + echo '
'; + echo ''; + echo '
'; // end col + echo '
'; // end divCopyZWG + + // Speichern - Button + echo '
'; + echo ''; + echo '
'; + + echo '
'; // end row + echo '
'; + ?> + + + +
+
+ t('zeitwunsch/folgendePunkteSindZuBeachten');?>: +
    +
  • t('zeitwunsch/verwendenSieDenWertNur');?>
  • +
  • t('zeitwunsch/sperrenSieNurTermine');?>
  • +
  • t('zeitwunsch/esSolltenFuerJedeStunde');?>
  • +

+

t('lvplan/fehlerUndFeedback');?> t('lvplan/lvKoordinationsstelle');?>.


+
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
t('zeitwunsch/wert');?> +
t('zeitwunsch/bedeutung');?>
+
+
2
+
  t('zeitwunsch/hierMoechteIchUnterrichten');?>
+
1
+
  t('zeitwunsch/hierKannIchUnterrichten');?>
+
-1
+
  t('zeitwunsch/nurInNotfaellen');?>
+
-2
+
  t('zeitwunsch/hierAufGarKeinenFall');?>
+
+
+ + +
+
+

t('zeitsperre/zeitsperren');?>:

+ "; + echo $p->t('zeitwunsch/formularZumEintragenDerZeitsperren', array($href)); + ?> +
+
+ + + + + diff --git a/locale/de-AT/zeitwunsch.php b/locale/de-AT/zeitwunsch.php index a84da2b0e..31424f8f9 100644 --- a/locale/de-AT/zeitwunsch.php +++ b/locale/de-AT/zeitwunsch.php @@ -9,6 +9,7 @@ $this->phrasen['zeitwunsch/von']='von'; $this->phrasen['zeitwunsch/formularZumEintragenDerZeitsperren']='Das Formular zum Eintragen der Zeitsperren finden Sie %s hier'; $this->phrasen['zeitwunsch/erklärung']='Erklärung'; $this->phrasen['zeitwunsch/kontrollierenSieIhreZeitwuensche']='Bitte kontrollieren/ändern Sie Ihre Zeitwünsche und klicken Sie anschließend auf "Speichern"'; +$this->phrasen['zeitwunsch/erstellenSieIhreZeitwuensche']='Bitte erstellen / ändern Sie Ihre Zeitwünsche und klicken Sie anschließend auf "Speichern"'; $this->phrasen['zeitwunsch/wert']='Wert'; $this->phrasen['zeitwunsch/bedeutung']='Bedeutung'; $this->phrasen['zeitwunsch/hierMoechteIchUnterrichten']='Hier möchte ich unterrichten'; diff --git a/locale/en-US/zeitwunsch.php b/locale/en-US/zeitwunsch.php index dd9abdc3e..1a4a93378 100644 --- a/locale/en-US/zeitwunsch.php +++ b/locale/en-US/zeitwunsch.php @@ -9,6 +9,7 @@ $this->phrasen['zeitwunsch/von']='from'; $this->phrasen['zeitwunsch/formularZumEintragenDerZeitsperren']='The form for entering times when you are unavailable to teach can be found %s here'; $this->phrasen['zeitwunsch/erklärung']='Explanation'; $this->phrasen['zeitwunsch/kontrollierenSieIhreZeitwuensche']='Please check/change your preferred teaching times and click "Save"'; +$this->phrasen['zeitwunsch/erstellenSieIhreZeitwuensche']='Please enter / change your preferred teaching times and click "Save"'; $this->phrasen['zeitwunsch/wert']='Value'; $this->phrasen['zeitwunsch/bedeutung']='Meaning'; $this->phrasen['zeitwunsch/hierMoechteIchUnterrichten']='I would like to teach at this time'; From beb850ebe376cda8c64cc46f40acdb61a568781b Mon Sep 17 00:00:00 2001 From: Cris Date: Wed, 24 Nov 2021 09:33:25 +0100 Subject: [PATCH 011/122] Adapted Zeitwunsch zu geteilte Dienste to Bootstrap Style --- cis/private/profile/zeitwunsch.php | 56 +++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 12 deletions(-) diff --git a/cis/private/profile/zeitwunsch.php b/cis/private/profile/zeitwunsch.php index 6e1f800b4..8c28be587 100644 --- a/cis/private/profile/zeitwunsch.php +++ b/cis/private/profile/zeitwunsch.php @@ -406,46 +406,78 @@ function updateZWG($uid, $zwg_id, $bis) -

Zustimmung zur Verplanung in geteilter Arbeitszeit

+

Zustimmung zur Verplanung in geteilter Arbeitszeit

t('zeitwunsch/geteilteArbeitszeit'); + echo '

'; $gd = new zeitaufzeichnung_gd(); $gd->load($uid, $akt_ss->studiensemester_kurzbz); if ( ! $gd->uid ) { - echo '

Zustimmung für '.$akt_ss->studiensemester_kurzbz.': '; - echo 'ja'; - echo 'nein'; - echo '




'; + echo '
'; + echo '
'; + echo '
'; + echo 'Zustimmung für '.$akt_ss->studiensemester_kurzbz.': '; + echo ''; + echo ''; + echo '
'; + echo '
'; + + echo '
'; + echo '
'; + echo '
'; + + echo '
'; + echo '
'; + echo '
'; } else { $zustimmung = ($gd->selbstverwaltete_pause) ? ' erteilt' : 'abgelehnt'; - echo '

Zustimmung für '.$akt_ss->studiensemester_kurzbz.': '.$zustimmung.' am '.$datum_obj->formatDatum($gd->insertamum,'d.m.Y H:i:s').'

'; + echo '

Zustimmung für '.$akt_ss->studiensemester_kurzbz.': '.$zustimmung.' am '.$datum_obj->formatDatum($gd->insertamum,'d.m.Y H:i:s').''; } $gd = new zeitaufzeichnung_gd(); $gd->load($uid, $next_ss->studiensemester_kurzbz); if ( ! $gd->uid ) { - echo '

Zustimmung für '.$next_ss->studiensemester_kurzbz.': '; - echo 'ja'; - echo 'nein'; - echo '




'; + echo '
'; + echo '
'; + echo '
'; + echo 'Zustimmung für '.$next_ss->studiensemester_kurzbz.': '; + echo ''; + echo ''; + echo '
'; + echo '
'; + + echo '
'; + echo ''; + echo '
'; + + echo '
'; + echo '
'; + echo '
'; } else { $zustimmung = ($gd->selbstverwaltete_pause) ? ' erteilt' : 'abgelehnt'; - echo '

Zustimmung für '.$next_ss->studiensemester_kurzbz.': '.$zustimmung.' am '.$datum_obj->formatDatum($gd->insertamum,'d.m.Y H:i:s').'

'; + echo 'Zustimmung für '.$next_ss->studiensemester_kurzbz.': '.$zustimmung.' am '.$datum_obj->formatDatum($gd->insertamum,'d.m.Y H:i:s').''; } //var_dump($gd); ?>

-

From 8d3c54fafcba63d4c9f043601a15faf86d7362f7 Mon Sep 17 00:00:00 2001 From: Cris Date: Wed, 24 Nov 2021 11:48:57 +0100 Subject: [PATCH 012/122] Minor change: Removed default now() for updateamum, Changed code order ...for better maintainance --- cis/private/profile/zeitwunsch.php | 330 ++++++++++++++--------------- system/dbupdate_3.3.php | 2 +- 2 files changed, 166 insertions(+), 166 deletions(-) diff --git a/cis/private/profile/zeitwunsch.php b/cis/private/profile/zeitwunsch.php index 8c28be587..5da272e9f 100644 --- a/cis/private/profile/zeitwunsch.php +++ b/cis/private/profile/zeitwunsch.php @@ -72,171 +72,6 @@ if(! $result_stunde=$db->db_query('SELECT * FROM lehre.tbl_stunde ORDER BY stund die($db->db_last_error()); $num_rows_stunde=$db->db_num_rows($result_stunde); -// Zeitwuensche speichern -if (isset($_GET['type']) && $_GET['type'] == 'save') -{ - // Letzte Zeitwunschgueltigkeit (ZWG) holen - $zwg = new Zeitwunsch_gueltigkeit(); - $zwg->getByUID($uid, 1); - $lastZwg = !empty($zwg->result) ? $zwg->result[0] : null; - - // Check, ob letzte ZWG im nächsten Studiensemester startet. D.h. es existiert ein neuer Zeitwunsch in der Zukunft - $lastZwgStartsNextSemester = (!is_null($lastZwg) && $lastZwg->von >= $next_ss->start) ? true : false; - $zw_zwg_id = null; // ZWG ID, die zum Speichern / Updaten des Zeitwunsches uebergeben wird - - // Wenn allererster Zeitwunsch, also noch keine ZWG vorhanden - if (is_null($lastZwg)) - { - // Wenn ZW fuer naechstes Studiensemester ist - if ($selected_ss == $next_ss->studiensemester_kurzbz) - { - // Neue ZWG setzen: von = Start nächstes Studiensemester, bis offen lassen - $zw_zwg_id = insertZWG($uid, $next_ss->start, null); - } - - // Wenn Zeitwunsch fuer aktuelles Studiensemester ist - if ($selected_ss == $akt_ss->studiensemester_kurzbz) - { - // Neue ZWG setzen: von = now(), bis offen lassen - $zw_zwg_id = insertZWG($uid, (new DateTime())->format('Y-m-d H:i:s'), null); - } - } - - // Wenn mindestens eine ZWG vorhanden - if (!is_null($lastZwg)) - { - // Wenn Zeitwunsch fuer naechstes Studiensemester ist - if ($selected_ss == $next_ss->studiensemester_kurzbz) - { - // Wenn naechstes Studiensemester schon eine eigene ZWG hat - if ($lastZwgStartsNextSemester) - { - // Nur Zeitwunsch dieser ZWG updaten - $zw_zwg_id = $lastZwg->zeitwunsch_gueltigkeit_id; - } - - // Wenn naechstes Studiensemester keine eigene ZWG hat - if (!$lastZwgStartsNextSemester) - { - // Fuer bisher letzte ZWG ein Endedatum setzen: bis = Ende aktuelles Studiensemester - updateZWG($uid, $lastZwg->zeitwunsch_gueltigkeit_id, $akt_ss->ende); - - // Neue ZWG setzen: von = Start nächstes Studiensemester, bis offen lassen - $zw_zwg_id = insertZWG($uid, $next_ss->start, null); - } - } - - // Wenn Zeitwunsch fuer aktuelles Studiensemester ist - if ($selected_ss == $akt_ss->studiensemester_kurzbz) - { - /** - * Check, ob aktuelles Studiensemester eine ZWG hat. - * Wenn die allererste ZWG fuer das naechste Studiensemester erstellt wurde, dann hat das - * aktuelle Studiensemester noch keine ZWG. - * */ - $zwg = new Zeitwunsch_gueltigkeit(); - $zwg->getByStudiensemester($uid, $akt_ss->studiensemester_kurzbz); - $akt_ss_zwg = !empty($zwg->result) ? $zwg->result[0] : null; - - // Keine ZWG fuer aktuelles Studiensemester vorhanden. - // Da eine ZWG ID aber schon vorhanden: USER HAT ERSTMALIG MIT NAECHSTEM STUDIENSEMESTER EINTRAG BEGONNEN - if (is_null($akt_ss_zwg)) - { - // Neue ZWG setzen: von = now(), ende = Ende aktuelles Studiensemester - $zw_zwg_id = insertZWG($uid, (new DateTime())->format('Y-m-d H:i:s'), $akt_ss->ende); - } - - // ZWG für aktuelles Studiensemester ist vorhanden --> SPLIT AKTUELLE STUDIENSEMESTER - if ((!is_null($akt_ss_zwg))) - { - // Wenn am selben Tag schon neue ZWG gespeichert wurde, keine neue ZWG anlegen, sondern diese nur updaten - // Verhindert mehrfache Eintraege, wenn oefters zwischengespeichert wird. - if ((new DateTime($akt_ss_zwg->insertamum))->format('Y-m-d') == (new Datetime())->format('Y-m-d')) - { - updateZWG($uid, $akt_ss_zwg->zeitwunsch_gueltigkeit_id, $akt_ss_zwg->bis); - - $zw_zwg_id = $akt_ss_zwg->zeitwunsch_gueltigkeit_id; - } - else - { - // Neue ZWG setzen: von = now(), bis = Bis von ZWG des aktuellen Studiensemesters uebernehmen: - // -> bis ist entweder Ende aktuelles Studiensemester (wenn ZWG für nächstes Studiensemester vorhanden ist) - // -> sonst ist bis null - $zw_zwg_id = insertZWG($uid, (new DateTime())->format('Y-m-d H:i:s'), $akt_ss_zwg->bis); - - // Fuer bisher letzte ZWG das Endedatum auf heute setzen: bis = now() - // NOTE: MUSS nach dem insert sein - updateZWG($uid, $akt_ss_zwg->zeitwunsch_gueltigkeit_id, (new DateTime())->format('Y-m-d H:i:s')); - } - } - } - } - - // Insert Zeitwunsch mit Zeitwunsch ZWG ID - if (is_numeric($zw_zwg_id)) - { - $zw = new zeitwunsch(); - - for ($t=1;$t<7;$t++) - { - for ($i=0;$i<$num_rows_stunde;$i++) - { - $var='wunsch'.$t.'_'.$i; - if(!isset($_POST[$var])) - continue; - $gewicht=$_POST[$var]; - $stunde=$i+1; - - $zw->mitarbeiter_uid = $uid; - $zw->stunde = $stunde; - $zw->tag = $t; - $zw->gewicht = $gewicht; - $zw->updateamum = date('Y-m-d H:i:s'); - $zw->updatevon = $uid; - $zw->zeitwunsch_gueltigkeit_id = $zw_zwg_id; - - if (!$zw->exists($uid, $zw_zwg_id, $stunde, $t)) - { - $zw->new = true; - $zw->insertamum = date('Y-m-d H:i:s'); - $zw->insertvon = $uid; - } - else - { - $zw->new = false; - } - - if(!$zw->save()) - echo $zw->errormsg; - } - } - } -} - -/** - * Zeitwunschgueltigkeit fuer Tabelle holen. - * Der Zeitwunsch wird anhand der Zeitwunschgueltigkeit (ZWG) des gewaehlten Studiensemesters ermittelt. - * Das Studiensemester wird, je nach Vorhandensein, in dieser Reihenfolge herangezogen: - * 1. Wenn in Dropdown ausgewaehlt: Vergangenes Studiensemester (zum Kopieren von Zeitwunsch) - * 2. Wenn in Dropdown ausgewaehlt: Aktuelles Studiensemester - * 3: Default: Nächstes Studiensemesters - */ -$zwg = new zeitwunsch_gueltigkeit(); -$tmp_ss = is_null($selected_past_ss) ? $selected_ss : $selected_past_ss; -$zwg->getByStudiensemester($uid, $tmp_ss); -$zwg_id = !empty($zwg->result[0]) ? $zwg->result[0]->zeitwunsch_gueltigkeit_id : null; //null, wenn noch kein ZW - -/** - * Zeitwunsch fuer Tabelle holen - * Wenn noch kein Zeitwunsch vorhanden, bleibt die Zeitwunsch Instanz leer - * */ -$zw = new zeitwunsch(); -if (!$zw->loadByZWG($uid, $zwg_id)) -{ - die($zw->errormsg); -} -$wunsch = $zw->zeitwunsch; - // Personendaten $person = new benutzer(); if(!$person->load($uid)) @@ -287,6 +122,171 @@ if (isset($_GET['selbstverwaltete-pause']) && !empty($_GET['submit'])) } +// Zeitwuensche speichern +if (isset($_GET['type']) && $_GET['type'] == 'save') +{ + // Letzte Zeitwunschgueltigkeit (ZWG) holen + $zwg = new Zeitwunsch_gueltigkeit(); + $zwg->getByUID($uid, 1); + $lastZwg = !empty($zwg->result) ? $zwg->result[0] : null; + + // Check, ob letzte ZWG im nächsten Studiensemester startet. D.h. es existiert ein neuer Zeitwunsch in der Zukunft + $lastZwgStartsNextSemester = (!is_null($lastZwg) && $lastZwg->von >= $next_ss->start) ? true : false; + $zw_zwg_id = null; // ZWG ID, die zum Speichern / Updaten des Zeitwunsches uebergeben wird + + // Wenn allererster Zeitwunsch, also noch keine ZWG vorhanden + if (is_null($lastZwg)) + { + // Wenn ZW fuer naechstes Studiensemester ist + if ($selected_ss == $next_ss->studiensemester_kurzbz) + { + // Neue ZWG setzen: von = Start nächstes Studiensemester, bis offen lassen + $zw_zwg_id = insertZWG($uid, $next_ss->start, null); + } + + // Wenn Zeitwunsch fuer aktuelles Studiensemester ist + if ($selected_ss == $akt_ss->studiensemester_kurzbz) + { + // Neue ZWG setzen: von = now(), bis offen lassen + $zw_zwg_id = insertZWG($uid, (new DateTime())->format('Y-m-d H:i:s'), null); + } + } + + // Wenn mindestens eine ZWG vorhanden + if (!is_null($lastZwg)) + { + // Wenn Zeitwunsch fuer naechstes Studiensemester ist + if ($selected_ss == $next_ss->studiensemester_kurzbz) + { + // Wenn naechstes Studiensemester schon eine eigene ZWG hat + if ($lastZwgStartsNextSemester) + { + // Nur Zeitwunsch dieser ZWG updaten + $zw_zwg_id = $lastZwg->zeitwunsch_gueltigkeit_id; + } + + // Wenn naechstes Studiensemester keine eigene ZWG hat + if (!$lastZwgStartsNextSemester) + { + // Fuer bisher letzte ZWG ein Endedatum setzen: bis = Ende aktuelles Studiensemester + updateZWG($uid, $lastZwg->zeitwunsch_gueltigkeit_id, $akt_ss->ende); + + // Neue ZWG setzen: von = Start nächstes Studiensemester, bis offen lassen + $zw_zwg_id = insertZWG($uid, $next_ss->start, null); + } + } + + // Wenn Zeitwunsch fuer aktuelles Studiensemester ist + if ($selected_ss == $akt_ss->studiensemester_kurzbz) + { + /** + * Check, ob aktuelles Studiensemester eine ZWG hat. + * Wenn die allererste ZWG fuer das naechste Studiensemester erstellt wurde, dann hat das + * aktuelle Studiensemester noch keine ZWG. + * */ + $zwg = new Zeitwunsch_gueltigkeit(); + $zwg->getByStudiensemester($uid, $akt_ss->studiensemester_kurzbz); + $akt_ss_zwg = !empty($zwg->result) ? $zwg->result[0] : null; + + // Keine ZWG fuer aktuelles Studiensemester vorhanden. + // Da eine ZWG ID aber schon vorhanden: USER HAT ERSTMALIG MIT NAECHSTEM STUDIENSEMESTER EINTRAG BEGONNEN + if (is_null($akt_ss_zwg)) + { + // Neue ZWG setzen: von = now(), ende = Ende aktuelles Studiensemester + $zw_zwg_id = insertZWG($uid, (new DateTime())->format('Y-m-d H:i:s'), $akt_ss->ende); + } + + // ZWG für aktuelles Studiensemester ist vorhanden --> SPLIT AKTUELLE STUDIENSEMESTER + if ((!is_null($akt_ss_zwg))) + { + // Wenn am selben Tag schon neue ZWG gespeichert wurde, keine neue ZWG anlegen, sondern diese nur updaten + // Verhindert mehrfache Eintraege, wenn oefters zwischengespeichert wird. + if ((new DateTime($akt_ss_zwg->insertamum))->format('Y-m-d') == (new Datetime())->format('Y-m-d')) + { + updateZWG($uid, $akt_ss_zwg->zeitwunsch_gueltigkeit_id, $akt_ss_zwg->bis); + + $zw_zwg_id = $akt_ss_zwg->zeitwunsch_gueltigkeit_id; + } + else + { + // Neue ZWG setzen: von = now(), bis = Bis von ZWG des aktuellen Studiensemesters uebernehmen: + // -> bis ist entweder Ende aktuelles Studiensemester (wenn ZWG für nächstes Studiensemester vorhanden ist) + // -> sonst ist bis null + $zw_zwg_id = insertZWG($uid, (new DateTime())->format('Y-m-d H:i:s'), $akt_ss_zwg->bis); + + // Fuer bisher letzte ZWG das Endedatum auf heute setzen: bis = now() + // NOTE: MUSS nach dem insert sein + updateZWG($uid, $akt_ss_zwg->zeitwunsch_gueltigkeit_id, (new DateTime())->format('Y-m-d H:i:s')); + } + } + } + } + + // Insert Zeitwunsch mit Zeitwunsch ZWG ID + if (is_numeric($zw_zwg_id)) + { + $zw = new zeitwunsch(); + + for ($t=1;$t<7;$t++) + { + for ($i=0;$i<$num_rows_stunde;$i++) + { + $var='wunsch'.$t.'_'.$i; + if(!isset($_POST[$var])) + continue; + $gewicht=$_POST[$var]; + $stunde=$i+1; + + $zw->mitarbeiter_uid = $uid; + $zw->stunde = $stunde; + $zw->tag = $t; + $zw->gewicht = $gewicht; + $zw->updateamum = date('Y-m-d H:i:s'); + $zw->updatevon = $uid; + $zw->zeitwunsch_gueltigkeit_id = $zw_zwg_id; + + if (!$zw->exists($uid, $zw_zwg_id, $stunde, $t)) + { + $zw->new = true; + $zw->insertamum = date('Y-m-d H:i:s'); + $zw->insertvon = $uid; + } + else + { + $zw->new = false; + } + + if(!$zw->save()) + echo $zw->errormsg; + } + } + } +} + +/** + * Zeitwunschgueltigkeit fuer Tabelle holen. + * Der Zeitwunsch wird anhand der Zeitwunschgueltigkeit (ZWG) des gewaehlten Studiensemesters ermittelt. + * Das Studiensemester wird, je nach Vorhandensein, in dieser Reihenfolge herangezogen: + * 1. Wenn in Dropdown ausgewaehlt: Vergangenes Studiensemester (zum Kopieren von Zeitwunsch) + * 2. Wenn in Dropdown ausgewaehlt: Aktuelles Studiensemester + * 3: Default: Nächstes Studiensemesters + */ +$zwg = new zeitwunsch_gueltigkeit(); +$tmp_ss = is_null($selected_past_ss) ? $selected_ss : $selected_past_ss; +$zwg->getByStudiensemester($uid, $tmp_ss); +$zwg_id = !empty($zwg->result[0]) ? $zwg->result[0]->zeitwunsch_gueltigkeit_id : null; //null, wenn noch kein ZW + +/** + * Zeitwunsch fuer Tabelle holen + * Wenn noch kein Zeitwunsch vorhanden, bleibt die Zeitwunsch Instanz leer + * */ +$zw = new zeitwunsch(); +if (!$zw->loadByZWG($uid, $zwg_id)) +{ + die($zw->errormsg); +} +$wunsch = $zw->zeitwunsch; + /** * Init ZWG Objekt zum Erstellen einer neuen ZWG */ diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 192755a23..eb9da9605 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -5519,7 +5519,7 @@ if(!$result = @$db->db_query("SELECT 1 FROM campus.tbl_zeitwunsch_gueltigkeit LI bis DATE, insertamum TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(), insertvon CHARACTER VARYING(32), - updateamum TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(), + updateamum TIMESTAMP WITHOUT TIME ZONE, updatevon CHARACTER VARYING(32) ); From bd71650ac5b4b5821228d139ae11e40eed81478e Mon Sep 17 00:00:00 2001 From: Cris Date: Wed, 24 Nov 2021 16:26:22 +0100 Subject: [PATCH 013/122] Colored Legende for Zeitwunsch-Tabelle --- cis/private/profile/zeitwunsch.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cis/private/profile/zeitwunsch.php b/cis/private/profile/zeitwunsch.php index 5da272e9f..8f65bfbcb 100644 --- a/cis/private/profile/zeitwunsch.php +++ b/cis/private/profile/zeitwunsch.php @@ -627,13 +627,13 @@ function updateZWG($uid, $zwg_id, $bis) - +
2
  t('zeitwunsch/hierMoechteIchUnterrichten');?> - +
1
  t('zeitwunsch/hierKannIchUnterrichten');?> @@ -645,13 +645,13 @@ function updateZWG($uid, $zwg_id, $bis) keine Bedeutung --> - +
-1
  t('zeitwunsch/nurInNotfaellen');?> - +
-2
  t('zeitwunsch/hierAufGarKeinenFall');?> From 6db2748163859b93c032ca003b3953e6ec2e28ad Mon Sep 17 00:00:00 2001 From: Cris Date: Wed, 24 Nov 2021 17:47:01 +0100 Subject: [PATCH 014/122] Added Zeitwunsch Edit lock of if LV had already been assigned - Message is shown and form buttons for changing / copying Zeitwunsch are disabled if LV had already been assigned to lector. - Lector can unlock by clicking on link. --- cis/private/profile/zeitwunsch.php | 81 ++++++++++++++++++++++++++---- 1 file changed, 72 insertions(+), 9 deletions(-) diff --git a/cis/private/profile/zeitwunsch.php b/cis/private/profile/zeitwunsch.php index 8f65bfbcb..c4def2671 100644 --- a/cis/private/profile/zeitwunsch.php +++ b/cis/private/profile/zeitwunsch.php @@ -35,6 +35,7 @@ require_once('../../../include/studiensemester.class.php'); require_once('../../../include/zeitaufzeichnung_gd.class.php'); require_once('../../../include/benutzer.class.php'); require_once('../../../include/mitarbeiter.class.php'); +require_once('../../../include/lehrveranstaltung.class.php'); require_once('../../../include/phrasen.class.php'); require_once('../../../include/sprache.class.php'); @@ -80,6 +81,9 @@ if(!$person->load($uid)) $ma = new mitarbeiter($uid); $fixangestellt = $ma->fixangestellt; +// Check, ob Lektor bereits zugewiesene LVs hat +$isAssignedToLv = checkIsAssigendToLV($uid, $selected_ss); // boolean + // Erklärung zu Pausen bei geteilten Arbeitszeiten speichern if (isset($_GET['selbstverwaltete-pause-akt']) && !empty($_GET['submit-akt'])) { @@ -261,6 +265,10 @@ if (isset($_GET['type']) && $_GET['type'] == 'save') } } } + + // Wenn speichern möglich ist, dann hat der Lektor entweder keine LVs zugeteilt oder hat aktiv die Bearbeitungssperre + // deaktiviert. Bearbeitungssperre wird gesetzt, wenn isAssignedToLv true ist. Deshalb hier mit false überschreiben. + $isAssignedToLv = false; } /** @@ -328,6 +336,23 @@ function updateZWG($uid, $zwg_id, $bis) return; } +/** + * Check, ob Lektor bereits zugewiesene LVs hat + * @param $uid + * @param $studiensemester_kurzbz + * @return bool|void + */ +function checkIsAssigendToLV($uid, $studiensemester_kurzbz) +{ + $lv = new Lehrveranstaltung(); + if (!$lv->getLVByMitarbeiter($uid, $studiensemester_kurzbz)) + { + die($lv->errormsg); + } + + return empty($lv->lehrveranstaltungen) ? false : true; +} + ?> @@ -365,6 +390,22 @@ function updateZWG($uid, $zwg_id, $bis) } $(function() { + // Bearbeitung deaktivieren, wenn Lektor zugewiesene LV im Studiensemester hat + const isAssignedToLv = $('input[name=isAssigendToLv]').val(); + if (isAssignedToLv == 'true') + { + $('input[name=radioZWG]').attr("disabled", true); + $('input[name=submit]').attr("disabled", true); + } + + // Bearbeitung aktivieren, wenn Lektor Aktivierungslink klickt + $('#bearbeitung-aktivieren').click(function(){ + $('input[name=radioZWG]').attr("disabled", false); + $('input[name=submit]').attr("disabled", false); + + $('#divChangeZWG').removeClass('hidden'); + $('#divIsAssignedToLv').addClass('hidden'); + }); // Bei Wechsel von Studiensemester die Seite mit GET params neu laden $('#stsem').change(function(){ @@ -488,6 +529,7 @@ function updateZWG($uid, $zwg_id, $bis) // FORM Begin echo '
'; echo ''; + echo ''; // Mein Zeitwunsch-Semesterplan Dropdown, Default = naechstes Studiensemester $next_ss_selected = $next_ss->studiensemester_kurzbz == $selected_ss ? 'selected' : ''; @@ -537,7 +579,8 @@ function updateZWG($uid, $zwg_id, $bis) echo '
'; echo '
'; echo 'Sie können Ihren Zeitwunsch direkt in der Tabelle bearbeiten oder einen Zeitwunsch eines vergangenen Studiensemester kopieren.
- Solange Sie keine Änderungen vornehmen, wird Ihr Zeitwunsch immer ins nächste Studiensemester übernommen.


'; + Solange Sie keine Änderungen vornehmen, wird Ihr Zeitwunsch immer ins nächste Studiensemester übernommen.
'; + echo '
'; // Radiobuttons aendern / kopieren $radioChangeChecked = is_null($selected_past_ss) ? 'checked' : ''; @@ -549,8 +592,12 @@ function updateZWG($uid, $zwg_id, $bis) echo ' ändern'; echo ''; echo ''; + if ($isAssignedToLv) + { + echo 'LV bereits zugeteilt'; + } echo '
'; echo '
'; // end col-xs-12 @@ -558,10 +605,11 @@ function updateZWG($uid, $zwg_id, $bis) echo '
'; - $divChangeHidden = !is_null($selected_past_ss) ? 'hidden' : ''; - $divCopyHidden = is_null($selected_past_ss) ? 'hidden' : ''; + $divChangeHidden = !is_null($selected_past_ss) || $isAssignedToLv ? 'hidden' : ''; + $divCopyHidden = is_null($selected_past_ss) || $isAssignedToLv ? 'hidden' : ''; + $divIsAssignedToLVHidden = $isAssignedToLv ? '' : 'hidden'; - echo '
'; + echo '
'; echo '
'; echo '' . $p->t('zeitwunsch/tragenSieInDiesesNormwochenraster') .' Klicken Sie danach auf \'Speichern\''; echo '
'; // end col @@ -571,10 +619,10 @@ function updateZWG($uid, $zwg_id, $bis) echo '
'; // end divChangeZWG echo '
'; - echo '
'; - echo 'Wählen Sie das gewünschte Studiensemester aus dem rechten Dropdown aus. + echo '
'; + echo 'Wählen Sie rechts das gewünschte Studiensemester aus. Der Zeitwunsch wird dann automatisch in die Tabelle übernommen.
- Nehmen Sie gegebenenfalls Änderungen vor und klicken Sie dann auf \'Speichern\'.
'; + Nehmen Sie gegebenenfalls Änderungen vor und klicken danach auf \'Speichern\'.'; echo '
'; // end col $studiensemester = new Studiensemester(); @@ -584,7 +632,7 @@ function updateZWG($uid, $zwg_id, $bis) $zwg = new Zeitwunsch_gueltigkeit(); $zwg->getByUID($uid, 4, true, $studiensemester->ende); $past_zwg_arr = $zwg->result; - echo '
'; + echo '
'; echo ''; From aa183a0a0812acd9ab844d7859199b105a0308b8 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 25 Nov 2021 10:56:50 +0100 Subject: [PATCH 015/122] Added 'Alle Werte auf 1 setzen' and 'Aenderungen zuruecknehmen' --- cis/private/profile/zeitwunsch.php | 31 +++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/cis/private/profile/zeitwunsch.php b/cis/private/profile/zeitwunsch.php index c4def2671..9bd56bad9 100644 --- a/cis/private/profile/zeitwunsch.php +++ b/cis/private/profile/zeitwunsch.php @@ -435,6 +435,21 @@ function checkIsAssigendToLV($uid, $studiensemester_kurzbz) window.location = '?stsem='+ stsem + '&pastStsem=' + pastStsem; }); + + // Alle Werte ind Zeitwunschtabelle auf 1 setzen + $('#empty-table').click(function(){ + $('#table-zeitwunsch tr td input').each(function() { + $(this) + .val(1) + .parent().css('background-color', '#CCFFCC'); + }); + }) + + // Aenderungen in Zeitwunschtabelle zurücknehmen -> Seite neu laden + $('#reload-table').click(function(){ + let studiensemester = $('option:selected', '#stsem').val(); + window.location = '?stsem=' + studiensemester; + }) }); @@ -543,7 +558,7 @@ function checkIsAssigendToLV($uid, $studiensemester_kurzbz) echo '
'; // Tabelle Zeitwunsch-Semesterplan - echo ''; + echo '
'; // Tabelle Kopfzeile echo ''; echo ''; @@ -581,7 +596,12 @@ function checkIsAssigendToLV($uid, $studiensemester_kurzbz) echo 'Sie können Ihren Zeitwunsch direkt in der Tabelle bearbeiten oder einen Zeitwunsch eines vergangenen Studiensemester kopieren.
Solange Sie keine Änderungen vornehmen, wird Ihr Zeitwunsch immer ins nächste Studiensemester übernommen.

'; echo '
'; + echo ''; // end col-xs-12 + echo ''; // end row + echo '
'; + + echo '
'; // Radiobuttons aendern / kopieren $radioChangeChecked = is_null($selected_past_ss) ? 'checked' : ''; $radioCopyChecked = !is_null($selected_past_ss) ? 'checked' : ''; @@ -599,11 +619,12 @@ function checkIsAssigendToLV($uid, $studiensemester_kurzbz) echo 'LV bereits zugeteilt'; } echo '
'; + echo '
'; // end col-xs-9 - echo ''; // end col-xs-12 - echo ''; // end row - - echo '
'; + echo '
'; + echo 'Alle Werte auf 1 setzen
'; + echo 'Änderungen zurücknehmen

'; + echo '
'; // end col-xs-3 $divChangeHidden = !is_null($selected_past_ss) || $isAssignedToLv ? 'hidden' : ''; $divCopyHidden = is_null($selected_past_ss) || $isAssignedToLv ? 'hidden' : ''; From 2e9bfc049b51582d9015942b8ddc2f46e4c6895c Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 25 Nov 2021 14:33:23 +0100 Subject: [PATCH 016/122] Corrected: Now retrieving correct data for 'isVerplant' . Correction in function isVerplant() . Also changed var name to isVerplant --- cis/private/profile/zeitwunsch.php | 37 +++++++++++++++--------------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/cis/private/profile/zeitwunsch.php b/cis/private/profile/zeitwunsch.php index 9bd56bad9..84807927c 100644 --- a/cis/private/profile/zeitwunsch.php +++ b/cis/private/profile/zeitwunsch.php @@ -36,6 +36,7 @@ require_once('../../../include/zeitaufzeichnung_gd.class.php'); require_once('../../../include/benutzer.class.php'); require_once('../../../include/mitarbeiter.class.php'); require_once('../../../include/lehrveranstaltung.class.php'); +require_once('../../../include/lehrstunde.class.php'); require_once('../../../include/phrasen.class.php'); require_once('../../../include/sprache.class.php'); @@ -82,7 +83,7 @@ $ma = new mitarbeiter($uid); $fixangestellt = $ma->fixangestellt; // Check, ob Lektor bereits zugewiesene LVs hat -$isAssignedToLv = checkIsAssigendToLV($uid, $selected_ss); // boolean +$isVerplant = checkIsVerplant($uid, $selected_ss); // boolean // Erklärung zu Pausen bei geteilten Arbeitszeiten speichern if (isset($_GET['selbstverwaltete-pause-akt']) && !empty($_GET['submit-akt'])) @@ -267,8 +268,8 @@ if (isset($_GET['type']) && $_GET['type'] == 'save') } // Wenn speichern möglich ist, dann hat der Lektor entweder keine LVs zugeteilt oder hat aktiv die Bearbeitungssperre - // deaktiviert. Bearbeitungssperre wird gesetzt, wenn isAssignedToLv true ist. Deshalb hier mit false überschreiben. - $isAssignedToLv = false; + // deaktiviert. Bearbeitungssperre wird gesetzt, wenn isVerplant true ist. Deshalb hier mit false überschreiben. + $isVerplant = false; } /** @@ -342,15 +343,15 @@ function updateZWG($uid, $zwg_id, $bis) * @param $studiensemester_kurzbz * @return bool|void */ -function checkIsAssigendToLV($uid, $studiensemester_kurzbz) +function checkIsVerplant($uid, $studiensemester_kurzbz) { - $lv = new Lehrveranstaltung(); - if (!$lv->getLVByMitarbeiter($uid, $studiensemester_kurzbz)) + $lstd = new Lehrstunde(); + if (!$lstd->getStundenplanData('stundenplandev', null, $studiensemester_kurzbz, null, $uid)) { - die($lv->errormsg); + die($lstd->errormsg); } - return empty($lv->lehrveranstaltungen) ? false : true; + return empty($lstd->result) ? false : true; } @@ -391,8 +392,8 @@ function checkIsAssigendToLV($uid, $studiensemester_kurzbz) $(function() { // Bearbeitung deaktivieren, wenn Lektor zugewiesene LV im Studiensemester hat - const isAssignedToLv = $('input[name=isAssigendToLv]').val(); - if (isAssignedToLv == 'true') + const isVerplant = $('input[name=isVerplant]').val(); + if (isVerplant == 'true') { $('input[name=radioZWG]').attr("disabled", true); $('input[name=submit]').attr("disabled", true); @@ -404,7 +405,7 @@ function checkIsAssigendToLV($uid, $studiensemester_kurzbz) $('input[name=submit]').attr("disabled", false); $('#divChangeZWG').removeClass('hidden'); - $('#divIsAssignedToLv').addClass('hidden'); + $('#divIsVerplant').addClass('hidden'); }); // Bei Wechsel von Studiensemester die Seite mit GET params neu laden @@ -544,7 +545,7 @@ function checkIsAssigendToLV($uid, $studiensemester_kurzbz) // FORM Begin echo ''; echo ''; - echo ''; + echo ''; // Mein Zeitwunsch-Semesterplan Dropdown, Default = naechstes Studiensemester $next_ss_selected = $next_ss->studiensemester_kurzbz == $selected_ss ? 'selected' : ''; @@ -614,7 +615,7 @@ function checkIsAssigendToLV($uid, $studiensemester_kurzbz) echo ''; - if ($isAssignedToLv) + if ($isVerplant) { echo 'LV bereits zugeteilt'; } @@ -626,9 +627,9 @@ function checkIsAssigendToLV($uid, $studiensemester_kurzbz) echo 'Änderungen zurücknehmen

'; echo '
'; // end col-xs-3 - $divChangeHidden = !is_null($selected_past_ss) || $isAssignedToLv ? 'hidden' : ''; - $divCopyHidden = is_null($selected_past_ss) || $isAssignedToLv ? 'hidden' : ''; - $divIsAssignedToLVHidden = $isAssignedToLv ? '' : 'hidden'; + $divChangeHidden = !is_null($selected_past_ss) || $isVerplant ? 'hidden' : ''; + $divCopyHidden = is_null($selected_past_ss) || $isVerplant ? 'hidden' : ''; + $divIsVerplantHidden = $isVerplant ? '' : 'hidden'; echo '
'; echo '
'; @@ -665,7 +666,7 @@ function checkIsAssigendToLV($uid, $studiensemester_kurzbz) echo '
'; // end col echo '
'; // end divCopyZWG - echo '
'; + echo '
'; echo '
'; echo '
'; echo '
'; @@ -678,7 +679,7 @@ function checkIsAssigendToLV($uid, $studiensemester_kurzbz) echo '
'; // end panel heading echo '
'; // end panel echo '
'; // end col - echo '
'; // end divIsAssignedToLV + echo '
'; // end divIsVerplant // Speichern - Button echo '
'; From ef675226e4bedd9f280a9c673bf42fcd1b4d7f7b Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 25 Nov 2021 14:36:03 +0100 Subject: [PATCH 017/122] Corrected: Now Lehrstunde Class has property 'result' . Errormessages were thrown without result property. Fixed now. . Also added errormsg, when getStundenplanData query fails. --- include/lehrstunde.class.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/include/lehrstunde.class.php b/include/lehrstunde.class.php index 71dbf3319..84cd615ed 100644 --- a/include/lehrstunde.class.php +++ b/include/lehrstunde.class.php @@ -34,6 +34,8 @@ require_once(dirname(__FILE__).'/variable.class.php'); class lehrstunde extends basis_db { + public $result = array(); + public $stundenplan_id; /// @brief ID in der Datenbank public $lehreinheit_id; /// @brief id der Lehreinheit in der DB public $unr; // @brief Unterrichtsnummer @@ -1136,7 +1138,10 @@ class lehrstunde extends basis_db return true; } else + { + $this->errormsg = 'Fehler beim Einholen der Stundenplandaten'; return false; + } } } From eb923cab9bec572539d14cd0d3c6e89d34fa434c Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 29 Nov 2021 11:31:03 +0100 Subject: [PATCH 018/122] Changed: Now using textphrases --- cis/private/profile/zeitwunsch.php | 33 +++++++++++++----------------- locale/de-AT/global.php | 1 + locale/de-AT/lvplan.php | 1 + locale/de-AT/zeitwunsch.php | 18 +++++++++++++++- locale/en-US/global.php | 1 + locale/en-US/lvplan.php | 1 + locale/en-US/zeitwunsch.php | 18 +++++++++++++++- 7 files changed, 52 insertions(+), 21 deletions(-) diff --git a/cis/private/profile/zeitwunsch.php b/cis/private/profile/zeitwunsch.php index 84807927c..8f7bca8c4 100644 --- a/cis/private/profile/zeitwunsch.php +++ b/cis/private/profile/zeitwunsch.php @@ -551,7 +551,7 @@ function checkIsVerplant($uid, $studiensemester_kurzbz) $next_ss_selected = $next_ss->studiensemester_kurzbz == $selected_ss ? 'selected' : ''; $akt_ss_selected = $akt_ss->studiensemester_kurzbz == $selected_ss ? 'selected' : ''; - echo '

Mein Zeitwunsch gültig im: '; + echo '

'. $p->t('zeitwunsch/gueltigIm'); echo ' ändern'; + echo ' '. $p->t('zeitwunsch/kopieren'). ''; echo ''; echo ''; if ($isVerplant) { - echo 'LV bereits zugeteilt'; + echo ''.$p->t('zeitwunsch/stundenBereitsVerplant', array($selected_ss)). ''; } echo '

'; echo ''; // end col-xs-9 echo ''; // end col-xs-3 $divChangeHidden = !is_null($selected_past_ss) || $isVerplant ? 'hidden' : ''; @@ -633,7 +632,7 @@ function checkIsVerplant($uid, $studiensemester_kurzbz) echo '
'; echo '
'; - echo '' . $p->t('zeitwunsch/tragenSieInDiesesNormwochenraster') .' Klicken Sie danach auf \'Speichern\''; + echo '' . $p->t('zeitwunsch/tragenSieInDiesesNormwochenraster') .''; echo '
'; // end col echo '
'; // BLANK @@ -642,9 +641,7 @@ function checkIsVerplant($uid, $studiensemester_kurzbz) echo '
'; echo '
'; - echo 'Wählen Sie rechts das gewünschte Studiensemester aus. - Der Zeitwunsch wird dann automatisch in die Tabelle übernommen.
- Nehmen Sie gegebenenfalls Änderungen vor und klicken danach auf \'Speichern\'.
'; + echo '' . $p->t('zeitwunsch/kopierenText') .''; echo '
'; // end col $studiensemester = new Studiensemester(); @@ -670,12 +667,10 @@ function checkIsVerplant($uid, $studiensemester_kurzbz) echo '
'; echo '
'; echo '
'; - echo 'Bearbeitung deaktiviert: '; - echo 'Ihnen wurden im '. $selected_ss. ' bereits Lehrveranstaltung(en) zugeteilt.
- Bitte stimmen Sie sich vor einer Änderung mit der '. $p->t('lvplan/lvKoordinationsstelle'). ' ab.
- Möchten Sie mit der Bearbeitung fortsetzen? Hier Bearbeitung aktivieren + echo ''. $p->t("zeitwunsch/bearbeitungDeaktiviert"). ': '; + echo ''. $p->t("zeitwunsch/bearbeitungDeaktiviertText", array($selected_ss, MAIL_LVPLAN, $p->t('lvplan/lvPlanung'))). ' + '. $p->t("zeitwunsch/bearbeitungAktivieren"). ' '; - echo '
'; // end panel heading echo '
'; // end panel echo '
'; // end col @@ -700,7 +695,7 @@ function checkIsVerplant($uid, $studiensemester_kurzbz)
  • t('zeitwunsch/sperrenSieNurTermine');?>
  • t('zeitwunsch/esSolltenFuerJedeStunde');?>

  • -

    t('lvplan/fehlerUndFeedback');?> t('lvplan/lvKoordinationsstelle');?>.


    +

    t('lvplan/fehlerUndFeedback');?> t('lvplan/lvPlanung');?>.



    diff --git a/locale/de-AT/global.php b/locale/de-AT/global.php index 586614ece..7104a83a5 100644 --- a/locale/de-AT/global.php +++ b/locale/de-AT/global.php @@ -66,6 +66,7 @@ $this->phrasen['global/pdfExport']='PDF Export'; $this->phrasen['global/und']='und'; $this->phrasen['global/oder']='oder'; $this->phrasen['global/faelligAm']='Fällig am'; +$this->phrasen['global/aenderungenZuruecksetzen']= "Änderungen zurücksetzen"; $this->phrasen['global/username']='Username'; $this->phrasen['global/vorname']='Vorname'; diff --git a/locale/de-AT/lvplan.php b/locale/de-AT/lvplan.php index f0e802896..59fd5169a 100644 --- a/locale/de-AT/lvplan.php +++ b/locale/de-AT/lvplan.php @@ -21,6 +21,7 @@ $this->phrasen['lvplan/lehrverbaende']='Lehrverbände'; $this->phrasen['lvplan/uebersichtDerLehrverbaende']='Übersicht der Lehrverbände'; $this->phrasen['lvplan/fehlerUndFeedback']='Feedback geben'; $this->phrasen['lvplan/lvKoordinationsstelle']='LV-Koordinationsstelle'; +$this->phrasen['lvplan/lvPlanung']='LV-Planung'; $this->phrasen['lvplan/reservierungen']='Reservierungen'; $this->phrasen['lvplan/reservierungWurdeGeloescht']='Reservierung wurde geloescht'; $this->phrasen['lvplan/alleReservierungen']='Alle Reservierungen'; diff --git a/locale/de-AT/zeitwunsch.php b/locale/de-AT/zeitwunsch.php index 31424f8f9..d56494104 100644 --- a/locale/de-AT/zeitwunsch.php +++ b/locale/de-AT/zeitwunsch.php @@ -3,7 +3,7 @@ $this->phrasen['zeitwunsch/falscheWerteEingetragen']='Es duerfen nur die Werte - $this->phrasen['zeitwunsch/zeitwunsch']='Zeitwunsch'; $this->phrasen['zeitwunsch/help']='HELP'; $this->phrasen['zeitwunsch/zeitwunschVon']='Zeitwünsche von'; -$this->phrasen['zeitwunsch/tragenSieInDiesesNormwochenraster']='Tragen Sie in dieses Normwochenraster Ihre Verfügbarkeit in einer durchschnittlichen Arbeitswoche ein.'; +$this->phrasen['zeitwunsch/tragenSieInDiesesNormwochenraster']="Tragen Sie in dieses Normwochenraster Ihre Verfügbarkeit in einer durchschnittlichen Arbeitswoche ein. Klicken Sie danach auf 'Speichern'"; $this->phrasen['zeitwunsch/letzteAenderung']='Letzte Änderung'; $this->phrasen['zeitwunsch/von']='von'; $this->phrasen['zeitwunsch/formularZumEintragenDerZeitsperren']='Das Formular zum Eintragen der Zeitsperren finden Sie %s hier'; @@ -24,4 +24,20 @@ $this->phrasen['zeitwunsch/erklaerung']='Erklärung'; $this->phrasen['zeitwunsch/beiProblemenWendenSieSichAn']='Bei Problemen wenden Sie sich bitte an die'; $this->phrasen['zeitwunsch/profil']='Profil'; $this->phrasen['zeitwunsch/geteilteArbeitszeit']='Ich bin mit der Verplanung meiner Lehre in getrennten Blöcken am Tagesrand einverstanden.'; +$this->phrasen['zeitwunsch/gueltigIm']="Mein Zeitwunsch gültig im: "; +$this->phrasen['zeitwunsch/erklaerungstext']="Sie können Ihren Zeitwunsch direkt in der Tabelle bearbeiten oder einen Zeitwunsch eines vergangenen Studiensemester kopieren.
    + Solange Sie keine Änderungen vornehmen, wird Ihr Zeitwunsch immer ins nächste Studiensemester übernommen."; +$this->phrasen['zeitwunsch/werteAuf1setzen']="Alle Werte auf 1 setzen"; +$this->phrasen['zeitwunsch/kopierenText']="Wählen Sie rechts das gewünschte Studiensemester aus. + Der Zeitwunsch wird dann automatisch in die Tabelle übernommen.
    + Nehmen Sie gegebenenfalls Änderungen vor und klicken danach auf 'Speichern'."; +$this->phrasen['zeitwunsch/kopieren']= "ändern"; +$this->phrasen['zeitwunsch/aendern']= "kopieren von früherem Studiensemester "; +$this->phrasen['zeitwunsch/stundenBereitsVerplant']='Stunden für %s bereits verplant'; +$this->phrasen['zeitwunsch/fuer']='Zeitwunsch für %s  '; +$this->phrasen['zeitwunsch/bearbeitungDeaktiviert']='Bearbeitung deaktiviert'; +$this->phrasen['zeitwunsch/bearbeitungDeaktiviertText']='Ihnen wurden im %s bereits Lehrveranstaltung(en) zugeteilt.
    + Bitte stimmen Sie sich vor einer Änderung mit der %s ab.
    + Möchten Sie mit der Bearbeitung fortsetzen?'; +$this->phrasen['zeitwunsch/bearbeitungAktivieren']='Bearbeitung aktivieren'; ?> diff --git a/locale/en-US/global.php b/locale/en-US/global.php index 5fa89acbb..97f5cfe26 100644 --- a/locale/en-US/global.php +++ b/locale/en-US/global.php @@ -65,6 +65,7 @@ $this->phrasen['global/drucken']='Print'; $this->phrasen['global/und']='and'; $this->phrasen['global/oder']='or'; $this->phrasen['global/faelligAm']='Due on'; +$this->phrasen['global/aenderungenZuruecksetzen']= "Reset changes"; $this->phrasen['global/username']='Username'; $this->phrasen['global/vorname']='First Name'; diff --git a/locale/en-US/lvplan.php b/locale/en-US/lvplan.php index bd2b4b1eb..1a8c865bf 100644 --- a/locale/en-US/lvplan.php +++ b/locale/en-US/lvplan.php @@ -21,6 +21,7 @@ $this->phrasen['lvplan/lehrverbaende']='Teaching Groups'; $this->phrasen['lvplan/uebersichtDerLehrverbaende']='Overview of Teaching Groups'; $this->phrasen['lvplan/fehlerUndFeedback']='Send Feedback'; $this->phrasen['lvplan/lvKoordinationsstelle']='Course-Coordination Office'; +$this->phrasen['lvplan/lvPlanung']='Course-Planning Office'; $this->phrasen['lvplan/reservierungen']='Reservations'; $this->phrasen['lvplan/reservierungWurdeGeloescht'] = 'Reservation successfully deleted'; $this->phrasen['lvplan/alleReservierungen']='All reservations'; diff --git a/locale/en-US/zeitwunsch.php b/locale/en-US/zeitwunsch.php index 1a4a93378..7d89d65f2 100644 --- a/locale/en-US/zeitwunsch.php +++ b/locale/en-US/zeitwunsch.php @@ -3,7 +3,7 @@ $this->phrasen['zeitwunsch/falscheWerteEingetragen']='Invalid input. Only the va $this->phrasen['zeitwunsch/zeitwunsch']='Preferred teaching time'; $this->phrasen['zeitwunsch/help']='HELP'; $this->phrasen['zeitwunsch/zeitwunschVon']='Preferred teaching times for'; -$this->phrasen['zeitwunsch/tragenSieInDiesesNormwochenraster']='Enter your availability for an average week in this standard week grid.'; +$this->phrasen['zeitwunsch/tragenSieInDiesesNormwochenraster']='Enter your availability for an average week in this standard week grid and click "Save"'; $this->phrasen['zeitwunsch/letzteAenderung']='Last Update'; $this->phrasen['zeitwunsch/von']='from'; $this->phrasen['zeitwunsch/formularZumEintragenDerZeitsperren']='The form for entering times when you are unavailable to teach can be found %s here'; @@ -24,4 +24,20 @@ $this->phrasen['zeitwunsch/erklaerung']='Explanation'; $this->phrasen['zeitwunsch/beiProblemenWendenSieSichAn']='If you are having problems, please contact the '; $this->phrasen['zeitwunsch/profil']='Profile'; $this->phrasen['zeitwunsch/geteilteArbeitszeit']='Ich bin mit der Verplanung meiner Lehre in getrennten Blöcken am Tagesrand einverstanden.'; +$this->phrasen['zeitwunsch/gueltigIm']="My preferred times valid in: "; +$this->phrasen['zeitwunsch/erklaerungstext']="You can edit your preferred times directly in the table or copy a your preferred times from a previous semester.
    + As long as you do not make any changes, your preferred times will be carried over to the next study semester."; +$this->phrasen['zeitwunsch/werteAuf1setzen']="Set all values to 1"; +$this->phrasen['zeitwunsch/kopierenText']="Select the desired semester on the right. + Your preferred time of that semester is then automatically transferred to the table.
    + Make changes if necessary and then click on 'Save'."; +$this->phrasen['zeitwunsch/kopieren']= "change"; +$this->phrasen['zeitwunsch/aendern']= "copy from a previous semester"; +$this->phrasen['zeitwunsch/stundenBereitsVerplant']='Hours already scheduled for %s'; +$this->phrasen['zeitwunsch/fuer']='Preferred time for %s  '; +$this->phrasen['zeitwunsch/bearbeitungDeaktiviert']='Editing disabled'; +$this->phrasen['zeitwunsch/bearbeitungDeaktiviertText']='You have already been assigned to course(s) in %s.
    + Please agree with %s before making a change.
    + Do you want to proceed editing?'; +$this->phrasen['zeitwunsch/bearbeitungAktivieren']='Enable editing'; ?> From 70c9489ef36ed37e393f65608ee0c649bb562889 Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 29 Nov 2021 17:38:16 +0100 Subject: [PATCH 019/122] Corrected to retrieve latest Zeitwunschgueltigkeit correctly in getByUID function ...by changing query order --- include/zeitwunsch_gueltigkeit.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/zeitwunsch_gueltigkeit.class.php b/include/zeitwunsch_gueltigkeit.class.php index 20d1d367d..4477551b1 100644 --- a/include/zeitwunsch_gueltigkeit.class.php +++ b/include/zeitwunsch_gueltigkeit.class.php @@ -156,7 +156,7 @@ class zeitwunsch_gueltigkeit extends basis_db // Nach Gueltigkeits-Startdatum sortieren, zuerst die zuletzt gueltigen $qry.= ' - ORDER BY zeitwunsch_gueltigkeit_id DESC, start DESC + ORDER BY start DESC '; // Wenn nur aktive Zeitwunschgueltigkeiten angezeigt werden sollen From 93d9108db784c92b761684dfef1df74f2b34cc31 Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 29 Nov 2021 17:51:08 +0100 Subject: [PATCH 020/122] Added functionality to select Zeitwunschgueltigkeiten in VILESCI . added Dropdown with all Zeitwunschgueltigkeiten . adpated Table to display selected Zeitwunschgueltigkeit --- vilesci/personen/zeitwunsch.php | 55 ++++++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/vilesci/personen/zeitwunsch.php b/vilesci/personen/zeitwunsch.php index 416c6387d..81d1c0c22 100644 --- a/vilesci/personen/zeitwunsch.php +++ b/vilesci/personen/zeitwunsch.php @@ -32,6 +32,8 @@ require_once('../../include/functions.inc.php'); require_once('../../include/globals.inc.php'); require_once('../../include/datum.class.php'); require_once('../../include/benutzerberechtigung.class.php'); +require_once('../../include/zeitwunsch.class.php'); +require_once('../../include/zeitwunsch_gueltigkeit.class.php'); if (!$db = new basis_db()) die('Es konnte keine Verbindung zum Server aufgebaut werden.'); @@ -48,6 +50,20 @@ if (!isset($uid)) { die( "uid nicht gesetzt"); } + +// Zeitwunschgueltigkeit ID ueber Dropdown ausgewaehlt +if (isset($_GET['zwg_id']) && is_string($_GET['zwg_id'])) +{ + $zwg_id = $_GET['zwg_id']; +} +else +{ + // Default: Letzte Zeitwunschgueltigkeit (ZWG) holen + $zwg = new Zeitwunsch_gueltigkeit(); + $zwg->getByUID($uid, 1); + $zwg_id = !empty($zwg->result) ? $zwg->result[0]->zeitwunsch_gueltigkeit_id : null; // NULL, wenn Lektor noch gar keinen ZW hinterlegt hat +} + $uid_benutzer = get_uid(); $rechte = new benutzerberechtigung(); @@ -97,7 +113,12 @@ $updatevon = 0; } } - if(!($erg=$db->db_query("SELECT * FROM campus.tbl_zeitwunsch WHERE mitarbeiter_uid=".$db->db_add_param($uid)))) + if(!($erg=$db->db_query(" + SELECT * + FROM campus.tbl_zeitwunsch + WHERE mitarbeiter_uid = ". $db->db_add_param($uid). " + AND zeitwunsch_gueltigkeit_id = ". $db->db_add_param(($zwg_id)) + ))) die($db->db_last_error()); $num_rows=$db->db_num_rows($erg); for ($i=0;$i<$num_rows;$i++) @@ -135,10 +156,42 @@ $updatevon = 0; Profil + +

    Zeitwünsche von titelpre.' '.$person->vornamen.' '.$person->nachname. ' '.$person->titelpost; ?>

    +Zeitwunschgueltigkeit: +getByUID($uid, null, false); +$zwg_arr = $zwg->result; + +echo ''; +?> +

    '.$p->t('global/stunde').'
    '.$p->t('global/beginn').'
    '.$p->t('global/ende').'
    From 76ca1706787ddfcc68cac0b18df3751be96c6008 Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 29 Nov 2021 19:08:56 +0100 Subject: [PATCH 021/122] Changed: when splitting Zeitwunschgueltigkeit, set ende of last ZWG to 'yesterday' Before it was set to now(). But new ZWG starts with now, therefore last ZWG should end with day before. --- cis/private/profile/zeitwunsch.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cis/private/profile/zeitwunsch.php b/cis/private/profile/zeitwunsch.php index 8f7bca8c4..c8dea109a 100644 --- a/cis/private/profile/zeitwunsch.php +++ b/cis/private/profile/zeitwunsch.php @@ -219,9 +219,9 @@ if (isset($_GET['type']) && $_GET['type'] == 'save') // -> sonst ist bis null $zw_zwg_id = insertZWG($uid, (new DateTime())->format('Y-m-d H:i:s'), $akt_ss_zwg->bis); - // Fuer bisher letzte ZWG das Endedatum auf heute setzen: bis = now() + // Fuer bisher letzte ZWG das Endedatum auf gestern setzen: bis = gestern // NOTE: MUSS nach dem insert sein - updateZWG($uid, $akt_ss_zwg->zeitwunsch_gueltigkeit_id, (new DateTime())->format('Y-m-d H:i:s')); + updateZWG($uid, $akt_ss_zwg->zeitwunsch_gueltigkeit_id, (new DateTime('yesterday'))->format('Y-m-d H:i:s')); } } } From a4cb455e3ec1706b4b2fc7a536f5ba2282a883a7 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 2 Dec 2021 09:35:20 +0100 Subject: [PATCH 022/122] Added creating/editing/viewing Zeitwunschgueltigkeiten in VILESCI Admins can see and work on Zeitwunschgueltigkeiten of lector. Added logic to save/update/display Zeitwuensche by Zeitwunschgueltigkeiten. --- vilesci/personen/zeitwunsch.php | 367 +++++++++++++++++++++++++++----- 1 file changed, 308 insertions(+), 59 deletions(-) diff --git a/vilesci/personen/zeitwunsch.php b/vilesci/personen/zeitwunsch.php index 81d1c0c22..6e0460f5f 100644 --- a/vilesci/personen/zeitwunsch.php +++ b/vilesci/personen/zeitwunsch.php @@ -51,19 +51,6 @@ if (!isset($uid)) die( "uid nicht gesetzt"); } -// Zeitwunschgueltigkeit ID ueber Dropdown ausgewaehlt -if (isset($_GET['zwg_id']) && is_string($_GET['zwg_id'])) -{ - $zwg_id = $_GET['zwg_id']; -} -else -{ - // Default: Letzte Zeitwunschgueltigkeit (ZWG) holen - $zwg = new Zeitwunsch_gueltigkeit(); - $zwg->getByUID($uid, 1); - $zwg_id = !empty($zwg->result) ? $zwg->result[0]->zeitwunsch_gueltigkeit_id : null; // NULL, wenn Lektor noch gar keinen ZW hinterlegt hat -} - $uid_benutzer = get_uid(); $rechte = new benutzerberechtigung(); @@ -74,50 +61,239 @@ if(!$rechte->isBerechtigt('mitarbeiter', null, 's')) $datum_obj = new datum(); $updatevon = 0; - //Stundentabelleholen - if(! $result_stunde=$db->db_query("SELECT * FROM lehre.tbl_stunde ORDER BY stunde")) - die($db->db_last_error()); - $num_rows_stunde=$db->db_num_rows($result_stunde); +// Nächstes Studiensemester +$next_ss = new Studiensemester(); +$next_ss->getNextStudiensemester(); - // Zeitwuensche speichern - if (isset($_POST['save'])) - { - if(!$rechte->isBerechtigt('mitarbeiter/zeitwuensche', null, 'suid')) - die($rechte->errormsg); +// Aktuelles Studiensemester +$akt_ss = new Studiensemester(); +$akt_ss->load($akt_ss->getAkt()); - for ($t=1;$t<7;$t++) - for ($i=0;$i<$num_rows_stunde;$i++) - { - $var='wunsch'.$t.'_'.$i; - //echo $$var; - $gewicht=$_POST[$var]; - $stunde=$i+1; - $query="SELECT * FROM campus.tbl_zeitwunsch WHERE mitarbeiter_uid=".$db->db_add_param($uid)." AND stunde=".$db->db_add_param($stunde, FHC_INTEGER)." AND tag=".$db->db_add_param($t, FHC_INTEGER); - if(! $erg_wunsch=$db->db_query($query)) - die($db->db_last_error()); - $num_rows_wunsch=$db->db_num_rows($erg_wunsch); - if ($num_rows_wunsch==0) - { - $query="INSERT INTO campus.tbl_zeitwunsch (mitarbeiter_uid, stunde, tag, gewicht, updateamum, updatevon) VALUES (".$db->db_add_param($uid).", ".$db->db_add_param($stunde).", ".$db->db_add_param($t).", ".$db->db_add_param($gewicht).", now(), ".$db->db_add_param($uid_benutzer).")"; - if(!($erg=$db->db_query($query))) - die($db->db_last_error()); - } - elseif ($num_rows_wunsch==1) - { - $query="UPDATE campus.tbl_zeitwunsch SET gewicht=".$db->db_add_param($gewicht).", updateamum=now(), updatevon=".$db->db_add_param($uid_benutzer)." WHERE mitarbeiter_uid=".$db->db_add_param($uid)." AND stunde=".$db->db_add_param($stunde)." AND tag=".$db->db_add_param($t); - if(!($erg=$db->db_query($query))) - die($db->db_last_error()); - } - else - die("Zuviele Eintraege!"); - } - } +// Zeitwunschgueltigkeiten nach Semester selektierbar +$selected_ss = (isset($_GET['stsem']) && !empty($_GET['stsem'])) ? $_GET['stsem'] : $next_ss->studiensemester_kurzbz; // Default: Nächstes Studiensemester + +// Default: Letzte Zeitwunschgueltigkeit (ZWG) holen +$zwg = new Zeitwunsch_gueltigkeit(); +$zwg->getByUID($uid, 1); +$selected_zwg = !empty($zwg->result) ? $zwg->result[0] : null; // NULL, wenn Lektor noch gar keinen ZW hinterlegt hat + +// Zeitwunschgueltigkeit ueber Dropdown ZWG gewaehlt +if (isset($_GET['zwg_id'])) +{ + $selected_zwg = !empty($_GET['zwg_id']) ? new Zeitwunsch_gueltigkeit($_GET['zwg_id']) : null; +} + +//Stundentabelleholen +if(! $result_stunde=$db->db_query("SELECT * FROM lehre.tbl_stunde ORDER BY stunde")) + die($db->db_last_error()); +$num_rows_stunde=$db->db_num_rows($result_stunde); + +// Zeitwuensche speichern +if (isset($_POST['save'])) +{ + if(!$rechte->isBerechtigt('mitarbeiter/zeitwuensche', null, 'suid')) + die($rechte->errormsg); + + $selected_ss = isset($_POST['stsem']) ? $_POST['stsem'] : die('Studiensemester fehlt'); + + // Letzte Zeitwunschgueltigkeit (ZWG) holen + $zwg = new Zeitwunsch_gueltigkeit(); + $zwg->getByUID($uid, 1); + $lastZwg = !empty($zwg->result) ? $zwg->result[0] : null; + + // Check, ob letzte ZWG im nächsten Studiensemester startet. D.h. es existiert ein neuer Zeitwunsch in der Zukunft + $lastZwgStartsNextSemester = (!is_null($lastZwg) && $lastZwg->von >= $next_ss->start) ? true : false; + $zw_zwg_id = null; // ZWG ID, die zum Speichern / Updaten des Zeitwunsches uebergeben wird + + // Wenn allererster Zeitwunsch, also noch keine ZWG vorhanden + if (is_null($lastZwg)) + { + // Wenn ZW fuer naechstes Studiensemester ist + if ($selected_ss == $next_ss->studiensemester_kurzbz) + { + // Neue ZWG setzen: von = Start nächstes Studiensemester, bis offen lassen + $zw_zwg_id = insertZWG($uid, $next_ss->start, null, $uid_benutzer); + } + + // Wenn Zeitwunsch fuer aktuelles Studiensemester ist + if ($selected_ss == $akt_ss->studiensemester_kurzbz) + { + // Neue ZWG setzen: von = now(), bis offen lassen + $zw_zwg_id = insertZWG($uid, (new DateTime())->format('Y-m-d H:i:s'), null, $uid_benutzer); + } + } + + // Wenn mindestens eine ZWG vorhanden + if (!is_null($lastZwg)) + { + // Wenn Zeitwunsch fuer naechstes Studiensemester ist + if ($selected_ss == $next_ss->studiensemester_kurzbz) + { + // Wenn naechstes Studiensemester schon eine eigene ZWG hat + if ($lastZwgStartsNextSemester) + { + // Nur Zeitwunsch dieser ZWG updaten + $zw_zwg_id = $lastZwg->zeitwunsch_gueltigkeit_id; + } + + // Wenn naechstes Studiensemester keine eigene ZWG hat + if (!$lastZwgStartsNextSemester) + { + // Fuer bisher letzte ZWG ein Endedatum setzen: bis = Ende aktuelles Studiensemester + updateZWG($uid, $lastZwg->zeitwunsch_gueltigkeit_id, $akt_ss->ende, $uid_benutzer); + + // Neue ZWG setzen: von = Start nächstes Studiensemester, bis offen lassen + $zw_zwg_id = insertZWG($uid, $next_ss->start, null, $uid_benutzer); + } + } + + // Wenn Zeitwunsch fuer aktuelles Studiensemester ist + if ($selected_ss == $akt_ss->studiensemester_kurzbz) + { + /** + * Check, ob aktuelles Studiensemester eine ZWG hat. + * Wenn die allererste ZWG fuer das naechste Studiensemester erstellt wurde, dann hat das + * aktuelle Studiensemester noch keine ZWG. + * */ + $zwg = new Zeitwunsch_gueltigkeit(); + $zwg->getByStudiensemester($uid, $akt_ss->studiensemester_kurzbz); + $akt_ss_zwg = !empty($zwg->result) ? $zwg->result[0] : null; + + // Keine ZWG fuer aktuelles Studiensemester vorhanden. + // Da eine ZWG ID aber schon vorhanden: USER HAT ERSTMALIG MIT NAECHSTEM STUDIENSEMESTER EINTRAG BEGONNEN + if (is_null($akt_ss_zwg)) + { + // Neue ZWG setzen: von = now(), ende = Ende aktuelles Studiensemester + $zw_zwg_id = insertZWG( + $uid, + (new DateTime())->format('Y-m-d H:i:s'), + $akt_ss->ende, + $uid_benutzer + ); + } + + // ZWG für aktuelles Studiensemester ist vorhanden --> SPLIT AKTUELLE STUDIENSEMESTER + if ((!is_null($akt_ss_zwg))) + { + // Wenn am selben Tag schon neue ZWG gespeichert wurde, keine neue ZWG anlegen, sondern diese nur updaten + // Verhindert mehrfache Eintraege, wenn oefters zwischengespeichert wird. + if ((new DateTime($akt_ss_zwg->insertamum))->format('Y-m-d') == (new Datetime())->format('Y-m-d')) + { + updateZWG($uid, $akt_ss_zwg->zeitwunsch_gueltigkeit_id, $akt_ss_zwg->bis, $uid_benutzer); + + $zw_zwg_id = $akt_ss_zwg->zeitwunsch_gueltigkeit_id; + } + else + { + // Neue ZWG setzen: von = now(), bis = Bis von ZWG des aktuellen Studiensemesters uebernehmen: + // -> bis ist entweder Ende aktuelles Studiensemester (wenn ZWG für nächstes Studiensemester vorhanden ist) + // -> sonst ist bis null + $zw_zwg_id = insertZWG( + $uid, + (new DateTime())->format('Y-m-d H:i:s'), + $akt_ss_zwg->bis, + $uid_benutzer + ); + + // Fuer bisher letzte ZWG das Endedatum auf gestern setzen: bis = gestern + // NOTE: MUSS nach dem insert sein + updateZWG( + $uid, + $akt_ss_zwg->zeitwunsch_gueltigkeit_id, + (new DateTime('yesterday'))->format('Y-m-d H:i:s'), + $uid_benutzer + ); + } + } + } + } + + // Insert Zeitwunsch mit Zeitwunsch ZWG ID + if (is_numeric($zw_zwg_id)) + { + for ($t = 1; $t < 7; $t++) + { + for ($i = 0; $i < $num_rows_stunde; $i++) + { + $var = 'wunsch' . $t . '_' . $i; + //echo $$var; + $gewicht = $_POST[$var]; + $stunde = $i + 1; + $query = "SELECT * FROM campus.tbl_zeitwunsch WHERE mitarbeiter_uid=" . $db->db_add_param($uid) . " AND zeitwunsch_gueltigkeit_id =" . $db->db_add_param($zw_zwg_id) . " AND stunde=" . $db->db_add_param($stunde, FHC_INTEGER) . " AND tag=" . $db->db_add_param($t, FHC_INTEGER); + if (!$erg_wunsch = $db->db_query($query)) + die($db->db_last_error()); + $num_rows_wunsch = $db->db_num_rows($erg_wunsch); + if ($num_rows_wunsch == 0) { + $query = "INSERT INTO campus.tbl_zeitwunsch (mitarbeiter_uid, stunde, tag, gewicht, updateamum, updatevon, zeitwunsch_gueltigkeit_id) VALUES (" . $db->db_add_param($uid) . ", " . $db->db_add_param($stunde) . ", " . $db->db_add_param($t) . ", " . $db->db_add_param($gewicht) . ", now(), " . $db->db_add_param($uid_benutzer) . ", " . $db->db_add_param($zw_zwg_id) . ")"; + if (!($erg = $db->db_query($query))) + die($db->db_last_error()); + } elseif ($num_rows_wunsch == 1) { + $query = "UPDATE campus.tbl_zeitwunsch SET gewicht=" . $db->db_add_param($gewicht) . ", updateamum=now(), updatevon=" . $db->db_add_param($uid_benutzer) . " WHERE mitarbeiter_uid=" . $db->db_add_param($uid) . " AND zeitwunsch_gueltigkeit_id=" . $db->db_add_param($zw_zwg_id) . " AND stunde=" . $db->db_add_param($stunde) . " AND tag=" . $db->db_add_param($t); + if (!($erg = $db->db_query($query))) + die($db->db_last_error()); + } + else + die("Zuviele Eintraege!"); + } + } + $selected_zwg = new Zeitwunsch_gueltigkeit($zw_zwg_id); + } +} + +/** + * Init ZWG Objekt zum Erstellen einer neuen ZWG + */ +function insertZWG($uid, $von, $bis, $admin_uid) +{ + $zwg = new Zeitwunsch_gueltigkeit(); + $zwg->new = true; + $zwg->mitarbeiter_uid = $uid; + $zwg->von = $von; + $zwg->bis = $bis; + $zwg->insertvon = $admin_uid; + if ($zwg->save()) + { + return $zwg->zeitwunsch_gueltigkeit_id; + } + else + { + die($zwg->errormsg); + } +} + +/** + * Init ZWG Objekt zum Updaten einer bestehenden ZWG + */ +function updateZWG($uid, $zwg_id, $bis, $admin_uid) +{ + $zwg = new Zeitwunsch_gueltigkeit(); + $zwg->new = false; + $zwg->zeitwunsch_gueltigkeit_id = $zwg_id; + $zwg->mitarbeiter_uid = $uid; + $zwg->bis = $bis; + $zwg->updatevon = $admin_uid; + + if (!$zwg->save()) + { + die($zwg->errormsg); + } + + return; +} + +// Tabellendaten +/** + * Zeitwunschgueltigkeit + * Wurde ueber Dropdown gewaehlt (kann auch null sein, wenn noch kein Zeitwunsch vorliegt) + * ODER ueber Speichernbutton neu erstellt / upgedatet + */ +$selected_zwg_id = !is_null($selected_zwg) ? $selected_zwg->zeitwunsch_gueltigkeit_id : ''; if(!($erg=$db->db_query(" SELECT * FROM campus.tbl_zeitwunsch WHERE mitarbeiter_uid = ". $db->db_add_param($uid). " - AND zeitwunsch_gueltigkeit_id = ". $db->db_add_param(($zwg_id)) + AND zeitwunsch_gueltigkeit_id = ". $db->db_add_param(($selected_zwg_id)) ))) die($db->db_last_error()); $num_rows=$db->db_num_rows($erg); @@ -159,41 +335,74 @@ $updatevon = 0; + -

    Zeitwünsche von titelpre.' '.$person->vornamen.' '.$person->nachname. ' '.$person->titelpost; ?>

    +

    Zeitwünsche von titelpre.' '.$person->vorname.' '.$person->nachname. ' '.$person->titelpost; ?>

    Zeitwunschgueltigkeit: getByUID($uid, null, false); $zwg_arr = $zwg->result; -echo ''; + +// Wenn nächstes Studiensemester hat keine Zeitwunschgueltigkeit hat... +if (!empty($zwg_arr) && $zwg_arr[0]->von < $next_ss->start) +{ + // ...naechstes Studiensemester 'neu anlegen' als Option anzeigen + echo ''; +} + +// Vorhandene Zeitwunschgueltigkeiten foreach($zwg_arr as $row) { $von = (new DateTime($row->von))->format('d.m.Y'); $bis = !is_null($row->bis) ? (new DateTime($row->bis))->format('d.m.Y') : "offen"; + $selected = !empty($selected_zwg_id) && $row->zeitwunsch_gueltigkeit_id == $selected_zwg_id && $row->studiensemester_kurzbz == $selected_ss ? ' selected ' : ''; - $selected = !is_null($zwg_id) && $row->zeitwunsch_gueltigkeit_id == $zwg_id ? ' selected ' : ''; - echo ''; } +// Wenn aktuelles Studiensemester hat keine Zeitwunschgueltigkeit hat, das naechste aber schon +if (count($zwg_arr) == 1 && ($zwg_arr[0]->von >= $next_ss->start)) +{ + // ...aktuelles Studiensemester 'neu anlegen' als Option anzeigen + $selected = $selected_ss == $akt_ss->studiensemester_kurzbz ? "selected" : ''; + echo ''; +} + +// Wenn es noch keine Zeitwuensche gibt +if (empty($zwg_arr)) +{ + // Optionen zum Anlegen einer Zeitwunschgueltigkeit fuer das aktuelle / naechste Studiensemester + $selected = $selected_ss == $akt_ss->studiensemester_kurzbz ? 'selected' : ''; + echo ''; + echo ''; +} echo ''; ?>

    + + +
    '; ?>

    - isBerechtigt('mitarbeiter/zeitwuensche', null, 'suid')) - echo '' + { + /** + * Disablen des Speicherbuttons und Textanzeige, wenn die gewaehlte Zeitwunschgueltigkeit nicht + *die letztgueltige fuer das aktuelle / naechste Studiensemester ist. + **/ + $disabled = getDisabledString($uid, $selected_zwg, $akt_ss, $next_ss); // return 'disabled' oder '' + + // Speichern Button + echo ''; + + if (!empty($disabled)) + { + echo ' Es können nur Zeitwünsche im aktuellen oder im nächsten Studiensemester bearbeitet werden.
    +       Falls mehrere Zeitwünsche im aktuellen Semester gespeichert sind, kann nur der letztgültige geändert werden.
    '; + } + } ?>
    @@ -302,3 +525,29 @@ echo '';

     

    + +getByStudiensemester($uid, $akt_ss->studiensemester_kurzbz); + $lastZwg_id_aktStudsem = empty($zwg->result) ? '' : $zwg->result[0]->zeitwunsch_gueltigkeit_id; + + $zwg = new Zeitwunsch_gueltigkeit(); + $zwg->getByStudiensemester($uid, $next_ss->studiensemester_kurzbz); + $lastZwg_id_nextStudsem = empty($zwg->result) ? '' : $zwg->result[0]->zeitwunsch_gueltigkeit_id; + + return ( + is_null($selected_zwg) + || !is_null($selected_zwg) + && ( + $selected_zwg->zeitwunsch_gueltigkeit_id == $lastZwg_id_aktStudsem + || $selected_zwg->zeitwunsch_gueltigkeit_id == $lastZwg_id_nextStudsem + ) + ) + ? '' + : 'disabled'; + +} From e3ecfbe7822cdfbf720134632475d8e6be9997db Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 2 Dec 2021 09:38:24 +0100 Subject: [PATCH 023/122] Corrected constructor of Zeitwunsch_gueltigkeit Class --- include/zeitwunsch_gueltigkeit.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/zeitwunsch_gueltigkeit.class.php b/include/zeitwunsch_gueltigkeit.class.php index 4477551b1..7f72c72c0 100644 --- a/include/zeitwunsch_gueltigkeit.class.php +++ b/include/zeitwunsch_gueltigkeit.class.php @@ -18,9 +18,9 @@ class zeitwunsch_gueltigkeit extends basis_db public $updatevon; // varchar 32 - public function __construct() + public function __construct($zeitwunsch_gueltigkeit_id = null) { - parent::__construct($zeitwunsch_gueltigkeit_id = null); + parent::__construct(); if (!is_null($zeitwunsch_gueltigkeit_id)) { From d697e189eb2209b6c7d4953fbeca00fa9f2549e5 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 2 Dec 2021 09:43:06 +0100 Subject: [PATCH 024/122] Changed: Now function getByUID of ZWG class retrieves correct amount of ZWG --- include/zeitwunsch_gueltigkeit.class.php | 34 +++++++++++++++--------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/include/zeitwunsch_gueltigkeit.class.php b/include/zeitwunsch_gueltigkeit.class.php index 7f72c72c0..33dfdf65f 100644 --- a/include/zeitwunsch_gueltigkeit.class.php +++ b/include/zeitwunsch_gueltigkeit.class.php @@ -17,6 +17,9 @@ class zeitwunsch_gueltigkeit extends basis_db public $updateamum; // timestamp public $updatevon; // varchar 32 + public $studiensemester_kurzbz; + public $start; + public $ende; public function __construct($zeitwunsch_gueltigkeit_id = null) { @@ -45,6 +48,7 @@ class zeitwunsch_gueltigkeit extends basis_db SELECT * FROM campus.tbl_zeitwunsch_gueltigkeit WHERE zeitwunsch_gueltigkeit_id = '.$this->db_add_param($zeitwunsch_gueltigkeit_id). ' + AND (von < ende AND COALESCE(bis, '. $this->db_add_param($studiensemester->ende).'::date ) > start) ORDER BY von DESC '; @@ -130,13 +134,14 @@ class zeitwunsch_gueltigkeit extends basis_db */ public function getByUID($uid, $limit = null, $activeOnly = true, $bis = null) { - $studiensemester = new Studiensemester(); - $studiensemester->getNextStudiensemester(); - $qry = ' - SELECT zwg.*, studiensemester_kurzbz, start, ende - FROM campus.tbl_zeitwunsch_gueltigkeit zwg, public.tbl_studiensemester - WHERE zwg.mitarbeiter_uid = '.$this->db_add_param($uid); + SELECT zeitwunsch_gueltigkeit_id, mitarbeiter_uid, von, bis, + insertamum, insertvon, updateamum, updatevon, + studiensemester_kurzbz, start, ende + FROM ( + SELECT DISTINCT ON (bis) bis, zeitwunsch_gueltigkeit_id, mitarbeiter_uid, von, insertamum, insertvon, updateamum, updatevon, studiensemester_kurzbz, start, ende + FROM campus.tbl_zeitwunsch_gueltigkeit zwg, public.tbl_studiensemester + WHERE zwg.mitarbeiter_uid = '.$this->db_add_param($uid); // Wenn Bis-Datum angegeben if (!is_null($bis)) @@ -150,13 +155,18 @@ class zeitwunsch_gueltigkeit extends basis_db { // Alle Zeitwuensche $qry.= ' - AND (von < ende AND COALESCE(bis, '. $this->db_add_param($studiensemester->ende).'::date ) > start) + AND (von < ende AND COALESCE(bis, \'2999-12-31\'::date ) > start) '; } + $qry.= ' + ORDER BY bis, von DESC, bis DESC, start ASC + ) temp + '; + // Nach Gueltigkeits-Startdatum sortieren, zuerst die zuletzt gueltigen $qry.= ' - ORDER BY start DESC + ORDER BY von DESC, bis DESC '; // Wenn nur aktive Zeitwunschgueltigkeiten angezeigt werden sollen @@ -164,11 +174,11 @@ class zeitwunsch_gueltigkeit extends basis_db { // ...mit distinct die zuletzt erstellten pro Studiensemester filtern $qry = ' - SELECT DISTINCT ON (start, studiensemester_kurzbz) start, studiensemester_kurzbz, - ende, zeitwunsch_gueltigkeit_id, mitarbeiter_uid, von, bis, + SELECT DISTINCT ON (studiensemester_kurzbz) studiensemester_kurzbz, + start, ende, zeitwunsch_gueltigkeit_id, mitarbeiter_uid, von, bis, insertamum, insertvon, updateamum, updatevon FROM ('. $qry. ') temp - ORDER BY start DESC, studiensemester_kurzbz + ORDER BY studiensemester_kurzbz, von DESC, bis DESC '; } @@ -229,7 +239,7 @@ class zeitwunsch_gueltigkeit extends basis_db FROM campus.tbl_zeitwunsch_gueltigkeit zwg, studiensemester ss WHERE zwg.mitarbeiter_uid = '.$this->db_add_param($uid). ' AND (zwg.von < ss.ende AND COALESCE(zwg.bis, ss.ende) >= ss.start) - ORDER BY von DESC + ORDER BY von DESC, bis DESC '; // Wenn Limit angegeben From 9c0da32841f591a6da9c9d91d87cec110d5e352e Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 6 Dec 2021 15:51:45 +0100 Subject: [PATCH 025/122] Adapted TEMPUS queries to get correct Zeitwunsch (of given Zeitwunschgueltigkeit) Now correct Zeitwunsch is displayed for - Wochenplan and Semesterplan of a lector - Wochenplan, when a LV is added, to which more lectors are assigned: Now query checks to get correct Zeitwunsch of each lector --- include/zeitwunsch.class.php | 39 +++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/include/zeitwunsch.class.php b/include/zeitwunsch.class.php index 9c60c3a7a..4e94ac059 100644 --- a/include/zeitwunsch.class.php +++ b/include/zeitwunsch.class.php @@ -197,15 +197,32 @@ class zeitwunsch extends basis_db } /** - * Alle Zeitwuensche einer Person laden + * Alle Zeitwuensche einer Person laden. + * Um auf einen Zeitwunsch einer bestimmten Zeit, also innerhalb einer bestimmten Zeitwunschgueltigkeit + * zu beschraenken, kann ein Datum mitgegeben werden. * @param uid - * @param datum + * @param datum UNIX timestamp, um Zeitwunsch mit richtiger Zeitwunschgueltigkeit zu ermitteln * @return boolean Ergebnis steht in Array $zeitwunsch wenn true */ public function loadPerson($uid,$datum=null) { + // Default datum: jetzt + if (is_null($datum)) + { + $datum = time(); + } + + $qry = " + SELECT * + FROM campus.tbl_zeitwunsch + JOIN campus.tbl_zeitwunsch_gueltigkeit zwg USING (zeitwunsch_gueltigkeit_id) + WHERE zwg.mitarbeiter_uid=". $this->db_add_param($uid). " + AND ". $this->db_add_param(date('Y-m-d', $datum)). " BETWEEN von AND bis; + "; + + // Zeitwuensche abfragen - if(!$this->db_query("SELECT * FROM campus.tbl_zeitwunsch WHERE mitarbeiter_uid=".$this->db_add_param($uid))) + if(!$this->db_query($qry)) { $this->errormsg = $this->db_last_error(); return false; @@ -292,12 +309,16 @@ class zeitwunsch extends basis_db /** * Zeitwunsch der Personen in Lehreinheiten laden * @param $le_id LehreinheitID Array - * @param $datum + * @param $datum UNIX timestamp Datum, um Zeitwunsch mit richtiger Zeitwunschgueltigkeit zu ermitteln * @return true oder false */ - public function loadZwLE($le_id,$datum=null) + public function loadZwLE($le_id, $datum = null) { - //$this->init(); + // Default datum: jetzt + if (is_null($datum)) + { + $datum = time(); + } // SUB-Select fuer LVAs $sql_query_leid=''; $sql_query_le='SELECT DISTINCT mitarbeiter_uid FROM campus.vw_lehreinheit WHERE '; @@ -308,7 +329,11 @@ class zeitwunsch extends basis_db // Schlechteste Zeitwuensche holen $sql_query='SELECT tag,stunde,min(gewicht) AS gewicht - FROM campus.tbl_zeitwunsch WHERE mitarbeiter_uid IN ('.$sql_query_le.') GROUP BY tag,stunde'; + FROM campus.tbl_zeitwunsch + JOIN campus.tbl_zeitwunsch_gueltigkeit zwg USING (zeitwunsch_gueltigkeit_id) + WHERE zwg.mitarbeiter_uid IN ('.$sql_query_le.') + AND '. $this->db_add_param(date('Y-m-d', $datum)). ' BETWEEN von AND bis + GROUP BY tag,stunde;'; // Zeitwuensche abfragen if(!$this->db_query($sql_query)) From 40871c73a0e0bb333ec996215c5776b30dbd78f8 Mon Sep 17 00:00:00 2001 From: Cris Date: Tue, 7 Dec 2021 17:16:15 +0100 Subject: [PATCH 026/122] Added link to Vilesci Zeitwuensche in TEMPUS Now, when rightclicking on 'Zeitwuensche einsehen' on a lector in Tempus, the Vilesci Zeitwuensche of that lector is opened. --- content/tempusoverlay.js.php | 23 ++++++++++++++ content/tempusoverlay.xul.php | 2 ++ vilesci/personen/zeitwunsch.php | 55 ++++++++++++++++++++++++++++++--- 3 files changed, 75 insertions(+), 5 deletions(-) diff --git a/content/tempusoverlay.js.php b/content/tempusoverlay.js.php index a187f5176..7c539797d 100644 --- a/content/tempusoverlay.js.php +++ b/content/tempusoverlay.js.php @@ -330,6 +330,29 @@ function onLektorSelect(event) } } +function LektorFunktionLoadZeitwunschAdminUrl(){ + + var treeLektor = document.getElementById('tree-lektor'); + var col = treeLektor.columns ? treeLektor.columns["uid"] : "uid"; + try + { + var uid = treeLektor.view.getCellText(treeLektor.currentIndex,col); + } + catch(e) + { + } + + if (uid == '' || uid == undefined) + { + alert('LektorIn auswählen, um Zeitwünsche einsehen zu können.'); + return; + } + else + { + window.open('vilesci/personen/zeitwunsch.php?uid=' + uid); + } +} + function loadURL(event) { var contentFrame = document.getElementById('contentFrame'); diff --git a/content/tempusoverlay.xul.php b/content/tempusoverlay.xul.php index 0e35d71f0..2e1da8b8b 100644 --- a/content/tempusoverlay.xul.php +++ b/content/tempusoverlay.xul.php @@ -186,6 +186,8 @@ echo ' + + diff --git a/vilesci/personen/zeitwunsch.php b/vilesci/personen/zeitwunsch.php index 6e0460f5f..1bc9dd13e 100644 --- a/vilesci/personen/zeitwunsch.php +++ b/vilesci/personen/zeitwunsch.php @@ -337,9 +337,9 @@ $selected_zwg_id = !is_null($selected_zwg) ? $selected_zwg->zeitwunsch_gueltigke $(function(){ // Bei Wechsel von Zeitwunschgueltigkeit die Seite mit GET params neu laden $('#zwg').change(function(){ - let uid = $('input[name="uid"]').val(); - let zeitwunsch_gueltigkeit_id = $('option:selected', this).val(); - let studiensemester = $('option:selected', this).data('stsem'); + var uid = $('input[name="uid"]').val(); + var zeitwunsch_gueltigkeit_id = $('option:selected', this).val(); + var studiensemester = $('option:selected', this).data('stsem'); window.location = '?uid=' + uid + '&zwg_id=' + zeitwunsch_gueltigkeit_id + '&stsem=' + studiensemester; }); @@ -359,7 +359,7 @@ $zwg_arr = $zwg->result; // Dropdown echo '';

     

    + Date: Tue, 7 Dec 2021 17:24:07 +0100 Subject: [PATCH 027/122] Refactored query to load a single Zeitwunschgueltigkeit Instead of limiting returning rows by using ende of next Studiensemester, it is limited by ordering and limiting query now. --- include/zeitwunsch_gueltigkeit.class.php | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/include/zeitwunsch_gueltigkeit.class.php b/include/zeitwunsch_gueltigkeit.class.php index 33dfdf65f..32b51d9f6 100644 --- a/include/zeitwunsch_gueltigkeit.class.php +++ b/include/zeitwunsch_gueltigkeit.class.php @@ -1,7 +1,6 @@ db_add_param($zeitwunsch_gueltigkeit_id). ' - AND (von < ende AND COALESCE(bis, '. $this->db_add_param($studiensemester->ende).'::date ) > start) - ORDER BY von DESC + AND (von < ende AND COALESCE(bis, \'2999-12-31\'::date ) > start) + ORDER BY start ASC + LIMIT 1 '; if ($result = $this->db_query($qry)) @@ -63,6 +63,9 @@ class zeitwunsch_gueltigkeit extends basis_db $this->insertvon = $row->insertvon; $this->updateamum = $row->updateamum; $this->updatevon = $row->updatevon; + $this->studiensemester_kurzbz = $row->studiensemester_kurzbz; + $this->start = $row->start; + $this->ende = $row->ende; } return true; } From 6855686c66edfc0b4f8786b82854e9335c8950d2 Mon Sep 17 00:00:00 2001 From: Cris Date: Tue, 7 Dec 2021 18:25:55 +0100 Subject: [PATCH 028/122] Changed text and removed link mailto LV Planung --- cis/private/profile/zeitwunsch.php | 6 +++--- locale/de-AT/zeitwunsch.php | 9 +++++---- locale/en-US/zeitwunsch.php | 7 ++++--- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/cis/private/profile/zeitwunsch.php b/cis/private/profile/zeitwunsch.php index c8dea109a..1596fd582 100644 --- a/cis/private/profile/zeitwunsch.php +++ b/cis/private/profile/zeitwunsch.php @@ -668,8 +668,9 @@ function checkIsVerplant($uid, $studiensemester_kurzbz) echo '
    '; echo '
    '; echo ''. $p->t("zeitwunsch/bearbeitungDeaktiviert"). ': '; - echo ''. $p->t("zeitwunsch/bearbeitungDeaktiviertText", array($selected_ss, MAIL_LVPLAN, $p->t('lvplan/lvPlanung'))). ' - '. $p->t("zeitwunsch/bearbeitungAktivieren"). ' + echo $p->t("zeitwunsch/bearbeitungDeaktiviertText", array($selected_ss, $p->t('global/studiengangsmanagement'))). ' + '. $p->t("zeitwunsch/bearbeitungAktivieren"). '
    + '. $p->t("zeitwunsch/kompetenzfeldWirdInformiert") . '
    '; echo '
    '; // end panel heading echo '
    '; // end panel @@ -695,7 +696,6 @@ function checkIsVerplant($uid, $studiensemester_kurzbz)
  • t('zeitwunsch/sperrenSieNurTermine');?>
  • t('zeitwunsch/esSolltenFuerJedeStunde');?>

  • -

    t('lvplan/fehlerUndFeedback');?> t('lvplan/lvPlanung');?>.



    diff --git a/locale/de-AT/zeitwunsch.php b/locale/de-AT/zeitwunsch.php index d56494104..35c8c3c99 100644 --- a/locale/de-AT/zeitwunsch.php +++ b/locale/de-AT/zeitwunsch.php @@ -26,7 +26,7 @@ $this->phrasen['zeitwunsch/profil']='Profil'; $this->phrasen['zeitwunsch/geteilteArbeitszeit']='Ich bin mit der Verplanung meiner Lehre in getrennten Blöcken am Tagesrand einverstanden.'; $this->phrasen['zeitwunsch/gueltigIm']="Mein Zeitwunsch gültig im: "; $this->phrasen['zeitwunsch/erklaerungstext']="Sie können Ihren Zeitwunsch direkt in der Tabelle bearbeiten oder einen Zeitwunsch eines vergangenen Studiensemester kopieren.
    - Solange Sie keine Änderungen vornehmen, wird Ihr Zeitwunsch immer ins nächste Studiensemester übernommen."; +
    Solange Sie keine Änderungen vornehmen, wird Ihr Zeitwunsch immer ins nächste Studiensemester übernommen."; $this->phrasen['zeitwunsch/werteAuf1setzen']="Alle Werte auf 1 setzen"; $this->phrasen['zeitwunsch/kopierenText']="Wählen Sie rechts das gewünschte Studiensemester aus. Der Zeitwunsch wird dann automatisch in die Tabelle übernommen.
    @@ -36,8 +36,9 @@ $this->phrasen['zeitwunsch/aendern']= "kopieren von früherem Studiensemeste $this->phrasen['zeitwunsch/stundenBereitsVerplant']='Stunden für %s bereits verplant'; $this->phrasen['zeitwunsch/fuer']='Zeitwunsch für %s  '; $this->phrasen['zeitwunsch/bearbeitungDeaktiviert']='Bearbeitung deaktiviert'; -$this->phrasen['zeitwunsch/bearbeitungDeaktiviertText']='Ihnen wurden im %s bereits Lehrveranstaltung(en) zugeteilt.
    - Bitte stimmen Sie sich vor einer Änderung mit der %s ab.
    - Möchten Sie mit der Bearbeitung fortsetzen?'; +$this->phrasen['zeitwunsch/bearbeitungDeaktiviertText']='Ihnen wurden im %s bereits Lehrveranstaltung(en) zugeteilt.
    + Bitte stimmen Sie sich vor einer Änderung mit dem %s ab.
    + Möchten Sie trotzdem ohne Abstimmung bzw. nach bereits erfolgter Abstimmung fortsetzen?'; $this->phrasen['zeitwunsch/bearbeitungAktivieren']='Bearbeitung aktivieren'; +$this->phrasen['zeitwunsch/kompetenzfeldWirdInformiert']= 'INFO: Kompetenzfeld wird über die Änderung per Mail informiert'; ?> diff --git a/locale/en-US/zeitwunsch.php b/locale/en-US/zeitwunsch.php index 7d89d65f2..d12863710 100644 --- a/locale/en-US/zeitwunsch.php +++ b/locale/en-US/zeitwunsch.php @@ -26,7 +26,7 @@ $this->phrasen['zeitwunsch/profil']='Profile'; $this->phrasen['zeitwunsch/geteilteArbeitszeit']='Ich bin mit der Verplanung meiner Lehre in getrennten Blöcken am Tagesrand einverstanden.'; $this->phrasen['zeitwunsch/gueltigIm']="My preferred times valid in: "; $this->phrasen['zeitwunsch/erklaerungstext']="You can edit your preferred times directly in the table or copy a your preferred times from a previous semester.
    - As long as you do not make any changes, your preferred times will be carried over to the next study semester."; + As long as you do not make any changes, your preferred times will be carried over to the next study semester."; $this->phrasen['zeitwunsch/werteAuf1setzen']="Set all values to 1"; $this->phrasen['zeitwunsch/kopierenText']="Select the desired semester on the right. Your preferred time of that semester is then automatically transferred to the table.
    @@ -37,7 +37,8 @@ $this->phrasen['zeitwunsch/stundenBereitsVerplant']='Hours already scheduled for $this->phrasen['zeitwunsch/fuer']='Preferred time for %s  '; $this->phrasen['zeitwunsch/bearbeitungDeaktiviert']='Editing disabled'; $this->phrasen['zeitwunsch/bearbeitungDeaktiviertText']='You have already been assigned to course(s) in %s.
    - Please agree with %s before making a change.
    - Do you want to proceed editing?'; + Please agree with %s before making a change.
    + Would you still like to continue without agreement or after having agreed?'; $this->phrasen['zeitwunsch/bearbeitungAktivieren']='Enable editing'; +$this->phrasen['zeitwunsch/kompetenzfeldWirdInformiert']= 'INFO: The field of competence will be informed of your changes by email'; ?> From cc770e6324f97ae1da97d5751902aa156dfd0a81 Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 13 Dec 2021 11:29:11 +0100 Subject: [PATCH 029/122] Added param 'nurBevorstehende' to getStundenplanData method in Lehrstunden Class If 'nurBevorstehende' true, only future Studenplandata will be queried. --- include/lehrstunde.class.php | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/include/lehrstunde.class.php b/include/lehrstunde.class.php index 84cd615ed..5cec78f3d 100644 --- a/include/lehrstunde.class.php +++ b/include/lehrstunde.class.php @@ -1062,7 +1062,19 @@ class lehrstunde extends basis_db return $result; } - public function getStundenplanData($db_stpl_table, $lehrveranstaltung_id=null, $studiensemester_kurzbz=null, $lehreinheit_id=null, $mitarbeiter_uid=null, $student_uid=null) + /** + * Holt Studenplandaten. + * + * @param $db_stpl_table + * @param null $lehrveranstaltung_id + * @param null $studiensemester_kurzbz + * @param null $lehreinheit_id + * @param null $mitarbeiter_uid + * @param null $student_uid + * @param false $nurBevorstehende Wenn true, dann werden nur bevorstehende LVs abgefragt. + * @return bool + */ + public function getStundenplanData($db_stpl_table, $lehrveranstaltung_id=null, $studiensemester_kurzbz=null, $lehreinheit_id=null, $mitarbeiter_uid=null, $student_uid=null, $nurBevorstehende = false) { $qry = "SELECT @@ -1114,6 +1126,11 @@ class lehrstunde extends basis_db else return false; + if($nurBevorstehende) + { + $qry.= " AND datum >= NOW()::date "; + } + $qry.="GROUP BY stpl.datum, stpl.unr, stpl.lehreinheit_id, lehrfach.bezeichnung ORDER BY stpl.datum, min(stpl.stunde), stpl.unr, stpl.lehreinheit_id"; From bb7922dd3a7f5dfa6771a1cdeecf5ce9419bf840 Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 13 Dec 2021 11:40:32 +0100 Subject: [PATCH 030/122] Adapted to check only for future verplante LVs Only if LVs are assigend in the future, the lector should be informed and initially blocked to change their Zeitwunsch. For past LVs it is not relevant anymore. --- cis/private/profile/zeitwunsch.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cis/private/profile/zeitwunsch.php b/cis/private/profile/zeitwunsch.php index 1596fd582..2c2a7bce1 100644 --- a/cis/private/profile/zeitwunsch.php +++ b/cis/private/profile/zeitwunsch.php @@ -346,7 +346,7 @@ function updateZWG($uid, $zwg_id, $bis) function checkIsVerplant($uid, $studiensemester_kurzbz) { $lstd = new Lehrstunde(); - if (!$lstd->getStundenplanData('stundenplandev', null, $studiensemester_kurzbz, null, $uid)) + if (!$lstd->getStundenplanData('stundenplandev', null, $studiensemester_kurzbz, null, $uid, null, true)) { die($lstd->errormsg); } From d2c87d6a98bca24a0ea40e2c5209f91f7696f80e Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 20 Dec 2021 09:43:37 +0100 Subject: [PATCH 031/122] Added Class Zeitwunsch_gueltigkeit_model --- .../ressource/Zeitwunsch_gueltigkeit_model.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 application/models/ressource/Zeitwunsch_gueltigkeit_model.php diff --git a/application/models/ressource/Zeitwunsch_gueltigkeit_model.php b/application/models/ressource/Zeitwunsch_gueltigkeit_model.php new file mode 100644 index 000000000..f26e06d3c --- /dev/null +++ b/application/models/ressource/Zeitwunsch_gueltigkeit_model.php @@ -0,0 +1,14 @@ +dbTable = 'campus.tbl_zeitwunsch_gueltigkeit'; + $this->pk = 'zeitwunsch_gueltigkeit_id'; + } +} \ No newline at end of file From b2bd8e071b87c27ad1b3efed8ccc4239c993d00f Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 20 Dec 2021 09:47:21 +0100 Subject: [PATCH 032/122] Added getStudenplanData method to Class Studenplandev_model --- .../models/ressource/Stundenplandev_model.php | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) diff --git a/application/models/ressource/Stundenplandev_model.php b/application/models/ressource/Stundenplandev_model.php index 9fa92ae5e..4a9c9c5ed 100644 --- a/application/models/ressource/Stundenplandev_model.php +++ b/application/models/ressource/Stundenplandev_model.php @@ -61,4 +61,98 @@ class Stundenplandev_model extends DB_Model return $this->execQuery($qry, $parametersArray); } + + /** + * Get Stundenplan data. + * + * @param null $lehrveranstaltung_id + * @param null $studiensemester_kurzbz + * @param null $lehreinheit_id + * @param null $mitarbeiter_uid + * @param null $student_uid + * @param false $nurBevorstehende If true, only future data is retrieved. + * @return array|false|stdClass|null + */ + public function getStundenplanData($lehrveranstaltung_id=null, $studiensemester_kurzbz=null, $lehreinheit_id=null, $mitarbeiter_uid=null, $student_uid=null, $nurBevorstehende = false) + { + $params = array(); + + $qry = "SELECT + stpl.datum, min(stpl.stunde) as stundevon, max(stpl.stunde) as stundebis, + stpl.lehreinheit_id, lehrfach.bezeichnung as lehrfach_bezeichnung, + array_agg( + CASE WHEN gruppe_kurzbz is not null THEN gruppe_kurzbz + ELSE (SELECT UPPER(typ || kurzbz) FROM public.tbl_studiengang WHERE studiengang_kz=stpl.studiengang_kz) || COALESCE(stpl.semester,'0') || COALESCE(stpl.verband,'') || COALESCE(stpl.gruppe,'') + END) as gruppen, array_agg(mitarbeiter_uid) as lektoren, + array_agg(ort_kurzbz) as orte, + array_agg(titel) as titel + FROM + lehre.tbl_stundenplandev as stpl + JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + JOIN lehre.tbl_lehrveranstaltung as lehrfach ON(tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id) + WHERE "; + + if ($lehrveranstaltung_id != '') + { + $qry.=" + lehreinheit_id IN ( + SELECT lehreinheit_id FROM lehre.tbl_lehreinheit + WHERE lehrveranstaltung_id = ? + AND studiensemester_kurzbz = ? + )"; + + $params[]= $lehrveranstaltung_id; + $params[]= $studiensemester_kurzbz; + + } + elseif ($lehreinheit_id!='') + { + $qry.=" lehreinheit_id = ?"; + + $params[]= $lehreinheit_id; + } + elseif ($mitarbeiter_uid != '') + { + $qry.= " + mitarbeiter_uid = ? + AND lehreinheit_id IN ( + SELECT lehreinheit_id + FROM lehre.tbl_lehreinheitmitarbeiter + JOIN lehre.tbl_lehreinheit USING (lehreinheit_id) + WHERE mitarbeiter_uid = ? + AND studiensemester_kurzbz IN ( ? ) + )"; + $params[] = $mitarbeiter_uid; + $params[] = $mitarbeiter_uid; + $params[] = $studiensemester_kurzbz; + } + elseif ($student_uid != '') + { + $qry.=" + lehreinheit_id IN ( + SELECT lehreinheit_id + FROM campus.vw_student_lehrveranstaltung + WHERE uid = ? + AND studiensemester_kurzbz = ? + )"; + + $params[] = $student_uid; + $params[] = $studiensemester_kurzbz; + } + else + return false; + + if($nurBevorstehende) + { + $qry.= " AND datum >= NOW()::date "; + } + + $qry.= " + GROUP BY stpl.datum, stpl.unr, stpl.lehreinheit_id, lehrfach.bezeichnung + ORDER BY stpl.datum, min(stpl.stunde), stpl.unr, stpl.lehreinheit_id + "; + + return $this->execQuery($qry, $params); + } + } From a4ffe9104b46e202c02e0ec3eca253ddcd62d21e Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 20 Dec 2021 09:49:49 +0100 Subject: [PATCH 033/122] Fixed query to get Studiensemest correctly when using getByDate method --- .../models/organisation/Studiensemester_model.php | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/application/models/organisation/Studiensemester_model.php b/application/models/organisation/Studiensemester_model.php index 07783cf0d..742757513 100644 --- a/application/models/organisation/Studiensemester_model.php +++ b/application/models/organisation/Studiensemester_model.php @@ -167,15 +167,13 @@ class Studiensemester_model extends DB_Model if (date_format(date_create($from), 'Y-m-d') > (date_format(date_create($to), 'Y-m-d'))) return success(array()); - $query = "SELECT * - FROM public.tbl_studiensemester - WHERE - (ende > ?::date AND start < ?::date) - OR start = ?::date - OR ende = ?::date - ORDER BY start DESC"; + $query = " + SELECT * + FROM public.tbl_studiensemester + WHERE ( ?::date < ende AND ?::date > start ) + ORDER BY start DESC"; - return $this->execQuery($query, array($from, $to, $from, $to)); + return $this->execQuery($query, array($from, $to)); } /** From c2d9afe3b1422f2e0a8e72dee3c354fa74d03228 Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 20 Dec 2021 09:51:18 +0100 Subject: [PATCH 034/122] Added return value to sendSanchoMail to be able to handle mail error --- application/helpers/hlp_sancho_helper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/helpers/hlp_sancho_helper.php b/application/helpers/hlp_sancho_helper.php index 1653c44e7..d599e40bc 100644 --- a/application/helpers/hlp_sancho_helper.php +++ b/application/helpers/hlp_sancho_helper.php @@ -74,7 +74,7 @@ function sendSanchoMail($vorlage_kurzbz, $vorlage_data, $to, $subject, $headerIm $body = _parseMailContent('Sancho_Mail_Template', $layout); // Send mail - $ci->maillib->send($from, $to, $subject, $body, $alias = '', $cc, $bcc, $altMessage = '', $bulk = true, $autogenerated = true); + return $ci->maillib->send($from, $to, $subject, $body, $alias = '', $cc, $bcc, $altMessage = '', $bulk = true, $autogenerated = true); } /** From 4a2a30ac5eccc81fdc4485f9a5abd288d6d7d693 Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 20 Dec 2021 09:55:29 +0100 Subject: [PATCH 035/122] Added Job mailUpdatedZeitwuensche Job sends Mail to STGL, Kompetenzfeld and LV Planung about todays updated Zeitwuensche. --- application/controllers/jobs/LVPlanJob.php | 349 ++++++++++++++++++++- 1 file changed, 348 insertions(+), 1 deletion(-) diff --git a/application/controllers/jobs/LVPlanJob.php b/application/controllers/jobs/LVPlanJob.php index 2688e5cc9..19359573a 100644 --- a/application/controllers/jobs/LVPlanJob.php +++ b/application/controllers/jobs/LVPlanJob.php @@ -19,7 +19,7 @@ */ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class LVPlanJob extends CLI_Controller +class LVPlanJob extends JOB_Controller { /** * Initialize LVPlanJob Class @@ -149,4 +149,351 @@ class LVPlanJob extends CLI_Controller echo "Failed ".$fail."\n"; } } + + /** + * Send Mail to STGL, Kompetenzfeld and LV Planung about todays updated Zeitwuensche. + * STGL gets list only of lectors who updated future assigend courses concerning their STG. + * Kompetenzleitung gets list only of lectors who updated future assigend courses concerning their KF. + * LVPlanung gets list of lectors who updated future assigend courses. + */ + public function mailUpdatedZeitwuensche() + { + // Load models + $this->load->model('ressource/Stundenplandev_model', 'StundenplandevModel'); + $this->load->model('organisation/Studiensemester_model', 'StundiensemesterModel'); + $this->load->model('education/Lehreinheit_model', 'LehreinheitModel'); + $this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel'); + $this->load->model('person/Person_model', 'PersonModel'); + + // Load libs + $this->load->library('MailLib'); + + // Load helpers + $this->load->helper('hlp_sancho_helper'); + + // Start Log Message + $this->logInfo('Mail updated Zeitwuensche started.'); + + // Get all lectors, who updated their Zeitwunsch today + $db = new DB_Model(); + $result = $db->execReadOnlyQuery(' + SELECT mitarbeiter_uid, von, bis + FROM campus.tbl_zeitwunsch_gueltigkeit + WHERE updateamum::date = NOW()::date + -- dont get updated, if they were also inserted today + AND insertamum::date != NOW()::date + '); + + if (!hasData($result)) + { + return; // No updated Zeitwuensche today + } + + $uidByStg_arr = array(); // Mail data for Studiengang + $uidByOe_arr = array(); // Mail data for Kompetenzfeld + + // Loop through lectors, who updated their Zeitwunsch today + $zwg_arr = getData($result); + foreach ($zwg_arr as $zwg) + { + $next = $this->StudiensemesterModel->getNext(); + + // Get Studiensemester concerend by Zeitwunschgueltigkeit + // If Zeitwunschgueltigkeit Ende is null, get only till next Studiensemester, as LVs will be only + // assigned for actual or next Studiensemester + $result = $this->StudiensemesterModel->getByDate( + $zwg->von, + is_null($zwg->bis) ? $next->retval[0]->ende : $zwg->bis + ); + $studiensemester_arr = getData($result); + + // Get Stundenplan entries of lector of Studiensemester concerned by Zeitwunschgueltigkeit + $result = $this->StundenplandevModel + ->getStundenplanData( + null, + implode(array_column($studiensemester_arr, 'studiensemester_kurzbz'), ', '), + null, + $zwg->mitarbeiter_uid, + null, + true //...but only from now on + ); + + if (!hasData($result)) + { + continue; // Continue if lector has no Stundenplan entries + } + + // Loop through Stundenplan entries + $stundenplanData_arr = getData($result); + foreach ($stundenplanData_arr as $stundenplanData) + { + // Get LE of Stundenplan entry + $result = $this->LehreinheitModel->load($stundenplanData->lehreinheit_id); + + if (!hasData($result)) + { + // Return log error msg if no LE found and continue + $this->logError(' + LVPlanJob / mailUpdatedZeitwuensche did not find Lehreinheit for '. $zwg->mitarbeiter_uid + ); + continue; + } + + $le = getData($result)[0]; + + // GET LV by LE of Stundenplan entry + $result = $this->LehrveranstaltungModel->load($le->lehrveranstaltung_id); + + if (!hasData($result)) + { + // Return log error msg if no LV found and continue + $this->logError(' + LVPlanJob / mailUpdatedZeitwuensche did not find Lehrveranstaltung for '. $zwg->mitarbeiter_uid + ); + continue; + } + + $lv = getData($result)[0]; + + // Build unique Studiengang array + if (!array_key_exists($lv->studiengang_kz, $uidByStg_arr)) + { + $uidByStg_arr[$lv->studiengang_kz] = array($zwg->mitarbeiter_uid); + + } + else + { + // Add unique lector array to Studiengang array + if (!in_array($zwg->mitarbeiter_uid, $uidByStg_arr[$lv->studiengang_kz])) + { + $uidByStg_arr[$lv->studiengang_kz][]= $zwg->mitarbeiter_uid; + } + } + + // Build unique Kompetenzfeld array + if (!array_key_exists($lv->oe_kurzbz, $uidByOe_arr)) + { + $uidByOe_arr[$lv->oe_kurzbz] = array($zwg->mitarbeiter_uid); + + } + else + { + // Add unique lector array to Kompetenzfeld array + if (!in_array($zwg->mitarbeiter_uid, $uidByOe_arr[$lv->oe_kurzbz])) + { + $uidByOe_arr[$lv->oe_kurzbz][]= $zwg->mitarbeiter_uid; + } + } + } + } + + // Send mail to STG Assistenz + $result = $this->_sendMailToStg($uidByStg_arr); + if (isError($result)) + { + $this->logError(getError($result)); + } + + // Send mail to Kompetenzfeld Leitung + $result = $this->_sendMailToKF($uidByOe_arr); + if (isError($result)) + { + $this->logError(getError($result)); + } + + // Send mail to LV Planung + $result = $this->_sendMailToLvPlanung($zwg_arr); + if (isError($result)) + { + $this->logError(getError($result)); + } + + // End Log Message + $this->logInfo('Mail updated Zeitwuensche ended.'); + } + + /** + * Send Mail to STGL Assistance about lectors, who teach LV assigend to the STG, and who updated Zeitwuensche. + * + * @param $data_arr + * @param $stg_bezeichnung + */ + private function _sendMailToStg($data_arr) + { + foreach ($data_arr as $stg_kurzbz => $uid_arr) + { + // Get STG eMail + $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); + $result = $this->StudiengangModel->load($stg_kurzbz); + $stgMail = $result->retval[0]->email; + + $lektorenTabelle = ' +
    + + + + + + '; + + foreach($uid_arr as $uid) + { + $person = $this->PersonModel->getByUid($uid); + $lektorenTabelle.= ' + + + + + '; + } + + $lektorenTabelle.= '
    NameUID
    '. getData($person)[0]->vorname. ' '. getData($person)[0]->nachname. '['. $uid. ']
    '; + + $contentData_arr = array( + 'datentabelle' => $lektorenTabelle + ); + + // Send mail + if (!sendSanchoMail( + 'ZeitwunschUpdateMail', + $contentData_arr, + $stgMail, + 'Änderung von Zeitwünschen', + 'sancho_header_min_bw.jpg', + 'sancho_footer_min_bw.jpg' + )) + { + $errorReceiverUid_arr[]= $stgMail; + } + } + + if (isset($errorReceiverUid_arr)) + { + return error('Mail updated Zeitwuensche could not be sent to :'. implode($errorReceiverUid_arr, ',')); + } + + return success(); + } + + /** + * Send Mail to Kompetenzfeld about lectors, who teach LV assigend to the Kompetenzfeld, and who updated Zeitwuensche. + * + * @param $data_arr + * @param $stg_bezeichnung + */ + private function _sendMailToKF($data_arr) + { + // Send mail to Komepetenzfeld Leitung + foreach ($data_arr as $oe_kurzbz => $uid_arr) + { + // Get KF Leitung eMail + $this->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel'); + $result = $this->BenutzerfunktionModel->loadWhere(array( + 'funktion_kurzbz' => 'Leitung', + 'oe_kurzbz' => $oe_kurzbz + )); + $kfMail = $result->retval[0]->uid. '@'. DOMAIN; + + $lektorenTabelle = ' + + + + + + + '; + + foreach($uid_arr as $uid) + { + $person = $this->PersonModel->getByUid($uid); + $lektorenTabelle.= ' + + + + + '; + } + + $lektorenTabelle.= '
    NameUID
    '. getData($person)[0]->vorname. ' '. getData($person)[0]->nachname. '['. $uid. ']
    '; + + $contentData_arr = array( + 'datentabelle' => $lektorenTabelle + ); + + // Send mail + if (!sendSanchoMail( + 'ZeitwunschUpdateMail', + $contentData_arr, + $kfMail, + 'Änderung von Zeitwünschen', + 'sancho_header_min_bw.jpg', + 'sancho_footer_min_bw.jpg' + )) + { + $errorReceiverUid_arr[]= $kfMail; + } + } + + if (isset($errorReceiverUid_arr)) + { + return error('Mail updated Zeitwuensche could not be sent to :'. implode($errorReceiverUid_arr, ',')); + } + + return success(); + } + + /** + * Send Mail to LV Planung about all lectors who updated Zeitwuensche. + * + * @param $data_arr + * @param $stg_bezeichnung + */ + private function _sendMailToLvPlanung($data_arr) + { + $lektorenTabelle = ' + + + + + + + '; + + foreach($data_arr as $lector) + { + $person = $this->PersonModel->getByUid($lector->mitarbeiter_uid); + $lektorenTabelle.= ' + + + + + '; + } + + $lektorenTabelle.= '
    NameUID
    '. getData($person)[0]->vorname. ' '. getData($person)[0]->nachname. '['. $lector->mitarbeiter_uid. ']
    '; + + $contentData_arr = array( + 'datentabelle' => $lektorenTabelle + ); + + // Send mail + if (!sendSanchoMail( + 'ZeitwunschUpdateMail', + $contentData_arr, + MAIL_LVPLAN, + 'Änderung von Zeitwünschen', + 'sancho_header_min_bw.jpg', + 'sancho_footer_min_bw.jpg' + )) + { + $errorReceiver = MAIL_LVPLAN; + } + + if (isset($errorReceiver)) + { + return error('Mail updated Zeitwuensche could not be sent to :'. $errorReceiver); + } + + return success(); + } } From f73f26c6686d3a95a88fb4f5f4ce1dfc4695322d Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 20 Dec 2021 11:52:26 +0100 Subject: [PATCH 036/122] Added STG mail receiver to be addressed, when lector changes Zeitwunsch... ...and when lector has already been assigned to a course. Only addressing Studiengaenge that are concerned by Zeitwunsch change of lector. LV must be assigned in the selected Studiensemester, but not in the past --- cis/private/profile/zeitwunsch.php | 67 +++++++++++++++++++++++++++++- locale/de-AT/zeitwunsch.php | 2 +- locale/en-US/zeitwunsch.php | 2 +- 3 files changed, 68 insertions(+), 3 deletions(-) diff --git a/cis/private/profile/zeitwunsch.php b/cis/private/profile/zeitwunsch.php index 2c2a7bce1..41a295095 100644 --- a/cis/private/profile/zeitwunsch.php +++ b/cis/private/profile/zeitwunsch.php @@ -32,10 +32,12 @@ require_once('../../../include/datum.class.php'); require_once('../../../include/zeitwunsch.class.php'); require_once('../../../include/zeitwunsch_gueltigkeit.class.php'); require_once('../../../include/studiensemester.class.php'); +require_once('../../../include/studiengang.class.php'); require_once('../../../include/zeitaufzeichnung_gd.class.php'); require_once('../../../include/benutzer.class.php'); require_once('../../../include/mitarbeiter.class.php'); require_once('../../../include/lehrveranstaltung.class.php'); +require_once('../../../include/lehreinheit.class.php'); require_once('../../../include/lehrstunde.class.php'); require_once('../../../include/phrasen.class.php'); require_once('../../../include/sprache.class.php'); @@ -354,6 +356,64 @@ function checkIsVerplant($uid, $studiensemester_kurzbz) return empty($lstd->result) ? false : true; } +/** + * Get Studiengaenge of STG assigend to LVs, to which lector is alredy assigend in + * the given Studiensemester. + * + * @param $uid + * @param $studiensemester_kurzbz + * @return array|void + */ +function getStgOfVerplant($uid, $studiensemester_kurzbz) +{ + $stg_arr = array(); // Mail data for Studiengang + + // Get Stundenplan entries of lector of Studiensemester concerned by Zeitwunschgueltigkeit + $lstd = new Lehrstunde(); + if (!$lstd->getStundenplanData( + 'stundenplandev', + null, + $studiensemester_kurzbz, + null, + $uid, + null, + true)) //...but only from now on + { + die($lstd->errormsg); + } + + // Loop through Stundenplan entries + foreach ($lstd->result as $row) + { + // Get LE of Stundenplan entry + $le = new Lehreinheit($row->lehreinheit_id); + + // GET LV by LE of Stundenplan entry + $lv = new Lehrveranstaltung($le->lehrveranstaltung_id); + + // Build Studiengang array + $stg_arr[] = $lv->studiengang_kz; + } + + // Make Studiengang array unique + return array_unique($stg_arr); +} + +/** + * Get Studiengang eMail Addresses. + * @param $stgKz_arr // Studiengang Kennzeichen Array + * @return array + */ +function getStgMail($stgKz_arr) +{ + $stgMail_arr = array(); + foreach($stgKz_arr as $stgKz) + { + $stg = new Studiengang($stgKz); + $stgMail_arr[]= $stg->email; + } + return $stgMail_arr; +} ?> @@ -664,11 +724,16 @@ function checkIsVerplant($uid, $studiensemester_kurzbz) echo '
    '; // end divCopyZWG echo '
    '; + + // Mail Adressen der Studiengaenge, wo Lektor ueber eine LV bereits verplant ist + $stgKzOfVerplant_arr = getStgOfVerplant($uid, $selected_ss); + $stgMail_arr = getStgMail($stgKzOfVerplant_arr); + echo '
    '; echo '
    '; echo '
    '; echo ''. $p->t("zeitwunsch/bearbeitungDeaktiviert"). ': '; - echo $p->t("zeitwunsch/bearbeitungDeaktiviertText", array($selected_ss, $p->t('global/studiengangsmanagement'))). ' + echo $p->t("zeitwunsch/bearbeitungDeaktiviertText", array($selected_ss, implode($stgMail_arr, '; '))). ' '. $p->t("zeitwunsch/bearbeitungAktivieren"). '
    '. $p->t("zeitwunsch/kompetenzfeldWirdInformiert") . ' '; diff --git a/locale/de-AT/zeitwunsch.php b/locale/de-AT/zeitwunsch.php index 35c8c3c99..e9d13a558 100644 --- a/locale/de-AT/zeitwunsch.php +++ b/locale/de-AT/zeitwunsch.php @@ -37,7 +37,7 @@ $this->phrasen['zeitwunsch/stundenBereitsVerplant']='Stunden für %s bereits ver $this->phrasen['zeitwunsch/fuer']='Zeitwunsch für %s  '; $this->phrasen['zeitwunsch/bearbeitungDeaktiviert']='Bearbeitung deaktiviert'; $this->phrasen['zeitwunsch/bearbeitungDeaktiviertText']='Ihnen wurden im %s bereits Lehrveranstaltung(en) zugeteilt.
    - Bitte stimmen Sie sich vor einer Änderung mit dem %s ab.
    + Bitte stimmen Sie sich vor einer Änderung per Mail mit den betroffenen Studiengängen ab.
    Möchten Sie trotzdem ohne Abstimmung bzw. nach bereits erfolgter Abstimmung fortsetzen?'; $this->phrasen['zeitwunsch/bearbeitungAktivieren']='Bearbeitung aktivieren'; $this->phrasen['zeitwunsch/kompetenzfeldWirdInformiert']= 'INFO: Kompetenzfeld wird über die Änderung per Mail informiert'; diff --git a/locale/en-US/zeitwunsch.php b/locale/en-US/zeitwunsch.php index d12863710..7aa8a6932 100644 --- a/locale/en-US/zeitwunsch.php +++ b/locale/en-US/zeitwunsch.php @@ -37,7 +37,7 @@ $this->phrasen['zeitwunsch/stundenBereitsVerplant']='Hours already scheduled for $this->phrasen['zeitwunsch/fuer']='Preferred time for %s  '; $this->phrasen['zeitwunsch/bearbeitungDeaktiviert']='Editing disabled'; $this->phrasen['zeitwunsch/bearbeitungDeaktiviertText']='You have already been assigned to course(s) in %s.
    - Please agree with %s before making a change.
    + Please agree per Mail with the degree programs concerned, before making a change.
    Would you still like to continue without agreement or after having agreed?'; $this->phrasen['zeitwunsch/bearbeitungAktivieren']='Enable editing'; $this->phrasen['zeitwunsch/kompetenzfeldWirdInformiert']= 'INFO: The field of competence will be informed of your changes by email'; From 3202ce877f3f6b0e2a86079254a48522258637f5 Mon Sep 17 00:00:00 2001 From: Cris Date: Tue, 4 Jan 2022 15:48:53 +0100 Subject: [PATCH 037/122] =?UTF-8?q?Added=20new=20Zeitsperretyp=20'Zeitverf?= =?UTF-8?q?=C3=BCgbarkeit'=20(Positive=20Zeitsperre)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- system/dbupdate_3.3.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 5f0880888..017cdfebf 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -5790,6 +5790,20 @@ if (!$result = @$db->db_query("SELECT zeitwunsch_id FROM campus.tbl_zeitwunsch L // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

    Pruefe Tabellen und Attribute!

    '; +// Insert postive Zeitsperre 'Zeitverfuegbarkeit' to tbl_zeitsperretyp +if($result = @$db->db_query("SELECT 1 FROM campus.tbl_zeitsperretyp WHERE zeitsperretyp_kurzbz = 'ZVerfueg';")) +{ + if($db->db_num_rows($result) == 0) + { + $qry = "INSERT INTO campus.tbl_zeitsperretyp(zeitsperretyp_kurzbz, beschreibung) VALUES('ZVerfueg', 'Zeitverfügbarkeit');"; + + if(!$db->db_query($qry)) + echo 'campus.tbl_zeitsperretyp '.$db->db_last_error().'
    '; + else + echo 'campus.tbl_zeitsperretyp: Added value \'ZVerfueg\'
    '; + } +} + $tabellen=array( "bis.tbl_bisorgform" => array("bisorgform_kurzbz","code","bezeichnung"), "bis.tbl_archiv" => array("archiv_id","studiensemester_kurzbz","meldung","html","studiengang_kz","insertamum","insertvon","typ"), From 8dc178fb00c56c0acf533e93ca294abb46e75f18 Mon Sep 17 00:00:00 2001 From: Cris Date: Tue, 4 Jan 2022 15:51:16 +0100 Subject: [PATCH 038/122] =?UTF-8?q?Adapted=20Tempus=20Wochenplan=20GUI=20t?= =?UTF-8?q?o=20display=20positive=20Zeitsperre=20'Zeitverf=C3=BCgbarkeit'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/globals.inc.php | 15 ++++++++------- include/wochenplan.class.php | 4 +++- include/zeitwunsch.class.php | 23 +++++++++++++---------- 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/include/globals.inc.php b/include/globals.inc.php index bbe9cf738..da2fda055 100644 --- a/include/globals.inc.php +++ b/include/globals.inc.php @@ -2,13 +2,14 @@ // Hintergrundfarben fuer Tabellen beim Zeitwunsch global $cfgStdBgcolor; $cfgStdBgcolor=array(); - $cfgStdBgcolor[0]="#CC0000"; - $cfgStdBgcolor[1]="#FF2200"; - $cfgStdBgcolor[2]="#FF9922"; - $cfgStdBgcolor[3]="#FFFF55"; - $cfgStdBgcolor[4]="#C0ECC3"; - $cfgStdBgcolor[5]="#48FA66"; - $cfgStdBgcolor[6]="#CCFFCC"; + $cfgStdBgcolor[0]="#CC0000"; // rot + $cfgStdBgcolor[1]="#FF2200"; // hellrot + $cfgStdBgcolor[2]="#FF9922"; // orange + $cfgStdBgcolor[3]="#FFFF55"; // gelb + $cfgStdBgcolor[4]="#C0ECC3"; // hellgrün mittel + $cfgStdBgcolor[5]="#48FA66"; // dunkelgrün mittel + $cfgStdBgcolor[6]="#CCFFCC"; // hellgrün heller + $cfgStdBgcolor[7]="#59b359 "; // dunkelgrün dunkler // Mehrsprachige Wochentage global $tagbez; diff --git a/include/wochenplan.class.php b/include/wochenplan.class.php index 29b4db23f..0ac59a9ff 100644 --- a/include/wochenplan.class.php +++ b/include/wochenplan.class.php @@ -1235,7 +1235,9 @@ class wochenplan extends basis_db if (isset($wunsch[$i][$j])) { $index=$wunsch[$i][$j]; - if ($index==-3) + + // Negative und positive Zeitsperren beruecksichtigen + if ($index==-3 || $index == 4) { //Wenn eine Zeitsperre eingetragen ist, dann diese im Tooltiptext anzeigen $zeitsperre = new zeitsperre(); diff --git a/include/zeitwunsch.class.php b/include/zeitwunsch.class.php index 4e94ac059..c471bc494 100644 --- a/include/zeitwunsch.class.php +++ b/include/zeitwunsch.class.php @@ -250,7 +250,7 @@ class zeitwunsch extends basis_db // Zeitsperren abfragen $sql=" SELECT - vondatum,vonstunde,bisdatum,bisstunde + zeitsperretyp_kurzbz, vondatum,vonstunde,bisdatum,bisstunde FROM campus.tbl_zeitsperre WHERE @@ -265,6 +265,8 @@ class zeitwunsch extends basis_db } else { + // Zeitsperren negativ (-3) gewichten. + // Ausnahme: positive Zeitsperren: diese positiv (4) gewichten. while($row = $this->db_fetch_object()) { $beginn=montag($datum); @@ -274,20 +276,21 @@ class zeitwunsch extends basis_db //echo "\n".$date_iso."\n".$row->vondatum."\n"; if ($date_iso>$row->vondatum && $date_iso<$row->bisdatum) for ($j=$this->min_stunde;$j<=$this->max_stunde;$j++) - $this->zeitwunsch[$i][$j]=-3; + $this->zeitwunsch[$i][$j] = $row->zeitsperretyp_kurzbz == 'ZVerfueg' ? 4 : -3; + if ($date_iso==$row->vondatum && $date_iso<$row->bisdatum) { if (is_null($row->vonstunde)) $row->vonstunde=$this->min_stunde; for ($j=$row->vonstunde;$j<=$this->max_stunde;$j++) - $this->zeitwunsch[$i][$j]=-3; + $this->zeitwunsch[$i][$j] = $row->zeitsperretyp_kurzbz == 'ZVerfueg' ? 4 : -3; } if ($date_iso>$row->vondatum && $date_iso==$row->bisdatum) { if (is_null($row->bisstunde)) $row->bisstunde=$this->max_stunde; for ($j=$this->min_stunde;$j<=$row->bisstunde;$j++) - $this->zeitwunsch[$i][$j]=-3; + $this->zeitwunsch[$i][$j] = $row->zeitsperretyp_kurzbz == 'ZVerfueg' ? 4 : -3; } if ($date_iso==$row->vondatum && $date_iso==$row->bisdatum) { @@ -296,7 +299,7 @@ class zeitwunsch extends basis_db if (is_null($row->bisstunde)) $row->bisstunde=$this->max_stunde; for ($j=$row->vonstunde;$j<=$row->bisstunde;$j++) - $this->zeitwunsch[$i][$j]=-3; + $this->zeitwunsch[$i][$j] = $row->zeitsperretyp_kurzbz == 'ZVerfueg' ? 4 : -3; } $beginn=jump_day($beginn,1); } @@ -357,7 +360,7 @@ class zeitwunsch extends basis_db // Zeitsperren abfragen $sql=" SELECT - vondatum,vonstunde,bisdatum,bisstunde + zeitsperretyp_kurzbz, vondatum,vonstunde,bisdatum,bisstunde FROM campus.tbl_zeitsperre WHERE @@ -379,20 +382,20 @@ class zeitwunsch extends basis_db //echo "\n".$date_iso."\n".$row->vondatum."\n"; if ($date_iso>$row->vondatum && $date_iso<$row->bisdatum) for ($j=$this->min_stunde;$j<=$this->max_stunde;$j++) - $this->zeitwunsch[$i][$j]=-3; + $this->zeitwunsch[$i][$j]= $row->zeitsperretyp_kurzbz == 'ZVerfueg' ? 4 : -3; if ($date_iso==$row->vondatum && $date_iso<$row->bisdatum) { if (is_null($row->vonstunde)) $row->vonstunde=$this->min_stunde; for ($j=$row->vonstunde;$j<=$this->max_stunde;$j++) - $this->zeitwunsch[$i][$j]=-3; + $this->zeitwunsch[$i][$j]= $row->zeitsperretyp_kurzbz == 'ZVerfueg' ? 4 : -3; } if ($date_iso>$row->vondatum && $date_iso==$row->bisdatum) { if (is_null($row->bisstunde)) $row->bisstunde=$this->max_stunde; for ($j=$this->min_stunde;$j<=$row->bisstunde;$j++) - $this->zeitwunsch[$i][$j]=-3; + $this->zeitwunsch[$i][$j]= $row->zeitsperretyp_kurzbz == 'ZVerfueg' ? 4 : -3; } if ($date_iso==$row->vondatum && $date_iso==$row->bisdatum) { @@ -401,7 +404,7 @@ class zeitwunsch extends basis_db if (is_null($row->bisstunde)) $row->bisstunde=$this->max_stunde; for ($j=$row->vonstunde;$j<=$row->bisstunde;$j++) - $this->zeitwunsch[$i][$j]=-3; + $this->zeitwunsch[$i][$j]= $row->zeitsperretyp_kurzbz == 'ZVerfueg' ? 4 : -3; } $beginn=jump_day($beginn,1); } From c88b9a8297c4010eb51e4c20ccea0c938c2b4f59 Mon Sep 17 00:00:00 2001 From: Cris Date: Tue, 4 Jan 2022 17:00:16 +0100 Subject: [PATCH 039/122] Adapted TEMPUS Kollisionencheck for positive Zeitsperre 'Zeitverfuegbarkeit' Positive Zeitsperre 'Zeitverfuegbarkeit' will not appear as collision. --- include/lehreinheit.class.php | 7 +++++-- include/lehrstunde.class.php | 8 ++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/include/lehreinheit.class.php b/include/lehreinheit.class.php index 23677a6e3..7d407cee4 100644 --- a/include/lehreinheit.class.php +++ b/include/lehreinheit.class.php @@ -681,8 +681,11 @@ class lehreinheit extends basis_db else { $row=$this->db_fetch_object($erg_zs); - $this->errormsg="Kollision (Zeitsperre): $row->zeitsperre_id|$row->mitarbeiter_uid|$row->zeitsperretyp_kurzbz|$row->bezeichnung|$row->vondatum/$row->vonstunde-$row->bisdatum/$row->bisstunde - $row->vertretung_uid"; - return false; + if ($row->zeitsperretyp_kurzbz != 'ZVerfueg') + { + $this->errormsg = "Kollision (Zeitsperre): $row->zeitsperre_id|$row->mitarbeiter_uid|$row->zeitsperretyp_kurzbz|$row->bezeichnung|$row->vondatum/$row->vonstunde-$row->bisdatum/$row->bisstunde - $row->vertretung_uid"; + return false; + } } } return true; diff --git a/include/lehrstunde.class.php b/include/lehrstunde.class.php index 5cec78f3d..e2bba04e6 100644 --- a/include/lehrstunde.class.php +++ b/include/lehrstunde.class.php @@ -878,8 +878,12 @@ class lehrstunde extends basis_db if ($anz_zs!=0) { $row = $this->db_fetch_object($erg_zs); - $this->errormsg="Kollision (Zeitsperre): $row->zeitsperre_id|$row->lektor|$row->zeitsperretyp_kurzbz - $row->vondatum/$row->vonstunde|$row->bisdatum/$row->bisstunde"; - return true; + + if ($row->zeitsperretyp_kurzbz != 'ZVerfueg') + { + $this->errormsg="Kollision (Zeitsperre): $row->zeitsperre_id|$row->lektor|$row->zeitsperretyp_kurzbz - $row->vondatum/$row->vonstunde|$row->bisdatum/$row->bisstunde"; + return true; + } } return false; } From 08322920bcdbf4b48cd65eb5dc781f5ec3689216 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Tue, 18 Jan 2022 18:06:22 +0100 Subject: [PATCH 040/122] =?UTF-8?q?Problem=20behoben=20beim=20Abfragen=20v?= =?UTF-8?q?on=20Zeitw=C3=BCnschen=20mit=20NULL=20G=C3=BCltigkeit=20Anzeige?= =?UTF-8?q?=20korrigiert=20wenn=20Zweitw=C3=BCnsche=20unter=20der=20Woche?= =?UTF-8?q?=20korrigiert=20werden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/lvplanung/timetable-week.xul.php | 4 +- include/zeitwunsch.class.php | 50 ++++++++++++------------ 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/content/lvplanung/timetable-week.xul.php b/content/lvplanung/timetable-week.xul.php index 7e3a144dd..fd55b5393 100644 --- a/content/lvplanung/timetable-week.xul.php +++ b/content/lvplanung/timetable-week.xul.php @@ -681,12 +681,12 @@ while ($begin<=$ende) { $wunsch=new zeitwunsch(); if ($type=='lektor') - if ($wunsch->loadPerson($pers_uid,$datum)) + if ($wunsch->loadPerson($pers_uid,montag($datum))) $zeitwunsch=$wunsch->zeitwunsch; else $error_msg.=$wunsch->errormsg; if ($aktion=='lva_single_search' || $aktion=='lva_multi_search') - if ($wunsch->loadZwLE($lva_id,$datum)) + if ($wunsch->loadZwLE($lva_id,montag($datum))) $zeitwunsch=$wunsch->zeitwunsch; else $error_msg.=$wunsch->errormsg; diff --git a/include/zeitwunsch.class.php b/include/zeitwunsch.class.php index c471bc494..0e6270504 100644 --- a/include/zeitwunsch.class.php +++ b/include/zeitwunsch.class.php @@ -46,7 +46,7 @@ class zeitwunsch extends basis_db public function __construct() { parent::__construct(); - + $this->init(); } @@ -107,7 +107,7 @@ class zeitwunsch extends basis_db return true; } - + /** * Speichert einen Zeitwunsch in die Datenbank * Wenn $new auf true gesetzt ist wird ein neuer Datensatz @@ -122,7 +122,7 @@ class zeitwunsch extends basis_db if($this->new) { - $qry = 'INSERT INTO campus.tbl_zeitwunsch (mitarbeiter_uid, tag, stunde, gewicht, + $qry = 'INSERT INTO campus.tbl_zeitwunsch (mitarbeiter_uid, tag, stunde, gewicht, insertamum, insertvon, updateamum, updatevon, zeitwunsch_gueltigkeit_id) VALUES('. $this->db_add_param($this->mitarbeiter_uid).','. $this->db_add_param($this->tag, FHC_INTEGER).','. @@ -140,9 +140,9 @@ class zeitwunsch extends basis_db ' gewicht='.$this->db_add_param($this->gewicht, FHC_INTEGER).', '. ' updateamum='.$this->db_add_param($this->updateamum).', '. ' updatevon='.$this->db_add_param($this->updatevon). - " WHERE - mitarbeiter_uid=".$this->db_add_param($this->mitarbeiter_uid, FHC_STRING, false)." - AND tag=".$this->db_add_param($this->tag, FHC_INTEGER)." + " WHERE + mitarbeiter_uid=".$this->db_add_param($this->mitarbeiter_uid, FHC_STRING, false)." + AND tag=".$this->db_add_param($this->tag, FHC_INTEGER)." AND stunde=".$this->db_add_param($this->stunde, FHC_INTEGER). " AND zeitwunsch_gueltigkeit_id=".$this->db_add_param($this->zeitwunsch_gueltigkeit_id, FHC_INTEGER); } @@ -167,7 +167,7 @@ class zeitwunsch extends basis_db public function loadByZWG($uid, $zeitwunsch_gueltigkeit_id) { $qry = ' - SELECT * + SELECT * FROM campus.tbl_zeitwunsch JOIN campus.tbl_zeitwunsch_gueltigkeit zwg USING (zeitwunsch_gueltigkeit_id) WHERE zwg.mitarbeiter_uid = ' . $this->db_add_param($uid) . ' @@ -213,11 +213,11 @@ class zeitwunsch extends basis_db } $qry = " - SELECT * + SELECT * FROM campus.tbl_zeitwunsch JOIN campus.tbl_zeitwunsch_gueltigkeit zwg USING (zeitwunsch_gueltigkeit_id) WHERE zwg.mitarbeiter_uid=". $this->db_add_param($uid). " - AND ". $this->db_add_param(date('Y-m-d', $datum)). " BETWEEN von AND bis; + AND ". $this->db_add_param(date('Y-m-d', $datum)). " BETWEEN von AND COALESCE(bis,'2999-01-01'); "; @@ -249,13 +249,13 @@ class zeitwunsch extends basis_db // Zeitsperren abfragen $sql=" - SELECT + SELECT zeitsperretyp_kurzbz, vondatum,vonstunde,bisdatum,bisstunde - FROM + FROM campus.tbl_zeitsperre - WHERE + WHERE mitarbeiter_uid=".$this->db_add_param($uid)." - AND vondatum<=".$this->db_add_param($ende)." + AND vondatum<=".$this->db_add_param($ende)." AND bisdatum>=".$this->db_add_param($start); if(!$this->db_query($sql)) @@ -334,8 +334,8 @@ class zeitwunsch extends basis_db $sql_query='SELECT tag,stunde,min(gewicht) AS gewicht FROM campus.tbl_zeitwunsch JOIN campus.tbl_zeitwunsch_gueltigkeit zwg USING (zeitwunsch_gueltigkeit_id) - WHERE zwg.mitarbeiter_uid IN ('.$sql_query_le.') - AND '. $this->db_add_param(date('Y-m-d', $datum)). ' BETWEEN von AND bis + WHERE zwg.mitarbeiter_uid IN ('.$sql_query_le.') + AND '. $this->db_add_param(date('Y-m-d', $datum)). ' BETWEEN von AND COALESCE(bis,\'2999-01-01\') GROUP BY tag,stunde;'; // Zeitwuensche abfragen @@ -359,13 +359,13 @@ class zeitwunsch extends basis_db // Zeitsperren abfragen $sql=" - SELECT + SELECT zeitsperretyp_kurzbz, vondatum,vonstunde,bisdatum,bisstunde - FROM + FROM campus.tbl_zeitsperre - WHERE - mitarbeiter_uid IN ($sql_query_le) - AND vondatum<=".$this->db_add_param($ende)." + WHERE + mitarbeiter_uid IN ($sql_query_le) + AND vondatum<=".$this->db_add_param($ende)." AND bisdatum>=".$this->db_add_param($start); if(!$this->db_query($sql)) @@ -424,10 +424,10 @@ class zeitwunsch extends basis_db */ function exists($uid, $zwg_id, $stunde, $tag) { - $qry = "SELECT 1 FROM campus.tbl_zeitwunsch - WHERE - mitarbeiter_uid=".$this->db_add_param($uid)." - AND stunde=".$this->db_add_param($stunde, FHC_INTEGER)." + $qry = "SELECT 1 FROM campus.tbl_zeitwunsch + WHERE + mitarbeiter_uid=".$this->db_add_param($uid)." + AND stunde=".$this->db_add_param($stunde, FHC_INTEGER)." AND tag=".$this->db_add_param($tag, FHC_INTEGER). " AND zeitwunsch_gueltigkeit_id = ".$this->db_add_param($zwg_id, FHC_INTEGER); if($this->db_query($qry)) @@ -445,4 +445,4 @@ class zeitwunsch extends basis_db } } -?> \ No newline at end of file +?> From b8ac076bdb4ddef7b1b8369deacfb0c57eae4165 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Wed, 19 Jan 2022 17:56:30 +0100 Subject: [PATCH 041/122] projektbeurteilungs uebersicht hinzugefuegt --- .../education/Projektbetreuer_model.php | 77 ++++++++++++++ .../models/system/Variablenname_model.php | 9 +- system/filtersupdate.php | 25 +++++ system/phrasesupdate.php | 100 ++++++++++++++++++ 4 files changed, 210 insertions(+), 1 deletion(-) diff --git a/application/models/education/Projektbetreuer_model.php b/application/models/education/Projektbetreuer_model.php index 4da88e344..22c7be1ec 100644 --- a/application/models/education/Projektbetreuer_model.php +++ b/application/models/education/Projektbetreuer_model.php @@ -60,4 +60,81 @@ class Projektbetreuer_model extends DB_Model return $this->execQuery($qry, array($zugangstoken)); } + + /** + * Holt Zweitbegutachter einer Projektarbeit mit Mail. + * @param $erstbegutachter_person_id int person_id des Erstbegutachters + * @param $projektarbeit_id int + * @param $student_uid string uid des Studenten der Arbeit abgibt + * @return object | bool + */ + public function getZweitbegutachterWithToken($erstbegutachter_person_id, $projektarbeit_id, $student_uid) + { + $qry_betr = "SELECT betr.person_id, betr.projektarbeit_id, pers.anrede, betr.zugangstoken, betr.zugangstoken_gueltigbis, tbl_benutzer.uid, kontakt, + trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as voller_name, + CASE WHEN tbl_benutzer.uid IS NULL THEN kontakt ELSE tbl_benutzer.uid || '@".DOMAIN."' END AS email, abg.abgabedatum + FROM lehre.tbl_projektbetreuer betr + JOIN lehre.tbl_projektarbeit parb ON betr.projektarbeit_id = parb.projektarbeit_id + JOIN public.tbl_person pers ON betr.person_id = pers.person_id + LEFT JOIN public.tbl_kontakt ON pers.person_id = tbl_kontakt.person_id AND kontakttyp = 'email' AND zustellung = true + LEFT JOIN public.tbl_benutzer ON pers.person_id = tbl_benutzer.person_id + LEFT JOIN campus.tbl_paabgabe abg ON betr.projektarbeit_id = abg.projektarbeit_id AND abg.paabgabetyp_kurzbz = 'end' + WHERE betr.betreuerart_kurzbz = 'Zweitbegutachter' + AND betr.projektarbeit_id = ? + AND parb.student_uid = ? + AND EXISTS ( + SELECT 1 FROM lehre.tbl_projektbetreuer + WHERE person_id = ? + AND betreuerart_kurzbz = 'Erstbegutachter' + AND projektarbeit_id = betr.projektarbeit_id + ) + AND (tbl_benutzer.aktiv OR tbl_benutzer.aktiv IS NULL) + ORDER BY betr.insertamum DESC + LIMIT 1"; + + return $this->execQuery($qry_betr, array($projektarbeit_id, $student_uid, $erstbegutachter_person_id)); + } + + /** + * Generiert neuen Token für externen Zweitbetreuer. + * @param int $zweitbegutachter_person_id + * @param int $projektarbeit_id + * @return object | bool + */ + public function generateZweitbegutachterToken($zweitbegutachter_person_id, $projektarbeit_id) + { + $betreuerUidQry = "SELECT uid, zugangstoken, zugangstoken_gueltigbis, tbl_projektbetreuer.person_id + FROM lehre.tbl_projektbetreuer + JOIN public.tbl_person USING(person_id) + LEFT JOIN public.tbl_benutzer USING(person_id) + WHERE projektarbeit_id = ? + AND tbl_projektbetreuer.person_id = ? + AND betreuerart_kurzbz = 'Zweitbegutachter' + LIMIT 1"; + + $betreueruidres = $this->execQuery($betreuerUidQry, array($projektarbeit_id, $zweitbegutachter_person_id)); + + if (!hasData($betreueruidres)) + return error('Zweitbegutachter nicht gefunden'); + + $row_betr = getData($betreueruidres)[0]; + + if (!isset($row_betr->uid)) + { + do { + $token = generateToken(16); + $qry_tokencheck = $this->load(array('zugangstoken' => $token)); + } while(hasData($qry_tokencheck)); + + $result = $this->update( + array('projektarbeit_id' => $projektarbeit_id, + 'person_id' => $row_betr->person_id, + 'betreuerart_kurzbz' => 'Zweitbegutachter'), + array('zugangstoken' => $token, + 'zugangstoken_gueltigbis' => date('Y-m-d', strtotime('+1 year'))) + ); + + return $result; + } + } } diff --git a/application/models/system/Variablenname_model.php b/application/models/system/Variablenname_model.php index 869a03275..33ace3c8d 100644 --- a/application/models/system/Variablenname_model.php +++ b/application/models/system/Variablenname_model.php @@ -12,7 +12,14 @@ class Variablenname_model extends DB_Model ) sem WHERE start > now() LIMIT 1;', - 'infocenter_studiensgangtyp' => 'SELECT infocenter_studiensgangtyp FROM public.tbl_variablenname LIMIT 1' + 'infocenter_studiensgangtyp' => 'SELECT infocenter_studiensgangtyp FROM public.tbl_variablenname LIMIT 1;', + 'projektuebersicht_studiensemester' => 'SELECT studiensemester_kurzbz FROM ( + SELECT DISTINCT ON (studienjahr_kurzbz) start, studiensemester_kurzbz + FROM public.tbl_studiensemester + ORDER BY studienjahr_kurzbz, start + ) sem + WHERE start > now() + LIMIT 1;' ); /** diff --git a/system/filtersupdate.php b/system/filtersupdate.php index 1a1717339..521e6b4dd 100644 --- a/system/filtersupdate.php +++ b/system/filtersupdate.php @@ -981,6 +981,31 @@ $filters = array( } ', 'oe_kurzbz' => null, + ), + array( + 'app' => 'projektarbeitsbeurteilung', + 'dataset_name' => 'projektuebersicht', + 'filter_kurzbz' => 'alleProjekte', + 'description' => '{Projektübersicht}', + 'sort' => 1, + 'default_filter' => true, + 'filter' => ' + { + "name": "Projektübersicht", + "columns": [ + {"name": "ProjectWorkID"}, + {"name": "ErstNachname"}, + {"name": "ErstAbgeschickt"}, + {"name": "ZweitNachname"}, + {"name": "ZweitAbgeschickt"}, + {"name": "StudentNachname"}, + {"name": "Note"}, + {"name": "Abgabedatum"} + ], + "filters": [] + } + ', + 'oe_kurzbz' => null, ) ); diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index e05ee6086..a5bceb40d 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -9772,6 +9772,106 @@ Any unusual occurrences ) ) ), + array( + 'app' => 'projektarbeitsbeurteilung', + 'category' => 'projektarbeitsbeurteilung', + 'phrase' => 'projektarbeitsbeurteilungUebersicht', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Projektarbeitsbeurteilungsübersicht', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Projekt Work Assessment Overview', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'projektarbeitsbeurteilung', + 'category' => 'projektarbeitsbeurteilung', + 'phrase' => 'abgabedatum', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Abgabe - Datum', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Upload - Date', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'projektarbeitsbeurteilung', + 'category' => 'projektarbeitsbeurteilung', + 'phrase' => 'freischaltung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Freischaltung', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Activation', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'projektarbeitsbeurteilung', + 'category' => 'projektarbeitsbeurteilung', + 'phrase' => 'resendToken', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Token an Zweit-Begutachter*in senden', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Send token to Second Assessor', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'projektarbeitsbeurteilung', + 'category' => 'projektarbeitsbeurteilung', + 'phrase' => 'freischalten', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Freischalten', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Unlock', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'anrechnung', From 094f75ef6105f7d0a79344bbb7f2f764f581951b Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Fri, 21 Jan 2022 00:41:13 +0100 Subject: [PATCH 042/122] - Projektbetreuer_model.php: method getBetreuerOfProjektarbeit for getting Betreuer by betreuerart - phrasesupdate.php: added Projektarbeitsbeurteilung phrases --- .../education/Projektbetreuer_model.php | 29 ++++++- system/phrasesupdate.php | 77 +++++++++++++++++++ 2 files changed, 105 insertions(+), 1 deletion(-) diff --git a/application/models/education/Projektbetreuer_model.php b/application/models/education/Projektbetreuer_model.php index 22c7be1ec..f3af03f86 100644 --- a/application/models/education/Projektbetreuer_model.php +++ b/application/models/education/Projektbetreuer_model.php @@ -42,6 +42,31 @@ class Projektbetreuer_model extends DB_Model } } + /** + * Checks if a Projektarbeit has a Betreuer of a certain type + * @param int $projektarbeit_id + * @param string $betreuerart_kurzbz + * @return array success with number of Betreuer or error + */ + public function getBetreuerOfProjektarbeit($projektarbeit_id, $betreuerart_kurzbz) + { + $this->addSelect('pers.person_id, betreuerart_kurzbz, vorname, nachname, + anrede, titelpre, titelpost, gebdatum, geschlecht, + ben.uid, ben.aktiv as benutzer_aktiv, ben.alias, student_uid'); + $this->addJoin('lehre.tbl_projektarbeit', 'projektarbeit_id'); + $this->addJoin('public.tbl_person pers', 'person_id'); + $this->addJoin('public.tbl_benutzer ben', 'person_id', 'LEFT'); + $this->addOrder('pers.person_id'); + + return $this->loadWhere( + array( + 'projektarbeit_id' => $projektarbeit_id, + 'betreuerart_kurzbz' => $betreuerart_kurzbz, + 'ben.aktiv' => true + ) + ); + } + /** * Get Projektbetreuer data by authentification token * @param $zugangstoken @@ -99,7 +124,7 @@ class Projektbetreuer_model extends DB_Model * Generiert neuen Token für externen Zweitbetreuer. * @param int $zweitbegutachter_person_id * @param int $projektarbeit_id - * @return object | bool + * @return array */ public function generateZweitbegutachterToken($zweitbegutachter_person_id, $projektarbeit_id) { @@ -136,5 +161,7 @@ class Projektbetreuer_model extends DB_Model return $result; } + else + return success("Account vorhanden, kein Token benötigt"); } } diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index a5bceb40d..95919b833 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -9872,6 +9872,83 @@ Any unusual occurrences ) ) ), + array( + 'app' => 'projektarbeitsbeurteilung', + 'category' => 'projektarbeitsbeurteilung', + 'phrase' => 'kommissionellePruefungHinweis', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Dies ist eine zur kommissionellen Wiederholungsprüfung vorgelegte Bachelorarbeit. Die Note sollte daher erst nach Abstimmung mit allen Kommissionsmitgliedern abgesendet werden.', + 'description' => '', + ), + array( + 'sprache' => 'English', + 'text' => 'This bachelor thesis is submitted for the Bachelor Examination before a Committee. It should be graded after consultation with all committee members.', + 'description' => '', + ) + ) + ), + array( + 'app' => 'projektarbeitsbeurteilung', + 'category' => 'projektarbeitsbeurteilung', + 'phrase' => 'kommissionMailSenden', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Infomail an Kommissionsmitglieder senden', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Sent info mail to commission members', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'projektarbeitsbeurteilung', + 'category' => 'projektarbeitsbeurteilung', + 'phrase' => 'kommissionMailGesendet', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Mail an Kommissionsmitglieder gesendet', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Sent mail to commission members', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'projektarbeitsbeurteilung', + 'category' => 'projektarbeitsbeurteilung', + 'phrase' => 'kommissionMailFehler', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Fehler beim Senden der Mail an Kommission', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Error when sending mail to commission members', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'anrechnung', From 37c19aafc26ec08b2b8a90c96e7398028706a436 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Fri, 21 Jan 2022 02:50:39 +0100 Subject: [PATCH 043/122] Added Betreuerart "Kommission" to lehre.tbl_betreuerart --- system/dbupdate_3.3.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 50f5098c8..ba79ed66a 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -5716,6 +5716,21 @@ if ($result = $db->db_query("SELECT * FROM pg_class WHERE relname='idx_tbl_zeita } } +// Betreuerart 'Kommission' hinzufügen +if($result = $db->db_query("SELECT 1 FROM lehre.tbl_betreuerart WHERE betreuerart_kurzbz='Kommission'")) +{ + if($db->db_num_rows($result)==0) + { + + $qry = "INSERT INTO lehre.tbl_betreuerart(betreuerart_kurzbz,beschreibung,aktiv) VALUES('Kommission','Mitglied der Kommission',TRUE);"; + + if(!$db->db_query($qry)) + echo 'Betreuerart: '.$db->db_last_error().'
    '; + else + echo '
    Neue Betreuerart Kommission in lehre.tbl_betreuerart hinzugefügt'; + } +} + // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

    Pruefe Tabellen und Attribute!

    '; From cf7cfd7cd25d64ffa0976bdb34dc1cc2f6bd0cf2 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Fri, 21 Jan 2022 05:15:36 +0100 Subject: [PATCH 044/122] sorted results of geBetreuerOfProjektarbeit method of Projektbetreuer_model.php and added mitarbeiter data to the result --- .../education/Projektbetreuer_model.php | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/application/models/education/Projektbetreuer_model.php b/application/models/education/Projektbetreuer_model.php index f3af03f86..4a04b8813 100644 --- a/application/models/education/Projektbetreuer_model.php +++ b/application/models/education/Projektbetreuer_model.php @@ -43,28 +43,29 @@ class Projektbetreuer_model extends DB_Model } /** - * Checks if a Projektarbeit has a Betreuer of a certain type + * Gets Betreuer of a certain Type of a Projektarbeit. * @param int $projektarbeit_id * @param string $betreuerart_kurzbz * @return array success with number of Betreuer or error */ public function getBetreuerOfProjektarbeit($projektarbeit_id, $betreuerart_kurzbz) { - $this->addSelect('pers.person_id, betreuerart_kurzbz, vorname, nachname, - anrede, titelpre, titelpost, gebdatum, geschlecht, - ben.uid, ben.aktiv as benutzer_aktiv, ben.alias, student_uid'); - $this->addJoin('lehre.tbl_projektarbeit', 'projektarbeit_id'); - $this->addJoin('public.tbl_person pers', 'person_id'); - $this->addJoin('public.tbl_benutzer ben', 'person_id', 'LEFT'); - $this->addOrder('pers.person_id'); + $qry = "SELECT pers.person_id, betreuerart_kurzbz, vorname, nachname, + anrede, titelpre, titelpost, gebdatum, geschlecht, + ben.uid, ben.alias, ma.personalnummer, mitarbeiter_uid, student_uid + FROM lehre.tbl_projektarbeit + JOIN lehre.tbl_projektbetreuer USING (projektarbeit_id) + JOIN public.tbl_person pers USING (person_id) + LEFT JOIN public.tbl_benutzer ben USING (person_id) + LEFT JOIN public.tbl_mitarbeiter ma ON ben.uid = ma.mitarbeiter_uid + WHERE ben.aktiv + AND projektarbeit_id = ? + AND betreuerart_kurzbz = ? + ORDER BY CASE WHEN ma.mitarbeiter_uid IS NULL THEN 1 ELSE 0 END, /*Mitarbeiter first*/ + CASE WHEN ben.uid IS NULL THEN 1 ELSE 0 END, + ben.insertamum"; - return $this->loadWhere( - array( - 'projektarbeit_id' => $projektarbeit_id, - 'betreuerart_kurzbz' => $betreuerart_kurzbz, - 'ben.aktiv' => true - ) - ); + return $this->execQuery($qry, array($projektarbeit_id, $betreuerart_kurzbz)); } /** From f9b93f55e4c97c1ec8fe57ab091a497930d88fef Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Tue, 25 Jan 2022 12:40:41 +0100 Subject: [PATCH 045/122] - Projektbetreuer model getBetreuerOfProjektarbeit: added full name and projekttyp_kurzbz are also returned - abgabe_lektor_details.php: grading only possible after end upload of thesis, and only beginning with SS2022 - added projektbeurteilung phrases to core locale and phrasesupdate.php --- .../education/Projektbetreuer_model.php | 5 +- cis/private/lehre/abgabe_lektor_details.php | 29 +++- locale/de-AT/abgabetool.php | 2 + locale/en-US/abgabetool.php | 2 + system/phrasesupdate.php | 124 +++++++++++++++++- 5 files changed, 153 insertions(+), 9 deletions(-) diff --git a/application/models/education/Projektbetreuer_model.php b/application/models/education/Projektbetreuer_model.php index 4a04b8813..b6fbe8a72 100644 --- a/application/models/education/Projektbetreuer_model.php +++ b/application/models/education/Projektbetreuer_model.php @@ -51,9 +51,10 @@ class Projektbetreuer_model extends DB_Model public function getBetreuerOfProjektarbeit($projektarbeit_id, $betreuerart_kurzbz) { $qry = "SELECT pers.person_id, betreuerart_kurzbz, vorname, nachname, - anrede, titelpre, titelpost, gebdatum, geschlecht, + trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as voller_name, + anrede, titelpre, titelpost, gebdatum, geschlecht, pa.projekttyp_kurzbz, ben.uid, ben.alias, ma.personalnummer, mitarbeiter_uid, student_uid - FROM lehre.tbl_projektarbeit + FROM lehre.tbl_projektarbeit pa JOIN lehre.tbl_projektbetreuer USING (projektarbeit_id) JOIN public.tbl_person pers USING (person_id) LEFT JOIN public.tbl_benutzer ben USING (person_id) diff --git a/cis/private/lehre/abgabe_lektor_details.php b/cis/private/lehre/abgabe_lektor_details.php index 9f74d5cf8..9d89daa49 100644 --- a/cis/private/lehre/abgabe_lektor_details.php +++ b/cis/private/lehre/abgabe_lektor_details.php @@ -120,13 +120,13 @@ if(!$projektarbeit_obj->load($projektarbeit_id)) $titel = $projektarbeit_obj->titel; $student_uid = $projektarbeit_obj->student_uid; -// paarbeit sollte nur ab SS2021 online bewertet werden +// paarbeit sollte nur ab SS2022 online bewertet werden $qry_sem="SELECT 1 FROM lehre.tbl_projektarbeit JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) JOIN public.tbl_studiensemester USING(studiensemester_kurzbz) WHERE projektarbeit_id=".$db->db_add_param($projektarbeit_id, FHC_INTEGER)." - AND tbl_studiensemester.start::date >= (SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz = 'SS2021')::date + AND tbl_studiensemester.start::date >= (SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz = 'SS2022')::date LIMIT 1"; $result_sem=$db->db_query($qry_sem); $num_rows_sem = $db->db_num_rows($result_sem); @@ -135,6 +135,20 @@ if($num_rows_sem < 0) echo "".$p->t('abgabetool/fehlerAktualitaetProjektarbeit')."
     "; } +// Endupload sollte vor Benotung durchgeführt worden sein +$qry_endupload="SELECT 1 + FROM campus.tbl_paabgabe + WHERE projektarbeit_id=".$db->db_add_param($projektarbeit_id, FHC_INTEGER)." + AND paabgabetyp_kurzbz='end' + AND abgabedatum IS NOT NULL + LIMIT 1"; +$result_endupload=$db->db_query($qry_endupload); +$num_rows_endupload = $db->db_num_rows($result_endupload); +if($num_rows_endupload < 0) +{ + echo "".$p->t('abgabetool/fehlerErmittelnEnduploadProjektarbeit')."
     "; +} + // Zweitbegutachter holen if($betreuerart=="Erstbegutachter") { @@ -457,7 +471,11 @@ while ($result_nam && $row_nam=$db->db_fetch_object($result_nam)) $htmlstr .= "\n"; $htmlstr .= ""; $htmlstr .= ""; diff --git a/locale/de-AT/abgabetool.php b/locale/de-AT/abgabetool.php index 7943868ad..c4b17318b 100644 --- a/locale/de-AT/abgabetool.php +++ b/locale/de-AT/abgabetool.php @@ -1,6 +1,7 @@ phrasen['abgabetool/abgabetool']='Abgabetool'; $this->phrasen['abgabetool/aeltereParbeitBenoten']='Projektarbeit für älteres Semester, bitte Word-Formular zur Benotung verwenden!'; +$this->phrasen['abgabetool/keinEnduploadErfolgt']='Endupload ist noch nicht erfolgt'; $this->phrasen['abgabetool/typ']='Typ'; $this->phrasen['abgabetool/titel']='Titel'; $this->phrasen['abgabetool/betreuerart']='Betreuerart'; @@ -89,4 +90,5 @@ $this->phrasen['abgabetool/zweitBegutachterEmailFehlt']='keine Zustellmail für $this->phrasen['abgabetool/projektbeurteilungDownload']='Projektbeurteilung herunterladen'; $this->phrasen['abgabetool/projektbeurteilungErstDownload']='Erst-/Begutachter'; $this->phrasen['abgabetool/projektbeurteilungZweitDownload']='Zweitbegutachter'; +$this->phrasen['abgabetool/fehlerErmittelnEndabgabeProjektarbeit']='Fehler beim Ermitteln des Enduplaods der Projektarbeit'; ?> diff --git a/locale/en-US/abgabetool.php b/locale/en-US/abgabetool.php index c4e6eb7bd..b05456faa 100644 --- a/locale/en-US/abgabetool.php +++ b/locale/en-US/abgabetool.php @@ -1,6 +1,7 @@ phrasen['abgabetool/abgabetool']='Submission tool'; $this->phrasen['abgabetool/aeltereParbeitBenoten']='Thesis handed in for older semester, please use word form for assessment!'; +$this->phrasen['abgabetool/keinEnduploadErfolgt']='Final version not uploaded yet'; $this->phrasen['abgabetool/typ']='Type'; $this->phrasen['abgabetool/titel']='Title'; $this->phrasen['abgabetool/betreuerart']='Supervisor type'; @@ -89,4 +90,5 @@ $this->phrasen['abgabetool/zweitBegutachterEmailFehlt']='Second assessor has no $this->phrasen['abgabetool/projektbeurteilungDownload']='Thesis-Assessment download'; $this->phrasen['abgabetool/projektbeurteilungErstDownload']='First-/Assessor'; $this->phrasen['abgabetool/projektbeurteilungZweitDownload']='Second Assessor'; +$this->phrasen['abgabetool/fehlerErmittelnEndabgabeProjektarbeit']='Error when getting endupload of project work'; ?> diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 95919b833..524a28448 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -9903,7 +9903,7 @@ Any unusual occurrences ), array( 'sprache' => 'English', - 'text' => 'Sent info mail to commission members', + 'text' => 'Send info mail to commission members', 'description' => '', 'insertvon' => 'system' ) @@ -9923,7 +9923,7 @@ Any unusual occurrences ), array( 'sprache' => 'English', - 'text' => 'Sent mail to commission members', + 'text' => 'Sent mail to committee members', 'description' => '', 'insertvon' => 'system' ) @@ -9949,6 +9949,126 @@ Any unusual occurrences ) ) ), + array( + 'app' => 'projektarbeitsbeurteilung', + 'category' => 'projektarbeitsbeurteilung', + 'phrase' => 'zweitbetreuerBewertungFehlt', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Absenden erst nach Abschluss der Bewertung durch Zweitbegutachter*in möglich', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Sending only possible after completion of assessment by Second Assessor', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'projektarbeitsbeurteilung', + 'category' => 'projektarbeitsbeurteilung', + 'phrase' => 'nichtErfuellt', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'nicht erfüllt', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'not fulfilled', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'projektarbeitsbeurteilung', + 'category' => 'projektarbeitsbeurteilung', + 'phrase' => 'mindestanforderungErfuellt', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Mindestanforderung erfüllt', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'minimum requirement fulfilled', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'projektarbeitsbeurteilung', + 'category' => 'projektarbeitsbeurteilung', + 'phrase' => 'inWeitenTeilenErfuellt', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'in weiten Teilen erfüllt', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'fulfilled for the most part', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'projektarbeitsbeurteilung', + 'category' => 'projektarbeitsbeurteilung', + 'phrase' => 'vollstaendigErfuellt', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'vollständig erfüllt', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'fully fulfilled', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'projektarbeitsbeurteilung', + 'category' => 'projektarbeitsbeurteilung', + 'phrase' => 'kommissionsmitglieder', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Kommissionsmitglieder', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Commitee members', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'anrechnung', From ce381276183ca9be89e1d2207d60ad608364e6a9 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Tue, 25 Jan 2022 12:55:29 +0100 Subject: [PATCH 046/122] - FAS hide Projektarbeit Punkte --- content/student/studentprojektarbeitoverlay.xul.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/student/studentprojektarbeitoverlay.xul.php b/content/student/studentprojektarbeitoverlay.xul.php index 4d8ab4835..c522ad4da 100644 --- a/content/student/studentprojektarbeitoverlay.xul.php +++ b/content/student/studentprojektarbeitoverlay.xul.php @@ -492,7 +492,7 @@ $is_hidden = (!defined('FAS_STUDIERENDE_PROJEKTARBEIT_VERTRAGSDETAILS_ANZEIGEN') - + From 1a8b267a8909c3f599fc7f43ebf3ed5df4e9a500 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Tue, 25 Jan 2022 14:55:01 +0100 Subject: [PATCH 047/122] Projektbetreuer_model.php: getBetreuerOfProjektarbeit returns only one row for each person --- application/models/education/Projektbetreuer_model.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/application/models/education/Projektbetreuer_model.php b/application/models/education/Projektbetreuer_model.php index b6fbe8a72..0200f6468 100644 --- a/application/models/education/Projektbetreuer_model.php +++ b/application/models/education/Projektbetreuer_model.php @@ -44,13 +44,14 @@ class Projektbetreuer_model extends DB_Model /** * Gets Betreuer of a certain Type of a Projektarbeit. + * Returns one row for each person. * @param int $projektarbeit_id * @param string $betreuerart_kurzbz * @return array success with number of Betreuer or error */ public function getBetreuerOfProjektarbeit($projektarbeit_id, $betreuerart_kurzbz) { - $qry = "SELECT pers.person_id, betreuerart_kurzbz, vorname, nachname, + $qry = "SELECT DISTINCT ON (pers.person_id) pers.person_id, betreuerart_kurzbz, vorname, nachname, trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as voller_name, anrede, titelpre, titelpost, gebdatum, geschlecht, pa.projekttyp_kurzbz, ben.uid, ben.alias, ma.personalnummer, mitarbeiter_uid, student_uid @@ -62,8 +63,8 @@ class Projektbetreuer_model extends DB_Model WHERE ben.aktiv AND projektarbeit_id = ? AND betreuerart_kurzbz = ? - ORDER BY CASE WHEN ma.mitarbeiter_uid IS NULL THEN 1 ELSE 0 END, /*Mitarbeiter first*/ - CASE WHEN ben.uid IS NULL THEN 1 ELSE 0 END, + ORDER BY pers.person_id, CASE WHEN ma.mitarbeiter_uid IS NULL THEN 1 ELSE 0 END, /*Mitarbeiter account first*/ + CASE WHEN ben.uid IS NULL THEN 1 ELSE 0 END, /*user with account first*/ ben.insertamum"; return $this->execQuery($qry, array($projektarbeit_id, $betreuerart_kurzbz)); From 37cd868a44f5cd696306bb4823f683b307cb31b2 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Tue, 1 Feb 2022 09:15:22 +0100 Subject: [PATCH 048/122] uebersichtseite angepasst und mail beim updaten entfernt --- system/filtersupdate.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/system/filtersupdate.php b/system/filtersupdate.php index 521e6b4dd..9ccc9200f 100644 --- a/system/filtersupdate.php +++ b/system/filtersupdate.php @@ -1000,7 +1000,8 @@ $filters = array( {"name": "ZweitAbgeschickt"}, {"name": "StudentNachname"}, {"name": "Note"}, - {"name": "Abgabedatum"} + {"name": "Abgabedatum"}, + {"name": "Studiengang"} ], "filters": [] } From 1e5674318768d8397de99a21765956c11a8a8fcf Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Tue, 1 Feb 2022 22:44:58 +0100 Subject: [PATCH 049/122] added projektarbeitsbeurteilung phrases --- system/phrasesupdate.php | 122 +++++++++++++++++++++++++++++++++++---- 1 file changed, 111 insertions(+), 11 deletions(-) diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 524a28448..7934d1e07 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -8675,12 +8675,12 @@ Any unusual occurrences array( 'app' => 'projektarbeitsbeurteilung', 'category' => 'projektarbeitsbeurteilung', - 'phrase' => 'plagiatscheckUnauffaellig', + 'phrase' => 'plagiatscheckBeschreibung', 'insertvon' => 'system', 'phrases' => array( array( 'sprache' => 'German', - 'text' => 'Der Plagiatscheck ist unauffällig.', + 'text' => 'Der Plagiatscheck wurde durchgeführt und bestätigt, dass der zentrale Inhalt der Arbeit im erforderlichen Ausmaß eigenständig verfasst wurde (vgl. Satzungsteil Studienrechtliche Bestimmungen / Prüfungsordnung, § 18 Abs. 2 und 3).', 'description' => '', 'insertvon' => 'system' ), @@ -8820,7 +8820,7 @@ Any unusual occurrences 'phrases' => array( array( 'sprache' => 'German', - 'text' => 'Der Lösungsansatz ist dem Stand der Technik entsprechend argumentiert und zeigt ein adäquates Problemverständnis.', + 'text' => 'Der Lösungsansatz ist für das Thema geeignet und entspricht dem Stand der Technik.', 'description' => '', 'insertvon' => 'system' ), @@ -8860,7 +8860,7 @@ Any unusual occurrences 'phrases' => array( array( 'sprache' => 'German', - 'text' => 'Die methodische Vorgangsweise ist in Bezug auf die Ausrichtung der Arbeit (technisch-ingenieurwissenschaftlich, sozial-wirtschaftswissenschaftlich…) angemessen, gut begründet und wird korrekt umgesetzt.', + 'text' => 'Das Vorgehen ist in Bezug auf die fachspezifische Ausrichtung der Arbeit angemessen, anhand der Fachliteratur begründet und korrekt umgesetzt.', 'description' => '', 'insertvon' => 'system' ), @@ -8900,7 +8900,7 @@ Any unusual occurrences 'phrases' => array( array( 'sprache' => 'German', - 'text' => 'Die Frage- bzw. Aufgabenstellungen wurden zielführend beantwortet; die Ergebnisse werden diskutiert.', + 'text' => 'Die Ergebnisse werden im Lichte der Fragestellung interpretiert und kritisch diskutiert im Hinblick auf ihren Mehrwert für Forschung und/oder Berufspraxis. Visualisierungen unterstützen die Argumentation.', 'description' => '', 'insertvon' => 'system' ), @@ -9000,7 +9000,7 @@ Any unusual occurrences 'phrases' => array( array( 'sprache' => 'German', - 'text' => 'Die Arbeit ist schlüssig aufgebaut und gut strukturiert.', + 'text' => 'Die Arbeit ist schlüssig strukturiert.', 'description' => '', 'insertvon' => 'system' ), @@ -9040,7 +9040,7 @@ Any unusual occurrences 'phrases' => array( array( 'sprache' => 'German', - 'text' => 'Der Stil entspricht einer wissenschaftlichen Arbeit. Die Arbeit ist flüssig lesbar und weist eine klare, eindeutige und gendergerechte Sprache auf.', + 'text' => 'Rechtschreibung und Grammatik sind korrekt. Die Verwendung von Fachsprache ist angemessen. Die Anforderungen an gendergerechte Sprache sind nach den geltenden Richtlinien umgesetzt.', 'description' => '', 'insertvon' => 'system' ), @@ -9120,7 +9120,7 @@ Any unusual occurrences 'phrases' => array( array( 'sprache' => 'German', - 'text' => 'Die verwendeten Quellen sind passend, aktuell und werden ausreichend variiert.', + 'text' => 'Quellen und Literatur sind für die wissenschaftliche Auseinandersetzung mit dem Thema der Arbeit relevant, geben den aktuellen Stand der Forschung wieder und decken das Thema ab.', 'description' => '', 'insertvon' => 'system' ), @@ -9340,13 +9340,33 @@ Any unusual occurrences 'phrases' => array( array( 'sprache' => 'German', - 'text' => 'Liegt die Punkteanzahl bei den Kriterien "1 - 5" oder "6 - 10" in Summe unter 50%%, ist die %s insgesamt als negativ zu beurteilen.', + 'text' => 'Liegt die Punkteanzahl bei den Kriterien "1 - 5" oder "6 - 10" in Summe unter 50%, ist die {0} insgesamt als negativ zu beurteilen.', 'description' => '', 'insertvon' => 'system' ), array( 'sprache' => 'English', - 'text' => 'If the number of points for the criteria "1 - 5" or "6 - 10" is below 50%% in total, the %s is to be assessed as negative overall.', + 'text' => 'If the number of points for the criteria "1 - 5" or "6 - 10" is below 50% in total, the {0} is to be assessed as negative overall.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'projektarbeitsbeurteilung', + 'category' => 'projektarbeitsbeurteilung', + 'phrase' => 'notenschluesselHinweisNullPunkteEinKriterium', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Falls ein Kriterium mit 0 Punkten bewertet wird, ist die {0} insgesamt als negativ zu beurteilen.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'If the number of points for one criteria is 0, the {0} is to be assessed as negative overall.', 'description' => '', 'insertvon' => 'system' ) @@ -9540,7 +9560,7 @@ Any unusual occurrences 'phrases' => array( array( 'sprache' => 'German', - 'text' => 'Ist die Arbeit gut strukturiert?', + 'text' => 'Ist die Arbeit schlüssig strukturiert?', 'description' => '', 'insertvon' => 'system' ), @@ -10069,6 +10089,86 @@ Any unusual occurrences ) ) ), + array( + 'app' => 'projektarbeitsbeurteilung', + 'category' => 'projektarbeitsbeurteilung', + 'phrase' => 'plagiatscheckNichtGesetzt', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Plagiatscheck auffällig, negative Beurteilung', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Plagiarism check not passed, negative assessment', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'projektarbeitsbeurteilung', + 'category' => 'projektarbeitsbeurteilung', + 'phrase' => 'titelBearbeiten', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Titel bearbeiten', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Edit title', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'projektarbeitsbeurteilung', + 'category' => 'projektarbeitsbeurteilung', + 'phrase' => 'titelGespeichert', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Titel gespeichert', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Title saved', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'projektarbeitsbeurteilung', + 'category' => 'projektarbeitsbeurteilung', + 'phrase' => 'plagiatscheckHinweisNegativeBeurteilung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => '(Bei Plagiat wird die Arbeit negativ bewertet.)', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => '(Plagiarism leads to a negative grade.)', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'anrechnung', From 67a86d070575f7033d8dd3444d26a9a9e12a3c4c Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Tue, 1 Feb 2022 22:56:20 +0100 Subject: [PATCH 050/122] online assessment or projektarbeit only after SS2022: also added check when sending mails to Begutachter --- cis/private/lehre/abgabe_student_details.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cis/private/lehre/abgabe_student_details.php b/cis/private/lehre/abgabe_student_details.php index e9384390b..ffb065b49 100644 --- a/cis/private/lehre/abgabe_student_details.php +++ b/cis/private/lehre/abgabe_student_details.php @@ -423,13 +423,13 @@ if($command=="update" && $error!=true) } else { - // paarbeit sollte nur ab SS2021 online bewertet werden + // paarbeit sollte nur ab SS2022 online bewertet werden $qry_sem="SELECT 1 FROM lehre.tbl_projektarbeit JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) JOIN public.tbl_studiensemester USING(studiensemester_kurzbz) WHERE projektarbeit_id=".$db->db_add_param($projektarbeit_id, FHC_INTEGER)." - AND tbl_studiensemester.start::date >= (SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz = 'SS2021')::date + AND tbl_studiensemester.start::date >= (SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz = 'SS2022')::date LIMIT 1"; $result_sem=$db->db_query($qry_sem); From 4ae4be7eedbc7d3a83c6aa8173c77e6e6fab1455 Mon Sep 17 00:00:00 2001 From: Cris Date: Wed, 2 Feb 2022 16:13:41 +0100 Subject: [PATCH 051/122] Fixed Error 'Class 'Studiensemester' not found' in MA Zeitwuensche (VILESCI) --- vilesci/personen/zeitwunsch.php | 1 + 1 file changed, 1 insertion(+) diff --git a/vilesci/personen/zeitwunsch.php b/vilesci/personen/zeitwunsch.php index 1bc9dd13e..726218302 100644 --- a/vilesci/personen/zeitwunsch.php +++ b/vilesci/personen/zeitwunsch.php @@ -34,6 +34,7 @@ require_once('../../include/datum.class.php'); require_once('../../include/benutzerberechtigung.class.php'); require_once('../../include/zeitwunsch.class.php'); require_once('../../include/zeitwunsch_gueltigkeit.class.php'); +require_once('../../include/studiensemester.class.php'); if (!$db = new basis_db()) die('Es konnte keine Verbindung zum Server aufgebaut werden.'); From 08c35c6500ecedbbe1012842204ad526ddec4ac7 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 3 Feb 2022 09:16:56 +0100 Subject: [PATCH 052/122] Fixed Error 'Class 'Studiensemester' not found' in MA Zeitwuensche (VILESCI) --- vilesci/personen/zeitwunsch.php | 1 + 1 file changed, 1 insertion(+) diff --git a/vilesci/personen/zeitwunsch.php b/vilesci/personen/zeitwunsch.php index 1bc9dd13e..726218302 100644 --- a/vilesci/personen/zeitwunsch.php +++ b/vilesci/personen/zeitwunsch.php @@ -34,6 +34,7 @@ require_once('../../include/datum.class.php'); require_once('../../include/benutzerberechtigung.class.php'); require_once('../../include/zeitwunsch.class.php'); require_once('../../include/zeitwunsch_gueltigkeit.class.php'); +require_once('../../include/studiensemester.class.php'); if (!$db = new basis_db()) die('Es konnte keine Verbindung zum Server aufgebaut werden.'); From 0f871dc89f78481efcbd7e6a429a75f00fa4a31d Mon Sep 17 00:00:00 2001 From: Cris Date: Tue, 8 Feb 2022 17:51:58 +0100 Subject: [PATCH 053/122] Added: Methode getVonBis() in Zeitsperre Class MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Liefert die Zeitsperren eines Users innerhalb einer bestimmten Zeitspanne. Einschränkung nach Zeitsperrentyp möglich. --- include/zeitsperre.class.php | 55 ++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/include/zeitsperre.class.php b/include/zeitsperre.class.php index 936a8d32f..7343494aa 100644 --- a/include/zeitsperre.class.php +++ b/include/zeitsperre.class.php @@ -520,5 +520,60 @@ class zeitsperre extends basis_db return $this->bisdatum; } + + /** + * Liefert die Zeitsperren eines Users innerhalb einer bestimmten Zeitspanne. + * Einschränkung nach Zeitsperrentyp möglich. + * + * @param $uid + * @param $von string Datum im Format YYYY-MM-DD + * @param $bis string Datum im Format YYYY-MM-DD + * @param null $zeitsperretyp_kurzbz + * @return bool + */ + public function getVonBis($uid, $von, $bis, $zeitsperretyp_kurzbz = null) + { + $qry = ' + SELECT + zeitsperre_id, zeitsperretyp_kurzbz, vondatum, vonstunde, bisdatum, bisstunde + FROM + campus.tbl_zeitsperre + LEFT JOIN campus.tbl_zeitsperretyp USING (zeitsperretyp_kurzbz) + WHERE + mitarbeiter_uid = '. $this->db_add_param($uid). ' + AND ( + (vondatum BETWEEN '.$this->db_add_param($von).' AND '.$this->db_add_param($bis).') + OR + (bisdatum BETWEEN '.$this->db_add_param($von).' AND '.$this->db_add_param($bis).') + )'; + + if (!is_null($zeitsperretyp_kurzbz)) + { + $qry.= ' + AND zeitsperretyp_kurzbz = '. $this->db_add_param($zeitsperretyp_kurzbz); + } + + if (!$this->db_query($qry)) + { + $this->errormsg=$this->db_last_error(); + return false; + } + else + { + while($row = $this->db_fetch_object()) + { + $obj = new stdClass(); + $obj->zeitsperre_id = $row->zeitsperre_id; + $obj->zeitsperretyp_kurzbz = $row->zeitsperretyp_kurzbz; + $obj->vondatum = $row->vondatum; + $obj->vonstunde = $row->vonstunde; + $obj->bisdatum = $row->bisdatum; + $obj->bisstunde = $row->bisstunde; + + $this->result[]= $obj; + } + return true; + } + } } ?> From 8a848f7169833bb280dbf1d75159d646e1529faa Mon Sep 17 00:00:00 2001 From: Cris Date: Tue, 8 Feb 2022 17:53:22 +0100 Subject: [PATCH 054/122] =?UTF-8?q?Added:=20Anzeige=20in=20Tempus=20=C3=BC?= =?UTF-8?q?ber=20Zeitverfuegbarkeit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wenn ein Lektor eine positive Zeitsperre hinterlegt hat, wird diese im Tempus nun angezeigt. --- content/lvplanung/stpl-week-overlay.xul.php | 4 ++++ rdf/lehreinheit-lvplan.rdf.php | 13 ++++++++++++- skin/tempus.css | 6 ++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/content/lvplanung/stpl-week-overlay.xul.php b/content/lvplanung/stpl-week-overlay.xul.php index 58d73d47d..0e6c083ce 100644 --- a/content/lvplanung/stpl-week-overlay.xul.php +++ b/content/lvplanung/stpl-week-overlay.xul.php @@ -247,6 +247,10 @@ echo ' + + diff --git a/rdf/lehreinheit-lvplan.rdf.php b/rdf/lehreinheit-lvplan.rdf.php index a7c89ac98..c3c53a7b6 100644 --- a/rdf/lehreinheit-lvplan.rdf.php +++ b/rdf/lehreinheit-lvplan.rdf.php @@ -40,6 +40,8 @@ require_once('../include/mitarbeiter.class.php'); require_once('../include/zeitaufzeichnung_gd.class.php'); require_once('../include/lehreinheitmitarbeiter.class.php'); require_once('../include/vertrag.class.php'); +require_once('../include/studiensemester.class.php'); +require_once('../include/zeitsperre.class.php'); $uid=get_uid(); $error_msg=''; @@ -63,7 +65,7 @@ if (isset($_GET['sem'])) else $sem=0; if (isset($_GET['lektor'])) - $lektor=$_GET['lektor']; + $lektor=$_GET['lektor']; else $lektor=$uid; if (isset($_GET['ver'])) @@ -136,6 +138,14 @@ if (!$error_msg) die ('Fehler bei Methode getLehreinheitLVPL(): '.$lehreinheit->errormsg); $lva=$lehreinheit->lehreinheiten; $rdf_url='http://www.technikum-wien.at/lehreinheit-lvplan/'; + +// Positive Zeitsperre 'Zeitverfuegbarkeit' holen +$ss = new Studiensemester($studiensemester); + +$zeitsperre = new Zeitsperre(); +$zeitsperre->getVonBis($lektor, $ss->start, $ss->ende, 'ZVerfueg'); + +$zeitverfuegbarkeit = count($zeitsperre->result) > 0 ? 'Zeit verfügbar' : ''; ?> 0) '.$anzahl_notizen.' '.$l->lehreinheit_id[0].' '.$vertragsstatus.' + '. $zeitverfuegbarkeit. ' '; } diff --git a/skin/tempus.css b/skin/tempus.css index de025ef27..7684fddb1 100644 --- a/skin/tempus.css +++ b/skin/tempus.css @@ -20,6 +20,12 @@ label.tempus_vertrag_info font-size: x-small } +label.tempus_lektor_verfuegbarezeit +{ + font-weight: bold; + color: green; +} + label.kalenderwoche { font-size: medium; From 6d62019447951a5a77396311b941ffe9740c71db Mon Sep 17 00:00:00 2001 From: Cris Date: Wed, 9 Feb 2022 09:55:39 +0100 Subject: [PATCH 055/122] Changed: Zeitverfuegbarkeit bei Zeitsperren im CIS nicht anzeigen --- cis/private/profile/zeitsperre_resturlaub.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cis/private/profile/zeitsperre_resturlaub.php b/cis/private/profile/zeitsperre_resturlaub.php index 6ceaff350..b82d2776c 100644 --- a/cis/private/profile/zeitsperre_resturlaub.php +++ b/cis/private/profile/zeitsperre_resturlaub.php @@ -646,7 +646,7 @@ if(count($zeit->result)>0) "; - if ($row->zeitsperretyp_kurzbz == 'DienstV') + if ($row->zeitsperretyp_kurzbz == 'DienstV' || $row->zeitsperretyp_kurzbz == 'ZVerfueg') $content_table .= ''; else if ($row->vondatum < $gesperrt_bis AND in_array($row->zeitsperretyp_kurzbz,$typen_arr)) $content_table .= ''; From b0212627ce08876c32e71c09f5be52d75414572b Mon Sep 17 00:00:00 2001 From: Cris Date: Wed, 9 Feb 2022 09:56:19 +0100 Subject: [PATCH 056/122] =?UTF-8?q?Changed:=20Zeitverfuegbarkeit=20bei=20Z?= =?UTF-8?q?eitsperren=20im=20CIS=20nicht=20l=C3=B6sch-/editierbar=20machen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cis/private/profile/zeitsperre_resturlaub.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cis/private/profile/zeitsperre_resturlaub.php b/cis/private/profile/zeitsperre_resturlaub.php index b82d2776c..2fa9de7ca 100644 --- a/cis/private/profile/zeitsperre_resturlaub.php +++ b/cis/private/profile/zeitsperre_resturlaub.php @@ -658,7 +658,7 @@ if(count($zeit->result)>0) { $content_table.="\n"; } - elseif($row->zeitsperretyp_kurzbz!='Urlaub') + elseif($row->zeitsperretyp_kurzbz!='Urlaub' && $row->zeitsperretyp_kurzbz != 'ZVerfueg') { $content_table.="\n"; } @@ -718,6 +718,11 @@ if($result = $db->db_query($qry)) { while($row=$db->db_fetch_object($result)) { + if ($row->zeitsperretyp_kurzbz === 'ZVerfueg') + { + continue; + } + if($zeitsperre->zeitsperretyp_kurzbz == $row->zeitsperretyp_kurzbz) $content_form.= ""; else From 5d2adedd37d61d0134e7aa0292ffd64c1aa06ea7 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Wed, 9 Feb 2022 10:35:39 +0100 Subject: [PATCH 057/122] Kommission in der uebersicht hinzugefuegt --- system/filtersupdate.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/system/filtersupdate.php b/system/filtersupdate.php index 9ccc9200f..62014a5bb 100644 --- a/system/filtersupdate.php +++ b/system/filtersupdate.php @@ -1001,7 +1001,8 @@ $filters = array( {"name": "StudentNachname"}, {"name": "Note"}, {"name": "Abgabedatum"}, - {"name": "Studiengang"} + {"name": "Studiengang"}, + {"name": "Kommissionsmitglieder"} ], "filters": [] } From 3b8da2d7d09f3c2cb716886b8c4149e46f1f66a7 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Thu, 10 Feb 2022 15:42:19 +0100 Subject: [PATCH 058/122] moved check if projektarbeit is current to projektarbeit.class.php to projektarbeitIsCurrent method --- cis/private/lehre/abgabe_lektor_details.php | 15 +++------ cis/private/lehre/abgabe_student_details.php | 15 ++------- include/projektarbeit.class.php | 34 ++++++++++++++++++++ 3 files changed, 41 insertions(+), 23 deletions(-) diff --git a/cis/private/lehre/abgabe_lektor_details.php b/cis/private/lehre/abgabe_lektor_details.php index 9d89daa49..a508de098 100644 --- a/cis/private/lehre/abgabe_lektor_details.php +++ b/cis/private/lehre/abgabe_lektor_details.php @@ -120,17 +120,10 @@ if(!$projektarbeit_obj->load($projektarbeit_id)) $titel = $projektarbeit_obj->titel; $student_uid = $projektarbeit_obj->student_uid; -// paarbeit sollte nur ab SS2022 online bewertet werden -$qry_sem="SELECT 1 - FROM lehre.tbl_projektarbeit - JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) - JOIN public.tbl_studiensemester USING(studiensemester_kurzbz) - WHERE projektarbeit_id=".$db->db_add_param($projektarbeit_id, FHC_INTEGER)." - AND tbl_studiensemester.start::date >= (SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz = 'SS2022')::date - LIMIT 1"; -$result_sem=$db->db_query($qry_sem); -$num_rows_sem = $db->db_num_rows($result_sem); -if($num_rows_sem < 0) +// paarbeit sollte nur ab bestimmten Zeitpunkt online bewertet werden +$num_rows_sem = $projektarbeit_obj->projektarbeitIsCurrent($projektarbeit_id); + +if(!is_numeric($num_rows_sem) || $num_rows_sem < 0) { echo "".$p->t('abgabetool/fehlerAktualitaetProjektarbeit')."
     "; } diff --git a/cis/private/lehre/abgabe_student_details.php b/cis/private/lehre/abgabe_student_details.php index ffb065b49..29d74ab66 100644 --- a/cis/private/lehre/abgabe_student_details.php +++ b/cis/private/lehre/abgabe_student_details.php @@ -423,18 +423,9 @@ if($command=="update" && $error!=true) } else { - // paarbeit sollte nur ab SS2022 online bewertet werden - $qry_sem="SELECT 1 - FROM lehre.tbl_projektarbeit - JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) - JOIN public.tbl_studiensemester USING(studiensemester_kurzbz) - WHERE projektarbeit_id=".$db->db_add_param($projektarbeit_id, FHC_INTEGER)." - AND tbl_studiensemester.start::date >= (SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz = 'SS2022')::date - LIMIT 1"; - - $result_sem=$db->db_query($qry_sem); - $num_rows_sem = $db->db_num_rows($result_sem); - if($num_rows_sem < 0) + // paarbeit sollte nur ab bestimmten Zeitpunkt online bewertet werden + $num_rows_sem = $projektarbeit_obj->projektarbeitIsCurrent($projektarbeit_id); + if(!is_numeric($num_rows_sem) || $num_rows_sem < 0) { echo "".$p->t('abgabetool/fehlerAktualitaetProjektarbeit')."
     "; } diff --git a/include/projektarbeit.class.php b/include/projektarbeit.class.php index 131f8e323..cb5fb8f77 100644 --- a/include/projektarbeit.class.php +++ b/include/projektarbeit.class.php @@ -469,5 +469,39 @@ class projektarbeit extends basis_db return false; } } + + /** + * Prüft ob Projektarbeit aktuell ist (ab bestimmtem Semester). + * @param $projektarbeit_id + * @return int -1 wenn Fehler, 0 wenn nicht aktuell, 1 wenn aktuell + */ + public function projektarbeitIsCurrent($projektarbeit_id) + { + // paarbeit sollte nur ab einem Studiensemester online bewertet werden + $qry="SELECT 1 + FROM lehre.tbl_projektarbeit + JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + JOIN public.tbl_studiensemester USING(studiensemester_kurzbz) + WHERE projektarbeit_id=".$this->db_add_param($projektarbeit_id, FHC_INTEGER)." + AND tbl_studiensemester.start::date >= (SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz = 'SS2022')::date + LIMIT 1"; + + $result_sem=$this->db_query($qry); + + if (!$result_sem) + { + $this->errormsg = "Fehler beim Ermitteln der Projektarbeit Aktualität"; + return -1; + } + + $num_rows = $this->db_num_rows($result_sem); + + if ($num_rows < 0) + { + $this->errormsg = "Fehler beim Ermitteln der Anzahl der aktuellen Projektarbeiten"; + } + + return $num_rows; + } } ?> From d9c66d95d0d685d4afb44c027bfda80b99f6b299 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 17 Feb 2022 12:23:48 +0100 Subject: [PATCH 059/122] Added Controller to administrate Zeitverfuegbarkeiten --- .../lvplanung/AdminZeitverfuegbarkeit.php | 221 ++++++++++++++++++ 1 file changed, 221 insertions(+) create mode 100644 application/controllers/lehre/lvplanung/AdminZeitverfuegbarkeit.php diff --git a/application/controllers/lehre/lvplanung/AdminZeitverfuegbarkeit.php b/application/controllers/lehre/lvplanung/AdminZeitverfuegbarkeit.php new file mode 100644 index 000000000..8bfb88c71 --- /dev/null +++ b/application/controllers/lehre/lvplanung/AdminZeitverfuegbarkeit.php @@ -0,0 +1,221 @@ + 'lehre/zeitverfuegbarkeit:rw', + 'saveZeitverfuegbarkeit' => 'lehre/zeitverfuegbarkeit:rw', + 'deleteZeitverfuegbarkeit' => 'lehre/zeitverfuegbarkeit:rw' + ) + ); + + // Load models + $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); + $this->load->model('person/Benutzer_model', 'BenutzerModel'); + $this->load->model('person/Person_model', 'PersonModel'); + $this->load->model('ressource/Zeitsperre_model', 'ZeitsperreModel'); + + // Load libraries + $this->load->library('PermissionLib'); + $this->load->library('AuthLib'); + $this->load->library('WidgetLib'); + + // Load helpers + $this->load->helper('array'); + + // Load language phrases + $this->loadPhrases( + array( + 'global', + 'ui', + 'lehre' + ) + ); + + $this->_setAuthUID(); // sets property uid + + $this->setControllerId(); // sets the controller id + } + + // ----------------------------------------------------------------------------------------------------------------- + // Public methods + + public function index() + { + // Get Studiengaenge the user is entitled for + $result = $this->permissionlib->getSTG_isEntitledFor(self::BERECHTIGUNG_ZEITVERFUEGBARKEIT); + $studiengang_kz_arr = !isEmptyArray($result) ? $result : array(); + + // Get lectors of that Studiengaenge + $result = $this->_getLehreinheitmitarbeiterByStg($studiengang_kz_arr); + $lektor_arr = hasData($result) ? getData($result) : array(); + + // Get available Stundenplan Stunden + $result = $this->_getStunden(); + $stunde_arr = hasData($result) ? getData($result) : array(); + + // Get actual Studiensemester to set min-limit Datepicker + $result = $this->StudiensemesterModel->getAkt(); + $studsemStart = hasData($result) ? getData($result)[0]->start : ''; + + $view_data = array( + 'studiengang_kz_arr' => $studiengang_kz_arr, + 'lektor_arr' => $lektor_arr, + 'stunde_arr' => $stunde_arr, + 'studsemStart' => $studsemStart + ); + + $this->load->view('lehre/lvplanung/adminZeitverfuegbarkeit.php', $view_data); + } + + /** + * Save or update Zeitverfuegbarkeit. + */ + public function saveZeitverfuegbarkeit() + { + $zeitsperre_id = $this->input->post('zeitsperre_id'); + $mitarbeiter_uid = $this->input->post('mitarbeiter_uid'); + $zeitsperretyp_kurzbz = $this->input->post('zeitsperretyp_kurzbz'); + $bezeichnung = $this->input->post('bezeichnung'); + $vonDatum = $this->input->post('vondatum'); + $vonStunde = isEmptyString($this->input->post('vonstunde')) ? null : $this->input->post('vonstunde'); + $bisDatum = $this->input->post('bisdatum'); + $bisStunde = isEmptyString($this->input->post('bisstunde')) ? null : $this->input->post('bisstunde'); + + if ($this->_validate()) // TODO + { + if (is_numeric($zeitsperre_id)) + { + $result = $this->ZeitsperreModel->update( + $zeitsperre_id, + array( + 'vondatum' => $vonDatum, + 'vonstunde' => $vonStunde, + 'bisdatum' => $bisDatum, + 'bisstunde' => $bisStunde, + 'bezeichnung' => $bezeichnung + ) + ); + } + else + { + $result = $this->ZeitsperreModel->save( + $zeitsperretyp_kurzbz, + $mitarbeiter_uid, + $vonDatum, + $bisDatum, + $vonStunde, + $bisStunde, + $bezeichnung + ); + } + } + + if (isError($result)) + { + $this->terminateWithJsonError(getError($result)); + } + + $zeitsperre_id = getData($result); + + // Success response to AJAX + $this->outputJsonSuccess(array( + 'zeitsperre_id' => $zeitsperre_id, + 'msg' => $this->p->t('ui', 'gespeichert') + )); + } + + /** + * Delete Zeitverfuegbarkeit. + */ + public function deleteZeitverfuegbarkeit() + { + $zeitsperre_id = $this->input->post('zeitsperre_id'); + + if (!isset($zeitsperre_id) || !is_numeric($zeitsperre_id)) + { + $this->terminateWithJsonError('Wählen Sie einen Lehrenden aus der Zeitverfügbarkeit-Tabelle aus.'); + } + + // Delete + $result = $this->ZeitsperreModel->delete($zeitsperre_id); + + if (isError($result)) + { + $this->terminateWithJsonError(getError($result)); + } + + $this->outputJsonSuccess(array('msg' => $this->p->t('ui', 'geloescht'))); + } + + // ----------------------------------------------------------------------------------------------------------------- + // Private methods + + /** + * Retrieve the UID of the logged user and checks if it is valid + */ + private function _setAuthUID() + { + $this->_uid = getAuthUID(); + + if (!$this->_uid) show_error('User authentification failed'); + } + + /** + * Get all lectors that are assigend to Lehreinheiten in actual or future semester. + * + * @param $studiengang_kz_arr Restrict only to given stg- + * @return mixed + */ + private function _getLehreinheitmitarbeiterByStg($studiengang_kz_arr) + { + $this->MitarbeiterModel->addSelect('lema.mitarbeiter_uid, nachname, vorname'); + $this->MitarbeiterModel->addDistinct('lema.mitarbeiter_uid'); + $this->MitarbeiterModel->addJoin('lehre.tbl_lehreinheitmitarbeiter lema', 'tbl_mitarbeiter.mitarbeiter_uid = lema.mitarbeiter_uid'); + $this->MitarbeiterModel->addJoin('public.tbl_benutzer b', 'lema.mitarbeiter_uid = b.uid'); + $this->MitarbeiterModel->addJoin('public.tbl_person p', 'person_id'); + $this->MitarbeiterModel->addJoin('lehre.tbl_lehreinheit le', 'lehreinheit_id'); + $this->MitarbeiterModel->addJoin('lehre.tbl_lehrveranstaltung lv', 'lehrveranstaltung_id'); + $this->MitarbeiterModel->addJoin('public.tbl_studiensemester ss', 'studiensemester_kurzbz'); + $this->MitarbeiterModel->addOrder('lema.mitarbeiter_uid'); + + // Return lektoren assigned to actual or future lehreinheiten + return $this->MitarbeiterModel->loadWhere(' + lv.studiengang_kz IN (' . implode(', ', $studiengang_kz_arr) . ') + AND b.aktiv + AND personalnummer > 0 + AND NOW() <= ss.ende' + ); + } + + /** + * Get all available Stunden of Stundentabelle. + * + * @return mixed + */ + private function _getStunden() + { + $this->load->model('ressource/Stunde_model', 'StundeModel'); + $this->StundeModel->addOrder('stunde'); + + return $this->StundeModel->load(); + } + + private function _validate() + { + return true; + } + +} From 0d0351d265262a1c41bfb8b0b93ae36a1bef07f9 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 17 Feb 2022 12:24:14 +0100 Subject: [PATCH 060/122] Added Views to administrate Zeitverfuegbarkeiten --- .../lvplanung/adminZeitverfuegbarkeit.php | 159 ++++++++++++++++++ .../lvplanung/adminZeitverfuegbarkeitData.php | 71 ++++++++ 2 files changed, 230 insertions(+) create mode 100644 application/views/lehre/lvplanung/adminZeitverfuegbarkeit.php create mode 100644 application/views/lehre/lvplanung/adminZeitverfuegbarkeitData.php diff --git a/application/views/lehre/lvplanung/adminZeitverfuegbarkeit.php b/application/views/lehre/lvplanung/adminZeitverfuegbarkeit.php new file mode 100644 index 000000000..3566c5b59 --- /dev/null +++ b/application/views/lehre/lvplanung/adminZeitverfuegbarkeit.php @@ -0,0 +1,159 @@ +load->view( + 'templates/FHC-Header', + array( + 'title' => 'Zeitverfuegbarkeit verwalten', + 'jquery' => true, + 'jqueryui' => true, + 'bootstrap' => true, + 'fontawesome' => true, + 'momentjs' => true, + 'ajaxlib' => true, + 'tabulator' => true, + 'tablewidget' => true, + 'navigationwidget' => true, + 'sbadmintemplate' => true, + 'phrases' => array( + 'global' => array( + 'bis', + 'notiz' + ), + 'ui' => array( + 'systemfehler', + 'von' + ), + 'lehre' => array( + 'lektor' + ) + ), + 'widgets' => true, + 'dialoglib' => true, + 'customJSs' => array( + 'public/js/bootstrapper.js', + 'public/js/lehre/lvplanung/zverfueg.js' + ) + ) +); +?> + + +widgetlib->widget('NavigationWidget'); ?> +
    +
    + + +
    + +
    + + +
    +
    +
    + + + +
    + +
    + +
    +
    + +
    + +
    + +
    +
    + +
    + +
    + +
    +
    + +
    + +
    + +
    + +
    + +
    +
    + +
    + +
    + +
    + +
    + +
    +
    + +
    + + + +
    + +
    +
    + + +
    +
    + load->view('lehre/lvplanung/adminZeitverfuegbarkeitData.php'); ?> +
    +
    + +
    +
    +
    + + +load->view('templates/FHC-Footer'); ?> diff --git a/application/views/lehre/lvplanung/adminZeitverfuegbarkeitData.php b/application/views/lehre/lvplanung/adminZeitverfuegbarkeitData.php new file mode 100644 index 000000000..cfd8d9064 --- /dev/null +++ b/application/views/lehre/lvplanung/adminZeitverfuegbarkeitData.php @@ -0,0 +1,71 @@ + 0 + AND NOW() <= ss.ende + AND zeitsperretyp_kurzbz = \'ZVerfueg\' + ORDER BY zsp.mitarbeiter_uid, zeitsperre_id + ) as tmp + ORDER BY vondatum DESC +'; + +$filterWidgetArray = array( + 'query' => $qry, + 'tableUniqueId' => 'adminZeitverfuegbarkeit', + 'requiredPermissions' => 'lehre/zeitverfuegbarkeit', + 'datasetRepresentation' => 'tabulator', + 'columnsAliases' => array( + 'ZeitsperreID', + 'UID', + ucfirst($this->p->t('lehre', 'lektor')), + ucfirst($this->p->t('ui', 'von')), + 'VonStunde', + ucfirst($this->p->t('global', 'bis')), + 'BisStunde', + ucfirst($this->p->t('global', 'notiz')) + ), + 'datasetRepOptions' => '{ + layout: "fitColumns", // fit columns to width of table + autoResize: false, // prevent auto resizing of table (false to allow adapting table size when cols are (de-)activated + headerFilterPlaceholder: " ", + index: "zeitsperre_id", // assign specific column as unique id (important for row indexing) + selectable: 1, // allow row selection + tableWidgetHeader: false, + rowSelected: function(row) { + func_rowSelected(row); + }, + rowDeselected: function(row) { + func_rowDeselected(row); + } + }', // tabulator properties + 'datasetRepFieldsDefs' => '{ + zeitsperre_id: {visible:false}, + mitarbeiter_uid: {visible: true, headerFilter:"input"}, + lektor: {visible: true, headerFilter:"input"}, + vondatum: {visible: true, headerFilter:"input"}, + vonstunde: {visible: true, headerFilter:"input"}, + bisdatum: {visible: true, headerFilter:"input"}, + bisstunde: {visible: true, headerFilter:"input"}, + bezeichnung: {visible: true, headerFilter:"input"} + }', // col properties +); + +echo $this->widgetlib->widget('TableWidget', $filterWidgetArray); + +?> \ No newline at end of file From 2d44675d908e551b0bc1d27c562fd98eb4837f47 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 17 Feb 2022 12:30:54 +0100 Subject: [PATCH 061/122] Added permission to administrate Zeitverfuegbarkeiten Permission: lehre/zeitverfuegbarkeit --- system/dbupdate_3.3.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index c6d29c85c..d31c657d3 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -5893,6 +5893,20 @@ if($result = @$db->db_query("SELECT 1 FROM campus.tbl_zeitsperretyp WHERE zeitsp } } +// Add permission to administrate zeitverfuegbarkeiten +if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berechtigung_kurzbz = 'lehre/zeitverfuegbarkeit';")) +{ + if($db->db_num_rows($result) == 0) + { + $qry = "INSERT INTO system.tbl_berechtigung(berechtigung_kurzbz, beschreibung) VALUES('lehre/zeitverfuegbarkeit', 'Zeitverfuegbarkeit verwalten');"; + + if(!$db->db_query($qry)) + echo 'system.tbl_berechtigung '.$db->db_last_error().'
    '; + else + echo ' system.tbl_berechtigung: Added permission for lehre/zeitverfuegbarkeit
    '; + } +} + $tabellen=array( "bis.tbl_bisorgform" => array("bisorgform_kurzbz","code","bezeichnung"), "bis.tbl_archiv" => array("archiv_id","studiensemester_kurzbz","meldung","html","studiengang_kz","insertamum","insertvon","typ"), From 9872ab9be35f97870ae0fdd9c038d3c93242b78b Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 17 Feb 2022 12:31:33 +0100 Subject: [PATCH 062/122] Added JS file to administrate Zeitverfuegbarkeiten --- public/js/lehre/lvplanung/zverfueg.js | 196 ++++++++++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100644 public/js/lehre/lvplanung/zverfueg.js diff --git a/public/js/lehre/lvplanung/zverfueg.js b/public/js/lehre/lvplanung/zverfueg.js new file mode 100644 index 000000000..7cac20f14 --- /dev/null +++ b/public/js/lehre/lvplanung/zverfueg.js @@ -0,0 +1,196 @@ +$(function(){ + var studiensemesterStart = $("#studsemStart").val(); + + Zverfueg.initDatepicker(studiensemesterStart); + + $('#form-zeitverfuegbarkeit').submit(function(e){ + + e.preventDefault(); + + let zeitsperre_id = this.zeitsperre_id.value; + let mitarbeiter_uid = this.mitarbeiter_uid.value; + let lektor = this.mitarbeiter_uid.options[this.mitarbeiter_uid.selectedIndex].text; + let bezeichnung = this.bezeichnung.value; + let vondatum = this.vondatum.value; + let vonstunde = this.vonstunde.value; + let bisdatum = this.bisdatum.value; + let bisstunde = this.bisstunde.value; + + + if (!Zverfueg.hasValidDate(vondatum, bisdatum)) + { + return FHC_DialogLib.alertInfo('Enddatum darf nicht NACH Startdatum liegen.'); + } + + if (!Zverfueg.hasValidStunden(vondatum, bisdatum, vonstunde, bisstunde)) + { + return FHC_DialogLib.alertInfo('Am gleichen Tag muss die Endstunde NACH der Anfangsstunde liegen.'); + } + + FHC_AjaxClient.ajaxCallPost( + FHC_JS_DATA_STORAGE_OBJECT.called_path + "/saveZeitverfuegbarkeit", + { + zeitsperre_id: zeitsperre_id, + mitarbeiter_uid: mitarbeiter_uid, + bezeichnung: bezeichnung, + zeitsperretyp_kurzbz: 'ZVerfueg', + vondatum: vondatum, + vonstunde: vonstunde, + bisdatum: bisdatum, + bisstunde: bisstunde + }, + { + successCallback: function (data, textStatus, jqXHR) + { + if (FHC_AjaxClient.isError(data)) + { + FHC_DialogLib.alertWarning(FHC_AjaxClient.getError(data)); + } + + if (FHC_AjaxClient.hasData(data)) + { + if (zeitsperre_id == '') + { + // Add row + $('#tableWidgetTabulator').tabulator('addRow', { + zeitsperre_id: FHC_AjaxClient.getData(data).zeitsperre_id, + mitarbeiter_uid: mitarbeiter_uid, + lektor: lektor, + vondatum: vondatum, + vonstunde: $.isNumeric(vonstunde) ? vonstunde : '', + bisdatum: bisdatum, + bisstunde: $.isNumeric(bisstunde) ? bisstunde : '', + bezeichnung: bezeichnung + }, true); // true adds new row on top + } + else { + $('#tableWidgetTabulator').tabulator('updateData', [{ + zeitsperre_id: zeitsperre_id, + vondatum: vondatum, + vonstunde: $.isNumeric(vonstunde) ? vonstunde : '', + bisdatum: bisdatum, + bisstunde: $.isNumeric(bisstunde) ? bisstunde : '', + bezeichnung: bezeichnung + }]); + } + + // Reset form + Zverfueg.resetFormFields(); + + // Disable break and delete button + Zverfueg.disableFormElements(); + + // Display success message + FHC_DialogLib.alertSuccess(FHC_AjaxClient.getData(data).msg); + } + }, + errorCallback: function (jqXHR, textStatus, errorThrown) + { + FHC_DialogLib.alertError(FHC_PhrasesLib.t("ui", "systemfehler")); + } + } + ); + }) + + $('#btn-delete').click(function() { + let zeitsperre_id = $('#zeitsperre_id').val(); + + FHC_AjaxClient.ajaxCallPost( + FHC_JS_DATA_STORAGE_OBJECT.called_path + "/deleteZeitverfuegbarkeit", + { + zeitsperre_id: zeitsperre_id, + }, + { + successCallback: function (data, textStatus, jqXHR) { + if (FHC_AjaxClient.isError(data)) { + FHC_DialogLib.alertWarning(FHC_AjaxClient.getError(data)); + } + + if (FHC_AjaxClient.hasData(data)) { + + // Delete row + let row = $('#tableWidgetTabulator').tabulator('getRow', zeitsperre_id); + row.delete(zeitsperre_id); + + // Reset form + Zverfueg.resetFormFields(); + + // Display delete message + FHC_DialogLib.alertSuccess(FHC_AjaxClient.getData(data).msg); + } + }, + errorCallback: function (jqXHR, textStatus, errorThrown) + { + FHC_DialogLib.alertError(FHC_PhrasesLib.t("ui", "systemfehler")); + } + }); + }); + + $('#btn-break').click(function () { + Zverfueg.disableFormElements(); + }) + +}) + +var Zverfueg = { + initDatepicker: function (studiensemesterStart) { + $.datepicker.setDefaults($.datepicker.regional['de']); + $( ".zverfueg-datepicker" ).datepicker({ + "dateFormat": "yy-mm-dd", + "minDate": $.datepicker.formatDate('yy-mm-dd', new Date(studiensemesterStart)) + }); + }, + resetFormFields: function(){ + $('#form-zeitverfuegbarkeit') + .trigger('reset') + .find('input:hidden[name=zeitsperre_id]').val('') + .find('textarea[name=bezeichnung]').val(''); + }, + disableFormElements: function (){ + $('#btn-delete').prop('disabled', true); + $('#mitarbeiter_uid').prop('disabled', false); + }, + enableFormElements: function (){ + $('#btn-delete').prop('disabled', false); + $('#mitarbeiter_uid').prop('disabled', true); + }, + hasValidDate: function(vonDatum, bisDatum){ + if (bisDatum < vonDatum) + { + return false; + } + + return true; + }, + hasValidStunden: function (vonDatum, bisDatum, vonStunde, bisStunde){ + if (vonDatum == bisDatum) + { + if ($.isNumeric(vonStunde) && $.isNumeric(bisStunde) && (bisStunde < vonStunde)) + { + return false; + } + } + return true; + } +} + +// TABULATOR FUNCTIONS +// --------------------------------------------------------------------------------------------------------------------- +function func_rowSelected(row){ + Zverfueg.enableFormElements(); + + // Set form fields + $('#zeitsperre_id').val(row.getData().zeitsperre_id); + $('#mitarbeiter_uid').val(row.getData().mitarbeiter_uid); + $('#bezeichnung').val(row.getData().bezeichnung); + $('#vondatum').datepicker('setDate', row.getData().vondatum); + $('#bisdatum').datepicker('setDate', row.getData().bisdatum); + $('#vonstunde').val(row.getData().vonstunde); + $('#bisstunde').val(row.getData().bisstunde); +} + +function func_rowDeselected(row){ + Zverfueg.resetFormFields(); + Zverfueg.disableFormElements(); + Zverfueg.resetFormFields(); +} \ No newline at end of file From 5c82a4d821168d6112eec587acdba673c5c76abb Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 17 Feb 2022 12:33:01 +0100 Subject: [PATCH 063/122] Added insert/update/delete methods to Zeitsperre Model --- .../models/ressource/Zeitsperre_model.php | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/application/models/ressource/Zeitsperre_model.php b/application/models/ressource/Zeitsperre_model.php index 350a7be58..078d29d8b 100644 --- a/application/models/ressource/Zeitsperre_model.php +++ b/application/models/ressource/Zeitsperre_model.php @@ -12,6 +12,47 @@ class Zeitsperre_model extends DB_Model $this->pk = 'zeitsperre_id'; } + /** + * Save or update Zeitsperre. + * + * @param $zeitsperretyp_kurzbz + * @param $mitarbeiter_uid + * @param $vonDatum + * @param $bisDatum + * @param null $vonStunde + * @param null $bisStunde + * @param null $bezeichnung + * @param null $vertretung_uid + * @param null $erreichbarkeit_kurzbz + * @param null $freigabeamum + * @param null $freigabevon + * @return array + */ + public function save($zeitsperretyp_kurzbz, $mitarbeiter_uid, $vonDatum, $bisDatum, + $vonStunde = null, $bisStunde = null, $bezeichnung = null, $vertretung_uid = null, + $erreichbarkeit_kurzbz = null, $freigabeamum = null, $freigabevon = null) + { + return $this->insert(array( + 'zeitsperretyp_kurzbz' => $zeitsperretyp_kurzbz, + 'mitarbeiter_uid' => $mitarbeiter_uid, + 'vondatum' => $vonDatum, + 'bisdatum' => $bisDatum, + 'vonstunde' => $vonStunde, + 'bisstunde' => $bisStunde, + 'bezeichnung' => $bezeichnung, + 'vertretung_uid' => $vertretung_uid, + 'insertvon' => getAuthUID(), + 'insertamum' => (new DateTime())->format('Y-m-d H:i:s'), + 'erreichbarkeit_kurzbz' => $erreichbarkeit_kurzbz, + 'freigabeamum' => $freigabeamum, + 'freigabevon' => $freigabevon + )); + } + + /** + * Delete Zeitsperre. + * @return array|stdClass|null + */ public function deleteEntriesForCurrentDay() { $today = date('Y-m-d'); From ca51fef7f815948dae3919982597623a3139ecf1 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 17 Feb 2022 12:33:38 +0100 Subject: [PATCH 064/122] Added method to get actual Studiensemester to Studiensemester Model --- .../models/organisation/Studiensemester_model.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/application/models/organisation/Studiensemester_model.php b/application/models/organisation/Studiensemester_model.php index 742757513..e7a3d77b1 100644 --- a/application/models/organisation/Studiensemester_model.php +++ b/application/models/organisation/Studiensemester_model.php @@ -13,6 +13,20 @@ class Studiensemester_model extends DB_Model $this->hasSequence = false; } + /** + * Get actual Studiensemester. + * + * @return array + */ + public function getAkt() + { + return $this->loadWhere(array( + 'start <= ' => 'NOW()', + 'ende >= ' => 'NOW()' + ) + ); + } + // Get next study semester public function getNext() { From e06301a2de3cb791d7d03d0b6de7dac5174508f5 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 17 Feb 2022 12:34:44 +0100 Subject: [PATCH 065/122] Added phrase 'Geloescht' / 'Deleted' --- system/phrasesupdate.php | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 1baffa93b..8568fdc84 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -1554,6 +1554,26 @@ $phrases = array( ) ) ), + array( + 'app' => 'core', + 'category' => 'ui', + 'phrase' => 'geloescht', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Gelöscht', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Deleted', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'anrechnung', From b8b3b1b07df4fe2d832e39602feb6f3a682d3516 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 17 Feb 2022 12:36:31 +0100 Subject: [PATCH 066/122] Embedded menu item Zeitverfuegbarkeit to FH Complete Menu --- application/config/navigation.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/application/config/navigation.php b/application/config/navigation.php index d76b8a7f2..d415e9332 100644 --- a/application/config/navigation.php +++ b/application/config/navigation.php @@ -71,6 +71,16 @@ $config['navigation_header'] = array( 'lehre/lehrauftrag_erteilen:r' ) ), + 'zverfueg' => array( + 'link' => site_url('lehre/lvplanung/AdminZeitverfuegbarkeit'), + 'description' => 'Zeitverfügbarkeit', + 'expand' => true, + 'sort' => 45, + 'requiredPermissions' => array( + 'lehre/zeitverfuegbarkeit:rw', + 'lehre/zeitverfuegbarkeit:rw' + ) + ), 'zgvueberpruefung' => array( 'link' => site_url('system/infocenter/ZGVUeberpruefung'), 'description' => 'ZGV Überprüfung', From 558ad7beee0d471e948b430a373f60a36306c729 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 17 Feb 2022 12:57:35 +0100 Subject: [PATCH 067/122] Fixed wrong column name 'ZeitsperreID' to correct name 'UID' --- .../views/lehre/lvplanung/adminZeitverfuegbarkeitData.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/application/views/lehre/lvplanung/adminZeitverfuegbarkeitData.php b/application/views/lehre/lvplanung/adminZeitverfuegbarkeitData.php index cfd8d9064..eb0c24635 100644 --- a/application/views/lehre/lvplanung/adminZeitverfuegbarkeitData.php +++ b/application/views/lehre/lvplanung/adminZeitverfuegbarkeitData.php @@ -4,7 +4,7 @@ $STUDIENGANG_KZ_ARR = $studiengang_kz_arr; // stg the user is entitled to admini $qry = ' SELECT * FROM ( - SELECT DISTINCT ON (zsp.mitarbeiter_uid, zeitsperre_id) zsp.mitarbeiter_uid, zeitsperre_id, + SELECT DISTINCT ON (zeitsperre_id, zsp.mitarbeiter_uid) zeitsperre_id, zsp.mitarbeiter_uid, concat_ws(\' \', nachname, vorname) AS "lektor", vondatum, vonstunde, bisdatum, bisstunde, zsp.bezeichnung FROM public.tbl_person @@ -20,7 +20,7 @@ $qry = ' AND ma.personalnummer > 0 AND NOW() <= ss.ende AND zeitsperretyp_kurzbz = \'ZVerfueg\' - ORDER BY zsp.mitarbeiter_uid, zeitsperre_id + ORDER BY zeitsperre_id, zsp.mitarbeiter_uid ) as tmp ORDER BY vondatum DESC '; From 61d7b68a796e3b06e036341f4fde9b9fafc009d4 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 17 Feb 2022 14:48:19 +0100 Subject: [PATCH 068/122] Added validation checks on post data Checking date restrictions and other mandatory post params. Deleted client side validations, now they are performed only on server side. --- .../lvplanung/AdminZeitverfuegbarkeit.php | 56 +++++++++++++++++-- public/js/lehre/lvplanung/zverfueg.js | 29 ---------- 2 files changed, 52 insertions(+), 33 deletions(-) diff --git a/application/controllers/lehre/lvplanung/AdminZeitverfuegbarkeit.php b/application/controllers/lehre/lvplanung/AdminZeitverfuegbarkeit.php index 8bfb88c71..e039b924d 100644 --- a/application/controllers/lehre/lvplanung/AdminZeitverfuegbarkeit.php +++ b/application/controllers/lehre/lvplanung/AdminZeitverfuegbarkeit.php @@ -94,7 +94,8 @@ class AdminZeitverfuegbarkeit extends Auth_Controller $bisDatum = $this->input->post('bisdatum'); $bisStunde = isEmptyString($this->input->post('bisstunde')) ? null : $this->input->post('bisstunde'); - if ($this->_validate()) // TODO + $result = $this->_validate($this->input->post()); + if (isSuccess($result)) { if (is_numeric($zeitsperre_id)) { @@ -144,7 +145,7 @@ class AdminZeitverfuegbarkeit extends Auth_Controller { $zeitsperre_id = $this->input->post('zeitsperre_id'); - if (!isset($zeitsperre_id) || !is_numeric($zeitsperre_id)) + if (!is_numeric($zeitsperre_id)) { $this->terminateWithJsonError('Wählen Sie einen Lehrenden aus der Zeitverfügbarkeit-Tabelle aus.'); } @@ -213,9 +214,56 @@ class AdminZeitverfuegbarkeit extends Auth_Controller return $this->StundeModel->load(); } - private function _validate() + /** + * Validaton checks performed on post data. + * + * @param $post + * @return array|stdClass + * @throws Exception + */ + private function _validate($post) { - return true; + if (isEmptyString($post['mitarbeiter_uid'])) + { + return (error('LektorIn fehlt')); + } + + if (isEmptyString($post['vondatum'])) + { + return error('Startdatum fehlt'); + } + + if (isEmptyString($post['bisdatum'])) + { + return error('Endedatum fehlt'); + } + + if (new DateTime($post['bisdatum']) < new DateTime($post['vondatum'])) + { + return error('Endedatum darf nicht VOR dem Startdatum liegen'); + } + + // Check bisstunde not after vonstunde within same day + if (new DateTime($post['bisdatum']) == new DateTime($post['vondatum'])) + { + if (is_numeric($post['vonstunde']) && is_numeric($post['bisstunde']) + && $post['bisstunde'] < $post['vonstunde']) + { + return error('Am gleichen Tag darf Endstunde nicht VOR der Startstunde liegen'); + } + } + + // Check dates are > then start of actual Studiensemester + $result = $this->StudiensemesterModel->getAkt(); + $studsemStart = hasData($result) ? getData($result)[0]->start : ''; + + if (new DateTime($post['vondatum']) < new DateTime($studsemStart) || + new DateTime($post['bisdatum']) < new DateTime($studsemStart)) + { + return error('Start- und Endedatum können nur für das aktuelle oder künftige Studiensemester geplant werden'); + } + + return success(); } } diff --git a/public/js/lehre/lvplanung/zverfueg.js b/public/js/lehre/lvplanung/zverfueg.js index 7cac20f14..c622edcf0 100644 --- a/public/js/lehre/lvplanung/zverfueg.js +++ b/public/js/lehre/lvplanung/zverfueg.js @@ -16,17 +16,6 @@ $(function(){ let bisdatum = this.bisdatum.value; let bisstunde = this.bisstunde.value; - - if (!Zverfueg.hasValidDate(vondatum, bisdatum)) - { - return FHC_DialogLib.alertInfo('Enddatum darf nicht NACH Startdatum liegen.'); - } - - if (!Zverfueg.hasValidStunden(vondatum, bisdatum, vonstunde, bisstunde)) - { - return FHC_DialogLib.alertInfo('Am gleichen Tag muss die Endstunde NACH der Anfangsstunde liegen.'); - } - FHC_AjaxClient.ajaxCallPost( FHC_JS_DATA_STORAGE_OBJECT.called_path + "/saveZeitverfuegbarkeit", { @@ -153,24 +142,6 @@ var Zverfueg = { enableFormElements: function (){ $('#btn-delete').prop('disabled', false); $('#mitarbeiter_uid').prop('disabled', true); - }, - hasValidDate: function(vonDatum, bisDatum){ - if (bisDatum < vonDatum) - { - return false; - } - - return true; - }, - hasValidStunden: function (vonDatum, bisDatum, vonStunde, bisStunde){ - if (vonDatum == bisDatum) - { - if ($.isNumeric(vonStunde) && $.isNumeric(bisStunde) && (bisStunde < vonStunde)) - { - return false; - } - } - return true; } } From d17c22186737f508d84ee9643446b8b38eb8a5ca Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 17 Feb 2022 15:04:17 +0100 Subject: [PATCH 069/122] Fixed: Lektor-Dropdown not disabled anymore after Deleting Zeitverfuegung --- public/js/lehre/lvplanung/zverfueg.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/public/js/lehre/lvplanung/zverfueg.js b/public/js/lehre/lvplanung/zverfueg.js index c622edcf0..2774a5662 100644 --- a/public/js/lehre/lvplanung/zverfueg.js +++ b/public/js/lehre/lvplanung/zverfueg.js @@ -66,7 +66,7 @@ $(function(){ // Reset form Zverfueg.resetFormFields(); - // Disable break and delete button + // Disable form elements Zverfueg.disableFormElements(); // Display success message @@ -104,6 +104,9 @@ $(function(){ // Reset form Zverfueg.resetFormFields(); + // Disable form elements + Zverfueg.disableFormElements(); + // Display delete message FHC_DialogLib.alertSuccess(FHC_AjaxClient.getData(data).msg); } From df4d2df9f25ece7820cebbd922d85794fddd235e Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 17 Feb 2022 16:54:47 +0100 Subject: [PATCH 070/122] Added tooltip to delete button --- application/views/lehre/lvplanung/adminZeitverfuegbarkeit.php | 4 +++- public/js/lehre/lvplanung/zverfueg.js | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/application/views/lehre/lvplanung/adminZeitverfuegbarkeit.php b/application/views/lehre/lvplanung/adminZeitverfuegbarkeit.php index 3566c5b59..18675c03f 100644 --- a/application/views/lehre/lvplanung/adminZeitverfuegbarkeit.php +++ b/application/views/lehre/lvplanung/adminZeitverfuegbarkeit.php @@ -133,7 +133,9 @@ $this->load->view( -
    ".$p->t('abgabetool/student').": ".$db->convert_html_chars($studentenname).""; -if ($num_rows_sem >= 1) + +$semester_benotbar = $num_rows_sem >= 1; +$endupload_vorhanden = $num_rows_endupload >= 1; + +if ($semester_benotbar && $endupload_vorhanden) { $htmlstr .= "
    "; $htmlstr .= "\n"; @@ -466,9 +484,10 @@ if ($num_rows_sem >= 1) } else { + $quick_info = !$semester_benotbar ? $p->t('abgabetool/aeltereParbeitBenoten') : $p->t('abgabetool/keinEnduploadErfolgt'); $htmlstr .= ""; - $htmlstr .= ""; + $htmlstr .= ""; $htmlstr .= "
    "; } $htmlstr .= "
    ".(isset($row_vertretung->kurzbz)?$row_vertretung->kurzbz:'')." ".(isset($erreichbarkeit_arr[$row->erreichbarkeit])?$erreichbarkeit_arr[$row->erreichbarkeit]:'')." ".($row->freigabeamum!=''?'Ja':'')."  ".$p->t('zeitsperre/loeschen')."".$p->t('zeitsperre/loeschen')."
    - + @@ -366,7 +318,7 @@ class LVPlanJob extends JOB_Controller $errorReceiverUid_arr[]= $stgMail; } } - + if (isset($errorReceiverUid_arr)) { return error('Mail updated Zeitwuensche could not be sent to :'. implode($errorReceiverUid_arr, ',')); @@ -388,50 +340,60 @@ class LVPlanJob extends JOB_Controller { // Get KF Leitung eMail $this->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel'); - $result = $this->BenutzerfunktionModel->loadWhere(array( - 'funktion_kurzbz' => 'Leitung', - 'oe_kurzbz' => $oe_kurzbz - )); - $kfMail = $result->retval[0]->uid. '@'. DOMAIN; + $result = $this->BenutzerfunktionModel->getBenutzerFunktionen( + 'Leitung', + $oe_kurzbz, + $activeoeonly = true, + $activebenonly = true + ); - $lektorenTabelle = ' -
    NameName UID
    - - - - - - '; + if(isSuccess($result) && hasData($result)) + { + $empfaenger = array(); - foreach($uid_arr as $uid) - { - $person = $this->PersonModel->getByUid($uid); - $lektorenTabelle.= ' - - - - - '; - } + foreach(getData($result) as $row) + $empfaenger[] = $row->uid. '@'. DOMAIN; + $kfMail = implode(',',$empfaenger); - $lektorenTabelle.= '
    NameUID
    '. getData($person)[0]->vorname. ' '. getData($person)[0]->nachname. '['. $uid. ']
    '; + $lektorenTabelle = ' + + + + + + + '; - $contentData_arr = array( - 'datentabelle' => $lektorenTabelle - ); + foreach($uid_arr as $uid) + { + $person = $this->PersonModel->getByUid($uid); + $lektorenTabelle.= ' + + + + + '; + } - // Send mail - if (!sendSanchoMail( - 'ZeitwunschUpdateMail', - $contentData_arr, - $kfMail, - 'Änderung von Zeitwünschen', - 'sancho_header_min_bw.jpg', - 'sancho_footer_min_bw.jpg' - )) - { - $errorReceiverUid_arr[]= $kfMail; - } + $lektorenTabelle.= '
    NameUID
    '. getData($person)[0]->vorname. ' '. getData($person)[0]->nachname. '['. $uid. ']
    '; + + $contentData_arr = array( + 'datentabelle' => $lektorenTabelle + ); + + // Send mail + if (!sendSanchoMail( + 'ZeitwunschUpdateMail', + $contentData_arr, + $kfMail, + 'Änderung von Zeitwünschen', + 'sancho_header_min_bw.jpg', + 'sancho_footer_min_bw.jpg' + )) + { + $errorReceiverUid_arr[]= $kfMail; + } + } } if (isset($errorReceiverUid_arr)) @@ -453,7 +415,7 @@ class LVPlanJob extends JOB_Controller $lektorenTabelle = ' - + @@ -461,11 +423,11 @@ class LVPlanJob extends JOB_Controller foreach($data_arr as $lector) { - $person = $this->PersonModel->getByUid($lector->mitarbeiter_uid); + $person = $this->PersonModel->getByUid($lector); $lektorenTabelle.= ' - + '; } diff --git a/application/models/ressource/Stundenplandev_model.php b/application/models/ressource/Stundenplandev_model.php index 4a9c9c5ed..a498e209b 100644 --- a/application/models/ressource/Stundenplandev_model.php +++ b/application/models/ressource/Stundenplandev_model.php @@ -94,11 +94,11 @@ class Stundenplandev_model extends DB_Model if ($lehrveranstaltung_id != '') { - $qry.=" + $qry.=" lehreinheit_id IN ( SELECT lehreinheit_id FROM lehre.tbl_lehreinheit WHERE lehrveranstaltung_id = ? - AND studiensemester_kurzbz = ? + AND studiensemester_kurzbz = ? )"; $params[]= $lehrveranstaltung_id; @@ -113,13 +113,13 @@ class Stundenplandev_model extends DB_Model } elseif ($mitarbeiter_uid != '') { - $qry.= " - mitarbeiter_uid = ? + $qry.= " + mitarbeiter_uid = ? AND lehreinheit_id IN ( SELECT lehreinheit_id FROM lehre.tbl_lehreinheitmitarbeiter JOIN lehre.tbl_lehreinheit USING (lehreinheit_id) - WHERE mitarbeiter_uid = ? + WHERE mitarbeiter_uid = ? AND studiensemester_kurzbz IN ( ? ) )"; $params[] = $mitarbeiter_uid; @@ -128,11 +128,11 @@ class Stundenplandev_model extends DB_Model } elseif ($student_uid != '') { - $qry.=" + $qry.=" lehreinheit_id IN ( SELECT lehreinheit_id FROM campus.vw_student_lehrveranstaltung - WHERE uid = ? + WHERE uid = ? AND studiensemester_kurzbz = ? )"; @@ -144,7 +144,7 @@ class Stundenplandev_model extends DB_Model if($nurBevorstehende) { - $qry.= " AND datum >= NOW()::date "; + $qry.= " AND stpl.datum >= NOW()::date "; } $qry.= " From 6a403a7fc35ea2fcf830be44f1b3ab240fc2dc69 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Mon, 11 Apr 2022 08:40:57 +0200 Subject: [PATCH 094/122] =?UTF-8?q?Logik=20Generierung=20MA-Nummer=20im=20?= =?UTF-8?q?Fas=20ge=C3=A4ndert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/mitarbeiter.class.php | 34 +++++++++++++++++++ include/tw/generateuid.inc.php | 14 ++++++++ system/dbupdate_3.3.php | 31 +++++++++++++++++ vilesci/personen/import/mitarbeiterimport.php | 14 ++++---- 4 files changed, 87 insertions(+), 6 deletions(-) diff --git a/include/mitarbeiter.class.php b/include/mitarbeiter.class.php index 5d63c9989..00c131f35 100644 --- a/include/mitarbeiter.class.php +++ b/include/mitarbeiter.class.php @@ -1655,5 +1655,39 @@ class mitarbeiter extends benutzer return false; } + + /** + * Generiert mitarbeiter_uid anhand sequence tbl_mitarbeiter_personalnummer_seq + * @return string $mitarbeiter_uid im Formate maXXXX (zum Bsp. ma0207) + */ + public function getMitarbeiterMaNr() + { + $qry = "SELECT last_value FROM tbl_mitarbeiter_personalnummer_seq"; + + if ($result = $this->db_query($qry)) + { + while ($row = $this->db_fetch_object()) + { + if ($row->last_value != '') + { + $maNr = $row->last_value; + $maNr = $maNr - 9999; + $maNr = 'ma'. $maNr; + return $maNr; + } + else + { + $this->errormsg = 'Fehler bei einer Datenbankabfrage!'; + $return = false; + } + } + } + else + { + $this->errormsg = "Fehler bei der Abfrage aufgetreten"; + return false; + } + } + } ?> diff --git a/include/tw/generateuid.inc.php b/include/tw/generateuid.inc.php index 78e9eae69..9205633cc 100644 --- a/include/tw/generateuid.inc.php +++ b/include/tw/generateuid.inc.php @@ -23,6 +23,7 @@ * Funktionen zum Generieren der UIDs */ require_once(dirname(__FILE__).'/../addon.class.php'); +require_once(dirname(__FILE__).'/../mitarbeiter.class.php'); // die aktiven Addons werden durchsucht, ob eines davon eine eigene UID Generierung vorsieht // falls ja, wird die Version des Addons genommen, ansonsten die Default Generierung @@ -109,5 +110,18 @@ if(!$generateuid_addon_found) return $uid; } } + + /** + * Neue Logik Generierung Mitarbeiter UID + * fortlaufende ma_number a la ma0200; + * @return string $maNr maNr im Format maXXXX + **/ + function generateMaNumberUID() + { + $mitarbeiter = new mitarbeiter(); + $maNr = $mitarbeiter->getMitarbeiterMaNr(); + + return $maNr; + } } ?> diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index fa073bcba..fae594851 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -5979,6 +5979,37 @@ if ($result = $db->db_query("SELECT * FROM pg_class WHERE relname='idx_webservic } } +//ALTER Sequence tbl_mitarbeiter_personalnummer_seq +if ($result = @$db->db_query("SELECT last_value FROM tbl_mitarbeiter_personalnummer_seq")) +{ + $json = $db->db_getResultJSON($result); + $last = json_decode($json); + $last = $last[0]->{'last_value'}; + + if ($last <= 10000) + { + $count = @$db->db_query(" + SELECT personalnummer FROM public.tbl_mitarbeiter + order by personalnummer DESC + Limit 1 + "); + + $count = $db->db_getResultJSON($count); + $count = json_decode($count); + $count = $count[0]->{'personalnummer'} + 1; + $qry = 'ALTER SEQUENCE tbl_mitarbeiter_personalnummer_seq restart with '; + $qry .= $count; + if (!$db->db_query($qry)) + { + echo ' tbl_mitarbeiter_personalnummer_seq '.$db->db_last_error().'
    '; + } + else + { + echo '
    tbl_mitarbeiter_personalnummer_seq auf neuen Startwert '. $count . ' geändert.'; + } + } +} + // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

    Pruefe Tabellen und Attribute!

    '; diff --git a/vilesci/personen/import/mitarbeiterimport.php b/vilesci/personen/import/mitarbeiterimport.php index 14081986c..c589f8669 100644 --- a/vilesci/personen/import/mitarbeiterimport.php +++ b/vilesci/personen/import/mitarbeiterimport.php @@ -16,8 +16,9 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * * Authors: Christian Paminger , - * Andreas Oesterreicher and - * Rudolf Hangl . + * Andreas Oesterreicher , + * Rudolf Hangl , + * Manuela Thamer . */ require_once('../../../config/vilesci.config.inc.php'); @@ -621,7 +622,7 @@ if(isset($_POST['save'])) $vorname_clean = mb_strtolower(convertProblemChars($vorname)); $uid=''; - $uid = generateMitarbeiterUID($vorname_clean, $nachname_clean, $lektor, $fixangestellt); + $uid = generateMaNumberUID(); if ($wunschUid != '') { @@ -872,10 +873,10 @@ if(isset($_POST['save'])) } } - if(!$error) + if (!$error) { $db->db_query('COMMIT'); - die("MitarbeiterIn $vorname $vornamen $nachname wurde erfolgreich angelegt

    Neue Person anlegen
    "); + die("MitarbeiterIn $vorname $vornamen $nachname ($uid) wurde erfolgreich angelegt

    Neue Person anlegen
    "); } else { @@ -925,7 +926,8 @@ echo '
    '; echo ''; echo ''; From c8b23dbe124cccb938c6b812c903fcfbbf5421fc Mon Sep 17 00:00:00 2001 From: ma0068 Date: Tue, 12 Apr 2022 12:15:17 +0200 Subject: [PATCH 095/122] Generierung UID in Addon FHTW ausgelagert --- include/mitarbeiter.class.php | 16 +++++----- include/tw/generateuid.inc.php | 17 ++--------- system/dbupdate_3.3.php | 30 ------------------- vilesci/personen/import/mitarbeiterimport.php | 10 ++++++- 4 files changed, 18 insertions(+), 55 deletions(-) diff --git a/include/mitarbeiter.class.php b/include/mitarbeiter.class.php index 00c131f35..ac67c1ce5 100644 --- a/include/mitarbeiter.class.php +++ b/include/mitarbeiter.class.php @@ -1657,23 +1657,21 @@ class mitarbeiter extends benutzer /** - * Generiert mitarbeiter_uid anhand sequence tbl_mitarbeiter_personalnummer_seq - * @return string $mitarbeiter_uid im Formate maXXXX (zum Bsp. ma0207) + * Generiert nächste freie Personalnummer anhand der sequence tbl_mitarbeiter_personalnummer_seq + * @return string $personalnummer */ - public function getMitarbeiterMaNr() + public function getNextPersonalnummer() { - $qry = "SELECT last_value FROM tbl_mitarbeiter_personalnummer_seq"; + $qry = "SELECT nextval('tbl_mitarbeiter_personalnummer_seq') "; if ($result = $this->db_query($qry)) { while ($row = $this->db_fetch_object()) { - if ($row->last_value != '') + if ($row->nextval != '') { - $maNr = $row->last_value; - $maNr = $maNr - 9999; - $maNr = 'ma'. $maNr; - return $maNr; + $personalnummer = $row->nextval; + return $personalnummer; } else { diff --git a/include/tw/generateuid.inc.php b/include/tw/generateuid.inc.php index 9205633cc..8c0a1ab80 100644 --- a/include/tw/generateuid.inc.php +++ b/include/tw/generateuid.inc.php @@ -23,7 +23,6 @@ * Funktionen zum Generieren der UIDs */ require_once(dirname(__FILE__).'/../addon.class.php'); -require_once(dirname(__FILE__).'/../mitarbeiter.class.php'); // die aktiven Addons werden durchsucht, ob eines davon eine eigene UID Generierung vorsieht // falls ja, wird die Version des Addons genommen, ansonsten die Default Generierung @@ -74,7 +73,7 @@ if(!$generateuid_addon_found) // **** // * Gerneriert die Mitarbeiter UID // **** - function generateMitarbeiterUID($vorname, $nachname, $lektor, $fixangestellt=true) + function generateMitarbeiterUID($vorname, $nachname, $lektor, $fixangestellt=true, $personalnummer=null) { $bn = new benutzer(); $reserviert = array(); @@ -110,18 +109,6 @@ if(!$generateuid_addon_found) return $uid; } } - - /** - * Neue Logik Generierung Mitarbeiter UID - * fortlaufende ma_number a la ma0200; - * @return string $maNr maNr im Format maXXXX - **/ - function generateMaNumberUID() - { - $mitarbeiter = new mitarbeiter(); - $maNr = $mitarbeiter->getMitarbeiterMaNr(); - - return $maNr; - } } + ?> diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index fae594851..0f28e544a 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -5979,36 +5979,6 @@ if ($result = $db->db_query("SELECT * FROM pg_class WHERE relname='idx_webservic } } -//ALTER Sequence tbl_mitarbeiter_personalnummer_seq -if ($result = @$db->db_query("SELECT last_value FROM tbl_mitarbeiter_personalnummer_seq")) -{ - $json = $db->db_getResultJSON($result); - $last = json_decode($json); - $last = $last[0]->{'last_value'}; - - if ($last <= 10000) - { - $count = @$db->db_query(" - SELECT personalnummer FROM public.tbl_mitarbeiter - order by personalnummer DESC - Limit 1 - "); - - $count = $db->db_getResultJSON($count); - $count = json_decode($count); - $count = $count[0]->{'personalnummer'} + 1; - $qry = 'ALTER SEQUENCE tbl_mitarbeiter_personalnummer_seq restart with '; - $qry .= $count; - if (!$db->db_query($qry)) - { - echo ' tbl_mitarbeiter_personalnummer_seq '.$db->db_last_error().'
    '; - } - else - { - echo '
    tbl_mitarbeiter_personalnummer_seq auf neuen Startwert '. $count . ' geändert.'; - } - } -} // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

    Pruefe Tabellen und Attribute!

    '; diff --git a/vilesci/personen/import/mitarbeiterimport.php b/vilesci/personen/import/mitarbeiterimport.php index c589f8669..91d78d385 100644 --- a/vilesci/personen/import/mitarbeiterimport.php +++ b/vilesci/personen/import/mitarbeiterimport.php @@ -621,8 +621,16 @@ if(isset($_POST['save'])) $nachname_clean = mb_strtolower(convertProblemChars($nachname)); $vorname_clean = mb_strtolower(convertProblemChars($vorname)); $uid=''; + $mitarbeiter = new mitarbeiter(); - $uid = generateMaNumberUID(); + if ($_POST['personalnummer']) + { + $personalnummer = $_POST['personalnummer']; + } + else + $personalnummer = $mitarbeiter->getNextPersonalnummer(); + + $uid = generateMitarbeiterUID($vorname_clean, $nachname_clean, $lektor, $fixangestellt, $personalnummer); if ($wunschUid != '') { From 29c0fc54e517ac2073c39c69e90e0aa522f83e3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Wed, 13 Apr 2022 11:35:02 +0200 Subject: [PATCH 096/122] =?UTF-8?q?Nicht=20=C3=9Cberschreibbare=20Noten=20?= =?UTF-8?q?werden=20generisch=20auf=20der=20Notenliste=20angedruckt=20stat?= =?UTF-8?q?t=20hartcodiert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cis/private/lehre/notenliste.xls.php | 56 ++++++++++++++-------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/cis/private/lehre/notenliste.xls.php b/cis/private/lehre/notenliste.xls.php index f4d8ebb20..ab41e2d2e 100644 --- a/cis/private/lehre/notenliste.xls.php +++ b/cis/private/lehre/notenliste.xls.php @@ -206,27 +206,32 @@ else $stsemdatumvon = $stsem_obj->start; $stsemdatumbis = $stsem_obj->ende; - $qry = "SELECT - distinct on(nachname, vorname, person_id) vorname, nachname, matrikelnr, person_id, tbl_student.student_uid as uid, - tbl_studentlehrverband.semester, tbl_studentlehrverband.verband, tbl_studentlehrverband.gruppe, - (SELECT status_kurzbz - FROM public.tbl_prestudentstatus - WHERE prestudent_id=tbl_student.prestudent_id - ORDER BY datum DESC, insertamum DESC, ext_id DESC LIMIT 1) as status, - tbl_bisio.bisio_id, tbl_bisio.bis, tbl_bisio.von, - tbl_zeugnisnote.note,tbl_mobilitaet.mobilitaetstyp_kurzbz, - (CASE WHEN bis.tbl_mobilitaet.studiensemester_kurzbz = vw_student_lehrveranstaltung.studiensemester_kurzbz THEN '1' ELSE '' END) as doubledegree - FROM campus.vw_student_lehrveranstaltung JOIN public.tbl_benutzer USING(uid) - JOIN public.tbl_person USING(person_id) JOIN public.tbl_student ON(uid=student_uid) - LEFT JOIN public.tbl_studentlehrverband USING(student_uid,studiensemester_kurzbz) - LEFT JOIN lehre.tbl_zeugnisnote on(vw_student_lehrveranstaltung.lehrveranstaltung_id=tbl_zeugnisnote.lehrveranstaltung_id - AND tbl_zeugnisnote.student_uid=tbl_student.student_uid - AND tbl_zeugnisnote.studiensemester_kurzbz=tbl_studentlehrverband.studiensemester_kurzbz) - LEFT JOIN bis.tbl_bisio ON(uid=tbl_bisio.student_uid) - LEFT JOIN bis.tbl_mobilitaet USING(prestudent_id) + $qry = " + SELECT + distinct on(nachname, vorname, person_id) + vorname, nachname, matrikelnr, person_id, tbl_student.student_uid as uid, + tbl_studentlehrverband.semester, tbl_studentlehrverband.verband, tbl_studentlehrverband.gruppe, + (SELECT status_kurzbz + FROM public.tbl_prestudentstatus + WHERE prestudent_id=tbl_student.prestudent_id + ORDER BY datum DESC, insertamum DESC, ext_id DESC LIMIT 1) as status, + tbl_bisio.bisio_id, tbl_bisio.bis, tbl_bisio.von, + tbl_zeugnisnote.note,tbl_mobilitaet.mobilitaetstyp_kurzbz, + (CASE WHEN bis.tbl_mobilitaet.studiensemester_kurzbz = vw_student_lehrveranstaltung.studiensemester_kurzbz THEN '1' ELSE '' END) as doubledegree, + tbl_note.lkt_ueberschreibbar, tbl_note.anmerkung + FROM + campus.vw_student_lehrveranstaltung JOIN public.tbl_benutzer USING(uid) + JOIN public.tbl_person USING(person_id) JOIN public.tbl_student ON(uid=student_uid) + LEFT JOIN public.tbl_studentlehrverband USING(student_uid,studiensemester_kurzbz) + LEFT JOIN lehre.tbl_zeugnisnote on(vw_student_lehrveranstaltung.lehrveranstaltung_id=tbl_zeugnisnote.lehrveranstaltung_id + AND tbl_zeugnisnote.student_uid=tbl_student.student_uid + AND tbl_zeugnisnote.studiensemester_kurzbz=tbl_studentlehrverband.studiensemester_kurzbz) + LEFT JOIN bis.tbl_bisio ON(uid=tbl_bisio.student_uid) + LEFT JOIN bis.tbl_mobilitaet USING(prestudent_id) + LEFT JOIN lehre.tbl_note USING(note) WHERE - vw_student_lehrveranstaltung.lehrveranstaltung_id=".$db->db_add_param($lvid, FHC_INTEGER)." AND - vw_student_lehrveranstaltung.studiensemester_kurzbz=".$db->db_add_param($stsem);";"; + vw_student_lehrveranstaltung.lehrveranstaltung_id=".$db->db_add_param($lvid, FHC_INTEGER)." + AND vw_student_lehrveranstaltung.studiensemester_kurzbz=".$db->db_add_param($stsem);";"; if($lehreinheit_id!='') $qry.=" AND vw_student_lehrveranstaltung.lehreinheit_id=".$db->db_add_param($lehreinheit_id, FHC_INTEGER); @@ -253,16 +258,11 @@ else $inc.=' (o)'; $note = $elem->note; - if($elem->note==6) //angerechnet - { - $inc.=' (ar)'; - $note='ar'; - } - if ($elem->note == 19) // intern angerechnet + if($elem->lkt_ueberschreibbar == 'f') // angerechnet / intern angerechnet / nicht zugelassen { - $inc .= ' (iar)'; - $note = 'iar'; + $inc.= '('. $elem->anmerkung. ')'; + $note = $elem->anmerkung; } if ($elem->mobilitaetstyp_kurzbz !='' && $elem->doubledegree == 1) //dd-Program From bd35bce49a19eed039527142c91dd37bb6dfe075 Mon Sep 17 00:00:00 2001 From: Manfred Date: Fri, 15 Apr 2022 17:41:49 +0200 Subject: [PATCH 097/122] =?UTF-8?q?Select=20f=C3=BCr=20Lehrg=C3=A4nge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vilesci/bis/lehrgangsmeldung.php | 55 ++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/vilesci/bis/lehrgangsmeldung.php b/vilesci/bis/lehrgangsmeldung.php index 158d7d164..dde69b2c6 100644 --- a/vilesci/bis/lehrgangsmeldung.php +++ b/vilesci/bis/lehrgangsmeldung.php @@ -80,6 +80,7 @@ else { echo "Ungültiges Semester!"; } + //ausgewählter Lehrgang if(isset($_GET['stg_kz'])) { @@ -90,11 +91,13 @@ if(isset($_GET['stg_kz'])) else { echo "

    Es wurde kein Lehrgang ausgewählt!

    "; + $stg_kz = ''; } } else { echo "

    Es wurde kein Lehrgang ausgewählt!

    "; + $stg_kz = ''; exit; } //plausicheck @@ -103,6 +106,58 @@ if(isset($_GET['plausi'])) $plausi=$_GET['plausi']; } +// Select für Lehrgänge +if ($rechte->isBerechtigt('admin')) +{ + echo ''; + echo 'Studiengang: '; + echo ''; +} + +if ($stg_kz == '') +{ + exit(); +} + // Standortcode if (defined('BIS_STANDORTCODE_LEHRGAENGE') && BIS_STANDORTCODE_LEHRGAENGE != '0') { From cdb403c38a6940f30f05b6540910e4ec57db5ed5 Mon Sep 17 00:00:00 2001 From: Manfred Date: Fri, 15 Apr 2022 17:42:20 +0200 Subject: [PATCH 098/122] =?UTF-8?q?Korrektur=20Nachname<->Vorname=20f?= =?UTF-8?q?=C3=BCr=20Studentenmeldung?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vilesci/bis/studentenmeldung.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/vilesci/bis/studentenmeldung.php b/vilesci/bis/studentenmeldung.php index 3842f7074..575d8b039 100644 --- a/vilesci/bis/studentenmeldung.php +++ b/vilesci/bis/studentenmeldung.php @@ -1205,7 +1205,7 @@ function GenerateXMLStudentBlock($row) if($gserror!='') { - $v.="Bei Student (UID, Vorname, Nachname) '".$row->student_uid."', '".$row->nachname."', '".$row->vorname."' ($laststatus->status_kurzbz): \n"; + $v.="Bei Student (UID, Nachname, Vorname) '".$row->student_uid."', '".$row->nachname."', '".$row->vorname."' ($laststatus->status_kurzbz): \n"; $v.=$gserror."\n"; return ''; } @@ -1309,7 +1309,7 @@ function GenerateXMLStudentBlock($row) if($error_log!='' OR $error_log1!='') { - $v.="Bei Student (UID, Vorname, Nachname) '".$row->student_uid."', '".$row->nachname."', '".$row->vorname."' ($laststatus->status_kurzbz): \n"; + $v.="Bei Student (UID, Nachname, Vorname) '".$row->student_uid."', '".$row->nachname."', '".$row->vorname."' ($laststatus->status_kurzbz): \n"; if($error_log!='') { $v.="     Fehler: ".$error_log."\n"; @@ -1333,7 +1333,7 @@ function GenerateXMLStudentBlock($row) { if($error_log_hinweis != '') { - $v.="Bei Student (UID, Vorname, Nachname) '".$row->student_uid."', '".$row->nachname."', '".$row->vorname."' ($laststatus->status_kurzbz): \n"; + $v.="Bei Student (UID, Nachname, Vorname) '".$row->student_uid."', '".$row->nachname."', '".$row->vorname."' ($laststatus->status_kurzbz): \n"; $v.="     ".$error_log_hinweis." (Nicht BIS-Relevant)\n\n"; $error_log_hinweis = ''; } @@ -1624,7 +1624,7 @@ function GenerateXMLStudentBlock($row) // 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"; + $v.="Bei Student (UID, Nachname, Vorname) '".$row->student_uid."', '".$row->nachname."', '".$row->vorname."' ($laststatus->status_kurzbz): \n"; if($error_log_io != '') { $v.="      Fehler: ".$error_log_io. "\n"; From 9ca6c9974610a068a194531a045d70fd32f367a2 Mon Sep 17 00:00:00 2001 From: Manfred Date: Fri, 15 Apr 2022 17:46:13 +0200 Subject: [PATCH 099/122] Umbenennung "Lehreinheit" auf "LV-Teil" --- content/dragboard.js.php | 2 +- content/lvplanung/lehrveranstaltungDBDML.php | 46 +++++++++---------- content/statistik/lvplanung.php | 2 +- content/student/studentiooverlay.xul.php | 2 +- content/student/studentprojektarbeit.js.php | 2 +- .../studentprojektarbeitoverlay.xul.php | 2 +- .../student/studentpruefungoverlay.xul.php | 2 +- 7 files changed, 29 insertions(+), 29 deletions(-) diff --git a/content/dragboard.js.php b/content/dragboard.js.php index 2a96e0cda..6510cfc47 100644 --- a/content/dragboard.js.php +++ b/content/dragboard.js.php @@ -172,7 +172,7 @@ var LeLvbgrpDDObserver= if(lehreinheit_id=='') { - alert('Eine Gruppe kann nur zu einer Lehreinheit hinzugefügt werden. Nicht aber zu einer Lehrveranstaltung'); + alert('Eine Gruppe kann nur zu einem LV-Teil hinzugefügt werden, nicht aber zu einer Lehrveranstaltung'); return false; } diff --git a/content/lvplanung/lehrveranstaltungDBDML.php b/content/lvplanung/lehrveranstaltungDBDML.php index 438844071..257ca4034 100644 --- a/content/lvplanung/lehrveranstaltungDBDML.php +++ b/content/lvplanung/lehrveranstaltungDBDML.php @@ -216,14 +216,14 @@ if(!$error) { $error = true; $return = false; - $errormsg = 'Lehreinheit wurde nicht gefunden'; + $errormsg = 'LV-Teil wurde nicht gefunden'; } } else { $error = true; $return = false; - $errormsg = 'Lehreinheit wurde nicht gefunden'; + $errormsg = 'LV-Teil wurde nicht gefunden'; } if(!$error) @@ -507,14 +507,14 @@ if(!$error) { $error = true; $return = false; - $errormsg = 'Lehreinheit wurde nicht gefunden'; + $errormsg = 'LV-Teil wurde nicht gefunden'; } } else { $error = true; $return = false; - $errormsg = 'Lehreinheit wurde nicht gefunden'; + $errormsg = 'LV-Teil wurde nicht gefunden'; } if(!$error) @@ -731,14 +731,14 @@ if(!$error) { $error = true; $return = false; - $errormsg = 'Lehreinheit wurde nicht gefunden'; + $errormsg = 'LV-Teil wurde nicht gefunden'; } } else { $error = true; $return = false; - $errormsg = 'Lehreinheit wurde nicht gefunden'; + $errormsg = 'LV-Teil wurde nicht gefunden'; } if(!$error) @@ -838,14 +838,14 @@ if(!$error) { $error = true; $return = false; - $errormsg = 'Lehreinheit wurde nicht gefunden'; + $errormsg = 'LV-Teil wurde nicht gefunden'; } } else { $error = true; $return = false; - $errormsg = 'Lehreinheit wurde nicht gefunden'; + $errormsg = 'LV-Teil wurde nicht gefunden'; } if(!$error) @@ -954,14 +954,14 @@ if(!$error) { $error = true; $return = false; - $errormsg = 'Lehreinheit wurde nicht gefunden'; + $errormsg = 'LV-Teil wurde nicht gefunden'; } } else { $error = true; $return = false; - $errormsg = 'Lehreinheit wurde nicht gefunden'; + $errormsg = 'LV-Teil wurde nicht gefunden'; } // Wenn nur noch dieser Lektor im LVPlan verplant ist, dann wird das loeschen verhindert @@ -1055,14 +1055,14 @@ if(!$error) { $error = true; $return = false; - $errormsg = 'Lehreinheit wurde nicht gefunden'; + $errormsg = 'LV-Teil wurde nicht gefunden'; } } else { $error = true; $return = false; - $errormsg = 'Lehreinheit wurde nicht gefunden'; + $errormsg = 'LV-Teil wurde nicht gefunden'; } // Wenn nur noch diese eine Gruppe im LVPlan verplant ist, dann wird das loeschen verhindert @@ -1180,14 +1180,14 @@ if(!$error) { $error = true; $return = false; - $errormsg = 'Lehreinheit wurde nicht gefunden'; + $errormsg = 'LV-Teil wurde nicht gefunden'; } } else { $error = true; $return = false; - $errormsg = 'Lehreinheit wurde nicht gefunden'; + $errormsg = 'LV-Teil wurde nicht gefunden'; } if(!$error) @@ -1234,7 +1234,7 @@ if(!$error) else { $return = false; - $errormsg = 'Bitte zuerst eine Lehreinheit auswaehlen'; + $errormsg = 'Bitte zuerst einen LV-Teil auswaehlen'; } } } @@ -1265,19 +1265,19 @@ if(!$error) { $error = true; $return = false; - $errormsg = 'Lehreinheit wurde nicht gefunden'; + $errormsg = 'LV-Teil wurde nicht gefunden'; } } else { $error = true; $return = false; - $errormsg = 'Lehreinheit wurde nicht gefunden'; + $errormsg = 'LV-Teil wurde nicht gefunden'; } if(!$error) { - $leDAO=new lehreinheit(); + $leDAO = new lehreinheit(); if ($_POST['do']=='create' || ($_POST['do']=='update')) { if($_POST['do']=='update') @@ -1286,7 +1286,7 @@ if(!$error) { $return = false; $error = true; - $errormsg = 'Fehler beim Laden der Lehreinheit'; + $errormsg = 'Fehler beim Laden des LV-Teils'; } if(!$rechte->isBerechtigtMultipleOe('admin', $lva->getAllOe(), 'suid') && @@ -1409,7 +1409,7 @@ if(!$error) if($db->db_num_rows()>0) { $return = false; - $errormsg = 'Diese Lehreinheit ist bereits im LV-Plan verplant und kann daher nicht geloescht werden!'; + $errormsg = 'Dieser LV-Teil ist bereits im LV-Plan verplant und kann daher nicht geloescht werden!'; } else { @@ -1420,7 +1420,7 @@ if(!$error) else { $return = false; - $errormsg = 'Fehler beim Loeschen der Lehreinheit '.$leDAO->errormsg; + $errormsg = 'Fehler beim Loeschen des LV-Teils '.$leDAO->errormsg; } } } @@ -1795,13 +1795,13 @@ if(!$error) } else { - $errormsg = 'Gruppe passt nicht zur Lehreinheit'; + $errormsg = 'Gruppe passt nicht zum LV-Teil'; $return = false; } } else { - $errormsg = 'Gruppe passt nicht zur Lehreinheit'; + $errormsg = 'Gruppe passt nicht zum LV-Teil'; $return = false; } } diff --git a/content/statistik/lvplanung.php b/content/statistik/lvplanung.php index a0d3544bc..b0169dade 100644 --- a/content/statistik/lvplanung.php +++ b/content/statistik/lvplanung.php @@ -86,7 +86,7 @@ echo ' -Lehreinheit +LV-Teil
    NameName UID
    '. getData($person)[0]->vorname. ' '. getData($person)[0]->nachname. '['. $lector->mitarbeiter_uid. ']['. $lector. ']
    Wunsch-UID'; if ($showagain) echo '
    '; -echo ' (optional, max. 32) +echo ' (optional, max. 32)
    Anrede
    Titel(Pre)