mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-16 22:42:16 +00:00
Documents
This commit is contained in:
@@ -14,9 +14,12 @@ class Documents extends Auth_Controller
|
||||
{
|
||||
parent::__construct([
|
||||
'index' => ['student/anrechnung_beantragen:r','user:r'], // TODO(chris): permissions?
|
||||
'Semester' => ['student/anrechnung_beantragen:r','user:r'] // TODO(chris): permissions?
|
||||
'student' => ['admin:r'],
|
||||
'download' => ['student/anrechnung_beantragen:r','user:r'] // TODO(chris): permissions?
|
||||
]);
|
||||
|
||||
$this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
|
||||
|
||||
$this->loadPhrases([
|
||||
'global',
|
||||
'tools'
|
||||
@@ -27,121 +30,151 @@ class Documents extends Auth_Controller
|
||||
// Public methods
|
||||
|
||||
/**
|
||||
* @param string $stsem
|
||||
* @return void
|
||||
*/
|
||||
public function index($stsem = null)
|
||||
public function index()
|
||||
{
|
||||
return $this->Semester($stsem);
|
||||
return $this->showDocuments(getAuthUID());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $stsem
|
||||
* @param string $uid Administratoren dürfen die UID als Parameter übergeben um die Dokumente von anderen Personen anzuzeigen
|
||||
* @return void
|
||||
*/
|
||||
public function Semester($stsem = null)
|
||||
public function student($uid)
|
||||
{
|
||||
return $this->showDocuments($uid);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $uid
|
||||
* @return void
|
||||
*/
|
||||
protected function showDocuments($uid)
|
||||
{
|
||||
$this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
|
||||
$this->load->model('crm/Konto_model', 'KontoModel');
|
||||
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||
|
||||
$uid = getAuthUID();
|
||||
$studiengaenge = [];
|
||||
|
||||
$stati = $this->PrestudentstatusModel->loadWhereUid($uid, null, true);
|
||||
if (isError($stati))
|
||||
return $this->view->load('errors/html/error_db.php', [
|
||||
return $this->load->view('errors/html/error_db.php', [
|
||||
'heading' => 'Database Error',
|
||||
'message' => getError($stati)
|
||||
]);
|
||||
$stati = getData($stati);
|
||||
if (!$stati)
|
||||
return $this->view->load('errors/html/error_general.php', [
|
||||
return $this->load->view('errors/html/error_general.php', [
|
||||
'heading' => 'User ist kein Student',
|
||||
'message' => 'Es konnten keine Studiensemester gefunden werden in denen der User als Student inskripiert ist'
|
||||
]);
|
||||
|
||||
$stsemArray = [];
|
||||
$stgs = [];
|
||||
$buchungstypen = implode('\',\'', defined("CIS_DOKUMENTE_STUDIENBEITRAG_TYPEN") ? unserialize(CIS_DOKUMENTE_STUDIENBEITRAG_TYPEN) : []);
|
||||
$person_ids = [];
|
||||
foreach ($stati as $status) {
|
||||
if (!isset($studiengaenge[$status->studiengang_kz])) {
|
||||
$person_ids[] = $status->person_id;
|
||||
|
||||
if (!isset($stgs[$status->studiengang_kz])) {
|
||||
$stg = $this->StudiengangModel->load($status->studiengang_kz);
|
||||
if (isError($stg))
|
||||
return $this->view->load('errors/html/error_db.php', [
|
||||
return $this->load->view('errors/html/error_db.php', [
|
||||
'heading' => 'Database Error',
|
||||
'message' => getError($stg)
|
||||
]);
|
||||
$stg = getData($stg);
|
||||
if (!$stg)
|
||||
return $this->view->load('errors/html/error_db.php', [
|
||||
return $this->load->view('errors/html/error_db.php', [
|
||||
'heading' => 'Database Error',
|
||||
'message' => 'No Studiengang found for studiengang_kz ' . $status->studiengang_kz
|
||||
]);
|
||||
$studiengaenge[$status->studiengang_kz] = current($stg);
|
||||
$stgs[$status->studiengang_kz] = current($stg);
|
||||
$stgs[$status->studiengang_kz]->studiensemester = [];
|
||||
}
|
||||
if (!isset($stsemArray[$status->studiensemester_kurzbz]))
|
||||
$stsemArray[$status->studiensemester_kurzbz] = [];
|
||||
// TODO(chris): maybe just use prestudent_id?
|
||||
$stsemArray[$status->studiensemester_kurzbz][] = $status;
|
||||
}
|
||||
|
||||
$hasSemester = true;
|
||||
$inskriptionsbestaetigungen = [];
|
||||
|
||||
if ($stsem && !isset($stsemArray[$stsem])) {
|
||||
$hasSemester = false;
|
||||
} else {
|
||||
if (!$stsem)
|
||||
$stsem = end($stsemArray);
|
||||
|
||||
#$stsemArray[$stsem] = array_unique($stsemArray[$stsem]);
|
||||
|
||||
$buchungstypen = implode('\',\'', defined("CIS_DOKUMENTE_STUDIENBEITRAG_TYPEN") ? unserialize(CIS_DOKUMENTE_STUDIENBEITRAG_TYPEN) : []);
|
||||
|
||||
foreach ($stsemArray[$stsem] as $status) {
|
||||
// NOTE(chris): multiple prestudentstatus for prestudent and semester
|
||||
if (isset($inskriptionsbestaetigungen[$status->studiengang_kz]))
|
||||
continue;
|
||||
|
||||
$inskriptionsbestaetigungen[$status->studiengang_kz] = (boolean) getData($this->KontoModel->checkStudienbeitragFromPrestudent($status->prestudent_id, $stsem, $buchungstypen));
|
||||
if (!isset($stgs[$status->studiengang_kz]->studiensemester[$status->studiensemester_kurzbz])) {
|
||||
$stgs[$status->studiengang_kz]->studiensemester[$status->studiensemester_kurzbz] = new stdClass();
|
||||
$stgs[$status->studiengang_kz]->studiensemester[$status->studiensemester_kurzbz]->inskriptionsbestaetigung = (boolean) getData($this->KontoModel->checkStudienbeitragFromPrestudent($status->prestudent_id, $status->studiensemester_kurzbz, $buchungstypen));
|
||||
}
|
||||
}
|
||||
$person_ids = array_unique($person_ids);
|
||||
|
||||
$selfservice = null;
|
||||
if (!defined('CIS_DOKUMENTE_SELFSERVICE') || CIS_DOKUMENTE_SELFSERVICE) {
|
||||
$this->load->model('crm/Akte_model', 'AkteModel');
|
||||
$result = $this->AkteModel->getArchiv(getAuthPersonId(), null, true);
|
||||
if (isError($result))
|
||||
return $this->view->load('errors/html/error_db.php', [
|
||||
'heading' => 'Database Error',
|
||||
'message' => getError($result)
|
||||
]);
|
||||
$selfservice = getData($result) ?: [];
|
||||
$selfservice = [];
|
||||
foreach ($person_ids as $person_id) {
|
||||
$result = $this->AkteModel->getArchiv($person_id, null, true);
|
||||
if (isError($result))
|
||||
return $this->load->view('errors/html/error_db.php', [
|
||||
'heading' => 'Database Error',
|
||||
'message' => getError($result)
|
||||
]);
|
||||
$selfservice = array_merge($selfservice, getData($result) ?: []);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// TODO(chris): in array stsem stsemArray:
|
||||
// TODO(chris): - inskriptionsbestaetigung (konto)
|
||||
// TODO(chris): - CIS_DOKUMENTE_STUDIENBUCHLBATT_DRUCKEN? studienbuchblatt
|
||||
// TODO(chris): - CIS_DOKUMENTE_STUDIENERFOLGSBESTAETIGUNG_DRUCKEN? studienerfolgsbestaetigung
|
||||
// TODO(chris): else: msg
|
||||
|
||||
// TODO(chris): CIS_DOKUMENTE_SELFSERVICE?: ...abschlussdokumente (akte)
|
||||
|
||||
$stsemArray = array_keys($stsemArray);
|
||||
if (!$hasSemester)
|
||||
array_unshift($stsemArray, $stsem);
|
||||
|
||||
$this->load->view('Cis/Documents', [
|
||||
'stgs' => $stgs,
|
||||
'uid' => $uid,
|
||||
'stsem' => $stsem,
|
||||
'stsemArray' => $stsemArray,
|
||||
'hasSemester' => $hasSemester,
|
||||
'studiengaenge' => $studiengaenge,
|
||||
'inskriptionsbestaetigungen' => $inskriptionsbestaetigungen,
|
||||
'studienbuchblatt' => defined('CIS_DOKUMENTE_STUDIENBUCHLBATT_DRUCKEN') && CIS_DOKUMENTE_STUDIENBUCHLBATT_DRUCKEN,
|
||||
'studienerfolgsbestaetigung' => defined('CIS_DOKUMENTE_STUDIENERFOLGSBESTAETIGUNG_DRUCKEN') && CIS_DOKUMENTE_STUDIENERFOLGSBESTAETIGUNG_DRUCKEN,
|
||||
'selfservice' => $selfservice
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param integer $akte_id
|
||||
* @param string $uid (optional) Administratoren dürfen die UID als Parameter übergeben um die Dokumente von anderen Personen anzuzeigen
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function download($akte_id, $uid = null)
|
||||
{
|
||||
if (!is_numeric($akte_id))
|
||||
return show_404();
|
||||
|
||||
$this->load->model('crm/Akte_model', 'AkteModel');
|
||||
$result = $this->AkteModel->load($akte_id);
|
||||
if (isError($result))
|
||||
return show_error(getError($result));
|
||||
$akte = getData($result);
|
||||
if (!$akte)
|
||||
return show_404();
|
||||
$akte = current($akte);
|
||||
|
||||
$admin_access = false;
|
||||
if ($uid !== null && $this->permissionlib->isBerechtigt('admin')) {
|
||||
$stati = $this->PrestudentstatusModel->loadWhereUid($uid, null, true);
|
||||
if (hasData($stati)) {
|
||||
$person_ids = array_map(function ($status) {
|
||||
return $status->person_id;
|
||||
}, getData($stati));
|
||||
$person_ids = array_unique($person_ids);
|
||||
if (count($person_ids) == 1 && current($person_ids) == $akte->person_id) {
|
||||
$admin_access = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!$admin_access && ($akte->person_id != getAuthPersonId() || !$akte->stud_selfservice))
|
||||
return show_error('Forbidden', 403);
|
||||
|
||||
// NOTE(chris): Log bei einem Download vom Becheid
|
||||
if (isset($akte->dokument_kurzbz) && ($akte->dokument_kurzbz === 'Bescheid' || $akte->dokument_kurzbz === 'BescheidEng')) {
|
||||
$this->load->model('system/Webservicelog_model', 'WebservicelogModel');
|
||||
$this->WebservicelogModel->insert([
|
||||
'webservicetyp_kurzbz' => 'content',
|
||||
'request_id' => (isset($akte->akte_id) && !empty($akte->akte_id)) ? $akte->akte_id : NULL,
|
||||
'beschreibung' => 'Bescheidbestaetigungsdownload',
|
||||
'request_data' => $_SERVER['QUERY_STRING'],
|
||||
'execute_time' => date('c'),
|
||||
'execute_user' => getAuthUID()
|
||||
]);
|
||||
}
|
||||
|
||||
$this->output->set_content_type($akte->mimetype);
|
||||
$this->output->set_output(base64_decode($akte->inhalt));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user