mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-10-12 06:54:04 +00:00
Reverted collision checker changes and removed unnecearry joins
This commit is contained in:
@@ -18,12 +18,12 @@ class CollisionChecker
|
||||
$this->_ci->load->library('collision/checks/LectureCollisionCheck');
|
||||
$this->_ci->load->library('collision/checks/VerbandCollisionCheck');
|
||||
$this->_ci->load->library('collision/checks/StudentCollisionCheck');
|
||||
// $this->_ci->load->library('collision/checks/ResourcesCollisionCheck');
|
||||
$this->_ci->load->library('collision/checks/ResourcesCollisionCheck');
|
||||
$this->register($this->_ci->roomcollisioncheck);
|
||||
$this->register($this->_ci->lecturecollisioncheck);
|
||||
$this->register($this->_ci->verbandcollisioncheck);
|
||||
$this->register($this->_ci->studentcollisioncheck);
|
||||
// $this->register($this->_ci->resourcescollisioncheck);
|
||||
$this->register($this->_ci->resourcescollisioncheck);
|
||||
Events::trigger('collision_register', $this);
|
||||
}
|
||||
|
||||
|
||||
@@ -50,111 +50,110 @@ class LectureCollisionCheck implements ICollisionCheck
|
||||
{
|
||||
if (empty($kalender_ids)) return [];
|
||||
|
||||
$kalender_ids = array_values(array_unique(array_map('intval', $kalender_ids)));
|
||||
$postgres_array = '{' . implode(',', $kalender_ids) . '}';
|
||||
$kollisionsfreie_user = array_values(array_filter((array) unserialize(KOLLISIONSFREIE_USER)));
|
||||
$excluded_user_condition = '';
|
||||
$params = [$postgres_array];
|
||||
$kollisionsfreie_user = unserialize(KOLLISIONSFREIE_USER);
|
||||
$grouped = [];
|
||||
|
||||
if (!empty($kollisionsfreie_user))
|
||||
$this->_ci->KalenderModel->addSelect('DISTINCT ON (tbl_kalender.kalender_id) tbl_kalender.kalender_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender_lehreinheit current_kalender_le', 'current_kalender_le.kalender_id = tbl_kalender.kalender_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_lehreinheitmitarbeiter current_lehreinheit_ma', 'current_lehreinheit_ma.lehreinheit_id = current_kalender_le.lehreinheit_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_lehreinheitmitarbeiter other_lehreinheithreinheit_ma', 'other_lehreinheithreinheit_ma.mitarbeiter_uid = current_lehreinheit_ma.mitarbeiter_uid');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_lehreinheit other_lehreinheit', 'other_lehreinheit.lehreinheit_id = other_lehreinheithreinheit_ma.lehreinheit_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender_lehreinheit other_kalender_le', 'other_kalender_le.lehreinheit_id = other_lehreinheit.lehreinheit_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender other_kalender', 'other_kalender.kalender_id = other_kalender_le.kalender_id');
|
||||
|
||||
$this->_ci->KalenderModel->db->where('other_kalender.kalender_id != tbl_kalender.kalender_id', null, false);
|
||||
$this->_ci->KalenderModel->db->where('other_kalender.von < tbl_kalender.bis', null, false);
|
||||
$this->_ci->KalenderModel->db->where('other_kalender.bis > tbl_kalender.von', null, false);
|
||||
$this->_ci->KalenderModel->db->where_not_in('other_kalender.status_kurzbz', array('archived', 'deleted', 'to_delete', 'to_delete_live', 'to_delete_preview'));
|
||||
$this->_ci->KalenderModel->db->where_not_in('current_lehreinheit_ma.mitarbeiter_uid', $kollisionsfreie_user);
|
||||
|
||||
$this->_ci->KalenderModel->db->group_start();
|
||||
$where_ids_chunks = array_chunk($kalender_ids,25);
|
||||
foreach($where_ids_chunks as $where_ids)
|
||||
{
|
||||
$placeholders = implode(',', array_fill(0, count($kollisionsfreie_user), '?'));
|
||||
$excluded_user_condition = "AND current_lecturer.mitarbeiter_uid NOT IN ($placeholders)";
|
||||
$params = array_merge($params, $kollisionsfreie_user);
|
||||
$this->_ci->KalenderModel->db->or_where_in('tbl_kalender.kalender_id', $where_ids);
|
||||
}
|
||||
$this->_ci->KalenderModel->db->group_end();
|
||||
|
||||
$this->_ci->KalenderModel->db->where(
|
||||
'other_kalender.kalender_id NOT IN (SELECT vorgaenger_kalender_id FROM lehre.tbl_kalender WHERE vorgaenger_kalender_id IS NOT NULL)',
|
||||
null, false
|
||||
);
|
||||
$result = $this->_ci->KalenderModel->load();
|
||||
if (!isError($result) && hasData($result))
|
||||
{
|
||||
foreach (getData($result) as $row)
|
||||
{
|
||||
$grouped[$row->kalender_id][] = true;
|
||||
}
|
||||
}
|
||||
|
||||
$sql = "
|
||||
WITH current_kalender AS MATERIALIZED (
|
||||
SELECT kalender_id, von, bis
|
||||
FROM lehre.tbl_kalender
|
||||
WHERE kalender_id = ANY(?::bigint[])
|
||||
),
|
||||
current_lecturer AS MATERIALIZED (
|
||||
SELECT
|
||||
current_kalender.kalender_id,
|
||||
current_kalender.von,
|
||||
current_kalender.bis,
|
||||
current_lehreinheit_ma.mitarbeiter_uid
|
||||
FROM current_kalender
|
||||
JOIN lehre.tbl_kalender_lehreinheit current_kalender_le
|
||||
ON current_kalender_le.kalender_id = current_kalender.kalender_id
|
||||
JOIN lehre.tbl_lehreinheit current_lehreinheit
|
||||
ON current_lehreinheit.lehreinheit_id = current_kalender_le.lehreinheit_id
|
||||
JOIN lehre.tbl_lehreinheitmitarbeiter current_lehreinheit_ma
|
||||
ON current_lehreinheit_ma.lehreinheit_id = current_lehreinheit.lehreinheit_id
|
||||
)
|
||||
SELECT current_kalender.kalender_id
|
||||
FROM current_kalender
|
||||
WHERE EXISTS (
|
||||
SELECT 1
|
||||
FROM current_lecturer
|
||||
WHERE current_lecturer.kalender_id = current_kalender.kalender_id
|
||||
$excluded_user_condition
|
||||
AND (
|
||||
EXISTS (
|
||||
SELECT 1
|
||||
FROM lehre.tbl_lehreinheitmitarbeiter other_lehreinheit_ma
|
||||
JOIN lehre.tbl_lehreinheit other_lehreinheit
|
||||
ON other_lehreinheit.lehreinheit_id = other_lehreinheit_ma.lehreinheit_id
|
||||
JOIN lehre.tbl_kalender_lehreinheit other_kalender_le
|
||||
ON other_kalender_le.lehreinheit_id = other_lehreinheit.lehreinheit_id
|
||||
JOIN lehre.tbl_kalender other_kalender
|
||||
ON other_kalender.kalender_id = other_kalender_le.kalender_id
|
||||
WHERE other_lehreinheit_ma.mitarbeiter_uid = current_lecturer.mitarbeiter_uid
|
||||
AND other_kalender.kalender_id != current_lecturer.kalender_id
|
||||
AND other_kalender.von < current_lecturer.bis
|
||||
AND other_kalender.bis > current_lecturer.von
|
||||
AND other_kalender.status_kurzbz NOT IN ('archived', 'deleted', 'to_delete', 'to_delete_live', 'to_delete_preview')
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM lehre.tbl_kalender nachfolger
|
||||
WHERE nachfolger.vorgaenger_kalender_id = other_kalender.kalender_id
|
||||
)
|
||||
)
|
||||
OR EXISTS (
|
||||
SELECT 1
|
||||
FROM lehre.tbl_kalender_event_teilnehmer other_teilnehmer
|
||||
JOIN lehre.tbl_kalender_event other_event
|
||||
ON other_event.kalender_id = other_teilnehmer.kalender_id
|
||||
JOIN lehre.tbl_kalender other_kalender
|
||||
ON other_kalender.kalender_id = other_event.kalender_id
|
||||
WHERE other_teilnehmer.uid = current_lecturer.mitarbeiter_uid
|
||||
AND other_kalender.kalender_id != current_lecturer.kalender_id
|
||||
AND other_kalender.von < current_lecturer.bis
|
||||
AND other_kalender.bis > current_lecturer.von
|
||||
AND other_kalender.status_kurzbz NOT IN ('archived', 'deleted', 'to_delete', 'to_delete_live', 'to_delete_preview')
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM lehre.tbl_kalender nachfolger
|
||||
WHERE nachfolger.vorgaenger_kalender_id = other_kalender.kalender_id
|
||||
)
|
||||
)
|
||||
OR EXISTS (
|
||||
SELECT 1
|
||||
FROM campus.tbl_zeitsperre zeitsperre
|
||||
LEFT JOIN lehre.tbl_stunde vonstunde_z
|
||||
ON vonstunde_z.stunde = zeitsperre.vonstunde
|
||||
LEFT JOIN lehre.tbl_stunde bisstunde_z
|
||||
ON bisstunde_z.stunde = zeitsperre.bisstunde
|
||||
WHERE zeitsperre.mitarbeiter_uid = current_lecturer.mitarbeiter_uid
|
||||
AND zeitsperre.zeitsperretyp_kurzbz != 'ZVerfueg'
|
||||
AND (zeitsperre.vondatum + COALESCE(vonstunde_z.beginn, '00:00'))::timestamp < current_lecturer.bis
|
||||
AND (zeitsperre.bisdatum + COALESCE(bisstunde_z.ende, '23:59'))::timestamp > current_lecturer.von
|
||||
)
|
||||
)
|
||||
)";
|
||||
$this->_ci->KalenderModel->addSelect('DISTINCT ON (tbl_kalender.kalender_id) tbl_kalender.kalender_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender_lehreinheit current_kalender_le', 'current_kalender_le.kalender_id = tbl_kalender.kalender_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_lehreinheit current_lehreinheit', 'current_lehreinheit.lehreinheit_id = current_kalender_le.lehreinheit_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_lehreinheitmitarbeiter current_lehreinheit_ma', 'current_lehreinheit_ma.lehreinheit_id = current_lehreinheit.lehreinheit_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender_event_teilnehmer other_t', 'other_t.uid = current_lehreinheit_ma.mitarbeiter_uid');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender_event other_e', 'other_e.kalender_id = other_t.kalender_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender other_kalender', 'other_kalender.kalender_id = other_e.kalender_id');
|
||||
|
||||
$this->_ci->KalenderModel->db->where('other_kalender.kalender_id != tbl_kalender.kalender_id', null, false);
|
||||
$this->_ci->KalenderModel->db->where('other_kalender.von < tbl_kalender.bis', null, false);
|
||||
$this->_ci->KalenderModel->db->where('other_kalender.bis > tbl_kalender.von', null, false);
|
||||
$this->_ci->KalenderModel->db->where_not_in('other_kalender.status_kurzbz', ['archived', 'deleted', 'to_delete', 'to_delete_live', 'to_delete_preview']);
|
||||
$this->_ci->KalenderModel->db->where_not_in('current_lehreinheit_ma.mitarbeiter_uid', $kollisionsfreie_user);
|
||||
|
||||
$this->_ci->KalenderModel->db->group_start();
|
||||
$where_ids_chunks = array_chunk($kalender_ids,25);
|
||||
foreach($where_ids_chunks as $where_ids)
|
||||
{
|
||||
$this->_ci->KalenderModel->db->or_where_in('tbl_kalender.kalender_id', $where_ids);
|
||||
}
|
||||
$this->_ci->KalenderModel->db->group_end();
|
||||
|
||||
$this->_ci->KalenderModel->db->where(
|
||||
'other_kalender.kalender_id NOT IN (SELECT vorgaenger_kalender_id FROM lehre.tbl_kalender WHERE vorgaenger_kalender_id IS NOT NULL)',
|
||||
null, false
|
||||
);
|
||||
$result = $this->_ci->KalenderModel->load();
|
||||
if (!isError($result) && hasData($result))
|
||||
{
|
||||
foreach (getData($result) as $row)
|
||||
{
|
||||
$grouped[$row->kalender_id][] = true;
|
||||
}
|
||||
}
|
||||
|
||||
$this->_ci->KalenderModel->addSelect('DISTINCT ON (tbl_kalender.kalender_id) tbl_kalender.kalender_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender_lehreinheit current_kalender_le', 'current_kalender_le.kalender_id = tbl_kalender.kalender_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_lehreinheit current_lehreinheit', 'current_lehreinheit.lehreinheit_id = current_kalender_le.lehreinheit_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_lehreinheitmitarbeiter current_lehreinheit_ma', 'current_lehreinheit_ma.lehreinheit_id = current_lehreinheit.lehreinheit_id');
|
||||
$this->_ci->KalenderModel->addJoin('campus.tbl_zeitsperre z',
|
||||
"z.mitarbeiter_uid = current_lehreinheit_ma.mitarbeiter_uid
|
||||
AND z.zeitsperretyp_kurzbz != 'ZVerfueg'");
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_stunde vonstunde_z', 'vonstunde_z.stunde = z.vonstunde', 'LEFT');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_stunde bisstunde_z', 'bisstunde_z.stunde = z.bisstunde', 'LEFT');
|
||||
|
||||
$this->_ci->KalenderModel->db->where('(z.vondatum + COALESCE(vonstunde_z.beginn, \'00:00\'))::timestamp < tbl_kalender.bis', null, false);
|
||||
$this->_ci->KalenderModel->db->where('(z.bisdatum + COALESCE(bisstunde_z.ende, \'23:59\'))::timestamp > tbl_kalender.von', null, false);
|
||||
$this->_ci->KalenderModel->db->where_not_in('current_lehreinheit_ma.mitarbeiter_uid', $kollisionsfreie_user);
|
||||
$this->_ci->KalenderModel->db->group_start();
|
||||
$where_ids_chunks = array_chunk($kalender_ids,25);
|
||||
foreach($where_ids_chunks as $where_ids)
|
||||
{
|
||||
$this->_ci->KalenderModel->db->or_where_in('tbl_kalender.kalender_id', $where_ids);
|
||||
}
|
||||
$this->_ci->KalenderModel->db->group_end();
|
||||
$result = $this->_ci->KalenderModel->load();
|
||||
|
||||
$dbModel = new DB_Model();
|
||||
$result = $dbModel->execReadOnlyQuery($sql, $params);
|
||||
$grouped = [];
|
||||
|
||||
if (!isError($result) && hasData($result))
|
||||
{
|
||||
foreach (getData($result) as $row)
|
||||
$grouped[$row->kalender_id] = [true];
|
||||
{
|
||||
$grouped[$row->kalender_id][] = true;
|
||||
}
|
||||
}
|
||||
|
||||
log_message('error', 'LectureCollisionCheck::checkAll() 1');
|
||||
return $grouped;
|
||||
}
|
||||
|
||||
@@ -300,4 +299,4 @@ class LectureCollisionCheck implements ICollisionCheck
|
||||
}, getData($result));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -88,7 +88,7 @@ class ResourcesCollisionCheck implements ICollisionCheck
|
||||
{
|
||||
$grouped[$row->kalender_id][] = true;
|
||||
}
|
||||
log_message('error', 'ResourcesCollisionCheck::checkAll() 1');
|
||||
|
||||
return $grouped;
|
||||
}
|
||||
}
|
||||
@@ -54,39 +54,29 @@ class RoomCollisionCheck implements ICollisionCheck
|
||||
{
|
||||
if (empty($kalender_ids)) return [];
|
||||
|
||||
$kalender_ids = array_values(array_unique(array_map('intval', $kalender_ids)));
|
||||
$postgres_array = '{' . implode(',', $kalender_ids) . '}';
|
||||
$dbModel = new DB_Model();
|
||||
$sql = "
|
||||
WITH current_kalender AS MATERIALIZED (
|
||||
SELECT kalender_id, von, bis
|
||||
FROM lehre.tbl_kalender
|
||||
WHERE kalender_id = ANY(?::bigint[])
|
||||
)
|
||||
SELECT current_kalender.kalender_id
|
||||
FROM current_kalender
|
||||
WHERE EXISTS (
|
||||
SELECT 1
|
||||
FROM lehre.tbl_kalender_ort current_ort
|
||||
JOIN lehre.tbl_kalender_ort other_ort
|
||||
ON other_ort.ort_kurzbz = current_ort.ort_kurzbz
|
||||
JOIN lehre.tbl_kalender other_kalender
|
||||
ON other_kalender.kalender_id = other_ort.kalender_id
|
||||
WHERE current_ort.kalender_id = current_kalender.kalender_id
|
||||
AND other_kalender.kalender_id != current_kalender.kalender_id
|
||||
AND other_kalender.von < current_kalender.bis
|
||||
AND other_kalender.bis > current_kalender.von
|
||||
AND other_kalender.status_kurzbz NOT IN ('archived', 'deleted', 'to_delete', 'to_delete_live', 'to_delete_preview')
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM lehre.tbl_kalender nachfolger
|
||||
WHERE nachfolger.vorgaenger_kalender_id = other_kalender.kalender_id
|
||||
)
|
||||
)";
|
||||
$this->_ci->KalenderModel->addSelect('DISTINCT ON (tbl_kalender.kalender_id) tbl_kalender.kalender_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender_ort current_ort', 'current_ort.kalender_id = tbl_kalender.kalender_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender_ort other_ort', 'other_ort.ort_kurzbz = current_ort.ort_kurzbz');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender other_kalender', 'other_kalender.kalender_id = other_ort.kalender_id');
|
||||
|
||||
$this->_ci->KalenderModel->db->where('other_kalender.kalender_id != tbl_kalender.kalender_id', null, false);
|
||||
$this->_ci->KalenderModel->db->where('other_kalender.von < tbl_kalender.bis', null, false);
|
||||
$this->_ci->KalenderModel->db->where('other_kalender.bis > tbl_kalender.von', null, false);
|
||||
$this->_ci->KalenderModel->db->where_not_in('other_kalender.status_kurzbz', array('archived', 'deleted', 'to_delete', 'to_delete_live', 'to_delete_preview'));
|
||||
|
||||
$this->_ci->KalenderModel->db->group_start();
|
||||
$where_ids_chunks = array_chunk($kalender_ids,25);
|
||||
foreach($where_ids_chunks as $where_ids)
|
||||
{
|
||||
$this->_ci->KalenderModel->db->or_where_in('tbl_kalender.kalender_id', $where_ids);
|
||||
}
|
||||
$this->_ci->KalenderModel->db->group_end();
|
||||
|
||||
$this->_ci->KalenderModel->db->where('other_kalender.kalender_id NOT IN (SELECT vorgaenger_kalender_id FROM lehre.tbl_kalender WHERE vorgaenger_kalender_id IS NOT NULL)', null, false);
|
||||
|
||||
$result = $this->_ci->KalenderModel->load();
|
||||
|
||||
$result = $dbModel->execReadOnlyQuery($sql, [$postgres_array]);
|
||||
|
||||
log_message('error', 'RoomCollisionCheck::checkAll() 1');
|
||||
if (isError($result) || !hasData($result)) return [];
|
||||
|
||||
$grouped = [];
|
||||
@@ -97,4 +87,4 @@ class RoomCollisionCheck implements ICollisionCheck
|
||||
|
||||
return $grouped;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -190,134 +190,97 @@ class StudentCollisionCheck implements ICollisionCheck
|
||||
|
||||
public function checkAll($kalender_ids)
|
||||
{
|
||||
|
||||
if (empty($kalender_ids)) return [];
|
||||
|
||||
if ($this->_ci->variablelib->getVar('kollision_student') !== 'true') return [];
|
||||
|
||||
$kalender_ids = array_values(array_unique(array_map('intval', $kalender_ids)));
|
||||
$postgres_array = '{' . implode(',', $kalender_ids) . '}';
|
||||
$dbModel = new DB_Model();
|
||||
$placeholders = implode(',', array_fill(0, count($kalender_ids), '?'));
|
||||
|
||||
$sql = "
|
||||
WITH current_kalender AS MATERIALIZED (
|
||||
SELECT kalender_id, von, bis
|
||||
FROM lehre.tbl_kalender
|
||||
WHERE kalender_id = ANY(?::bigint[])
|
||||
)
|
||||
SELECT current_kalender.kalender_id
|
||||
FROM current_kalender
|
||||
WHERE EXISTS (
|
||||
SELECT 1
|
||||
FROM lehre.tbl_kalender_lehreinheit current_kalender_le
|
||||
JOIN lehre.tbl_lehreinheit current_lehreinheit
|
||||
ON current_lehreinheit.lehreinheit_id = current_kalender_le.lehreinheit_id
|
||||
JOIN lehre.tbl_lehreinheitgruppe current_lehreinheitgruppe
|
||||
ON current_lehreinheitgruppe.lehreinheit_id = current_lehreinheit.lehreinheit_id
|
||||
JOIN public.tbl_gruppe current_gruppe
|
||||
ON current_gruppe.studiengang_kz = current_lehreinheitgruppe.studiengang_kz
|
||||
AND current_gruppe.semester = current_lehreinheitgruppe.semester
|
||||
AND current_gruppe.gruppe_kurzbz = current_lehreinheitgruppe.gruppe_kurzbz
|
||||
JOIN public.tbl_benutzergruppe current_benutzergruppe
|
||||
ON current_benutzergruppe.gruppe_kurzbz = current_gruppe.gruppe_kurzbz
|
||||
SELECT DISTINCT current_kalender.kalender_id, current_benutzergruppe.uid
|
||||
FROM lehre.tbl_kalender current_kalender
|
||||
JOIN lehre.tbl_kalender_lehreinheit current_kalender_le ON current_kalender_le.kalender_id = current_kalender.kalender_id
|
||||
JOIN lehre.tbl_lehreinheit current_lehreinheit ON current_lehreinheit.lehreinheit_id = current_kalender_le.lehreinheit_id
|
||||
JOIN lehre.tbl_lehreinheitgruppe current_lehreinheitgruppe ON current_lehreinheitgruppe.lehreinheit_id = current_lehreinheit.lehreinheit_id
|
||||
JOIN public.tbl_gruppe current_gruppe
|
||||
ON current_gruppe.studiengang_kz = current_lehreinheitgruppe.studiengang_kz
|
||||
AND current_gruppe.semester = current_lehreinheitgruppe.semester
|
||||
AND current_gruppe.gruppe_kurzbz = current_lehreinheitgruppe.gruppe_kurzbz
|
||||
JOIN public.tbl_benutzergruppe current_benutzergruppe ON current_benutzergruppe.gruppe_kurzbz = current_gruppe.gruppe_kurzbz
|
||||
AND current_benutzergruppe.studiensemester_kurzbz = current_lehreinheit.studiensemester_kurzbz
|
||||
WHERE current_kalender_le.kalender_id = current_kalender.kalender_id
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM lehre.tbl_kalender other_kalender
|
||||
JOIN lehre.tbl_kalender_lehreinheit other_kalender_le
|
||||
ON other_kalender_le.kalender_id = other_kalender.kalender_id
|
||||
JOIN lehre.tbl_lehreinheit other_lehreinheit
|
||||
ON other_lehreinheit.lehreinheit_id = other_kalender_le.lehreinheit_id
|
||||
JOIN lehre.tbl_lehreinheitgruppe other_lehreinheitgruppe
|
||||
ON other_lehreinheitgruppe.lehreinheit_id = other_lehreinheit.lehreinheit_id
|
||||
JOIN public.tbl_gruppe other_gruppe
|
||||
ON other_gruppe.studiengang_kz = other_lehreinheitgruppe.studiengang_kz
|
||||
AND other_gruppe.semester = other_lehreinheitgruppe.semester
|
||||
AND other_gruppe.gruppe_kurzbz = other_lehreinheitgruppe.gruppe_kurzbz
|
||||
JOIN public.tbl_benutzergruppe other_benutzergruppe
|
||||
ON other_benutzergruppe.gruppe_kurzbz = other_gruppe.gruppe_kurzbz
|
||||
AND other_benutzergruppe.studiensemester_kurzbz = other_lehreinheit.studiensemester_kurzbz
|
||||
AND other_benutzergruppe.uid = current_benutzergruppe.uid
|
||||
WHERE other_kalender.kalender_id != current_kalender.kalender_id
|
||||
AND other_kalender.von < current_kalender.bis
|
||||
AND other_kalender.bis > current_kalender.von
|
||||
AND other_kalender.status_kurzbz NOT IN ('archived', 'deleted', 'to_delete', 'to_delete_live', 'to_delete_preview')
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM lehre.tbl_kalender nachfolger
|
||||
WHERE nachfolger.vorgaenger_kalender_id = other_kalender.kalender_id
|
||||
)
|
||||
)
|
||||
)
|
||||
OR EXISTS (
|
||||
SELECT 1
|
||||
FROM lehre.tbl_kalender_lehreinheit current_kalender_le
|
||||
JOIN lehre.tbl_lehreinheit current_lehreinheit
|
||||
ON current_lehreinheit.lehreinheit_id = current_kalender_le.lehreinheit_id
|
||||
JOIN lehre.tbl_lehreinheitgruppe current_lehreinheitgruppe
|
||||
ON current_lehreinheitgruppe.lehreinheit_id = current_lehreinheit.lehreinheit_id
|
||||
JOIN public.tbl_studentlehrverband current_studentlehrverband
|
||||
ON current_studentlehrverband.studiengang_kz = current_lehreinheitgruppe.studiengang_kz
|
||||
AND current_studentlehrverband.semester = current_lehreinheitgruppe.semester
|
||||
AND current_studentlehrverband.studiensemester_kurzbz = current_lehreinheit.studiensemester_kurzbz
|
||||
AND (
|
||||
current_lehreinheitgruppe.verband = current_studentlehrverband.verband
|
||||
OR current_lehreinheitgruppe.verband IS NULL
|
||||
OR btrim(current_lehreinheitgruppe.verband::text) = ''
|
||||
OR current_studentlehrverband.verband IS NULL
|
||||
)
|
||||
AND (
|
||||
current_lehreinheitgruppe.gruppe = current_studentlehrverband.gruppe
|
||||
OR current_lehreinheitgruppe.gruppe IS NULL
|
||||
OR btrim(current_lehreinheitgruppe.gruppe::text) = ''
|
||||
OR current_studentlehrverband.gruppe IS NULL
|
||||
)
|
||||
WHERE current_kalender_le.kalender_id = current_kalender.kalender_id
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM lehre.tbl_kalender other_kalender
|
||||
JOIN lehre.tbl_kalender_lehreinheit other_kalender_le
|
||||
ON other_kalender_le.kalender_id = other_kalender.kalender_id
|
||||
JOIN lehre.tbl_lehreinheit other_lehreinheit
|
||||
ON other_lehreinheit.lehreinheit_id = other_kalender_le.lehreinheit_id
|
||||
JOIN lehre.tbl_lehreinheitgruppe other_lehreinheitgruppe
|
||||
ON other_lehreinheitgruppe.lehreinheit_id = other_lehreinheit.lehreinheit_id
|
||||
JOIN public.tbl_studentlehrverband other_studentlehrverband
|
||||
ON other_studentlehrverband.studiengang_kz = other_lehreinheitgruppe.studiengang_kz
|
||||
AND other_studentlehrverband.semester = other_lehreinheitgruppe.semester
|
||||
AND other_studentlehrverband.studiensemester_kurzbz = other_lehreinheit.studiensemester_kurzbz
|
||||
AND other_studentlehrverband.student_uid = current_studentlehrverband.student_uid
|
||||
AND (
|
||||
other_lehreinheitgruppe.verband = other_studentlehrverband.verband
|
||||
OR other_lehreinheitgruppe.verband IS NULL
|
||||
OR btrim(other_lehreinheitgruppe.verband::text) = ''
|
||||
OR other_studentlehrverband.verband IS NULL
|
||||
)
|
||||
AND (
|
||||
other_lehreinheitgruppe.gruppe = other_studentlehrverband.gruppe
|
||||
OR other_lehreinheitgruppe.gruppe IS NULL
|
||||
OR btrim(other_lehreinheitgruppe.gruppe::text) = ''
|
||||
OR other_studentlehrverband.gruppe IS NULL
|
||||
)
|
||||
WHERE other_kalender.kalender_id != current_kalender.kalender_id
|
||||
AND other_kalender.von < current_kalender.bis
|
||||
AND other_kalender.bis > current_kalender.von
|
||||
AND other_kalender.status_kurzbz NOT IN ('archived', 'deleted', 'to_delete', 'to_delete_live', 'to_delete_preview')
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM lehre.tbl_kalender nachfolger
|
||||
WHERE nachfolger.vorgaenger_kalender_id = other_kalender.kalender_id
|
||||
)
|
||||
)
|
||||
)";
|
||||
JOIN lehre.tbl_kalender other_kalender
|
||||
ON other_kalender.kalender_id != current_kalender.kalender_id
|
||||
AND other_kalender.von < current_kalender.bis
|
||||
AND other_kalender.bis > current_kalender.von
|
||||
AND other_kalender.status_kurzbz NOT IN ('archived', 'deleted', 'to_delete', 'to_delete_live', 'to_delete_preview')
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM lehre.tbl_kalender vorgaenger
|
||||
WHERE vorgaenger.vorgaenger_kalender_id = other_kalender.kalender_id
|
||||
)
|
||||
JOIN lehre.tbl_kalender_lehreinheit other_kalender_le ON other_kalender_le.kalender_id = other_kalender.kalender_id
|
||||
JOIN lehre.tbl_lehreinheit other_lehreinheit ON other_lehreinheit.lehreinheit_id = other_kalender_le.lehreinheit_id
|
||||
JOIN lehre.tbl_lehreinheitgruppe other_lehreinheitgruppe ON other_lehreinheitgruppe.lehreinheit_id = other_lehreinheit.lehreinheit_id
|
||||
JOIN public.tbl_gruppe other_gruppe
|
||||
ON other_gruppe.studiengang_kz = other_lehreinheitgruppe.studiengang_kz
|
||||
AND other_gruppe.semester = other_lehreinheitgruppe.semester
|
||||
AND other_gruppe.gruppe_kurzbz = other_lehreinheitgruppe.gruppe_kurzbz
|
||||
JOIN public.tbl_benutzergruppe other_benutzergruppe
|
||||
ON other_benutzergruppe.gruppe_kurzbz = other_gruppe.gruppe_kurzbz
|
||||
AND other_benutzergruppe.uid = current_benutzergruppe.uid
|
||||
AND other_benutzergruppe.studiensemester_kurzbz = other_lehreinheit.studiensemester_kurzbz
|
||||
|
||||
|
||||
WHERE current_kalender.kalender_id IN ($placeholders)
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT DISTINCT current_kalender.kalender_id, current_studentlehrverband.student_uid AS uid
|
||||
FROM lehre.tbl_kalender current_kalender
|
||||
JOIN lehre.tbl_kalender_lehreinheit current_kalender_le ON current_kalender_le.kalender_id = current_kalender.kalender_id
|
||||
JOIN lehre.tbl_lehreinheit current_lehreinheit ON current_lehreinheit.lehreinheit_id = current_kalender_le.lehreinheit_id
|
||||
JOIN lehre.tbl_lehreinheitgruppe current_lehreinheitgruppe ON current_lehreinheitgruppe.lehreinheit_id = current_lehreinheit.lehreinheit_id
|
||||
JOIN public.tbl_studentlehrverband current_studentlehrverband
|
||||
ON current_studentlehrverband.studiengang_kz = current_lehreinheitgruppe.studiengang_kz
|
||||
AND current_studentlehrverband.semester = current_lehreinheitgruppe.semester
|
||||
AND current_studentlehrverband.studiensemester_kurzbz = current_lehreinheit.studiensemester_kurzbz
|
||||
AND (current_lehreinheitgruppe.verband = current_studentlehrverband.verband OR current_lehreinheitgruppe.verband IS NULL OR btrim(current_lehreinheitgruppe.verband::text) = '' OR current_studentlehrverband.verband IS NULL)
|
||||
AND (current_lehreinheitgruppe.gruppe = current_studentlehrverband.gruppe OR current_lehreinheitgruppe.gruppe IS NULL OR btrim(current_lehreinheitgruppe.gruppe::text) = '' OR current_studentlehrverband.gruppe IS NULL)
|
||||
|
||||
JOIN lehre.tbl_kalender other_kalender
|
||||
ON other_kalender.kalender_id != current_kalender.kalender_id
|
||||
AND other_kalender.von < current_kalender.bis
|
||||
AND other_kalender.bis > current_kalender.von
|
||||
AND other_kalender.status_kurzbz NOT IN ('archived', 'deleted', 'to_delete', 'to_delete_live', 'to_delete_preview')
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM lehre.tbl_kalender vorgaenger
|
||||
WHERE vorgaenger.vorgaenger_kalender_id = other_kalender.kalender_id
|
||||
)
|
||||
JOIN lehre.tbl_kalender_lehreinheit other_kalender_le ON other_kalender_le.kalender_id = other_kalender.kalender_id
|
||||
JOIN lehre.tbl_lehreinheit other_lehreinheit ON other_lehreinheit.lehreinheit_id = other_kalender_le.lehreinheit_id
|
||||
JOIN lehre.tbl_lehreinheitgruppe other_lehreinheitgruppe ON other_lehreinheitgruppe.lehreinheit_id = other_lehreinheit.lehreinheit_id
|
||||
JOIN public.tbl_studentlehrverband other_slv
|
||||
ON other_slv.studiengang_kz = other_lehreinheitgruppe.studiengang_kz
|
||||
AND other_slv.semester = other_lehreinheitgruppe.semester
|
||||
AND other_slv.studiensemester_kurzbz = other_lehreinheit.studiensemester_kurzbz
|
||||
AND other_slv.student_uid = current_studentlehrverband.student_uid
|
||||
AND (other_lehreinheitgruppe.verband = other_slv.verband OR other_lehreinheitgruppe.verband IS NULL OR btrim(other_lehreinheitgruppe.verband::text) = '' OR other_slv.verband IS NULL)
|
||||
AND (other_lehreinheitgruppe.gruppe = other_slv.gruppe OR other_lehreinheitgruppe.gruppe IS NULL OR btrim(other_lehreinheitgruppe.gruppe::text) = '' OR other_slv.gruppe IS NULL)
|
||||
|
||||
WHERE current_kalender.kalender_id IN ($placeholders)
|
||||
";
|
||||
|
||||
$result = $dbModel->execReadOnlyQuery($sql, array_merge($kalender_ids, $kalender_ids));
|
||||
|
||||
$result = $dbModel->execReadOnlyQuery($sql, [$postgres_array]);
|
||||
if (isError($result) || !hasData($result)) return [];
|
||||
|
||||
$grouped = [];
|
||||
foreach (getData($result) as $row)
|
||||
$grouped[$row->kalender_id] = [true];
|
||||
{
|
||||
$grouped[$row->kalender_id][] = true;
|
||||
}
|
||||
|
||||
log_message('error', 'StudentCollisionCheck::checkAll() 1');
|
||||
return $grouped;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -308,155 +308,104 @@ class VerbandCollisionCheck implements ICollisionCheck
|
||||
{
|
||||
if (empty($kalender_ids)) return [];
|
||||
|
||||
$kalender_ids = array_values(array_unique(array_map('intval', $kalender_ids)));
|
||||
$postgres_array = '{' . implode(',', $kalender_ids) . '}';
|
||||
$dbModel = new DB_Model();
|
||||
$lehreinheit_group_match = $this->_buildGroupMatchCondition(
|
||||
'current_group_assignment',
|
||||
'other_lehreinheitgruppe',
|
||||
'current_group_assignment.direktinskription',
|
||||
'other_gruppe.direktinskription'
|
||||
);
|
||||
$event_group_match = $this->_buildGroupMatchCondition(
|
||||
'current_group_assignment',
|
||||
'other_event_teilnehmer',
|
||||
'current_group_assignment.direktinskription',
|
||||
'other_gruppe.direktinskription'
|
||||
);
|
||||
|
||||
$placeholders = implode(',', array_fill(0, count($kalender_ids), '?'));
|
||||
|
||||
$sql = "
|
||||
WITH current_kalender AS MATERIALIZED (
|
||||
SELECT kalender_id, von, bis
|
||||
FROM lehre.tbl_kalender
|
||||
WHERE kalender_id = ANY(?::bigint[])
|
||||
),
|
||||
current_group_assignment AS MATERIALIZED (
|
||||
SELECT
|
||||
current_kalender.kalender_id,
|
||||
current_lehreinheitgruppe.studiengang_kz,
|
||||
current_lehreinheitgruppe.semester,
|
||||
current_lehreinheitgruppe.verband,
|
||||
current_lehreinheitgruppe.gruppe,
|
||||
current_lehreinheitgruppe.gruppe_kurzbz,
|
||||
current_gruppe.direktinskription
|
||||
FROM current_kalender
|
||||
JOIN lehre.tbl_kalender_lehreinheit current_kalender_le
|
||||
ON current_kalender_le.kalender_id = current_kalender.kalender_id
|
||||
JOIN lehre.tbl_lehreinheit current_lehreinheit
|
||||
ON current_lehreinheit.lehreinheit_id = current_kalender_le.lehreinheit_id
|
||||
JOIN lehre.tbl_lehreinheitgruppe current_lehreinheitgruppe
|
||||
ON current_lehreinheitgruppe.lehreinheit_id = current_lehreinheit.lehreinheit_id
|
||||
LEFT JOIN public.tbl_gruppe current_gruppe
|
||||
ON current_gruppe.gruppe_kurzbz = current_lehreinheitgruppe.gruppe_kurzbz
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
current_kalender.kalender_id,
|
||||
current_event_teilnehmer.studiengang_kz,
|
||||
current_event_teilnehmer.semester,
|
||||
current_event_teilnehmer.verband,
|
||||
current_event_teilnehmer.gruppe,
|
||||
current_event_teilnehmer.gruppe_kurzbz,
|
||||
current_gruppe.direktinskription
|
||||
FROM current_kalender
|
||||
JOIN lehre.tbl_kalender_event_teilnehmer current_event_teilnehmer
|
||||
ON current_event_teilnehmer.kalender_id = current_kalender.kalender_id
|
||||
LEFT JOIN public.tbl_gruppe current_gruppe
|
||||
ON current_gruppe.gruppe_kurzbz = current_event_teilnehmer.gruppe_kurzbz
|
||||
)
|
||||
SELECT current_kalender.kalender_id
|
||||
FROM current_kalender
|
||||
WHERE EXISTS (
|
||||
SELECT 1
|
||||
FROM current_group_assignment
|
||||
WHERE current_group_assignment.kalender_id = current_kalender.kalender_id
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM lehre.tbl_kalender other_kalender
|
||||
WHERE other_kalender.kalender_id != current_kalender.kalender_id
|
||||
AND other_kalender.von < current_kalender.bis
|
||||
AND other_kalender.bis > current_kalender.von
|
||||
AND other_kalender.status_kurzbz NOT IN ('archived', 'deleted', 'to_delete', 'to_delete_live', 'to_delete_preview')
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM lehre.tbl_kalender nachfolger
|
||||
WHERE nachfolger.vorgaenger_kalender_id = other_kalender.kalender_id
|
||||
)
|
||||
AND (
|
||||
EXISTS (
|
||||
SELECT 1
|
||||
FROM lehre.tbl_kalender_lehreinheit other_kalender_le
|
||||
JOIN lehre.tbl_lehreinheit other_lehreinheit
|
||||
ON other_lehreinheit.lehreinheit_id = other_kalender_le.lehreinheit_id
|
||||
JOIN lehre.tbl_lehreinheitgruppe other_lehreinheitgruppe
|
||||
ON other_lehreinheitgruppe.lehreinheit_id = other_lehreinheit.lehreinheit_id
|
||||
LEFT JOIN public.tbl_gruppe other_gruppe
|
||||
ON other_gruppe.gruppe_kurzbz = other_lehreinheitgruppe.gruppe_kurzbz
|
||||
WHERE other_kalender_le.kalender_id = other_kalender.kalender_id
|
||||
AND $lehreinheit_group_match
|
||||
)
|
||||
OR EXISTS (
|
||||
SELECT 1
|
||||
FROM lehre.tbl_kalender_event_teilnehmer other_event_teilnehmer
|
||||
LEFT JOIN public.tbl_gruppe other_gruppe
|
||||
ON other_gruppe.gruppe_kurzbz = other_event_teilnehmer.gruppe_kurzbz
|
||||
WHERE other_event_teilnehmer.kalender_id = other_kalender.kalender_id
|
||||
AND $event_group_match
|
||||
)
|
||||
)
|
||||
SELECT DISTINCT ON (current_kalender.kalender_id) current_kalender.kalender_id
|
||||
FROM lehre.tbl_kalender current_kalender
|
||||
|
||||
JOIN (
|
||||
SELECT tbl_lehreinheitgruppe.studiengang_kz, tbl_lehreinheitgruppe.semester, tbl_lehreinheitgruppe.verband, tbl_lehreinheitgruppe.gruppe,
|
||||
tbl_lehreinheitgruppe.gruppe_kurzbz, tbl_kalender_lehreinheit.kalender_id
|
||||
FROM lehre.tbl_kalender_lehreinheit
|
||||
JOIN lehre.tbl_lehreinheitgruppe ON tbl_lehreinheitgruppe.lehreinheit_id = tbl_kalender_lehreinheit.lehreinheit_id
|
||||
UNION
|
||||
SELECT tbl_kalender_event_teilnehmer.studiengang_kz, tbl_kalender_event_teilnehmer.semester, tbl_kalender_event_teilnehmer.verband, tbl_kalender_event_teilnehmer.gruppe,
|
||||
tbl_kalender_event_teilnehmer.gruppe_kurzbz, tbl_kalender_event_teilnehmer.kalender_id
|
||||
FROM lehre.tbl_kalender_event_teilnehmer
|
||||
) current_lehreinheitguppe ON current_lehreinheitguppe.kalender_id = current_kalender.kalender_id
|
||||
|
||||
LEFT JOIN public.tbl_gruppe current_gruppe
|
||||
ON current_gruppe.gruppe_kurzbz = current_lehreinheitguppe.gruppe_kurzbz
|
||||
|
||||
JOIN lehre.tbl_kalender other_kalender
|
||||
ON other_kalender.kalender_id != current_kalender.kalender_id
|
||||
AND other_kalender.von < current_kalender.bis
|
||||
AND other_kalender.bis > current_kalender.von
|
||||
|
||||
JOIN (
|
||||
SELECT tbl_lehreinheitgruppe.studiengang_kz, tbl_lehreinheitgruppe.semester, tbl_lehreinheitgruppe.verband, tbl_lehreinheitgruppe.gruppe,
|
||||
tbl_lehreinheitgruppe.gruppe_kurzbz, tbl_kalender_lehreinheit.kalender_id
|
||||
FROM lehre.tbl_kalender_lehreinheit
|
||||
JOIN lehre.tbl_lehreinheitgruppe ON tbl_lehreinheitgruppe.lehreinheit_id = tbl_kalender_lehreinheit.lehreinheit_id
|
||||
UNION
|
||||
SELECT tbl_kalender_event_teilnehmer.studiengang_kz, tbl_kalender_event_teilnehmer.semester, tbl_kalender_event_teilnehmer.verband, tbl_kalender_event_teilnehmer.gruppe,
|
||||
tbl_kalender_event_teilnehmer.gruppe_kurzbz, tbl_kalender_event_teilnehmer.kalender_id
|
||||
FROM lehre.tbl_kalender_event_teilnehmer
|
||||
) other_lehreinheitguppe ON other_lehreinheitguppe.kalender_id = other_kalender.kalender_id
|
||||
|
||||
LEFT JOIN public.tbl_gruppe other_gruppe
|
||||
ON other_gruppe.gruppe_kurzbz = other_lehreinheitguppe.gruppe_kurzbz
|
||||
|
||||
WHERE current_kalender.kalender_id IN ({$placeholders})
|
||||
AND other_kalender.status_kurzbz NOT IN ('archived', 'deleted', 'to_delete', 'to_delete_live', 'to_delete_preview')
|
||||
AND current_lehreinheitguppe.studiengang_kz = other_lehreinheitguppe.studiengang_kz
|
||||
AND current_lehreinheitguppe.semester = other_lehreinheitguppe.semester
|
||||
AND (
|
||||
(
|
||||
current_lehreinheitguppe.gruppe_kurzbz IS NULL
|
||||
AND other_lehreinheitguppe.gruppe_kurzbz IS NULL
|
||||
AND (
|
||||
current_lehreinheitguppe.verband IS NULL
|
||||
OR (
|
||||
current_lehreinheitguppe.verband = other_lehreinheitguppe.verband
|
||||
AND (current_lehreinheitguppe.gruppe IS NULL OR other_lehreinheitguppe.gruppe IS NULL OR current_lehreinheitguppe.gruppe = other_lehreinheitguppe.gruppe)
|
||||
)
|
||||
)
|
||||
)";
|
||||
)
|
||||
OR
|
||||
(
|
||||
current_lehreinheitguppe.gruppe_kurzbz IS NOT NULL
|
||||
AND other_lehreinheitguppe.gruppe_kurzbz IS NOT NULL
|
||||
AND current_gruppe.direktinskription IS NOT TRUE
|
||||
AND other_gruppe.direktinskription IS NOT TRUE
|
||||
)
|
||||
OR
|
||||
(
|
||||
(
|
||||
current_lehreinheitguppe.gruppe_kurzbz IS NULL
|
||||
AND other_lehreinheitguppe.gruppe_kurzbz IS NOT NULL
|
||||
AND other_gruppe.direktinskription IS NOT TRUE
|
||||
)
|
||||
OR
|
||||
(
|
||||
current_lehreinheitguppe.gruppe_kurzbz IS NOT NULL
|
||||
AND other_lehreinheitguppe.gruppe_kurzbz IS NULL
|
||||
AND current_gruppe.direktinskription IS NOT TRUE
|
||||
)
|
||||
)
|
||||
)
|
||||
AND other_kalender.kalender_id NOT IN (
|
||||
SELECT vorgaenger_kalender_id
|
||||
FROM lehre.tbl_kalender
|
||||
WHERE vorgaenger_kalender_id IS NOT NULL
|
||||
)
|
||||
|
||||
";
|
||||
|
||||
$result = $dbModel->execReadOnlyQuery($sql, $kalender_ids);
|
||||
|
||||
$result = $dbModel->execReadOnlyQuery($sql, [$postgres_array]);
|
||||
if (isError($result) || !hasData($result)) return [];
|
||||
|
||||
$grouped = [];
|
||||
foreach (getData($result) as $row)
|
||||
$grouped[$row->kalender_id] = [true];
|
||||
{
|
||||
$grouped[$row->kalender_id][] = true;
|
||||
}
|
||||
|
||||
log_message('error', 'VerbandCollisionCheck::checkAll() 1');
|
||||
return $grouped;
|
||||
}
|
||||
|
||||
private function _buildGroupMatchCondition($current_alias, $other_alias, $current_direct, $other_direct)
|
||||
{
|
||||
return "
|
||||
$current_alias.studiengang_kz = $other_alias.studiengang_kz
|
||||
AND $current_alias.semester = $other_alias.semester
|
||||
AND (
|
||||
(
|
||||
$current_alias.gruppe_kurzbz IS NULL
|
||||
AND $other_alias.gruppe_kurzbz IS NULL
|
||||
AND (
|
||||
$current_alias.verband IS NULL
|
||||
OR (
|
||||
$current_alias.verband = $other_alias.verband
|
||||
AND (
|
||||
$current_alias.gruppe IS NULL
|
||||
OR $other_alias.gruppe IS NULL
|
||||
OR $current_alias.gruppe = $other_alias.gruppe
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
OR (
|
||||
$current_alias.gruppe_kurzbz IS NOT NULL
|
||||
AND $other_alias.gruppe_kurzbz IS NOT NULL
|
||||
AND $current_direct IS NOT TRUE
|
||||
AND $other_direct IS NOT TRUE
|
||||
)
|
||||
OR (
|
||||
$current_alias.gruppe_kurzbz IS NULL
|
||||
AND $other_alias.gruppe_kurzbz IS NOT NULL
|
||||
AND $other_direct IS NOT TRUE
|
||||
)
|
||||
OR (
|
||||
$current_alias.gruppe_kurzbz IS NOT NULL
|
||||
AND $other_alias.gruppe_kurzbz IS NULL
|
||||
AND $current_direct IS NOT TRUE
|
||||
)
|
||||
)";
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user