mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-19 21:19:29 +00:00
85 lines
3.7 KiB
PHP
85 lines
3.7 KiB
PHP
<?php
|
|
|
|
class ResourcesCollisionCheck implements ICollisionCheck
|
|
{
|
|
|
|
private $_ci;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->_ci =& get_instance();
|
|
$this->_ci->load->model('ressource/Kalender_model', 'KalenderModel');
|
|
$this->_ci->load->library('VariableLib', array('uid' => getAuthUID()));
|
|
$this->_ci->load->library('PhrasesLib', array('ui'));
|
|
}
|
|
|
|
public function getName()
|
|
{
|
|
return 'resources';
|
|
}
|
|
|
|
public function check($data)
|
|
{
|
|
if (!isset($data->betriebsmittel_ids, $data->von, $data->bis, $data->kalender_id)) return [];
|
|
|
|
if (empty($data->betriebsmittel_ids)) return [];
|
|
|
|
if ($this->_ci->variablelib->getVar('ignore_kollision') === 'true') return [];
|
|
if ($this->_ci->variablelib->getVar('ignore_resources_collisions') === 'true') return [];
|
|
|
|
$this->_ci->KalenderModel->addSelect('kalender_id, von, bis, bm.beschreibung AS betriebsmittel_beschreibung');
|
|
$this->_ci->KalenderModel->addJoin('lehre.tbl_betriebsmittel_kalender bk', 'bk.eindeutige_kalender_gruppen_id = tbl_kalender.eindeutige_gruppen_id');
|
|
$this->_ci->KalenderModel->addJoin('wawi.tbl_betriebsmittel bm', 'bm.betriebsmittel_id = bk.betriebsmittel_id');
|
|
|
|
$this->_ci->KalenderModel->db->where('tbl_kalender.kalender_id !=', $data->kalender_id);
|
|
$this->_ci->KalenderModel->db->where('tbl_kalender.kalender_id NOT IN (SELECT vorgaenger_kalender_id FROM lehre.tbl_kalender WHERE vorgaenger_kalender_id IS NOT NULL)', null, false);
|
|
$this->_ci->KalenderModel->db->where_not_in('tbl_kalender.status_kurzbz', ['archived', 'deleted', 'to_delete']);
|
|
$this->_ci->KalenderModel->db->where_in('bk.betriebsmittel_id', $data->betriebsmittel_ids);
|
|
|
|
|
|
$result = $this->_ci->KalenderModel->loadWhere(array(
|
|
'von <' => $data->bis,
|
|
'bis >' => $data->von,
|
|
));
|
|
|
|
if (isError($result)) return [];
|
|
if (!hasData($result)) return [];
|
|
|
|
return array_map(function($row)
|
|
{
|
|
return [
|
|
'errorCode' => 'resource_collision',
|
|
'message' => $this->_ci->phraseslib->t('ui', 'resource_collision') . ': ' . $row->betriebsmittel_beschreibung . ' (' . date('d.m.Y H:i', strtotime($row->von)) . ' - ' . date('d.m.Y H:i', strtotime($row->bis)) . ')'
|
|
];
|
|
}, getData($result));
|
|
}
|
|
|
|
public function checkAll($kalender_ids)
|
|
{
|
|
if (empty($kalender_ids)) return [];
|
|
|
|
$this->_ci->KalenderModel->addSelect('DISTINCT ON (tbl_kalender.kalender_id) tbl_kalender.kalender_id');
|
|
$this->_ci->KalenderModel->addJoin('lehre.tbl_betriebsmittel_kalender current_bk', 'current_bk.eindeutige_kalender_gruppen_id = tbl_kalender.eindeutige_gruppen_id');
|
|
$this->_ci->KalenderModel->addJoin('lehre.tbl_betriebsmittel_kalender other_bk', 'other_bk.betriebsmittel_id = current_bk.betriebsmittel_id');
|
|
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender other_kalender', 'other_kalender.eindeutige_gruppen_id = other_bk.eindeutige_kalender_gruppen_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']);
|
|
$this->_ci->KalenderModel->db->where_in('tbl_kalender.kalender_id', $kalender_ids);
|
|
$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)) return [];
|
|
|
|
$grouped = [];
|
|
foreach (getData($result) as $row)
|
|
{
|
|
$grouped[$row->kalender_id][] = true;
|
|
}
|
|
|
|
return $grouped;
|
|
}
|
|
} |