Compare commits

..

2 Commits

Author SHA1 Message Date
ma0068 9b4fa132dc add status 2026-03-06 10:58:54 +01:00
Harald Bamberger daf332a102 add query_studiensemester_kurzbz to result of fetchStudents, fetchPrestudents and search 2026-03-06 10:39:37 +01:00
197 changed files with 2428 additions and 8593 deletions
@@ -1,36 +0,0 @@
<?php
$filterCmptArray = array(
"app" => 'core',
'datasetName' => 'vertragsverwaltung',
'query' => '
SELECT
uid,
person_id,
vorname,
nachname,
gebdatum,
vertragsarten,
unternehmen,
ids,
aktiv
FROM
(
SELECT
b.uid , p.person_id,
p.vorname, p.nachname,
gebdatum,
STRING_AGG(DISTINCT va.bezeichnung, \', \') AS Vertragsarten,
STRING_AGG(DISTINCT u.bezeichnung, \', \') AS Unternehmen,
STRING_AGG(d.dienstverhaeltnis_id::TEXT, \', \') AS ids,
b.aktiv
FROM
hr.tbl_dienstverhaeltnis d
JOIN public.tbl_benutzer b ON d.mitarbeiter_uid = b.uid
JOIN public.tbl_person p ON p.person_id = b.person_id
JOIN public.tbl_organisationseinheit u ON d.oe_kurzbz = u.oe_kurzbz
JOIN hr.tbl_vertragsart va ON d.vertragsart_kurzbz = va.vertragsart_kurzbz
GROUP BY b.uid, p.person_id, p.vorname, p.nachname, b.aktiv
) as vertragsdaten
',
'requiredPermissions' => 'vertrag/mitarbeiter'
);
-19
View File
@@ -163,13 +163,6 @@ $config['navigation_header'] = array(
'expand' => true,
'sort' => 50,
'requiredPermissions' => 'lehre/gruppenmanager:r'
),
'vertragsverwaltung' => array(
'link' => site_url('vertragsverwaltung'),
'description' => 'Vertragsverwaltung',
'expand' => true,
'sort' => 51,
'requiredPermissions' => 'vertrag/mitarbeiter:r'
)
)
),
@@ -342,18 +335,6 @@ $config['navigation_menu']['system/issues/Issues/*'] = array(
'target' => '_blank',
'requiredPermissions' => array('admin:rw')
),
);
$config['navigation_menu']['vertragsverwaltung/*'] = array(
'vertragsverwaltung' => array(
'link' => site_url('vertragsverwaltung'),
'description' => 'Vertragsverwaltung',
'icon' => 'home',
'sort' => 100,
'target' => '_blank',
'requiredPermissions' => array('vertrag/mitarbeiter:r')
)
);
$config['navigation_menu']['apps'] = [
-13
View File
@@ -130,16 +130,3 @@ $config['students_tab_order'] = [
'combinePeople',
'archive',
];
$config['stv_prestudent_tags'] = [
'prioone' => ['readonly' => false],
'priotwo' => ['readonly' => true],
'hinweis' => ['readonly' => false],
'hinweis_assistenz' => ['readonly' => true],
'hinweis_kf' => ['readonly' => true],
'hinweis_lehrende' => ['readonly' => false],
'hinweis_stg_kf' => ['readonly' => true],
'finished_stg' => ['readonly' => true],
'finished_kf' => ['readonly' => true],
'inwork_kf' => ['readonly' => true],
];
+5
View File
@@ -33,4 +33,9 @@ class MyLv extends Auth_Controller
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'MyLv']);
}
public function Info($studien_semester,$lvid)
{
$this->load->view('Cis/LvInfo',['lvid'=> $lvid, 'studien_semester' => $studien_semester]);
}
}
@@ -28,7 +28,7 @@ class Studentenverwaltung extends Auth_Controller
'basis/prestudentstatus' => $this->permissionlib->isBerechtigt('basis/prestudentstatus'),
'assistenz_stgs' => $this->permissionlib->getSTG_isEntitledFor('assistenz'),
'admin' => $this->permissionlib->isBerechtigt('admin'),
'assistenz_schreibrechte' => $this->permissionlib->isBerechtigt('assistenz', 'suid'),
'assistenz_schreibrechte' => $this->permissionlib->isBerechtigt('assistenz','suid'),
'student/keine_studstatuspruefung' => $this->permissionlib->isBerechtigt('student/keine_studstatuspruefung'),
'lehre/reihungstestAufsicht' => $this->permissionlib->isBerechtigt('lehre/reihungstestAufsicht'),
'system/change_outputformat' => $this->permissionlib->getOE_isEntitledFor('system/change_outputformat'),
@@ -43,5 +43,3 @@ class Studentenverwaltung extends Auth_Controller
]);
}
}
@@ -1,30 +0,0 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
class Vertragsverwaltung extends Auth_Controller
{
public function __construct()
{
$permissions = [];
$router = load_class('Router');
$permissions[$router->method] = ['vertrag/mitarbeiter:r'];
#$permissions[$router->method] = ['admin:rw'];
parent::__construct($permissions);
// Load Libraries
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
}
/**
* @return void
*/
public function _remap()
{
$this->load->view('Vertragsverwaltung', [
'permissions' => [
'vertragsverwaltung_schreibrechte' => $this->permissionlib->isBerechtigt('vertrag/mitarbeiter', 'suid')
]
]);
}
}
@@ -1,53 +0,0 @@
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
use \DateTime as DateTime;
class Detailheader extends FHCAPI_Controller
{
public function __construct()
{
parent::__construct([
'getHeader' => ['vertrag/mitarbeiter:r'],
'getPersonAbteilung' => ['vertrag/mitarbeiter:r'],
'getLeitungOrg' => ['vertrag/mitarbeiter:r'],
]);
}
public function getHeader($person_id)
{
$this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel');
$result = $this->Mitarbeitermodel->getHeader($person_id);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess(current($data));
}
public function getPersonAbteilung($mitarbeiter_uid)
{
$this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel');
$result = $this->Mitarbeitermodel->getPersonAbteilung($mitarbeiter_uid);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess(current($data));
}
public function getLeitungOrg($oekurzbz)
{
$this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel');
$result = $this->Mitarbeitermodel->getLeitungOrg($oekurzbz);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess(current($data));
}
}
@@ -1,237 +0,0 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
use \DateTime as DateTime;
class Foto extends FHCAPI_Controller
{
public function __construct()
{
parent::__construct([
'uploadFoto' => ['admin:r', 'assistenz:r'],
'deleteFoto' => ['admin:r', 'assistenz:r'],
]);
//Load Models and Libraries
$this->load->model('person/Person_model', 'PersonModel');
$this->load->model("crm/Akte_model", "AkteModel");
$this->load->model('person/Fotostatusperson_model', 'FotostatusPersonModel');
$this->loadPhrases([
'ui',
'header'
]);
}
public function uploadFoto($person_id)
{
if(!$person_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person_id']), self::ERROR_TYPE_GENERAL);
}
$data = json_decode(file_get_contents("php://input"), true);
if (!empty($data['image']))
{
$base64 = $data['image'];
$resizedImage1 = $this->_resize($base64, 827, 1063);
if (is_null($resizedImage1))
return $this->terminateWithError($this->p->t('header', 'error_fotoupload'), self::ERROR_TYPE_GENERAL);
$akte = $this->AkteModel->loadWhere(array('person_id' => $person_id, 'dokument_kurzbz' => 'Lichtbil'));
$akteUpdateData = array(
'dokument_kurzbz' => 'Lichtbil',
'person_id' => $person_id,
'inhalt' => $resizedImage1,
'mimetype' => 'image/jpg',
'erstelltam' => date('c'),
'gedruckt' => false,
'titel' => 'Lichtbild_' . $person_id . '.jpg',
'bezeichnung' => 'Lichtbild gross',
'insertamum' => date('c'),
'insertvon' => getAuthUID(),
);
if (hasData($akte)) {
$akte_id = getData($akte)[0]->akte_id;
$akteUpdateData['updateamum'] = date('c');
$akteUpdateData['updatevon'] = getAuthUID();
$akteResult = $this->AkteModel->update(array('akte_id' => $akte_id), $akteUpdateData);
} else {
$akteResult = $this->AkteModel->insert($akteUpdateData);
}
if (isError($akteResult)) {
return $this->terminateWithError(getError($akteResult), self::ERROR_TYPE_GENERAL);
}
$resizedImage2 = $this->_resize($base64, 101, 130);
if (is_null($resizedImage2))
return $this->terminateWithError($this->p->t('header', 'error_fotoupload'), self::ERROR_TYPE_GENERAL);
$result = $this->_updateFoto($person_id, $resizedImage2);
if (!isError($result)) {
$this->FotostatusPersonModel->insert(array(
'person_id' => $person_id,
'fotostatus_kurzbz' => 'hochgeladen',
'datum' => date('Y-m-d'),
'updateamum' => date('c'),
'updatevon' => getAuthUID(),
'insertamum' => date('c'),
'insertvon' => getAuthUID(),
));
return $this->terminateWithSuccess($base64);
}
}
else
{
$this->terminateWithError($this->p->t('header', 'error_noPhoto'), self::ERROR_TYPE_GENERAL);
}
}
public function deleteFoto($person_id)
{
if(!$person_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person_id']), self::ERROR_TYPE_GENERAL);
}
$result = $this->_deleteFoto($person_id);
if (isError($result))
{
return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
}
return $this->terminateWithSuccess($result);
}
private function _resize($imageData, $maxwidth, $maxheight, $quality = 90)
{
$meta = getimagesize($imageData);
if (!$meta)
{
return null;
}
$src_width = $meta[0];
$src_height = $meta[1];
$mime = $meta['mime'];
switch ($mime) {
case 'image/jpeg':
case 'image/jpg':
$imagecreated = imagecreatefromjpeg($imageData);
break;
case 'image/png':
$imagecreated = imagecreatefrompng($imageData);
break;
case 'image/gif':
$imagecreated = imagecreatefromgif($imageData);
break;
default:
return null;
}
if (!$imagecreated)
{
return null;
}
$src_aspect_ratio = $src_width / $src_height;
$thu_aspect_ratio = $maxwidth / $maxheight;
if ($src_width <= $maxwidth && $src_height <= $maxheight)
{
$thu_width = $src_width;
$thu_height = $src_height;
}
elseif ($thu_aspect_ratio > $src_aspect_ratio)
{
$thu_width = (int) ($maxheight * $src_aspect_ratio);
$thu_height = $maxheight;
}
else
{
$thu_width = $maxwidth;
$thu_height = (int) ($maxwidth / $src_aspect_ratio);
}
$imageScaled = imagecreatetruecolor($thu_width, $thu_height);
if ($mime === 'image/png')
{
$background = imagecolorallocate($imageScaled , 0, 0, 0);
imagecolortransparent($imageScaled, $background);
imagealphablending($imageScaled, false);
imagesavealpha($imageScaled, true);
}
imagecopyresampled($imageScaled, $imagecreated, 0, 0, 0, 0, $thu_width, $thu_height, $src_width, $src_height);
if ($mime === "image/gif")
{
$background = imagecolorallocate($imageScaled, 0, 0, 0);
imagecolortransparent($imageScaled, $background);
}
if (!empty($imageScaled))
{
ob_start();
if ($mime == 'image/png')
imagepng($imageScaled, NULL);
else if ($mime === 'image/gif')
imagegif($imageScaled, NULL);
else
imagejpeg($imageScaled, NULL, $quality);
$resizedImageData = ob_get_contents();
ob_end_clean();
@imagedestroy($imagecreated);
@imagedestroy($imageScaled);
if (!empty($resizedImageData))
{
return base64_encode($resizedImageData);
}
return null;
}
return null;
}
private function _updateFoto($person_id, $foto)
{
$personJson['foto'] = $foto;
$result = $this->PersonModel->update($person_id, $personJson);
if (isError($result))
{
return error($result->msg, EXIT_ERROR);
}
return $result;
}
private function _deleteFoto($person_id)
{
$personJson['foto'] = null;
$result = $this->PersonModel->update($person_id, $personJson);
if (isError($result))
{
return error($result->msg, EXIT_ERROR);
}
return $result;
}
}
@@ -1,44 +0,0 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
use \DateTime as DateTime;
class NotizAnrechnung extends Notiz_Controller
{
public function __construct()
{
parent::__construct([
'isBerechtigt' => ['admin:r', 'assistenz:r'],
]);
//Load Models
$this->load->model('person/Notiz_model', 'NotizModel');
$this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel');
// Load Libraries
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
// Load language phrases
$this->loadPhrases([
'ui'
]);
}
public function isBerechtigt($id, $typeId)
{
if($typeId != "anrechnung_id")
{
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
}
//TODO define permission
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
{
$result = $this->p->t('lehre','error_keineSchreibrechte');
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
}
}
@@ -1,43 +0,0 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
use \DateTime as DateTime;
class NotizBestellung extends Notiz_Controller
{
public function __construct()
{
parent::__construct([
'isBerechtigt' => ['admin:r', 'assistenz:r'],
]);
//Load Models
$this->load->model('person/Notiz_model', 'NotizModel');
$this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel');
// Load Libraries
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
// Load language phrases
$this->loadPhrases([
'ui'
]);
}
public function isBerechtigt($id, $typeId)
{
if($typeId != "bestellung_id")
{
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
}
//TODO define permission
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
{
$result = $this->p->t('lehre','error_keineSchreibrechte');
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
}
}
@@ -17,106 +17,5 @@ class NotizLehreinheit extends Notiz_Controller
'getMitarbeiter' => ['admin:r', 'assistenz:r'],
'isBerechtigt' => ['admin:r', 'assistenz:r'],
]);
//Load Models
$this->load->model('person/Notiz_model', 'NotizModel');
$this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel');
$this->load->model('education/Lehreinheit_model', 'LehreinheitModel');
// Load Libraries
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
//Permission checks for allowed Oes
$allowedOes = $this->permissionlib->getOE_isEntitledFor('assistenz') ?: [];
if ($this->router->method == 'addNewNotiz')
{
$json = $this->input->post('data');
$post_data = json_decode($json, true);
$lehreinheit_id = $post_data['id'];
if(!$lehreinheit_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Lehreinheit ID']), self::ERROR_TYPE_GENERAL);
}
$this->_checkAllowedOesFromLehreinheit($lehreinheit_id, $allowedOes);
}
if ($this->router->method == 'updateNotiz')
{
$json = $this->input->post('data');
$post_data = json_decode($json, true);
$notiz_id = $post_data['notiz_id'];
if(!$notiz_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL);
}
//get lehreinheit_id
$result = $this->NotizzuordnungModel->loadWhere(['notiz_id' => $notiz_id]);
$data = $this->getDataOrTerminateWithError($result);
$lehreinheit_id = current($data)->lehreinheit_id;
if(!$lehreinheit_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Lehreinheit ID']), self::ERROR_TYPE_GENERAL);
}
$this->_checkAllowedOesFromLehreinheit($lehreinheit_id, $allowedOes);
}
if ($this->router->method == 'deleteNotiz')
{
$notiz_id = $this->input->post('notiz_id');
$lehreinheit_id = $this->input->post('id');
if(!$notiz_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL);
}
if(!$lehreinheit_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Lehreinheit ID']), self::ERROR_TYPE_GENERAL);
}
$this->_checkAllowedOesFromLehreinheit($lehreinheit_id, $allowedOes);
}
// Load language phrases
$this->loadPhrases([
'ui'
]);
}
private function _checkAllowedOesFromLehreinheit($lehreinheit_id, $allowedOes)
{
//get oe from lehreinheit
$result = $this->LehreinheitModel->getOes($lehreinheit_id);
$data = $this->getDataOrTerminateWithError($result);
$oes = current($data);
if (!in_array($oes, $allowedOes))
{
return $this->terminateWithError($this->p->t('ui', 'error_keineBerechtigungStg') . " " . $oes, self::ERROR_TYPE_GENERAL);
}
}
public function isBerechtigt($id, $typeId)
{
if($typeId != "lehreinheit_id")
{
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
}
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
{
$result = $this->p->t('lehre','error_keineSchreibrechte');
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
}
}
}
@@ -1,44 +0,0 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
use \DateTime as DateTime;
class NotizMitarbeiter extends Notiz_Controller
{
public function __construct()
{
parent::__construct([
'isBerechtigt' => ['admin:r', 'assistenz:r'],
]);
//Load Models
$this->load->model('person/Notiz_model', 'NotizModel');
$this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel');
// Load Libraries
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
// Load language phrases
$this->loadPhrases([
'ui'
]);
}
public function isBerechtigt($id, $typeId)
{
if($typeId != "mitarbeiter_uid")
{
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
}
//TODO define permission
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
{
$result = $this->p->t('lehre','error_keineSchreibrechte');
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
}
}
@@ -20,100 +20,33 @@ class NotizPerson extends Notiz_Controller
'isBerechtigt' => ['admin:r', 'assistenz:r'],
'getCountNotes' => ['admin:r', 'assistenz:r'],
]);
//Load Models
$this->load->model('person/Benutzer_model', 'BenutzerModel');
$this->load->model('crm/Student_model', 'StudentModel');
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
//Permission checks for allowed Oes
if ($this->router->method == 'addNewNotiz')
{
$json = $this->input->post('data');
$post_data = json_decode($json, true);
$person_id = $post_data['id'];
$allowedStgs = $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: [];
if(!$person_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person ID']), self::ERROR_TYPE_GENERAL);
}
$this->_checkIfBerechtigungForOnePrestudentExists($person_id, $allowedStgs);
}
if ( $this->router->method == 'updateNotiz')
{
$json = $this->input->post('data');
$post_data = json_decode($json, true);
$notiz_id = $post_data['notiz_id'];
if(!$notiz_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL);
}
//get person_id
$result = $this->NotizzuordnungModel->loadWhere(['notiz_id' => $notiz_id]);
$data = $this->getDataOrTerminateWithError($result);
$person_id = current($data)->person_id;
$allowedStgs = $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: [];
$this->_checkIfBerechtigungForOnePrestudentExists($person_id, $allowedStgs);
}
if ($this->router->method == 'deleteNotiz' )
{
$notiz_id = $this->input->post('notiz_id');
$person_id = $this->input->post('id');
if(!$notiz_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL);
}
if(!$person_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'person ID']), self::ERROR_TYPE_GENERAL);
}
$allowedStgs = $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: [];
$this->_checkIfBerechtigungForOnePrestudentExists($person_id, $allowedStgs);
}
}
public function isBerechtigt($id, $typeId)
{
if($typeId != "person_id")
{
$this->terminateWithError($this->p->t('ui', 'error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
return $this->terminateWithError($this->p->t('ui', 'error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
}
//TODO define permission
if (!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
{
$result = $this->p->t('lehre', 'error_keineSchreibrechte');
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
return $this->outputJsonSuccess(true);
}
//stv: if person has permission of one studiengang of person -> permission to add/update/delete Note
private function _checkIfBerechtigungForOnePrestudentExists($person_id, $allowedStgs)
public function loadDokumente()
{
$result = $this->PrestudentModel->loadWhere(['person_id' => $person_id]);
$data = $this->getDataOrTerminateWithError($result);
$notiz_id = $this->input->post('notiz_id');
$checkarray = [];
foreach ($data as $item)
{
if(in_array($item->studiengang_kz, $allowedStgs))
{
return true;
}
}
$this->terminateWithError($this->p->t('ui', 'error_keineBerechtigungStg'), self::ERROR_TYPE_GENERAL);
// TODO(chris): make CI variant of endpoint
$this->NotizModel->addSelect($this->NotizModel->escape(base_url('content/notizdokdownload.php?id=')) . ' || campus.tbl_dms_version.dms_id AS preview');
return parent::loadDokumente();
}
}
}
@@ -1,117 +0,0 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
use \DateTime as DateTime;
class NotizPrestudent extends Notiz_Controller
{
public function __construct()
{
parent::__construct([
'isBerechtigt' => ['admin:r', 'assistenz:r'],
]);
//Load Models
$this->load->model('person/Notiz_model', 'NotizModel');
$this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel');
$this->load->model('crm/Student_model', 'StudentModel');
// Load Libraries
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
// Load language phrases
$this->loadPhrases([
'ui'
]);
//Permission checks for Studiengangsarray
$allowedStgs = $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: [];
if ($this->router->method == 'addNewNotiz')
{
$json = $this->input->post('data');
$post_data = json_decode($json, true);
$prestudent_id = $post_data['id'];
if(!$prestudent_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Lehreinheit ID']), self::ERROR_TYPE_GENERAL);
}
$this->_checkAllowedOesFromPrestudent($prestudent_id, $allowedStgs);
}
if ($this->router->method == 'updateNotiz')
{
$json = $this->input->post('data');
$post_data = json_decode($json, true);
$notiz_id = $post_data['notiz_id'];
if(!$notiz_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL);
}
//get prestudent_id
$result = $this->NotizzuordnungModel->loadWhere(['notiz_id' => $notiz_id]);
$data = $this->getDataOrTerminateWithError($result);
$prestudent_id = current($data)->prestudent_id;
if(!$prestudent_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Prestudent ID']), self::ERROR_TYPE_GENERAL);
}
$this->_checkAllowedOesFromPrestudent($prestudent_id, $allowedStgs);
}
if ($this->router->method == 'deleteNotiz')
{
$notiz_id = $this->input->post('notiz_id');
$prestudent_id = $this->input->post('id');
if(!$notiz_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL);
}
if(!$prestudent_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Prestudent ID']), self::ERROR_TYPE_GENERAL);
}
$this->_checkAllowedOesFromPrestudent($prestudent_id, $allowedStgs);
}
}
public function isBerechtigt($id, $typeId)
{
if($typeId != "prestudent_id")
{
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
}
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
{
$result = $this->p->t('lehre','error_keineSchreibrechte');
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
}
private function _checkAllowedOesFromPrestudent($prestudent_id, $allowedStgs)
{
$student_uid = $this->StudentModel->getUID($prestudent_id);
$result = $this->StudentModel->loadWhere(['student_uid' => $student_uid]);
$data = $this->getDataOrTerminateWithError($result);
$studiengang_kz = current($data)->studiengang_kz;
if (!in_array($studiengang_kz, $allowedStgs))
{
return $this->terminateWithError($this->p->t('ui', 'error_keineBerechtigungStg'), self::ERROR_TYPE_GENERAL);
}
}
}
@@ -1,32 +0,0 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
use \DateTime as DateTime;
class NotizProjekt extends Notiz_Controller
{
public function __construct()
{
parent::__construct([
'isBerechtigt' => ['admin:r', 'assistenz:r'],
]);
}
public function isBerechtigt($id, $typeId)
{
if($typeId != "projekt_kurzbz")
{
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
}
//TODO define permission
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
{
$result = $this->p->t('lehre','error_keineSchreibrechte');
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
}
}
@@ -1,32 +0,0 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
use \DateTime as DateTime;
class NotizProjektphase extends Notiz_Controller
{
public function __construct()
{
parent::__construct([
'isBerechtigt' => ['admin:r', 'assistenz:r'],
]);
}
public function isBerechtigt($id, $typeId)
{
if($typeId != "projektphase_id")
{
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
}
//TODO define permission
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
{
$result = $this->p->t('lehre','error_keineSchreibrechte');
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
}
}
@@ -1,32 +0,0 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
use \DateTime as DateTime;
class NotizProjekttask extends Notiz_Controller
{
public function __construct()
{
parent::__construct([
'isBerechtigt' => ['admin:r', 'assistenz:r'],
]);
}
public function isBerechtigt($id, $typeId)
{
if($typeId != "projekttask_id")
{
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
}
//TODO define permission
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
{
$result = $this->p->t('lehre','error_keineSchreibrechte');
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
}
}
@@ -36,44 +36,15 @@ class Aufnahmetermine extends FHCAPI_Controller
// Load models
$this->load->model('crm/Reihungstest_model', 'ReihungstestModel');
$this->load->model('crm/RtPerson_model', 'RtPersonModel');
$this->load->model('organisation/Studienplan_model', 'StudienplanModel');
$this->load->model('organisation/Studienordnung_model', 'StudienordnungModel');
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
}
public function getAufnahmetermine($person_id)
{
$result = $this->ReihungstestModel->getReihungstestPerson($person_id);
$arrayRt = $this->getDataOrTerminateWithError($result);
foreach ($arrayRt as $item) {
//Studienplan
$result = $this->StudienplanModel->loadWhere([
'studienplan_id' => $item->studienplan_id
]);
$data = $this->getDataOrTerminateWithError($result);
$studienordnung_id_ber = current($data)->studienordnung_id;
$data = $this->getDataOrTerminateWithError($result);
//Studienordnung
$result = $this->StudienordnungModel->loadWhere([
'studienordnung_id' => $studienordnung_id_ber
]);
$data = $this->getDataOrTerminateWithError($result);
$studiengang_kz_ber = current($data)->studiengang_kz;
//Studiengang von studiengang_kz_ber
$result = $this->StudiengangModel->load($studiengang_kz_ber);
$data = $this->getDataOrTerminateWithError($result);
$studiengangkurzbzlang_ber = current($data)->kurzbzlang;
$typ_ber = current($data)->typ;
//add to Array
$item->studiengang_kz_ber = $studiengang_kz_ber;
$item->studiengangkurzbzlang_ber = $studiengangkurzbzlang_ber;
$item->studiengangtyp_ber = $typ_ber;
}
$this->terminateWithSuccess($arrayRt);
$this->terminateWithSuccess($data);
}
public function insertAufnahmetermin()
@@ -89,6 +60,7 @@ class Aufnahmetermine extends FHCAPI_Controller
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person ID']), self::ERROR_TYPE_GENERAL);
}
$rt_id = (isset($formData['rt_id']) && !empty($formData['rt_id'])) ? $formData['rt_id'] : null;
$anmeldedatum = (isset($formData['anmeldedatum']) && !empty($formData['anmeldedatum'])) ? $formData['anmeldedatum'] : null;
$teilgenommen = (isset($formData['teilgenommen']) && !empty($formData['teilgenommen'])) ? $formData['teilgenommen'] : false;
@@ -252,11 +224,7 @@ class Aufnahmetermine extends FHCAPI_Controller
)
);
//check if existing placementtest
if(!hasData($result))
$this->terminateWithSuccess([]);
else
$data = getData($result);
$data = $this->getDataOrTerminateWithError($result);
$studienplan_arr = [];
$include_ids = [];
@@ -265,18 +233,12 @@ class Aufnahmetermine extends FHCAPI_Controller
if($item->studienplan_id != null)
$studienplan_arr[] = $item->studienplan_id;
}
if(!hasData($studienplan_arr))
$this->terminateWithSuccess([]);
//get Placementtests Person
$person_id = $this->_getPersonId($prestudent_id);
$resultRt = $this->ReihungstestModel->getReihungstestPerson($person_id);
//check if existing placementtest
if(!hasData($result))
$this->terminateWithSuccess([]);
else
$dataRt = getData($resultRt);
$dataRt = $this->getDataOrTerminateWithError($resultRt);
foreach ($dataRt as $item)
{
@@ -392,7 +354,6 @@ class Aufnahmetermine extends FHCAPI_Controller
$person_id = $this->input->get('person_id');
$punkte = $this->input->get('punkte');
$reihungstest_id = $this->input->get('reihungstest_id');
$has_excluded_gebiete = $this->input->get('hasExcludedAreas');
if(!$reihungstest_id)
{
@@ -403,27 +364,22 @@ class Aufnahmetermine extends FHCAPI_Controller
$studiengang_kz = $this->input->get('studiengang_kz');
$this->load->model('testtool/Ablauf_model', 'AblaufModel');
$result = $this->AblaufModel->getAblaufGebieteAndGewichte($studiengang_kz, 1);
$result = $this->AblaufModel->getAblaufGebieteAndGewichte($studiengang_kz);
$data = $this->getDataOrTerminateWithError($result);
$weightedArray = [];
$basis_gebiet_id_arr = [];
$basis_gebiet_id_toString = '';
foreach ($data as $abl)
{
$weightedArray[$abl->gebiet_id] = $abl->gewicht;
$basis_gebiet_id_arr[]= $abl->gebiet_id;
}
$basis_gebiet_id_toString = implode(', ', $basis_gebiet_id_arr);
$result = $this->ReihungstestModel->getReihungstestErgebnisPerson(
$person_id,
$punkte,
$reihungstest_id,
$weightedArray,
$has_excluded_gebiete,
$basis_gebiet_id_toString
);
$result = $this->ReihungstestModel->getReihungstestErgebnisPerson($person_id, $punkte, $reihungstest_id, $weightedArray);
/* if (isError($result))
{
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}*/
$this->terminateWithSuccess($result);
}
@@ -200,8 +200,7 @@ class Config extends FHCAPI_Controller
'type' => 'select',
'values' => $buchungstyp_kurzbz_plus_all,
'value_key' => 'buchungstyp_kurzbz',
'label_key' => 'beschreibung',
'default' => 'all'
'label_key' => 'beschreibung'
],
'samestg' => [
'type' => 'bool',
@@ -227,8 +226,7 @@ class Config extends FHCAPI_Controller
'type' => 'select',
'values' => $buchungstyp_kurzbz_plus_all,
'value_key' => 'buchungstyp_kurzbz',
'label_key' => 'beschreibung',
'default' => 'all'
'label_key' => 'beschreibung'
],
'samestg' => [
'type' => 'bool',
@@ -753,10 +753,6 @@ class Dokumente extends FHCAPI_Controller
);
$data = $this->getDataOrTerminateWithError($result);
if(!(is_array($data) && count($data) > 0))
{
return null;
}
$student = current($data);
return $student->student_uid;
@@ -108,10 +108,6 @@ class Student extends FHCAPI_Controller
$this->PrestudentModel->addSelect('p.matr_nr');
$this->PrestudentModel->addSelect('p.anrede');
$this->PrestudentModel->addSelect('p.zugangscode');
if($this->permissionlib->isBerechtigt('student/bpk'))
{
$this->PrestudentModel->addSelect('p.bpk');
}
if (defined('ACTIVE_ADDONS') && strpos(ACTIVE_ADDONS, 'bewerbung') !== false) {
$this->PrestudentModel->addSelect(
@@ -468,6 +468,8 @@ class Students extends FHCAPI_Controller
$this->PrestudentModel->addSelect("'' AS verband");
$this->PrestudentModel->addSelect("'' AS gruppe");
$this->addSelectPrioRel();
$query_studiensemester_kurzbz = $studiensemester_kurzbz ? $this->PrestudentModel->escape($studiensemester_kurzbz) : '\'NULL\'';
$this->PrestudentModel->addSelect($query_studiensemester_kurzbz . ' as query_studiensemester_kurzbz');
$this->addFilter($studiensemester_kurzbz);
@@ -588,6 +590,7 @@ class Students extends FHCAPI_Controller
$this->PrestudentModel->addSelect('v.verband');
$this->PrestudentModel->addSelect('v.gruppe');
$this->PrestudentModel->addSelect("'' AS priorisierung_relativ");
$this->PrestudentModel->addSelect($this->PrestudentModel->escape($studiensemester_kurzbz) . ' as query_studiensemester_kurzbz');
$where = [];
@@ -611,7 +614,7 @@ class Students extends FHCAPI_Controller
if (!$verband && !$gruppe && $orgform_kurzbz !== null) {
$this->PrestudentModel->db->where(
"(
SELECT orgform_kurzbz
SELECT orgform_kurzbz
FROM public.tbl_prestudentstatus
WHERE prestudent_id=tbl_prestudent.prestudent_id
AND studiensemester_kurzbz=" . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
@@ -798,6 +801,7 @@ class Students extends FHCAPI_Controller
$this->PrestudentModel->addSelect("COALESCE(v.semester::text, CASE WHEN public.get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL) IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent') THEN public.get_absem_prestudent(tbl_prestudent.prestudent_id, NULL)::text ELSE ''::text END) AS semester", false);
$this->PrestudentModel->addSelect('v.verband');
$this->PrestudentModel->addSelect('v.gruppe');
$this->PrestudentModel->addSelect($this->PrestudentModel->escape($studiensemester_kurzbz) . ' as query_studiensemester_kurzbz');
//add status per semester
$this->PrestudentModel->addSelect(
@@ -850,41 +854,6 @@ class Students extends FHCAPI_Controller
{
$stdsemEsc = $studiensemester_kurzbz ? $this->PrestudentModel->escape($studiensemester_kurzbz) : 'NULL';
$this->load->config('stv');
$tags = $this->config->item('stv_prestudent_tags');
$whereTags = '';
if (is_array($tags) && !isEmptyArray($tags)) {
$tags = array_keys($tags);
foreach ($tags as $key => $tag) {
$tags[$key] = $this->db->escape($tag);
}
$whereTags = " AND nt.typ_kurzbz IN (" . implode(",", $tags) . ")";
}
$subQueryTag = "
(
SELECT
tag.prestudent_id,
COALESCE(json_agg(tag ORDER BY tag.done), '[]'::json) AS tags
FROM (
SELECT DISTINCT ON (n.notiz_id)
n.notiz_id AS id,
nt.typ_kurzbz,
array_to_json(nt.bezeichnung_mehrsprachig)->>0 AS beschreibung,
n.text AS notiz,
nt.style,
n.erledigt AS done,
nz.prestudent_id
FROM public.tbl_notizzuordnung AS nz
JOIN public.tbl_notiz AS n ON nz.notiz_id = n.notiz_id
JOIN public.tbl_notiz_typ AS nt ON n.typ = nt.typ_kurzbz "
. $whereTags .
"
) AS tag
GROUP BY tag.prestudent_id
) AS tag_data_agg
";
$this->PrestudentModel->addJoin('public.tbl_studiengang stg', 'studiengang_kz', 'LEFT');
$this->PrestudentModel->addJoin('public.tbl_person p', 'person_id');
@@ -907,11 +876,8 @@ class Students extends FHCAPI_Controller
AND ps.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')
AND ps.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')', 'LEFT');
$this->PrestudentModel->addJoin($subQueryTag, 'tag_data_agg.prestudent_id = tbl_prestudent.prestudent_id', 'LEFT');
$this->PrestudentModel->addSelect("b.uid");
$this->PrestudentModel->addSelect('tag_data_agg.tags');
$this->PrestudentModel->addSelect('titelpre');
$this->PrestudentModel->addSelect('nachname');
$this->PrestudentModel->addSelect('vorname');
@@ -969,7 +935,6 @@ class Students extends FHCAPI_Controller
$this->PrestudentModel->addSelect('mentor');
$this->PrestudentModel->addSelect('b.aktiv AS bnaktiv');
$this->PrestudentModel->addSelect('unruly');
$this->PrestudentModel->db->where_in('tbl_prestudent.studiengang_kz', $this->allowedStgs);
@@ -1,48 +0,0 @@
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class Tags extends Tag_Controller
{
const BERECHTIGUNG_KURZBZ = ['admin:rw', 'assistenz:rw'];
public function __construct()
{
parent::__construct([
'getTag' => self::BERECHTIGUNG_KURZBZ,
'getTags' => self::BERECHTIGUNG_KURZBZ,
'addTag' => self::BERECHTIGUNG_KURZBZ,
'updateTag' => self::BERECHTIGUNG_KURZBZ,
'doneTag' => self::BERECHTIGUNG_KURZBZ,
'deleteTag' => self::BERECHTIGUNG_KURZBZ
]);
$this->config->load('stv');
}
public function getTag($readonly_tags = null)
{
parent::getTag($this->config->item('stv_prestudent_tags'));
}
public function getTags($tags = null)
{
parent::getTags($this->config->item('stv_prestudent_tags'));
}
public function addTag($withZuordnung = true, $updatable_tags = null)
{
parent::addTag(true, $this->config->item('stv_prestudent_tags'));
}
public function updateTag($updatable_tags = null)
{
parent::updateTag($this->config->item('stv_prestudent_tags'));
}
public function deleteTag($withZuordnung = true, $updatable_tags = null)
{
parent::deleteTag(true, $this->config->item('stv_prestudent_tags'));
}
public function doneTag($updatable_tags = null)
{
parent::doneTag($this->config->item('stv_prestudent_tags'));
}
}
@@ -1,62 +0,0 @@
<?php
/**
* Copyright (C) 2024 fhcomplete.org
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
if (!defined('BASEPATH')) exit('No direct script access allowed');
use CI3_Events as Events;
/**
* This controller operates between (interface) the JS (GUI) and the back-end
* Provides data to the ajax get calls about the VV Config
* This controller works with JSON calls on the HTTP GET or POST and the output is always JSON
*/
class Config extends FHCAPI_Controller
{
public function __construct()
{
parent::__construct([
'printDocument' => ['vertrag/mitarbeiter:r'],
]);
}
public function printDocument()
{
$params = [];
$menu = [];
Events::trigger(
'multiActionPrintHonorarvertrag',
// passing $menu per reference
function & () use (&$menu) {
return $menu;
},
$params
);
if (is_array($menu) && isset($menu[0]))
{
$this->terminateWithSuccess($menu[0]);
}
else
{
// $this->terminateWithError('Error with Event 'multiActionPrintHonorarvertrag');
$this->terminateWithSuccess();
}
}
}
@@ -26,6 +26,9 @@ class Vertraege extends FHCAPI_Controller
'deleteLehrauftrag' =>['vertrag/mitarbeiter:w'],
'deleteBetreuung' =>['vertrag/mitarbeiter:w'],
'getMitarbeiter' => ['vertrag/mitarbeiter:r'],
'getHeader' => ['vertrag/mitarbeiter:r'],
'getPersonAbteilung' => ['vertrag/mitarbeiter:r'],
'getLeitungOrg' => ['vertrag/mitarbeiter:r'],
]);
//Load Models and Libraries
@@ -238,7 +241,7 @@ class Vertraege extends FHCAPI_Controller
}
}
$this->db->trans_complete();
$this->terminateWithSuccess($vertrag_id);
$this->terminateWithSuccess(true);
}
public function updateContract()
@@ -355,7 +358,7 @@ class Vertraege extends FHCAPI_Controller
}
$this->db->trans_complete();
$this->terminateWithSuccess($vertrag_id);
$this->terminateWithSuccess(true);
}
public function loadContract($vertrag_id)
@@ -681,4 +684,37 @@ class Vertraege extends FHCAPI_Controller
}
return $this->terminateWithSuccess(getData($result));
}
public function getPersonAbteilung($mitarbeiter_uid)
{
$this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel');
$result = $this->Mitarbeitermodel->getPersonAbteilung($mitarbeiter_uid);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess(current($data));
}
public function getLeitungOrg($oekurzbz)
{
$this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel');
$result = $this->Mitarbeitermodel->getLeitungOrg($oekurzbz);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess(current($data));
}
public function getHeader($person_id)
{
$this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel');
$result = $this->Mitarbeitermodel->getHeader($person_id);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess(current($data));
}
}
+1 -1
View File
@@ -35,7 +35,7 @@ class CI3_Events
});
self::$eventsSorted[$event] = true;
}
foreach (self::$events[$event] as $conf) {
$conf[1](...$args);
}
+61 -46
View File
@@ -8,7 +8,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
{
const DEFAULT_PERMISSION_R = 'admin:r';
const DEFAULT_PERMISSION_RW = 'admin:rw';
//public function __construct($zuordnung = 'person/Notizzuordnung_model')
public function __construct($permissions)
{
$default_permissions = [
@@ -97,13 +97,13 @@ abstract class Notiz_Controller extends FHCAPI_Controller
if (isError($result)) {
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
}
$this->terminateWithSuccess(getData($result) ?: []);
return $this->terminateWithSuccess(getData($result) ?: []);
}
//Override function
protected function isBerechtigt($id, $typeId){
$this->terminateWithError("in abstract function: define right in extension", self::ERROR_TYPE_GENERAL);
return $this->terminateWithError("in abstract function: define right in extension", self::ERROR_TYPE_GENERAL);
}
public function loadNotiz()
@@ -112,6 +112,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
$notiz_id = $this->input->post('notiz_id');
//$this->load->model('person/Notiz_model', 'NotizModel');
$this->NotizModel->addJoin('public.tbl_notiz_dokument', 'notiz_id', 'LEFT');
$this->NotizModel->addSelect('*');
$this->NotizModel->addSelect("TO_CHAR(CASE WHEN public.tbl_notiz.updateamum >= public.tbl_notiz.insertamum
@@ -142,9 +143,14 @@ abstract class Notiz_Controller extends FHCAPI_Controller
$uid = getAuthUID();
$json = $this->input->post('data');
$post_data = json_decode($json, true);
$this->form_validation->set_data($post_data);
if (isset($_POST['data']))
{
$data = json_decode($_POST['data']);
unset($_POST['data']);
foreach ($data as $k => $v) {
$_POST[$k] = $v;
}
}
//Form Validation
$this->form_validation->set_rules('titel', 'Titel', 'required', [
@@ -160,25 +166,26 @@ abstract class Notiz_Controller extends FHCAPI_Controller
$this->terminateWithValidationErrors($this->form_validation->error_array());
}
$titel = $post_data['titel'];
$text = $post_data['text'];
$erledigt = $post_data['erledigt'];
$bearbeiter_uid = isset($post_data['bearbeiter']) ? $post_data['bearbeiter'] : null;
$type = $post_data['typeId'];
$start = isset($post_data['start']) ? $post_data['start'] : null;
$ende = isset($post_data['ende']) ? $post_data['ende'] : null;
$titel = $this->input->post('titel');
$text = $this->input->post('text');
$erledigt = $this->input->post('erledigt');
$verfasser_uid = isset($_POST['verfasser']) ? $_POST['verfasser'] : $uid;
$bearbeiter_uid = isset($_POST['bearbeiter']) ? $_POST['bearbeiter'] : null;
$type = $this->input->post('typeId');
$start = $this->input->post('start');
$ende = $this->input->post('ende');
// Start DB transaction
$this->db->trans_start();
//Save note
$result = $this->NotizModel->insert(array('titel' => $titel, 'text' => $text, 'erledigt' => $erledigt, 'verfasser_uid' => $uid,
"insertvon" => $uid, 'start' => $start, 'ende' => $ende, 'bearbeiter_uid' => $bearbeiter_uid));
$result = $this->NotizModel->insert(array('titel' => $titel, 'text' => $text, 'erledigt' => $erledigt, 'verfasser_uid' => $verfasser_uid,
"insertvon" => $verfasser_uid, 'start' => $start, 'ende' => $ende, 'bearbeiter_uid' => $bearbeiter_uid));
if (isError($result))
{
$this->db->trans_rollback();
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
}
$notiz_id = $result->retval;
@@ -213,7 +220,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
if (isError($result))
{
$this->db->trans_rollback();
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
}
$dms_id_arr[] = $result->retval['dms_id'];
}
@@ -228,28 +235,34 @@ abstract class Notiz_Controller extends FHCAPI_Controller
if (isError($result))
{
$this->db->trans_rollback();
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
}
}
}
$this->db->trans_commit();
$this->terminateWithSuccess($result);
return $this->terminateWithSuccess($result);
}
public function updateNotiz()
{
$this->load->library('form_validation');
$this->load->library('DmsLib');
$json = $this->input->post('data');
$post_data = json_decode($json, true);
if (isset($_POST['data']))
{
$data = json_decode($_POST['data']);
unset($_POST['data']);
foreach ($data as $k => $v) {
$_POST[$k] = $v;
}
}
$this->form_validation->set_data($post_data);
$notiz_id = $this->input->post('notiz_id');
$this->form_validation->set_rules('notiz_id', 'Notiz ID', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'notiz_id'])
]);
if(!$notiz_id)
{
$this->terminateWithError($this->p->t('ui','error_missingId',['id'=>'Notiz_id']), self::ERROR_TYPE_GENERAL);
}
//Form Validation
$this->form_validation->set_rules('titel', 'Titel', 'required', [
@@ -267,23 +280,25 @@ abstract class Notiz_Controller extends FHCAPI_Controller
//update Notiz
$uid = getAuthUID();
$titel = $post_data['titel'];
$text = $post_data['text'];
$bearbeiter_uid = isset($post_data['bearbeiter']) ? $post_data['bearbeiter'] : $post_data['bearbeiter_uid'];
$erledigt = $post_data['erledigt'];
$start = $post_data['start'];
$ende = $post_data['ende'];
$titel = $this->input->post('titel');
$text = $this->input->post('text');
$verfasser_uid = isset($_POST['verfasser']) ? $_POST['verfasser'] : $uid;
$bearbeiter_uid = isset($_POST['bearbeiter']) ? $_POST['bearbeiter'] : $uid;
$erledigt = $this->input->post('erledigt');
$start = $this->input->post('start');
$ende = $this->input->post('ende');
$result = $this->NotizModel->update(
[
'notiz_id' => $post_data['notiz_id'],
'notiz_id' => $notiz_id
],
[
'titel' => $titel,
'updatevon' => $uid,
'updateamum' => date('c'),
'text' => $text,
'bearbeiter_uid' => isEmptyString($bearbeiter_uid) ? null : $bearbeiter_uid,
'verfasser_uid' => $verfasser_uid,
'bearbeiter_uid' => $bearbeiter_uid,
'start' => $start,
'ende' => $ende,
'erledigt' => $erledigt
@@ -291,7 +306,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
);
if (isError($result))
{
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
}
//update(1) loading all dms-entries with this notiz_id
@@ -299,7 +314,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
$this->load->model('person/Notizdokument_model', 'NotizdokumentModel');
$this->NotizdokumentModel->addJoin('campus.tbl_dms_version', 'dms_id');
$result = $this->NotizdokumentModel->loadWhere(array('notiz_id' => $post_data['notiz_id']));
$result = $this->NotizdokumentModel->loadWhere(array('notiz_id' => $notiz_id));
$result = $this->getDataOrTerminateWithError($result);
foreach ($result as $doc) {
$dms_id_arr[$doc->dms_id] = array(
@@ -336,7 +351,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
$result = $this->getDataOrTerminateWithError($result);
$dms_id = $result['dms_id'];
$result = $this->NotizdokumentModel->insert(array('notiz_id' => $post_data['notiz_id'], 'dms_id' => $dms_id));
$result = $this->NotizdokumentModel->insert(array('notiz_id' => $notiz_id, 'dms_id' => $dms_id));
$this->getDataOrTerminateWithError($result);
}
@@ -350,7 +365,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
$this->getDataOrTerminateWithError($result);
}
$this->terminateWithSuccess($result);
return $this->terminateWithSuccess($result);
}
public function deleteNotiz()
@@ -401,15 +416,15 @@ abstract class Notiz_Controller extends FHCAPI_Controller
if (isError($result))
{
$this->db->trans_rollback();
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
if(!hasData($result))
{
$this->terminateWithError($this->p->t('ui','error_missingId', ['id'=> 'Notiz_id']), self::ERROR_TYPE_GENERAL);
return $this->terminateWithError($this->p->t('ui','error_missingId', ['id'=> 'Notiz_id']), self::ERROR_TYPE_GENERAL);
}
$this->db->trans_complete();
$this->terminateWithSuccess(getData($result));
return $this->terminateWithSuccess(getData($result));
}
public function loadDokumente()
@@ -425,14 +440,14 @@ abstract class Notiz_Controller extends FHCAPI_Controller
array('public.tbl_notiz.notiz_id' => $notiz_id)
);
if (isError($result)) {
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
if(!hasData($result))
{
$this->terminateWithError($this->p->t('ui','error_missingId', ['id'=> 'Notiz_id']), self::ERROR_TYPE_GENERAL);
return $this->terminateWithError($this->p->t('ui','error_missingId', ['id'=> 'Notiz_id']), self::ERROR_TYPE_GENERAL);
}
$this->terminateWithSuccess(getData($result));
return $this->terminateWithSuccess(getData($result));
}
public function getMitarbeiter($searchString)
@@ -442,7 +457,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
if (isError($result)) {
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
$this->terminateWithSuccess($result);
return $this->terminateWithSuccess($result);
}
public function getCountNotes($person_id)
@@ -461,4 +476,4 @@ abstract class Notiz_Controller extends FHCAPI_Controller
return $this->terminateWithSuccess($anzahl->anzahl ?: 0);
}
}
}
+3 -209
View File
@@ -111,9 +111,7 @@ function generateJSDataStorageObject($indexPage, $calledPath, $calledMethod)
'theme' => [
'name'=>$ci->config->item('theme_name'),
'modes'=>$ci->config->item('theme_modes'),
],
'fhcomplete_build_version' => $ci->config->item('fhcomplete_build_version'),
'use_fhcomplete_build_version_in_path' => $ci->config->item('use_fhcomplete_build_version_in_path'),
]
);
$toPrint = "\n";
@@ -180,8 +178,6 @@ function generateJSModulesInclude($JSModules)
$ci =& get_instance();
$cachetoken = '?'.$ci->config->item('fhcomplete_build_version');
$ci->load->config('javascript');
$use_bundled_javascript = $ci->config->item('use_bundled_javascript');
if (isset($JSModules))
{
@@ -189,20 +185,14 @@ function generateJSModulesInclude($JSModules)
for ($tmpJSsCounter = 0; $tmpJSsCounter < count($tmpJSs); $tmpJSsCounter++)
{
$item = $tmpJSs[$tmpJSsCounter];
if($use_bundled_javascript && preg_match('#/js/apps/#', $item))
{
$item = preg_replace('#^public/#', 'public/dist/', $item);
}
echo "<!--{$item}-->".PHP_EOL;
if($ci->config->item('use_fhcomplete_build_version_in_path'))
{
$relurl = preg_replace('#public/#', 'public/' . $ci->config->item('fhcomplete_build_version') . '/', $item);
$relurl = preg_replace('#public/#', 'public/' . $ci->config->item('fhcomplete_build_version') . '/', $tmpJSs[$tmpJSsCounter]);
$toPrint = sprintf($jsInclude, base_url($relurl)).PHP_EOL;
}
else
{
$toPrint = sprintf($jsInclude, base_url($item.$cachetoken)).PHP_EOL;
$toPrint = sprintf($jsInclude, base_url($tmpJSs[$tmpJSsCounter].$cachetoken)).PHP_EOL;
}
if ($tmpJSsCounter > 0) $toPrint = "\t\t".$toPrint;
@@ -279,199 +269,3 @@ function absoluteJsImportUrl($relurl)
}
return $url;
}
/*
* Manipulate CI views includes Array to load
* - public/js/FhcApps.js via customJSs and
* - app customisation js and/or css from extensions via customJSModules
* if customJSModules contains at least one vuejs app and customisation files
* exist in extensions
*/
class ExtendableAppsHelper
{
private static $instance = null;
protected $extensions;
protected $customCSSs;
protected $customJSs;
protected $customJSModules;
protected $initialised;
protected $appscount;
protected $extCustomCSSs;
protected $extCustomJSs;
protected $extCustomJSModules;
private function __construct()
{
$this->extensions = array();
$this->customCSSs = null;
$this->customJSs = null;
$this->customJSModules = null;
$this->initialised = false;
$this->appscount = 0;
$this->extCustomCSSs = null;
$this->extCustomJSs = null;
$this->extCustomJSModules = null;
}
public static function getInstance()
{
if(self::$instance === null)
{
self::$instance = new ExtendableAppsHelper();
}
return self::$instance;
}
public function init($customCSSs, $customJSs, $customJSModules)
{
if($this->initialised)
{
return;
}
$this->customCSSs = $customCSSs;
$this->customJSs = $customJSs;
$this->customJSModules = $customJSModules;
$this->initialised = true;
if(!isset($this->customJSModules))
{
return;
}
if(!is_array($this->customJSModules))
{
$this->customJSModules = array($this->customJSModules);
}
if(count($this->customJSModules) < 1)
{
return;
}
$this->buildExtensionsList();
$this->prepareExtendedArrays();
}
public function getCustomCSSs()
{
if(is_null($this->extCustomCSSs))
{
return $this->customCSSs;
}
return $this->extCustomCSSs;
}
public function getCustomJSs()
{
if(is_null($this->extCustomJSs))
{
return $this->customJSs;
}
return $this->extCustomJSs;
}
public function getCustomJSModules()
{
if(is_null($this->extCustomJSModules))
{
return $this->customJSModules;
}
return $this->extCustomJSModules;
}
protected function buildExtensionsList()
{
$this->extensions = array();
$fsiterator = new FilesystemIterator(FHCPATH . 'application/extensions');
foreach ($fsiterator as $fsitem)
{
if(preg_match('/^FHC-Core-/', $fsitem->getBasename()))
{
$this->extensions[] = $fsitem->getBasename();
}
}
}
protected function prepareExtendedArrays()
{
$this->appscount = 0;
$this->initExtCustomCSSs();
$this->extCustomJSModules = array();
foreach($this->customJSModules as $item)
{
$matches = array();
if(preg_match('#^public/(extensions/FHC-Core-.+)?js/apps/(.*)\.js$#', $item, $matches))
{
$this->appscount++;
$fhcextension = $matches[1];
$app = $matches[2];
$extend_js_suffix = 'js/extend_app/' . $fhcextension . $app . '.js';
$extend_css_suffix = 'css/extend_app/' . $fhcextension . $app . '.css';
foreach($this->extensions as $extension)
{
$extend_js = 'public/extensions/' . $extension . '/' . $extend_js_suffix;
$extend_css = 'public/extensions/' . $extension . '/' . $extend_css_suffix;
if(is_readable(FHCPATH . $extend_js))
{
array_push($this->extCustomJSModules, $extend_js);
}
if(is_readable(FHCPATH . $extend_css))
{
array_push($this->extCustomCSSs, $extend_css);
}
}
}
array_push($this->extCustomJSModules, $item);
}
if($this->appscount > 0)
{
$this->addFhcAppsJs();
}
}
protected function initExtCustomCSSs()
{
if(!isset($this->customCSSs))
{
$this->extCustomCSSs = array();
}
elseif(!is_array($this->customCSSs))
{
$this->extCustomCSSs = array($this->customCSSs);
}
else
{
$this->extCustomCSSs = $this->customCSSs;
}
}
protected function addFhcAppsJs()
{
if(!isset($this->customJSs))
{
$this->extCustomJSs = array();
}
elseif(!is_array($this->customJSs))
{
$this->extCustomJSs = array($this->customJSs);
}
else
{
$this->extCustomJSs = $this->customJSs;
}
array_push($this->extCustomJSs, 'public/js/FhcApps.js');
}
}
+1 -2
View File
@@ -180,8 +180,7 @@ class DocsboxLib
}
// Just started or still working on it
elseif ($getStatusResponse->body->status == self::STATUS_WORKING
|| $getStatusResponse->body->status == self::STATUS_STARTED
|| $getStatusResponse->body->status == self::STATUS_QUEUED)
|| $getStatusResponse->body->status == self::STATUS_STARTED)
{
// go on!
}
+1 -1
View File
@@ -42,7 +42,7 @@ class ExtensionsLib
// Directories that are part of the extension archive
private $SOFTLINK_TARGET_DIRECTORIES = array(
APPPATH => array('config', 'components', 'controllers', 'helpers', 'hooks', 'libraries', 'models', 'views', 'widgets'),
DOC_ROOT => array('public', 'public/dist')
DOC_ROOT => array('public')
);
private $_errorOccurred; // boolean, true if an error occurred while installing an extension
@@ -490,175 +490,6 @@ class Vertrag_model extends DB_Model
return $bezeichnung;
}
/**
* Loads all Contracts of a Person
* @param $person_id
* @return array of objects
*/
public function loadContractsOfPerson($person_id)
{
$query = "
SELECT
*,
tbl_vertrag.bezeichnung as bezeichnung,
tbl_vertragstyp.bezeichnung as vertragstyp_bezeichnung,
tbl_vertrag.vertragsdatum,
(SELECT bezeichnung FROM lehre.tbl_vertragsstatus
JOIN lehre.tbl_vertrag_vertragsstatus USING(vertragsstatus_kurzbz)
WHERE vertrag_id=tbl_vertrag.vertrag_id ORDER BY datum desc limit 1) as status, anmerkung,
CASE
WHEN EXISTS (
SELECT 1
FROM lehre.tbl_vertrag_vertragsstatus
WHERE vertrag_id = tbl_vertrag.vertrag_id
AND vertragsstatus_kurzbz = 'abgerechnet'
) THEN true
ELSE false
END AS isAbgerechnet
FROM
lehre.tbl_vertrag
LEFT JOIN lehre.tbl_vertragstyp USING(vertragstyp_kurzbz)
WHERE person_id= ?";
return $this->execQuery($query, array($person_id));
}
/**
* Loads all Contracts of a Person that are not assigned yet
* @param $person_id
* @return array of objects
*/
public function loadContractsOfPersonNotAssigned($person_id)
{
$query = "
SELECT
'Lehrauftrag' as type,
lehreinheit_id,
mitarbeiter_uid,
null as pruefung_id,
null as projektarbeit_id,
(tbl_lehreinheitmitarbeiter.semesterstunden*tbl_lehreinheitmitarbeiter.stundensatz) as betrag1,
tbl_lehreinheit.studiensemester_kurzbz,
null as betreuerart_kurzbz,
( SELECT
upper(tbl_studiengang.typ || tbl_studiengang.kurzbz) || tbl_lehrveranstaltung.semester || '-' || tbl_lehrveranstaltung.kurzbz || '-' || tbl_lehreinheit.lehrform_kurzbz
FROM
lehre.tbl_lehrveranstaltung
JOIN public.tbl_studiengang USING(studiengang_kz)
WHERE
lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id)
as bezeichnung
FROM
lehre.tbl_lehreinheitmitarbeiter
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
WHERE
mitarbeiter_uid IN (SELECT uid FROM public.tbl_benutzer WHERE person_id=?)
AND vertrag_id IS NULL
UNION
SELECT
'Betreuung' as type,
tbl_projektarbeit.lehreinheit_id as lehreinheit_id,
null as mitarbeiter_uid,
null::integer as pruefung_id,
projektarbeit_id,
(tbl_projektbetreuer.stunden*tbl_projektbetreuer.stundensatz) as betrag1,
tbl_lehreinheit.studiensemester_kurzbz,
tbl_projektbetreuer.betreuerart_kurzbz,
(SELECT nachname || ' ' || vorname FROM public.tbl_person JOIN public.tbl_benutzer USING(person_id) WHERE uid=tbl_projektarbeit.student_uid)
as bezeichnung
FROM
lehre.tbl_projektbetreuer
JOIN lehre.tbl_projektarbeit USING(projektarbeit_id)
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
WHERE
tbl_projektbetreuer.person_id=?
AND vertrag_id IS NULL
";
return $this->execQuery($query, array($person_id, $person_id));
}
/**
* Loads all Contracts of a Person that are assigned yet
* @param $person_id, $vertrag_id
* @return array of objects
*/
public function loadContractsOfPersonAssigned($person_id, $vertrag_id)
{
$query = "
SELECT
'Lehrauftrag' as type,
lehreinheit_id,
mitarbeiter_uid,
null as pruefung_id,
null as projektarbeit_id,
(tbl_lehreinheitmitarbeiter.semesterstunden * tbl_lehreinheitmitarbeiter.stundensatz) as betrag,
tbl_lehreinheit.studiensemester_kurzbz,
null as betreuerart_kurzbz,
( SELECT
upper(tbl_studiengang.typ || tbl_studiengang.kurzbz) || tbl_lehrveranstaltung.semester || '-' || tbl_lehrveranstaltung.kurzbz || '-' || tbl_lehreinheit.lehrform_kurzbz
FROM
lehre.tbl_lehrveranstaltung
JOIN public.tbl_studiengang USING(studiengang_kz)
WHERE
lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id)
as bezeichnung, vertrag_id
FROM
lehre.tbl_lehreinheitmitarbeiter
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
WHERE
mitarbeiter_uid IN (SELECT uid FROM public.tbl_benutzer WHERE person_id=?)
AND vertrag_id = ?
UNION
SELECT
'Betreuung' as type,
tbl_projektarbeit.lehreinheit_id as lehreinheit_id,
null as mitarbeiter_uid,
null::integer as pruefung_id,
projektarbeit_id,
(tbl_projektbetreuer.stunden * tbl_projektbetreuer.stundensatz) as betrag,
tbl_lehreinheit.studiensemester_kurzbz,
tbl_projektbetreuer.betreuerart_kurzbz,
(SELECT nachname || ' ' || vorname FROM public.tbl_person JOIN public.tbl_benutzer USING(person_id) WHERE uid=tbl_projektarbeit.student_uid)
as bezeichnung, vertrag_id
FROM
lehre.tbl_projektbetreuer
JOIN lehre.tbl_projektarbeit USING(projektarbeit_id)
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
WHERE
tbl_projektbetreuer.person_id=?
AND vertrag_id = ?
";
return $this->execQuery($query, array($person_id, $vertrag_id, $person_id, $vertrag_id));
}
/**
* Returns all stati of a contract
*
* @param $vertrag_id
* @return array
*/
public function getStatiOfContract($vertrag_id)
{
$query = "
SELECT
*,
tbl_vertrag_vertragsstatus.datum,
tbl_vertrag_vertragsstatus.insertamum,
tbl_vertrag_vertragsstatus.updateamum
FROM
lehre.tbl_vertrag_vertragsstatus
JOIN lehre.tbl_vertragsstatus USING(vertragsstatus_kurzbz)
WHERE
tbl_vertrag_vertragsstatus.vertrag_id = ?
ORDER BY tbl_vertrag_vertragsstatus.datum DESC";
return $this->execQuery($query, array($vertrag_id));
}
private function _updateVertragRelevant($vertrag_id)
{
$this->LehreinheitmitarbeiterModel->update(
@@ -11,5 +11,4 @@ class Vertragstyp_model extends DB_Model
$this->dbTable = 'lehre.tbl_vertragstyp';
$this->pk = 'vertragstyp_kurzbz';
}
}
@@ -190,6 +190,4 @@ class Vertragvertragsstatus_model extends DB_Model
return $this->loadWhere($condition);
}
}
+15 -53
View File
@@ -10,7 +10,7 @@ class Reihungstest_model extends DB_Model
parent::__construct();
$this->dbTable = 'public.tbl_reihungstest';
$this->pk = 'reihungstest_id';
}
}
/**
* Gets a test from a test id only if it is available
@@ -42,8 +42,8 @@ class Reihungstest_model extends DB_Model
/**
* Checks if there are active studyplans which have no public placement tests assigned yet.
* Only check assignment to studyplans that are
* - Bachelor,
* - active,
* - Bachelor,
* - active,
* - set as online application
* - valid for 1st terms
* @return array Returns object array with studyplans that have no public placement tests assigned yet.
@@ -97,7 +97,7 @@ class Reihungstest_model extends DB_Model
USING (reihungstest_id)
WHERE
datum >= now()
AND
AND
oeffentlich = \'t\'
)
';
@@ -105,7 +105,7 @@ class Reihungstest_model extends DB_Model
return $this->execQuery($query);
}
/**
/**
* Gets amount of free places.
* @return array Returns object array with faculty and amount of free places
* for each public actual placement test date.
@@ -432,10 +432,10 @@ class Reihungstest_model extends DB_Model
}
/**
* Loads all applicants of a placement test
* @param integer $reihungstest_id ID of placement test
* @return array Returns object array with data of applicants.
*/
* Loads all applicants of a placement test
* @param integer $reihungstest_id ID of placement test
* @return array Returns object array with data of applicants.
*/
public function getApplicantsOfPlacementTest($reihungstest_id)
{
$query = '
@@ -556,22 +556,13 @@ class Reihungstest_model extends DB_Model
* Calculates Result of Placement Test for a given Person and given placementtest
* and with taking account of weighting per area
*
* @param Number $person_id ID of Person
* @param Boolean $punkte if true result is points else result is percentage of sum
* @param Number $reihungstest_id ID of Placementtest
* @param Array $weightedArray array of weighting per area (gewicht per gebiet_id)
* @param Boolean $has_excluded_gebiete if true, areas in the configArray will be excluded
* @param Array $basis_gebiet_id_toString areas to exclude
* @return float result points of RT
* @param $person_id ID of Person
* @param $punkte if true result is points else result is percentage of sum
* @param $reihungstest_id ID of Placementtest
* @param $weightedArray array of weighting per area (gewicht per gebiet_id)
* @return float result
*/
public function getReihungstestErgebnisPerson(
$person_id,
$punkte,
$reihungstest_id,
$weightedArray = null,
$has_excluded_gebiete = false,
$basis_gebiet_id_toString = null
)
public function getReihungstestErgebnisPerson($person_id, $punkte, $reihungstest_id, $weightedArray = null)
{
$parametersArray = array($reihungstest_id);
@@ -586,35 +577,6 @@ class Reihungstest_model extends DB_Model
WHERE
reihungstest_id = ? ";
//areas of Studiengang
if (!empty($basis_gebiet_id_toString))
{
$qry .= "
AND
gebiet_id IN (". $basis_gebiet_id_toString. ")
";
}
//areas to exclude
if($has_excluded_gebiete)
{
if (defined('FAS_REIHUNGSTEST_EXCLUDE_GEBIETE') && !empty(FAS_REIHUNGSTEST_EXCLUDE_GEBIETE))
{
$excluded_gebiete = unserialize(FAS_REIHUNGSTEST_EXCLUDE_GEBIETE);
$exclude_gebiet_id_arr = $excluded_gebiete;
if (is_array($exclude_gebiet_id_arr) && count($exclude_gebiet_id_arr) > 0)
{
$exclude_gebiet_id_toString = implode(', ', $exclude_gebiet_id_arr);
$qry .= "
AND
gebiet_id NOT IN (". $exclude_gebiet_id_toString. ")
-- AND
-- typ = 'b'
";
}
}
}
//using prestudent Status to avoid to get the sum of more than 1 placement tests
$qry .= "
AND prestudent_id = (
@@ -209,7 +209,7 @@ class Mitarbeiter_model extends DB_Model
{
$qry = "
SELECT
titelpre, vorname, nachname, titelpost, foto, foto_sperre, person_id, alias, telefonklappe, personalnummer, mitarbeiter_uid
titelpre, vorname, nachname, titelpost, foto, foto_sperre, person_id, alias, telefonklappe
FROM
public.tbl_person
JOIN public.tbl_benutzer b USING(person_id)
@@ -363,14 +363,14 @@ class Mitarbeiter_model extends DB_Model
$returnwert .= ", ma.mitarbeiter_uid, CONCAT(p.nachname, ' ', p.vorname, ' (', ma.mitarbeiter_uid , ')') as mitarbeiter";
$qry = "
SELECT " . $returnwert . "
FROM
SELECT " . $returnwert . "
FROM
public.tbl_mitarbeiter ma
JOIN
JOIN
public.tbl_benutzer b on (ma.mitarbeiter_uid = b.uid)
JOIN
JOIN
public.tbl_person p on (p.person_id = b.person_id)
WHERE
WHERE
lower (p.nachname) LIKE '%". $this->db->escape_like_str($filter)."%'
OR
lower (p.vorname) LIKE '%". $this->db->escape_like_str($filter)."%'
@@ -393,14 +393,14 @@ class Mitarbeiter_model extends DB_Model
public function getMitarbeiterFromLV($lehrveranstaltung_id)
{
$qry = "SELECT DISTINCT
lehrveranstaltung_id, uid, vorname, wahlname, vornamen, nachname, titelpre, titelpost, kurzbz, mitarbeiter_uid
FROM
lehrveranstaltung_id, uid, vorname, wahlname, vornamen, nachname, titelpre, titelpost, kurzbz, mitarbeiter_uid
FROM
lehre.tbl_lehreinheitmitarbeiter, campus.vw_mitarbeiter, lehre.tbl_lehreinheit
WHERE
WHERE
lehrveranstaltung_id= ?
AND
mitarbeiter_uid=uid
AND
AND
mitarbeiter_uid=uid
AND
tbl_lehreinheitmitarbeiter.lehreinheit_id=tbl_lehreinheit.lehreinheit_id;";
$parametersArray = array($lehrveranstaltung_id);
+15
View File
@@ -0,0 +1,15 @@
<?php
$includesArray = array(
'title' => 'LvInfo',
'customJSModules' => ['public/js/apps/Cis/LvInfo.js']
);
$this->load->view('templates/CISVUE-Header', $includesArray);
?>
<div id="content">
<Info studien_semester="<?= $studien_semester ?>" lehrveranstaltung_id="<?= $lvid ?>"></Info>
</div>
<?php $this->load->view('templates/CISVUE-Footer', $includesArray); ?>
+18
View File
@@ -0,0 +1,18 @@
<?php
$includesArray = array(
'title' => 'Profil',
'customJSModules' => ['public/js/apps/Cis/Profil.js'],
'tabulator5' => true,
'primevue3' => true,
'customCSSs' => ['public/css/components/calendar.css', 'public/css/components/FilterComponent.css','public/css/components/Profil.css','public/css/components/FormUnderline.css'],
);
$this->load->view('templates/CISVUE-Header', $includesArray);
?>
<div id="content" >
</div>
<?php $this->load->view('templates/CISVUE-Footer', $includesArray); ?>
+2 -6
View File
@@ -7,21 +7,19 @@
'vue3' => true,
'primevue3' => true,
#'filtercomponent' => true,
'tabulator6' => true,
'tabulator5' => true,
'tinymce5' => true,
'phrases' => array(
'global',
'ui',
'notiz',
),
'tags' => true,
'customCSSs' => [
#datepicker fuer component functions
'public/css/components/vue-datepicker.css',
'public/css/components/primevue.css',
'public/css/Studentenverwaltung.css',
'public/css/components/function.css',
'public/css/components/Detailheader.css'
'public/css/components/function.css'
],
'customJSs' => [
'vendor/vuejs/vuedatepicker_js/vue-datepicker.iife.js',
@@ -47,8 +45,6 @@ $configArray = [
'showAufnahmegruppen' => !defined('FAS_REIHUNGSTEST_AUFNAHMEGRUPPEN') ? false : FAS_REIHUNGSTEST_AUFNAHMEGRUPPEN,
'allowUebernahmePunkte' => !defined('FAS_REIHUNGSTEST_PUNKTEUEBERNAHME') ? true : FAS_REIHUNGSTEST_PUNKTEUEBERNAHME,
'useReihungstestPunkte' => !defined('FAS_REIHUNGSTEST_PUNKTE') ? true : FAS_REIHUNGSTEST_PUNKTE,
'hasExcludedAreas' => defined('FAS_REIHUNGSTEST_EXCLUDE_GEBIETE') && !empty(FAS_REIHUNGSTEST_EXCLUDE_GEBIETE),
'stvTagsEnabled' => defined('STV_TAGS_ENABLED') ? STV_TAGS_ENABLED : false,
];
?>
-50
View File
@@ -1,50 +0,0 @@
<?php
$includesArray = array(
'title' => 'Vertragsverwaltung',
'axios027' => true,
'bootstrap5' => true,
'fontawesome6' => true,
'vue3' => true,
'primevue3' => true,
'filtercomponent' => true,
'navigationcomponent' => true,
'tabulator6' => true,
'tinymce5' => true,
'phrases' => array(
'global',
'ui',
),
'customCSSs' => [
'public/css/components/vue-datepicker.css',
'public/css/components/primevue.css',
'public/css/Vertragsverwaltung.css',
'public/css/components/Detailheader.css'
],
'customJSs' => [
#'vendor/npm-asset/primevue/tree/tree.min.js',
#'vendor/npm-asset/primevue/toast/toast.min.js'
],
'customJSModules' => [
'public/js/apps/Vertragsverwaltung.js'
]
);
$this->load->view('templates/FHC-Header', $includesArray);
?>
<?php
$configArray = [
'domain' => !defined('DOMAIN') ? 'notDefined' : DOMAIN,
];
?>
<div id="main">
<router-view
:permissions="<?= htmlspecialchars(json_encode($permissions)); ?>"
:config="<?= htmlspecialchars(json_encode($configArray)); ?>"
>
</router-view>
</div>
<?php $this->load->view('templates/FHC-Footer', $includesArray); ?>
+4 -6
View File
@@ -17,7 +17,6 @@
$use_vuejs_dev_version = $this->config->item('use_vuejs_dev_version');
// By default set the parameters to null
$customCSSs = isset($customCSSs) ? $customCSSs : null;
$customJSs = isset($customJSs) ? $customJSs : null;
$customJSModules = isset($customJSModules) ? $customJSModules : null;
@@ -192,13 +191,12 @@
// NOTE: keep it as the last but one
if ($addons === true) generateAddonsJSsInclude($calledPath.'/'.$calledMethod);
$extapphelper = ExtendableAppsHelper::getInstance();
$extapphelper->init($customCSSs, $customJSs, $customJSModules);
// Eventually required JS
// NOTE: keep it as the latest
generateJSsInclude($extapphelper->getCustomJSs());
generateJSModulesInclude($extapphelper->getCustomJSModules());
generateJSsInclude($customJSs);
generateJSModulesInclude($customJSModules);
?>
</body>
</html>
+1 -6
View File
@@ -9,8 +9,6 @@
$title = isset($title) ? $title : null;
$refresh = isset($refresh) ? $refresh : null;
$customCSSs = isset($customCSSs) ? $customCSSs : null;
$customJSs = isset($customJSs) ? $customJSs : null;
$customJSModules = isset($customJSModules) ? $customJSModules : null;
$skipID = isset($skipID) ? $skipID : null;
?>
<!-- Header start -->
@@ -134,11 +132,8 @@
//Tags
if ($tags === true) generateCSSsInclude('public/css/tags.css');
$extapphelper = ExtendableAppsHelper::getInstance();
$extapphelper->init($customCSSs, $customJSs, $customJSModules);
// Eventually required CSS
generateCSSsInclude($extapphelper->getCustomCSSs()); // Eventually required CSS
generateCSSsInclude($customCSSs); // Eventually required CSS
?>
</head>
<body>
+16 -29
View File
@@ -264,7 +264,7 @@ else
tbl_bisio.bisio_id, tbl_bisio.bis, tbl_bisio.von,
tbl_zeugnisnote.note,tbl_mobilitaet.mobilitaetstyp_kurzbz,
(CASE WHEN bis.tbl_mobilitaet.studiensemester_kurzbz = vw_student_lehrveranstaltung.studiensemester_kurzbz THEN '1' ELSE '' END) as doubledegree,
tbl_note.lkt_ueberschreibbar, tbl_note.anmerkung, tbl_zeugnisnote.punkte
tbl_note.lkt_ueberschreibbar, tbl_note.anmerkung
FROM
campus.vw_student_lehrveranstaltung JOIN public.tbl_benutzer USING(uid)
JOIN public.tbl_person USING(person_id) JOIN public.tbl_student ON(uid=student_uid)
@@ -306,14 +306,7 @@ else
&& $elem->von < $stsemdatumbis && (anzahlTage($elem->von, $elem->bis) >= 30))
$inc.=' (o)';
if(defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE==true)
{
$note = $elem->punkte;
}
else
{
$note = $elem->note;
}
$note = $elem->note;
if($elem->lkt_ueberschreibbar == 'f') // angerechnet / intern angerechnet / nicht zugelassen
{
@@ -346,23 +339,20 @@ else
{
$worksheet->write($lines,8, trim($elem->matrikelnr), $format_highlight);
$pr = new Pruefung();
$pr->getPruefungen($elem->uid, "Termin2", $lvid, $stsem);
$pr->getPruefungen($elem->uid, "Termin2", $lvid, $sem);
$output2 = $pr->result;
if ($output2)
{
$resultPr = $output2[0];
$worksheet->write($lines,9, date('d.m.Y', strtotime($resultPr->datum)), $format_highlightright_date);
if(defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE==true)
$worksheet->write($lines,10, $resultPr->punkte, $format_highlightright);
else
$worksheet->write($lines,10, $resultPr->note, $format_highlightright);
}
else
{
$worksheet->write($lines,9, '', $format_highlightright_date);
$worksheet->write($lines,10, '', $format_highlightright);
$worksheet->write($lines,10, $resultPr->note, $format_highlightright);
}
else
{
$worksheet->write($lines,9, '', $format_highlightright_date);
$worksheet->write($lines,10, '', $format_highlightright);
}
}
// Nachprüfung
@@ -370,23 +360,20 @@ else
{
$worksheet->write($lines,12, trim($elem->matrikelnr), $format_highlight);
$pr = new Pruefung();
$pr->getPruefungen($elem->uid, "Termin3", $lvid, $stsem);
$pr->getPruefungen($elem->uid, "Termin3", $lvid, $sem);
$output3 = $pr->result;
if ($output3)
{
$resultPr = $output3[0];
$worksheet->write($lines,13, date('d.m.Y', strtotime($resultPr->datum)), $format_highlightright_date);
if(defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE==true)
$worksheet->write($lines,14, $resultPr->punkte, $format_highlightright);
else
$worksheet->write($lines,14, $resultPr->note, $format_highlightright);
}
else
{
$worksheet->write($lines,13, '', $format_highlightright_date);
$worksheet->write($lines,14, '', $format_highlightright);
$worksheet->write($lines,14, $resultPr->note, $format_highlightright);
}
else
{
$worksheet->write($lines,13, '', $format_highlightright_date);
$worksheet->write($lines,14, '', $format_highlightright);
}
}
$i++;
-2
View File
@@ -371,6 +371,4 @@ define('STATUS_VORRUECKEN_ANZEIGEN', true);
//externe Ueberwachung im Testtool erlauben
define('TESTTOOL_EXTERNE_UEBERWACHUNG_ALLOWED', false);
//enable tags in StudVW
define('STV_TAGS_ENABLED', false);
?>
@@ -798,10 +798,6 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#updatevon" />
<splitter class="tree-splitter"/>
<treecol id="student-prestudent-tree-rolle-fgm" label="FGM" flex="1" hidden="true" persist="hidden, width, ordinal"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#fgm" />
<splitter class="tree-splitter"/>
</treecols>
<template>
@@ -827,7 +823,6 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#insertvon"/>
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#updateamum"/>
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#updatevon"/>
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#fgm"/>
</treerow>
</treeitem>
</treechildren>
-1
View File
@@ -705,7 +705,6 @@ class prestudent extends person
$rolle->studienplan_bezeichnung = $row->studienplan_bezeichnung;
$rolle->bestaetigtam = $row->bestaetigtam;
$rolle->bestaetigtvon = $row->bestaetigtvon;
$rolle->fgm = $row->fgm;
$rolle->anmerkung_status = $row->anmerkung;
$rolle->bewerbung_abgeschicktamum = $row->bewerbung_abgeschicktamum;
$rolle->rt_stufe = $row->rt_stufe;
-27
View File
@@ -1,27 +0,0 @@
{
"name": "fhc-core",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"build": "rollup -c",
"watch": "rollup --watch -c"
},
"dependencies": {
},
"devDependencies": {
"@rollup/plugin-alias": "^5.1.0",
"@rollup/plugin-babel": "^6.0.4",
"@rollup/plugin-commonjs": "^25.0.7",
"@rollup/plugin-json": "^6.1.0",
"@rollup/plugin-node-resolve": "^15.2.3",
"@rollup/plugin-replace": "^5.0.5",
"@rollup/plugin-terser": "^0.4.4",
"babel-plugin-transform-class-properties": "^6.24.1",
"glob": "^13.0.6",
"node-sass": "^9.0.0",
"rollup": "^4.52.4",
"rollup-plugin-postcss": "^4.0.2",
"rollup-plugin-vue": "^6.0.0"
}
}
+6 -102
View File
@@ -12,22 +12,22 @@ html {
font-size: .875em;
}
html.fs_xx-small {
font-size: .625em;
font-size: .5em;
}
html.fs_x-small {
font-size: .6875em;
font-size: .625em;
}
html.fs_small {
font-size: .75em;
}
html.fs_normal {
font-size: .8125em;
font-size: .875em;
}
html.fs_big {
font-size: .875em;
font-size: 1em;
}
html.fs_huge {
font-size: 1em;
font-size: 1.125em;
}
#appMenu {
@@ -74,12 +74,6 @@ html.fs_huge {
color: var(--gray-500);
}
/* Aufnahme Termine: background color green*/
.stv-details-admission-table .row-green{
background-color: lightgreen !important;
//color: var(--green-200);
}
/* Dropdown Toolbar Interessent, submenu */
.dropend .dropdown-toggle.d-flex::after {
height: 0;
@@ -122,15 +116,6 @@ html.fs_huge {
position: inherit;
z-index: 1;
}
.sidebar-collapsed #sidebarMenu {
display: none !important;
}
.sidebar-collapsed .container-fluid > .row > main {
flex: 0 0 100%;
max-width: 100%;
}
}
@@ -183,7 +168,7 @@ html.fs_huge {
}
.has-filter .fa-filter {
color: var(--bs-danger);
color: var(--bs-success);
}
.override_filtercmpt_actions_style div.d-flex.align-items-baseline {
align-items: end !important;
@@ -200,84 +185,3 @@ html.fs_huge {
.tiny-90 div.tox.tox-tinymce {
height: 90% !important;
}
/* slim begin */
.stv .form-label {
margin-bottom: .15rem;
font-weight: bold;
}
.stv .form-control,
.stv .form-select,
.stv .input-group-text {
padding-top: .15rem;
padding-bottom: .15rem;
}
:root {
--bs-body-line-height: 1.2;
}
.stv .tabulator-row .tabulator-cell,
.stv .tabulator-header-filter input {
padding-top: 1px !important;
padding-bottom: 1px !important;
}
.stv .tabulator-row {
min-height: 18px;
}
.stv .btn {
--bs-btn-padding-y: 0.25rem;
--bs-btn-line-height: 1.2;
}
.stv .p-button.p-button-icon-only {
padding-top: 0;
padding-bottom: 0;
}
.stv .p-tabview .p-tabview-nav li .p-tabview-nav-link {
padding: 0.25rem .5rem;
}
/*
.stv .p-tabview .p-tabview-panels {
background-color: #e5eff5;
}
.stv .p-tabview .p-tabview-nav li.p-highlight .p-tabview-nav-link {
background: #e5eff5;
border-color: #dee2e6 #dee2e6 #e5eff5 #dee2e6;
}
*/
.stv-details-details-foto img {
max-height: 120px;
}
.stv .tabulator-row .tabulator-frozen,
.stv .tabulator-row .tabulator-cell {
border-bottom: none;
}
/*
.stv .p-treetable .p-treetable-thead > tr > th,
.stv .p-treetable .p-treetable-tbody > tr {
background-color: #e5eff5;
}
.stv .p-treetable .p-treetable-tbody > tr.p-highlight {
background: #007bff;
color: #fff;
}
.stv .p-treetable.p-treetable-hoverable-rows .p-treetable-tbody > tr:not(.p-highlight):hover {
background: #fff;
color: #212529;
}
.tabulator-row.tabulator-row-even .tabulator-cell {
background-color: #e5eff5;
}
*/
/* slim ende */
-20
View File
@@ -1,20 +0,0 @@
@import './components/verticalsplit.css';
html {
font-size: .875em;
}
.vv{
display: flex;
flex-direction: column;
height: 100vh;
}
.vv> header {
flex: 0 0 auto;
}
.vv> div {
flex: 1 1 auto;
}
.vv {
margin-left: 0 !important;
}
-64
View File
@@ -1,64 +0,0 @@
.foto-container:hover .fotoedit {
opacity: 1 !important;
}
.bg-unruly {
background-color: #ad1010 !important;
color: white;
}
/*.fotosperre {
z-index: 1;
font-size: 1rem;
width: 1.25rem;
height: 1.25rem;
}*/
.foto-container .fotoedit {
opacity: 0;
transition: opacity 0.3s;
backdrop-filter: blur(2px);
}
.fotoedit {
background-color: rgba(0, 0, 0, 0.4);
color: white;
border: none;
z-index: 4;
font-size: 1rem;
width: 1.8rem;
height: 1.8rem;
opacity:0;
transition: opacity 0.2s;
top:20%;
}
/* fotoeditMa {
background-color: rgba(0, 0, 0, 0.4);
color: white;
border: none;
z-index: 4;
font-size: 1rem;
opacity:0;
transition: opacity 0.2s;
top:20%;
}*/
.buttonleft {
margin-left: .25rem;
}
.buttonright {
margin-right: .25rem;
}
/*.fotoEditMa {
z-index: 104;
font-size: 1rem;
width: 2.5rem;
height: 2.5rem;
opacity:0;
transition: opacity 0.2s;
top:13%;"
z-index: 104; font-size: 1rem; width: 2.5rem; height: 2.5rem; opacity:0; transition: opacity 0.2s; top:13%;"
}*/
-6
View File
@@ -3578,12 +3578,6 @@
transition: box-shadow 0.15s;
margin-right: 0.5rem;
}
.p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler > svg,
.p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler > svg * {
pointer-events: none;
}
.p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler:enabled:hover {
color: #495057;
border-color: transparent;
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-2
View File
@@ -1,2 +0,0 @@
const e="error",t="retval",r={get:function(e,t,n=null){return r._axiosCall(e,t,"get",n)},post:function(e,t,n=null){return r._axiosCall(e,t,"post",n)},isSuccess:function(r){return!("object"!=typeof r||!r.hasOwnProperty(e)||!r.hasOwnProperty(t)||0!=r.error)},isError:function(e){return!r.isSuccess(e)},hasData:function(e){return!(!r.isSuccess(e)||!("object"==typeof e[t]&&Object.keys(e[t]).length>0||"array"==typeof e[t]&&e[t].length>0||"string"==typeof e[t]&&""!=e[t].trim()||"number"==typeof e[t]))},getData:function(e){return r.hasData(e)?e[t]:null},getError:function(e){return"object"==typeof e&&Object.keys(e).length>0&&e.hasOwnProperty(t)?e[t]:"Generic error"},getErrorCode:function(t){return"object"==typeof t&&t.hasOwnProperty(e)?t[e]:1},_generateRouterURI:function(e){var t=null;return"undefined"!=typeof FHC_JS_DATA_STORAGE_OBJECT&&(t=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"+e),t},_printDebug:function(e,t,r){},_axiosCall:function(e,t,n,i){let o={method:n,url:r._generateRouterURI(e),timeout:5e3};if("get"==n?o.params=t:o.data=t,"object"==typeof i)for(var s in i)o[s]=i[s];return axios(o)}},n=2e3,i={getStudiensemester:function(){return r.get("codex/Bismeldestichtag/getStudiensemester",null,{timeout:n})},getBismeldestichtage:function(){return r.get("codex/Bismeldestichtag/getBismeldestichtage",null,{timeout:n})},addBismeldestichtag:function(e){return r.post("codex/Bismeldestichtag/addBismeldestichtag",{meldestichtag:e.meldestichtag,studiensemester_kurzbz:e.studiensemester_kurzbz},{timeout:n})},deleteBismeldestichtag:function(e){return r.post("codex/Bismeldestichtag/deleteBismeldestichtag",{meldestichtag_id:e.meldestichtag_id},{timeout:n})}};export{i as BismeldestichtagAPIs};
//# sourceMappingURL=API.js.map
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,2 +0,0 @@
const t={formatDate:function(t){return t.replace(/(.*)-(.*)-(.*)/,"$3.$2.$1")}};export{t as BismeldestichtagHelper};
//# sourceMappingURL=BismeldestichtagHelper.js.map
@@ -1 +0,0 @@
{"version":3,"file":"BismeldestichtagHelper.js","sources":["../../../../js/apps/Bismeldestichtag/BismeldestichtagHelper.js"],"sourcesContent":["/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\nexport const BismeldestichtagHelper = {\n\tformatDate: function(date) {\n\t\treturn date.replace(/(.*)-(.*)-(.*)/, '$3.$2.$1');\n\t}\n}\n"],"names":["BismeldestichtagHelper","formatDate","date","replace"],"mappings":"AAiBO,MAAMA,EAAyB,CACrCC,WAAY,SAASC,GACpB,OAAOA,EAAKC,QAAQ,iBAAkB,WACvC"}
-4
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-2
View File
@@ -1,2 +0,0 @@
const e={height:700,layout:"fitColumns",columns:[{title:"Log ID",field:"LogId",headerFilter:!0},{title:"Request ID",field:"RequestId",headerFilter:!0},{title:"Execution time",field:"ExecutionTime",headerFilter:!0},{title:"Executed by",field:"ExecutedBy",headerFilter:!0},{title:"Description",field:"Description",headerFilter:!0},{title:"Data",field:"Data",headerFilter:!0},{title:"Web service type",field:"WebserviceType",headerFilter:!0}],rowFormatter:function(e){let t=e.getData();if(null!=t&&t.hasOwnProperty("RequestId")&&null!=t.RequestId){let l=t.RequestId;l.includes("error")?e.getElement().style.color="red":l.includes("warning")&&(e.getElement().style.color="orange")}}},t=[{event:"rowClick",handler:function(e,t){alert(t.getData().Data)}}];export{t as LogsViewerTabulatorEventHandlers,e as LogsViewerTabulatorOptions};
//# sourceMappingURL=TabulatorSetup.js.map
-1
View File
@@ -1 +0,0 @@
{"version":3,"file":"TabulatorSetup.js","sources":["../../../../js/apps/LogsViewer/TabulatorSetup.js"],"sourcesContent":["/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\n/**\n *\n */\nexport const LogsViewerTabulatorOptions = {\n\theight: 700,\n\tlayout: 'fitColumns',\n\tcolumns: [\n\t\t{title: 'Log ID', field: 'LogId', headerFilter: true},\n\t\t{title: 'Request ID', field: 'RequestId', headerFilter: true},\n\t\t{title: 'Execution time', field: 'ExecutionTime', headerFilter: true},\n\t\t{title: 'Executed by', field: 'ExecutedBy', headerFilter: true},\n\t\t{title: 'Description', field: 'Description', headerFilter: true},\n\t\t{title: 'Data', field: 'Data', headerFilter: true},\n\t\t{title: 'Web service type', field: 'WebserviceType', headerFilter: true}\n\t],\n\trowFormatter: function(row) {\n\n\t\tlet data = row.getData(); // get data for this row\n\n\t\t// If data is not null and provides the property RequestId and it is not null\n\t\tif (data != null && data.hasOwnProperty('RequestId') && data.RequestId != null)\n\t\t{\n\t\t\tlet requestId = data.RequestId;\n\n\t\t\tif (requestId.includes(\"error\"))\n\t\t\t{\n\t\t\t\trow.getElement().style.color = \"red\";\n\t\t\t}\n\t\t\telse if (requestId.includes(\"warning\"))\n\t\t\t{\n\t\t\t\trow.getElement().style.color = \"orange\";\n\t\t\t\n\t\t\t}\n\t\t}\n\t}\n};\n\n/**\n *\n */\nexport const LogsViewerTabulatorEventHandlers = [\n\t{\n\t\tevent: \"rowClick\",\n\t\thandler: function(e, row) {\n\t\t\talert(row.getData().Data);\n\t\t}\n\t}\n];\n\n"],"names":["LogsViewerTabulatorOptions","height","layout","columns","title","field","headerFilter","rowFormatter","row","data","getData","hasOwnProperty","RequestId","requestId","includes","getElement","style","color","LogsViewerTabulatorEventHandlers","event","handler","e","alert","Data"],"mappings":"AAoBO,MAAMA,EAA6B,CACzCC,OAAQ,IACRC,OAAQ,aACRC,QAAS,CACR,CAACC,MAAO,SAAUC,MAAO,QAASC,cAAc,GAChD,CAACF,MAAO,aAAcC,MAAO,YAAaC,cAAc,GACxD,CAACF,MAAO,iBAAkBC,MAAO,gBAAiBC,cAAc,GAChE,CAACF,MAAO,cAAeC,MAAO,aAAcC,cAAc,GAC1D,CAACF,MAAO,cAAeC,MAAO,cAAeC,cAAc,GAC3D,CAACF,MAAO,OAAQC,MAAO,OAAQC,cAAc,GAC7C,CAACF,MAAO,mBAAoBC,MAAO,iBAAkBC,cAAc,IAEpEC,aAAc,SAASC,GAEtB,IAAIC,EAAOD,EAAIE,UAGf,GAAY,MAARD,GAAgBA,EAAKE,eAAe,cAAkC,MAAlBF,EAAKG,UAC7D,CACC,IAAIC,EAAYJ,EAAKG,UAEjBC,EAAUC,SAAS,SAEtBN,EAAIO,aAAaC,MAAMC,MAAQ,MAEvBJ,EAAUC,SAAS,aAE3BN,EAAIO,aAAaC,MAAMC,MAAQ,SAGjC,CACD,GAMYC,EAAmC,CAC/C,CACCC,MAAO,WACPC,QAAS,SAASC,EAAGb,GACpBc,MAAMd,EAAIE,UAAUa,KACrB"}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-13
View File
@@ -1,13 +0,0 @@
var Search = {
search: function (searchsettings) {
const url = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/components/SearchBar/search';
return axios.post(url, searchsettings);
}
};
var fhcapifactory = {
"search": Search
};
export { fhcapifactory as default };
//# sourceMappingURL=fhcapifactory.js.map
-1
View File
@@ -1 +0,0 @@
{"version":3,"file":"fhcapifactory.js","sources":["../../../../js/apps/api/search.js","../../../../js/apps/api/fhcapifactory.js"],"sourcesContent":["export default {\n search: function(searchsettings) {\n const url = FHC_JS_DATA_STORAGE_OBJECT.app_root \n + FHC_JS_DATA_STORAGE_OBJECT.ci_router\n + '/components/SearchBar/search';\n return axios.post(url, searchsettings);\n }\n};\n","import Search from \"./search.js\";\n\nexport default {\n \"search\": Search,\n};\n"],"names":["search","searchsettings","url","FHC_JS_DATA_STORAGE_OBJECT","app_root","ci_router","axios","post","Search"],"mappings":"AAAA,aAAe;AACbA,EAAAA,MAAM,EAAE,UAASC,cAAc,EAAE;IAC7B,MAAMC,GAAG,GAAGC,0BAA0B,CAACC,QAAQ,GACnCD,0BAA0B,CAACE,SAAS,GACpC,8BAA8B;AAC1C,IAAA,OAAOC,KAAK,CAACC,IAAI,CAACL,GAAG,EAAED,cAAc,CAAC;AAC1C,EAAA;AACF,CAAC;;ACLD,oBAAe;AACX,EAAA,QAAQ,EAAEO;AACd,CAAC;;;;"}
-9
View File
@@ -1,9 +0,0 @@
var search = {
search: function (searchsettings) {
const url = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/components/SearchBar/search';
return axios.post(url, searchsettings);
}
};
export { search as default };
//# sourceMappingURL=search.js.map
-1
View File
@@ -1 +0,0 @@
{"version":3,"file":"search.js","sources":["../../../../js/apps/api/search.js"],"sourcesContent":["export default {\n search: function(searchsettings) {\n const url = FHC_JS_DATA_STORAGE_OBJECT.app_root \n + FHC_JS_DATA_STORAGE_OBJECT.ci_router\n + '/components/SearchBar/search';\n return axios.post(url, searchsettings);\n }\n};\n"],"names":["search","searchsettings","url","FHC_JS_DATA_STORAGE_OBJECT","app_root","ci_router","axios","post"],"mappings":"AAAA,aAAe;AACbA,EAAAA,MAAM,EAAE,UAASC,cAAc,EAAE;IAC7B,MAAMC,GAAG,GAAGC,0BAA0B,CAACC,QAAQ,GACnCD,0BAA0B,CAACE,SAAS,GACpC,8BAA8B;AAC1C,IAAA,OAAOC,KAAK,CAACC,IAAI,CAACL,GAAG,EAAED,cAAc,CAAC;AAC1C,EAAA;AACF,CAAC;;;;"}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-50
View File
@@ -1,50 +0,0 @@
/**
* Copyright (C) 2025 fhcomplete.org
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
const FhcApps = (function() {
// Logic to extend app here (like adding components, plugins, ...)
function makeExtendable(app) {
// apply extensions here
return app;
}
return {
makeExtendable
};
})();
FhcApps.router = (() => {
const extraRoutes = [];
function addRoute(...route) {
extraRoutes.push(route);
}
function makeExtendable(router) {
while (extraRoutes.length) {
router.addRoute(...extraRoutes.shift());
}
router.replace(router.currentRoute.value.fullPath);
}
return {
addRoute,
makeExtendable
};
})();

Some files were not shown because too many files have changed in this diff Show More