From a57df7862c20c59c846c9c0af6263a6d8b4e9c96 Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Thu, 19 Feb 2026 17:08:43 +0100 Subject: [PATCH] Ferienverwaltung: added new sequential primary key ferien_id, added primary constraint --- system/dbupdate_3.4.php | 3 +- system/dbupdate_3.4/71405_ferienzeiten.php | 121 +++++++++++++++++++++ 2 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 system/dbupdate_3.4/71405_ferienzeiten.php diff --git a/system/dbupdate_3.4.php b/system/dbupdate_3.4.php index 4ddb38203..514ee3496 100644 --- a/system/dbupdate_3.4.php +++ b/system/dbupdate_3.4.php @@ -92,6 +92,7 @@ require_once('dbupdate_3.4/68744_StV_settings.php'); require_once('dbupdate_3.4/62889_reihungstest_ueberwachung_mit_constructor.php'); require_once('dbupdate_3.4/71399_dashboard_update_widget_paths.php'); require_once('dbupdate_3.4/71645_studvw_messagetab_ladezeit.php'); +require_once('dbupdate_3.4/71405_ferienzeiten.php'); // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; @@ -249,7 +250,7 @@ $tabellen=array( "lehre.tbl_anrechnung_begruendung" => array("begruendung_id","bezeichnung"), "lehre.tbl_anrechnungszeitraum" => array("anrechnungszeitraum_id","studiensemester_kurzbz","anrechnungstart","anrechnungende", "insertamum", "insertvon"), "lehre.tbl_betreuerart" => array("betreuerart_kurzbz","beschreibung","aktiv"), - "lehre.tbl_ferien" => array("bezeichnung","studiengang_kz","vondatum","bisdatum"), + "lehre.tbl_ferien" => array("ferien_id","bezeichnung","studiengang_kz","vondatum","bisdatum"), "lehre.tbl_lehreinheit" => array("lehreinheit_id","lehrveranstaltung_id","studiensemester_kurzbz","lehrfach_id","lehrform_kurzbz","stundenblockung","wochenrythmus","start_kw","raumtyp","raumtypalternativ","sprache","lehre","anmerkung","unr","lvnr","updateamum","updatevon","insertamum","insertvon","ext_id","lehrfach_id_old","gewicht"), "lehre.tbl_lehreinheitgruppe" => array("lehreinheitgruppe_id","lehreinheit_id","studiengang_kz","semester","verband","gruppe","gruppe_kurzbz","updateamum","updatevon","insertamum","insertvon","ext_id"), "lehre.tbl_lehreinheitmitarbeiter" => array("lehreinheit_id","mitarbeiter_uid","lehrfunktion_kurzbz","semesterstunden","planstunden","stundensatz","faktor","anmerkung","bismelden","updateamum","updatevon","insertamum","insertvon","ext_id","standort_id","vertrag_id"), diff --git a/system/dbupdate_3.4/71405_ferienzeiten.php b/system/dbupdate_3.4/71405_ferienzeiten.php new file mode 100644 index 000000000..98d057e9e --- /dev/null +++ b/system/dbupdate_3.4/71405_ferienzeiten.php @@ -0,0 +1,121 @@ +db_query("SELECT ferien_id FROM lehre.tbl_ferien LIMIT 1")) +{ + $qry = 'ALTER TABLE lehre.tbl_ferien ADD COLUMN ferien_id integer;'; + + if(!$db->db_query($qry)) + echo ' lehre.tbl_ferien '.$db->db_last_error().'
'; + else + echo '
lehre.tbl_ferien: Neue Spalte ferien_id hinzugefügt'; +} + +//Column ferien_id mit Werten befüllen +if($result = @$db->db_query("SELECT ferien_id FROM lehre.tbl_ferien where ferien_id is not null LIMIT 1")) +{ + if ($db->db_num_rows($result) == 0) + { + $qry = 'UPDATE lehre.tbl_ferien et SET ferien_id = + (SELECT rownumber FROM (SELECT ROW_NUMBER() OVER (ORDER BY bezeichnung, studiengang_kz) + AS rownumber, t.* FROM lehre.tbl_ferien t ORDER BY bezeichnung, studiengang_kz) rn + WHERE rn.bezeichnung = et.bezeichnung + AND rn.studiengang_kz = et.studiengang_kz); + '; + + if(!$db->db_query($qry)) + echo ' lehre.tbl_ferien '.$db->db_last_error().'
'; + else + echo '
lehre.tbl_ferien: Spalte bis.tbl_ferien_id mit Werten aufgefüllt'; + } +} + +//Create Sequence lehre.tbl_ferien and grant Rights +if ($result = @$db->db_query("SELECT * FROM pg_class WHERE relname = 'tbl_ferien_ferien_id_seq'")) +{ + if ($db->db_num_rows($result) == 0) + { + if ($count = @$db->db_query("SELECT * FROM lehre.tbl_ferien")) + { + $count = $db->db_num_rows($count) + 1; + $qry = 'CREATE SEQUENCE lehre.tbl_ferien_ferien_id_seq START '; + $qry .= $count; + if(!$db->db_query($qry)) + { + echo ' lehre.tbl_ferien '.$db->db_last_error().'
'; + } + else + { + echo '
lehre.tbl_ferien: Sequence lehre.tbl_ferien_ferien_id_seq mit Startwert ' . $count . ' erstellt'; + $qry2 = "GRANT SELECT, UPDATE ON lehre.tbl_ferien_ferien_id_seq TO vilesci; + GRANT SELECT, UPDATE ON lehre.tbl_ferien_ferien_id_seq TO web;"; + if(!$db->db_query($qry2)) + { + echo 'lehre.tbl_ferien_ferien_id_seq Berechtigungen: '.$db->db_last_error().'
'; + } + else + { + echo '
lehre.tbl_ferien: Rechte auf lehre.tbl_ferien_ferien_id_seq fuer web user und vilesci gesetzt '; + } + } + + } + } +} + +//lehre.tbl_ferien auf NOT NULL setzen +if ($result = @$db->db_query("SELECT is_nullable FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'tbl_ferien' AND column_name = 'ferien_id' and is_nullable = 'NO'")) +{ + if($db->db_num_rows($result)==0) + { + $qry = 'ALTER TABLE lehre.tbl_ferien ALTER COLUMN ferien_id SET NOT NULL'; + + if(!$db->db_query($qry)) + echo ' lehre.tbl_ferien '.$db->db_last_error().'
'; + else + echo '
lehre.tbl_ferien: Spalte bis.tbl_ferien_id auf NOT NULL gesetzt'; + } +} + +//lehre.tbl_ferien DEFAULT einstellen +if ($result = @$db->db_query("SELECT column_default FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'tbl_ferien' AND column_name = 'ferien_id' and column_default is null")) +{ + if($db->db_num_rows($result)==1) + { + $qry = "ALTER TABLE lehre.tbl_ferien ALTER COLUMN ferien_id SET DEFAULT nextval('lehre.tbl_ferien_ferien_id_seq'::regclass);"; + + if(!$db->db_query($qry)) + echo ' lehre.tbl_ferien '.$db->db_last_error().'
'; + else + echo '
lehre.tbl_ferien: Defaultwert bei Spalte bis.tbl_ferien_id gesetzt'; + } +} + +//DELETE Constraint PRIMARY KEY pk_tbl_ferien (bezeichnung, studiengang_kz) entfernen +if ($result = @$db->db_query("SELECT conname FROM pg_constraint WHERE conname = 'pk_tbl_ferien'")) +{ + if($db->db_num_rows($result)==1) + { + $qry = "ALTER TABLE lehre.tbl_ferien DROP CONSTRAINT pk_tbl_ferien;"; + + if (!$db->db_query($qry)) + echo 'lehre.tbl_ferien: '.$db->db_last_error().'
'; + else + echo '
lehre.tbl_ferien: Primary Key pk_tbl_ferien (bezeichnung, studiengang_kz) entfernt '; + } +} + +// ADD PRIMARY KEY tbl_ferien_pk to lehre.tbl_ferien +if ($result = @$db->db_query("SELECT conname FROM pg_constraint WHERE conname = 'tbl_ferien_pk'")) +{ + if ($db->db_num_rows($result) == 0) + { + $qry = "ALTER TABLE lehre.tbl_ferien ADD CONSTRAINT tbl_ferien_pk PRIMARY KEY(ferien_id);"; + + if (!$db->db_query($qry)) + echo 'slehre.tbl_ferien: '.$db->db_last_error().'
'; + else + echo '
lehre.tbl_ferien: Primary Key tbl_ferien_pk (ferien_id) hinzugefügt'; + } +}