mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-10-20 10:49:36 +00:00
Merge remote-tracking branch 'origin/feature-78317/tempus_delete_status' into feature-68298/Tempus_Grundstruktur
This commit is contained in:
@@ -459,7 +459,7 @@ class KalenderLib
|
||||
{
|
||||
$this->_getBasePlan($start_date, $end_date);
|
||||
|
||||
$this->_ci->KalenderModel->db->where('status_kurzbz', 'live');
|
||||
$this->_ci->KalenderModel->db->where_in('status_kurzbz', array('live', 'to_delete_live'));
|
||||
|
||||
$data = $this->_ci->KalenderModel->load();
|
||||
|
||||
@@ -598,7 +598,7 @@ class KalenderLib
|
||||
|
||||
$kalender_entry = getData($entryResult);
|
||||
|
||||
if (in_array($kalender_entry->status_kurzbz, array('todelete', 'deleted')))
|
||||
if (in_array($kalender_entry->status_kurzbz, array('to_delete', 'to_delete_live', 'to_delete_preview', 'deleted')))
|
||||
{
|
||||
return error([
|
||||
'message' => $this->_ci->phraseslib->t('ui', 'entry_not_editable'),
|
||||
@@ -641,7 +641,7 @@ class KalenderLib
|
||||
|
||||
$kalender_entry = getData($entryResult);
|
||||
|
||||
if (in_array($kalender_entry->status_kurzbz, array('todelete', 'deleted')))
|
||||
if (in_array($kalender_entry->status_kurzbz, array('to_delete', 'to_delete_live', 'to_delete_preview', 'deleted')))
|
||||
{
|
||||
return error([
|
||||
'message' => $this->_ci->phraseslib->t('ui', 'entry_not_editable'),
|
||||
@@ -1292,7 +1292,7 @@ class KalenderLib
|
||||
|
||||
if ($kalender_entry->typ === 'lehreinheit')
|
||||
{
|
||||
if (in_array($kalender_entry->status_kurzbz, array('todelete', 'deleted')))
|
||||
if (in_array($kalender_entry->status_kurzbz, array('to_delete', 'to_delete_live', 'to_delete_preview', 'deleted')))
|
||||
{
|
||||
return error([
|
||||
'message' => $this->_ci->phraseslib->t('ui', 'entry_not_editable'),
|
||||
@@ -1358,7 +1358,7 @@ class KalenderLib
|
||||
|
||||
if ($kalender_entry->typ === 'lehreinheit')
|
||||
{
|
||||
if (in_array($kalender_entry->status_kurzbz, array('todelete', 'deleted')))
|
||||
if (in_array($kalender_entry->status_kurzbz, array('to_delete', 'to_delete_live', 'to_delete_preview', 'deleted')))
|
||||
{
|
||||
return error([
|
||||
'message' => $this->_ci->phraseslib->t('ui', 'entry_not_editable'),
|
||||
@@ -1588,36 +1588,60 @@ class KalenderLib
|
||||
if (isError($result_ort)) return $result_ort;
|
||||
$has_ort = hasData($result_ort) ? getData($result_ort)[0] : false;
|
||||
|
||||
if ($entry->status_kurzbz === 'planning')
|
||||
if ($entry->status_kurzbz === 'sync_preview' || $entry->status_kurzbz === 'sync_live' || $entry->status_kurzbz === 'planning')
|
||||
{
|
||||
if ($has_ort)
|
||||
$this->_deleteOrtEntry($has_ort);
|
||||
$history = $this->getHistory($entry->kalender_id, false, false);
|
||||
|
||||
if ($has_lehreinheit)
|
||||
$this->_deleteLehreinheitEntry($has_lehreinheit);
|
||||
$history = hasData($history) && getData($history);
|
||||
|
||||
$this->_ci->KalenderModel->delete(array('tbl_kalender.kalender_id' => $entry->kalender_id));
|
||||
}
|
||||
else if ($entry->status_kurzbz === 'sync_preview' || $entry->status_kurzbz === 'sync_live')
|
||||
{
|
||||
$history = $this->getHistory($entry->kalender_id);
|
||||
$history = hasData($history) ? getData($history) : false;
|
||||
if ($history)
|
||||
{
|
||||
$result = $this->_ci->KalenderModel->update(
|
||||
array('kalender_id' => $entry->kalender_id),
|
||||
array('status_kurzbz' => 'to_delete','status_kurzbz_max' => 'planning')
|
||||
);
|
||||
|
||||
if ($has_ort)
|
||||
$result = $this->_deleteOrtEntry($has_ort);
|
||||
if (isError($result))
|
||||
return error($result);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($has_ort)
|
||||
{
|
||||
$result = $this->_deleteOrtEntry($has_ort);
|
||||
if (isError($result))
|
||||
return error($result);
|
||||
|
||||
if ($has_lehreinheit)
|
||||
$result = $this->_deleteLehreinheitEntry($has_lehreinheit);
|
||||
}
|
||||
|
||||
$this->_ci->KalenderModel->delete(array('tbl_kalender.kalender_id' => $entry->kalender_id));
|
||||
|
||||
if ($has_lehreinheit)
|
||||
{
|
||||
$result = $this->_deleteLehreinheitEntry($has_lehreinheit);
|
||||
if (isError($result))
|
||||
return error($result);
|
||||
}
|
||||
|
||||
$result = $this->_ci->KalenderModel->delete(array('tbl_kalender.kalender_id' => $entry->kalender_id));
|
||||
|
||||
if (isError($result))
|
||||
return error($result);
|
||||
}
|
||||
}
|
||||
else if ($entry->status_kurzbz === 'preview' || $entry->status_kurzbz === 'live')
|
||||
{
|
||||
//TODO (david) überprüfen ob sinnvoll, verschwindet direkt in den ansichten (student, lecturer)
|
||||
if ($entry->status_kurzbz === 'preview')
|
||||
$new_status = 'to_delete_preview';
|
||||
else
|
||||
$new_status = 'to_delete_live';
|
||||
|
||||
$result = $this->_ci->KalenderModel->update(
|
||||
array('kalender_id' => $entry->kalender_id),
|
||||
array('status_kurzbz' => 'todelete')
|
||||
array('status_kurzbz' => $new_status)
|
||||
);
|
||||
|
||||
if (isError($result))
|
||||
return error($result);
|
||||
}
|
||||
|
||||
return success();
|
||||
@@ -1642,11 +1666,11 @@ class KalenderLib
|
||||
return $this->_ci->KalenderEventModel->delete(array('kalender_id' => $entry->kalender_id));
|
||||
}
|
||||
|
||||
public function getHistory($kalender_id, $only_previous = false)
|
||||
public function getHistory($kalender_id, $only_previous = false, $include_self = true)
|
||||
{
|
||||
$dbModel = new DB_Model();
|
||||
$history_entries = $dbModel->execReadOnlyQuery("
|
||||
WITH RECURSIVE
|
||||
$history_sql ="
|
||||
WITH RECURSIVE
|
||||
vorgaenger(kalender_id, vorgaenger_kalender_id) AS (
|
||||
SELECT kalender_id, vorgaenger_kalender_id
|
||||
FROM lehre.tbl_kalender
|
||||
@@ -1685,12 +1709,19 @@ class KalenderLib
|
||||
SELECT kalender_id FROM nachfolger
|
||||
) combined
|
||||
JOIN lehre.tbl_kalender USING(kalender_id)
|
||||
LEFT JOIN orte USING(kalender_id)
|
||||
ORDER BY kalender_id DESC
|
||||
|
||||
" . ($only_previous ? ' LIMIT 1' : ''), array($kalender_id, $kalender_id));
|
||||
LEFT JOIN orte USING(kalender_id)";
|
||||
|
||||
return $history_entries;
|
||||
$params = array($kalender_id, $kalender_id);
|
||||
|
||||
if (!$include_self)
|
||||
{
|
||||
$history_sql .= " WHERE kalender_id != ?";
|
||||
$params[] = $kalender_id;
|
||||
}
|
||||
|
||||
$history_sql .= " ORDER BY kalender_id DESC" . ($only_previous ? ' LIMIT 1' : '');
|
||||
|
||||
return $dbModel->execReadOnlyQuery($history_sql, $params);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ class KalenderSyncLib
|
||||
$this->_ci->load->model('ressource/Kalendersyncstatus_model', 'KalendersyncstatusModel');
|
||||
$this->_ci->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||
$this->_ci->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel');
|
||||
$this->_ci->load->library('KalenderLib');
|
||||
}
|
||||
|
||||
public function run($studiensemester_kurzbz)
|
||||
@@ -41,7 +42,7 @@ class KalenderSyncLib
|
||||
|
||||
$ziel_status = isEmptyString($config->sync_status_kurzbz) ? 'live' : $config->sync_status_kurzbz;
|
||||
|
||||
$relevante_stati = array_merge($this->status_map[$ziel_status], array('todelete'));
|
||||
$relevante_stati = array_merge($this->status_map[$ziel_status], array('to_delete', 'to_delete_live', 'to_delete_preview'));
|
||||
|
||||
$kalender_ids_result = $this->getKalenderIds(
|
||||
$config->oe_kurzbz,
|
||||
@@ -89,7 +90,7 @@ class KalenderSyncLib
|
||||
|
||||
public function runManual($oe_kurzbz, $studiensemester_kurzbz, $ausbildungssemester = null, $studienplan_id = null, $mail = true, $datum_bis = null, $ziel_status = 'live')
|
||||
{
|
||||
$relevante_stati = array_merge($this->status_map[$ziel_status], array('todelete'));
|
||||
$relevante_stati = array_merge($this->status_map[$ziel_status], array('to_delete', 'to_delete_live', 'to_delete_preview'));
|
||||
|
||||
$kalender_ids_result = $this->getKalenderIds(
|
||||
$oe_kurzbz,
|
||||
@@ -126,7 +127,7 @@ class KalenderSyncLib
|
||||
$mail_infos_gesamt = [];
|
||||
$synced_gesamt = 0;
|
||||
|
||||
$todelete_ids_result = $this->_getManuallySetStatus(array('todelete'));
|
||||
$todelete_ids_result = $this->_getManuallySetStatus(array('to_delete', 'to_delete_live', 'to_delete_preview'));
|
||||
|
||||
if (isError($todelete_ids_result))
|
||||
return $todelete_ids_result;
|
||||
@@ -264,30 +265,34 @@ class KalenderSyncLib
|
||||
|
||||
private function _archiveVorgaenger($vorgaenger_kalender_id, $stop_at_live = false)
|
||||
{
|
||||
if (!$vorgaenger_kalender_id) return;
|
||||
$return_array = array();
|
||||
if (!$vorgaenger_kalender_id) return success($return_array);
|
||||
|
||||
$current_id = $vorgaenger_kalender_id;
|
||||
|
||||
while ($current_id)
|
||||
{
|
||||
$vorgaenger = $this->_ci->KalenderModel->load(array('kalender_id' => $current_id));
|
||||
if (!hasData($vorgaenger)) return;
|
||||
if (!hasData($vorgaenger)) return success($return_array);
|
||||
|
||||
$vorgaenger = getData($vorgaenger)[0];
|
||||
|
||||
if ($stop_at_live && $vorgaenger->status_kurzbz === 'live')
|
||||
return;
|
||||
return success($return_array);
|
||||
|
||||
if (in_array($vorgaenger->status_kurzbz, array('preview', 'live')))
|
||||
{
|
||||
$this->_ci->KalenderModel->update(
|
||||
array('kalender_id' => $current_id),
|
||||
array('status_kurzbz' => 'archived')
|
||||
array('status_kurzbz' => 'archived', 'status_kurzbz_max' => $vorgaenger->status_kurzbz)
|
||||
);
|
||||
|
||||
$return_array[] = $vorgaenger;
|
||||
}
|
||||
|
||||
$current_id = $vorgaenger->vorgaenger_kalender_id;
|
||||
}
|
||||
return success($return_array);
|
||||
}
|
||||
|
||||
private function _syncKalenderIds($kalender_ids, $ziel_status)
|
||||
@@ -312,11 +317,63 @@ class KalenderSyncLib
|
||||
|
||||
foreach (getData($to_update) as $entry)
|
||||
{
|
||||
if ($entry->status_kurzbz === 'todelete')
|
||||
if (in_array($entry->status_kurzbz, array('to_delete', 'to_delete_live', 'to_delete_preview')))
|
||||
{
|
||||
$this->_ci->KalenderModel->update(array('kalender_id' => $entry->kalender_id), array('status_kurzbz' => 'deleted'));
|
||||
$this->_archiveVorgaenger($entry->vorgaenger_kalender_id, false);
|
||||
$mail_infos[] = array('entry' => $entry, 'new_status' => 'deleted', 'notify' => array('lektor', 'student'));
|
||||
$notify = array();
|
||||
if ($entry->status_kurzbz === 'to_delete_live')
|
||||
{
|
||||
$status_max = 'live';
|
||||
$notify = array('lektor', 'student');
|
||||
}
|
||||
else if ($entry->status_kurzbz === 'to_delete_preview')
|
||||
{
|
||||
$status_max = 'preview';
|
||||
$notify = array('lektor');
|
||||
}
|
||||
else if ($entry->status_kurzbz === 'to_delete')
|
||||
{
|
||||
$status_max = 'planning';
|
||||
}
|
||||
|
||||
$this->_ci->KalenderModel->update(array('kalender_id' => $entry->kalender_id), array('status_kurzbz' => 'deleted', 'status_kurzbz_max' => $status_max));
|
||||
$mail_infos[] = array('entry' => $entry, 'new_status' => 'deleted', 'notify' => $notify);
|
||||
|
||||
$vorgaenger_array = $this->_archiveVorgaenger($entry->vorgaenger_kalender_id);
|
||||
|
||||
|
||||
|
||||
if (hasData($vorgaenger_array))
|
||||
{
|
||||
foreach(getData($vorgaenger_array) as $vorgaenger)
|
||||
{
|
||||
$archive_notify = array();
|
||||
|
||||
if ($vorgaenger->status_kurzbz === 'preview')
|
||||
$archive_notify = array('lektor');
|
||||
else if ($vorgaenger->status_kurzbz === 'live')
|
||||
{
|
||||
$archive_notify = array('student', 'lektor');
|
||||
|
||||
$history = $this->_ci->kalenderlib->getHistory($vorgaenger->kalender_id, false, false);
|
||||
if (hasData($history))
|
||||
{
|
||||
$history = getData($history);
|
||||
|
||||
foreach ($history as $entry)
|
||||
{
|
||||
if ($entry->status_kurzbz === 'deleted' && $entry->status_kurzbz_max === 'preview')
|
||||
{
|
||||
$archive_notify = array('student');
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$mail_infos[] = array('entry' => $vorgaenger, 'new_status' => 'deleted', 'notify' => $archive_notify);
|
||||
}
|
||||
}
|
||||
|
||||
$synced++;
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -1362,6 +1362,7 @@ export default {
|
||||
<th>Von</th>
|
||||
<th>Bis</th>
|
||||
<th>Status</th>
|
||||
<th>Max Status</th>
|
||||
<th>Ort</th>
|
||||
</tr>
|
||||
</thead>
|
||||
@@ -1370,6 +1371,7 @@ export default {
|
||||
<td>{{ entry.von }}</td>
|
||||
<td>{{ entry.bis }}</td>
|
||||
<td>{{ entry.status_kurzbz }}</td>
|
||||
<td>{{ entry.status_kurzbz_max }}</td>
|
||||
<td>{{ entry.ort }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
@@ -249,3 +249,32 @@ if ($result = @$db->db_query("SELECT 1 FROM public.tbl_variablenname WHERE name
|
||||
echo 'public.tbl_variablenname: Added name "tempus_favorites"<br>';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(!$result = @$db->db_query("SELECT status_kurzbz_max FROM lehre.tbl_kalender LIMIT 1"))
|
||||
{
|
||||
$qry = "ALTER TABLE lehre.tbl_kalender ADD COLUMN status_kurzbz_max character varying(32);
|
||||
|
||||
UPDATE lehre.tbl_kalender_status
|
||||
SET status_kurzbz = 'to_delete',
|
||||
bezeichnung = 'to_delete',
|
||||
WHERE status_kurzbz = 'todelete';
|
||||
UPDATE lehre.tbl_kalender_status SET sort = 9 WHERE status_kurzbz = 'deleted';
|
||||
UPDATE lehre.tbl_kalender_status SET sort = 10 WHERE status_kurzbz = 'archived';
|
||||
INSERT INTO lehre.tbl_kalender_status (status_kurzbz, bezeichnung, bezeichnung_mehrsprachig, sort) VALUES (E'to_delete_preview', E'to_delete_preview', E'{\"Zur Löschung in Voransicht\", \"Marked for Deletion in Preview\"}', 7);
|
||||
INSERT INTO lehre.tbl_kalender_status (status_kurzbz, bezeichnung, bezeichnung_mehrsprachig, sort) VALUES (E'to_delete_live', E'to_delete_live', E'{\"Zur Löschung in Live\", \"Marked for Deletion in Live\"}', 8);
|
||||
|
||||
ALTER TABLE lehre.tbl_kalender ADD CONSTRAINT tbl_kalender_status_max_fk FOREIGN KEY (status_kurzbz_max)
|
||||
REFERENCES lehre.tbl_kalender_status (status_kurzbz) MATCH FULL ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
";
|
||||
|
||||
|
||||
if(!$db->db_query($qry))
|
||||
echo '<strong>lehre.tbl_kalender: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br />lehre.tbl_kalender: Spalte status_kurzbz_max hinzugefuegt.
|
||||
<br />lehre.tbl_kalender_status: status_kurzbz von todelete auf to_delete umbenannt.
|
||||
<br />lehre.tbl_kalender_status: status_kurzbz to_delete_preview hinzugefuegt.
|
||||
<br />lehre.tbl_kalender_status: status_kurzbz to_delete_live hinzugefuegt.
|
||||
';
|
||||
}
|
||||
Reference in New Issue
Block a user