diff --git a/system/dbupdate_3.4/75469_le_optional_4_projektarbeit.php b/system/dbupdate_3.4/75469_le_optional_4_projektarbeit.php
index 6ad783e2f..939b1ea7e 100644
--- a/system/dbupdate_3.4/75469_le_optional_4_projektarbeit.php
+++ b/system/dbupdate_3.4/75469_le_optional_4_projektarbeit.php
@@ -1,48 +1,80 @@
db_query("SELECT 1 FROM information_schema.columns WHERE table_schema = 'lehre' AND table_name = 'tbl_projektarbeit' AND column_name = 'lehrveranstaltung_id'"))
-{
- if($db->db_num_rows($result) === 0)
- {
+$cols_to_add = [
+ 'lehrveranstaltung_id' => "INTEGER",
+ 'studiensemester_kurzbz' => "INTEGER"
+];
- $qry = "ALTER TABLE lehre.tbl_projektarbeit
- ADD COLUMN IF NOT EXISTS lehrveranstaltung_id INTEGER;";
+foreach ($cols_to_add as $col => $type) {
+ $check = "SELECT 1 FROM information_schema.columns
+ WHERE table_schema = 'lehre' AND table_name = 'tbl_projektarbeit' AND column_name = '$col'";
- if(!$db->db_query($qry))
- echo 'lehre.tbl_projektarbeit: '.$db->db_last_error().'
';
- else
- echo '
tbl_projektarbeit column lehrveranstaltung_id hinzugefuegt';
+ if ($result = $db->db_query($check)) {
+ if ($db->db_num_rows($result) === 0) {
+ $qry = "ALTER TABLE lehre.tbl_projektarbeit ADD COLUMN IF NOT EXISTS $col $type;";
+ if ($db->db_query($qry)) {
+ echo "
Column $col hinzugefuegt.";
+ } else {
+ echo "Error adding $col: ".$db->db_last_error()."
";
+ }
+ }
}
}
-// TODO: check for and add fk constraint lehrveranstaltung_id
-//if($result = $db->db_query("SELECT 1 FROM information_schema.columns WHERE table_schema = 'lehre' AND table_name = 'tbl_projektarbeit' AND column_name = 'lehrveranstaltung_id'"))
-//{
-// if($db->db_num_rows($result) === 0)
-// {
-//
-// $qry = "ALTER TABLE lehre.tbl_projektarbeit
-// ADD COLUMN IF NOT EXISTS lehrveranstaltung_id INTEGER;";
-//
-// if(!$db->db_query($qry))
-// echo 'lehre.tbl_projektarbeit: '.$db->db_last_error().'
';
-// else
-// echo '
tbl_projektarbeit column lehrveranstaltung_id hinzugefuegt';
-// }
-//}
+// retrieve lehrveranstaltung_id & studiensemester_kurzbz from tbl_lehreinheit
+// into new columns based on the existing reference
+$migration_qry = "UPDATE lehre.tbl_projektarbeit p
+ SET lehrveranstaltung_id = l.lehrveranstaltung_id,
+ studiensemester_kurzbz = l.studiensemester_kurzbz
+ FROM lehre.tbl_lehreinheit l
+ WHERE p.lehreinheit_id = l.lehreinheit_id
+ AND (p.lehrveranstaltung_id IS NULL OR p.studiensemester_kurzbz IS NULL);";
-if($result = $db->db_query("SELECT 1 FROM information_schema.columns WHERE table_schema = 'lehre' AND table_name = 'tbl_projektarbeit' AND column_name = 'studiensemester_kurzbz'"))
-{
- if($db->db_num_rows($result) === 0)
- {
+if ($db->db_query($migration_qry)) {
+ echo "
Datenmigration von lehreinheit_id zu lehrveranstaltung_id & studiensemester_kurzbz abgeschlossen.";
+} else {
+ echo "Migration Error: ".$db->db_last_error()."
";
+}
+// set NOT NULL and make lehreinheit_id NULLable
+$constraint_qry = "ALTER TABLE lehre.tbl_projektarbeit
+ ALTER COLUMN lehrveranstaltung_id SET NOT NULL,
+ ALTER COLUMN studiensemester_kurzbz SET NOT NULL,
+ ALTER COLUMN lehreinheit_id DROP NOT NULL;";
+
+if ($db->db_query($constraint_qry)) {
+ echo "
Constraints updated lehrveranstaltung_id SET NOT NULL, studiensemester_kurzbz SET NOT NULL, lehreinheit_id DROP NOT NULL.";
+} else {
+ echo "Alter Constraints Error: ".$db->db_last_error()."
";
+}
+
+// add fkey for lehrveranstaltung_id
+$fk_check_lv = "SELECT 1 FROM information_schema.table_constraints
+ WHERE constraint_name = 'fk_projektarbeit_lehrveranstaltung_id' AND table_schema = 'lehre'";
+
+if ($result = $db->db_query($fk_check_lv)) {
+ if ($db->db_num_rows($result) === 0) {
$qry = "ALTER TABLE lehre.tbl_projektarbeit
- ADD COLUMN IF NOT EXISTS lehrveranstaltung_id INTEGER;";
+ ADD CONSTRAINT fk_projektarbeit_lehrveranstaltung_id
+ FOREIGN KEY (lehrveranstaltung_id)
+ REFERENCES lehre.tbl_lehrveranstaltung (lehrveranstaltung_id)
+ ON DELETE RESTRICT;";
+ if ($db->db_query($qry)) echo '
fk_projektarbeit_lehrveranstaltung_id hinzugefuegt';
+ }
+}
- if(!$db->db_query($qry))
- echo 'lehre.tbl_projektarbeit: '.$db->db_last_error().'
';
- else
- echo '
tbl_projektarbeit column lehrveranstaltung_id hinzugefuegt';
+// add fkey for studiensemester_kurzbz
+$fk_check_sem = "SELECT 1 FROM information_schema.table_constraints
+ WHERE constraint_name = 'fk_projektarbeit_studiensemester_kurzbz' AND table_schema = 'lehre'";
+
+if ($result = $db->db_query($fk_check_sem)) {
+ if ($db->db_num_rows($result) === 0) {
+ $qry = "ALTER TABLE lehre.tbl_projektarbeit
+ ADD CONSTRAINT fk_projektarbeit_studiensemester_kurzbz
+ FOREIGN KEY (studiensemester_kurzbz)
+ REFERENCES public.tbl_studiensemester (studiensemester_kurzbz)
+ ON DELETE RESTRICT;";
+ if ($db->db_query($qry)) echo '
fk_projektarbeit_studiensemester_kurzbz hinzugefuegt';
}
}
\ No newline at end of file