mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-10-12 15:04:04 +00:00
Compare commits
203
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fba88a42cc | ||
|
|
8d592ae1e6 | ||
|
|
3699a5e3e3 | ||
|
|
ea86531ae3 | ||
|
|
ce62713790 | ||
|
|
34761db664 | ||
|
|
c7131ed775 | ||
|
|
b57e1984a8 | ||
|
|
acedc11be8 | ||
|
|
15c1da74a2 | ||
|
|
d33b45d7cb | ||
|
|
b3b6d847a7 | ||
|
|
80365de28c | ||
|
|
2d74522a4f | ||
|
|
d00aef66e1 | ||
|
|
241eec3ef2 | ||
|
|
2050f5ae65 | ||
|
|
587e523990 | ||
|
|
5ec1a1c54c | ||
|
|
2c65ccc8da | ||
|
|
787308aad4 | ||
|
|
8b44e4475b | ||
|
|
d251987850 | ||
|
|
ba92eea7eb | ||
|
|
50951dfdcf | ||
|
|
be7527e994 | ||
|
|
d5c1721ab1 | ||
|
|
8eb27b194f | ||
|
|
579a55a00d | ||
|
|
0a00caa1e4 | ||
|
|
224cef7fad | ||
|
|
c53040ed5c | ||
|
|
f7465047cb | ||
|
|
0dadaece08 | ||
|
|
69fd223358 | ||
|
|
9c43374267 | ||
|
|
ea7c0cccde | ||
|
|
6dfe292776 | ||
|
|
c90f7a31bb | ||
|
|
073160dde4 | ||
|
|
6b3d03c0f0 | ||
|
|
e1917cd5c9 | ||
|
|
7b2f41dcb3 | ||
|
|
9dfc0d5e56 | ||
|
|
56fe8c9d09 | ||
|
|
9a3532265f | ||
|
|
4abe6f0d24 | ||
|
|
9fbbd6b855 | ||
|
|
59b4b2bac9 | ||
|
|
5f546fca2a | ||
|
|
1bf2b707ef | ||
|
|
f74b885253 | ||
|
|
3ab402adef | ||
|
|
52f24645fb | ||
|
|
4ac108174b | ||
|
|
6378b80d87 | ||
|
|
658c8d6bd4 | ||
|
|
bf29faa5a7 | ||
|
|
2ada167557 | ||
|
|
cc9d1f983e | ||
|
|
5fff45e302 | ||
|
|
57c48f2c4a | ||
|
|
e32691994c | ||
|
|
46f8d0d07d | ||
|
|
9274743df3 | ||
|
|
66e400013a | ||
|
|
3f95bfd82f | ||
|
|
de01de7c14 | ||
|
|
66d8c303f3 | ||
|
|
6804800e9c | ||
|
|
cb3dcf3e1d | ||
|
|
9629345473 | ||
|
|
4d72b0047a | ||
|
|
dc22ac6b06 | ||
|
|
f4cc311806 | ||
|
|
df46b8ebdd | ||
|
|
d0073fdc6c | ||
|
|
2df19fa16a | ||
|
|
d0922993f0 | ||
|
|
35f3239fc0 | ||
|
|
870c36e76b | ||
|
|
96b2d88d39 | ||
|
|
474fc1fc57 | ||
|
|
3825e2fb38 | ||
|
|
9d6bcc7779 | ||
|
|
64f23ea7eb | ||
|
|
86401dae8b | ||
|
|
02a8797d4b | ||
|
|
2655cc0e34 | ||
|
|
9b60f57d7a | ||
|
|
4c0635be7c | ||
|
|
67b863f9db | ||
|
|
7628ebc9ca | ||
|
|
deb6dad7ad | ||
|
|
077f052112 | ||
|
|
e7f57c9ddd | ||
|
|
095e2bf581 | ||
|
|
25345a0522 | ||
|
|
e2b5201b5a | ||
|
|
5c80a382bf | ||
|
|
aa940683d6 | ||
|
|
843c65d52b | ||
|
|
e26f4262df | ||
|
|
d0513571f9 | ||
|
|
458dc1aaec | ||
|
|
1f1d0a94e6 | ||
|
|
944bc44a0e | ||
|
|
dde586e004 | ||
|
|
506c23ae89 | ||
|
|
e90e03e0cc | ||
|
|
335671b46a | ||
|
|
19b8c16057 | ||
|
|
dea3aac222 | ||
|
|
5d7281e470 | ||
|
|
a7d925a177 | ||
|
|
4ef4a06a7e | ||
|
|
29515491a2 | ||
|
|
6cb8d0a9d1 | ||
|
|
2c4574d93b | ||
|
|
2fde630971 | ||
|
|
fce5ee7a16 | ||
|
|
8ccb9cd892 | ||
|
|
d1af44bcdc | ||
|
|
05b3040dd7 | ||
|
|
cd2941c904 | ||
|
|
f1a7759a9d | ||
|
|
9ea694bf9f | ||
|
|
990b8d281c | ||
|
|
b2358c57d7 | ||
|
|
6b7e061c87 | ||
|
|
912896d4da | ||
|
|
d365f15744 | ||
|
|
36823dac7d | ||
|
|
a1142136b2 | ||
|
|
a0c41c95cd | ||
|
|
c664c14afc | ||
|
|
7868c33c3d | ||
|
|
3e303a6617 | ||
|
|
efc67d14a5 | ||
|
|
e774787d67 | ||
|
|
c44bef3b19 | ||
|
|
4c9476866d | ||
|
|
bd50a9a141 | ||
|
|
481b221f89 | ||
|
|
4177c83c8e | ||
|
|
bc2fb32e3e | ||
|
|
16ebbc324e | ||
|
|
abcc31b4e9 | ||
|
|
50a14ccae8 | ||
|
|
257b64a9a2 | ||
|
|
0541596a91 | ||
|
|
b8aec21968 | ||
|
|
c438a2d6d8 | ||
|
|
c2d6d01045 | ||
|
|
087930416f | ||
|
|
18d2b72b30 | ||
|
|
1cbd25b052 | ||
|
|
48cd737bd9 | ||
|
|
819652f70b | ||
|
|
b72d20ff86 | ||
|
|
db09f357d1 | ||
|
|
63810ccc81 | ||
|
|
33047797fd | ||
|
|
e32ce9a7ec | ||
|
|
9183c4f04c | ||
|
|
e98e708283 | ||
|
|
513e9325e1 | ||
|
|
9c60ab7be2 | ||
|
|
b23eca2a63 | ||
|
|
0f82e73935 | ||
|
|
0c83bdfc68 | ||
|
|
6495f741b9 | ||
|
|
d3210f0d3d | ||
|
|
a0dce925d4 | ||
|
|
e5f65ff442 | ||
|
|
4944a13bfc | ||
|
|
5465f26c80 | ||
|
|
e60335b635 | ||
|
|
5e799aa6e1 | ||
|
|
c3fcd12bf9 | ||
|
|
16f6176d08 | ||
|
|
158bf52f3b | ||
|
|
d75fd99a50 | ||
|
|
7eceda4b3d | ||
|
|
16d88d9f63 | ||
|
|
0ccd4d1b88 | ||
|
|
c2addaf1a6 | ||
|
|
9af36fc50c | ||
|
|
4ea2772a8d | ||
|
|
15f9762d01 | ||
|
|
07e416c2f4 | ||
|
|
d977cb8019 | ||
|
|
ab943729a6 | ||
|
|
d7b700f781 | ||
|
|
8bbc68ca75 | ||
|
|
e1c0d046cb | ||
|
|
023e0fc934 | ||
|
|
063a3fa524 | ||
|
|
22eae288cb | ||
|
|
765edee509 | ||
|
|
75647a5e24 | ||
|
|
194979be6d | ||
|
|
43ff675b5e |
@@ -33,27 +33,5 @@ Events::on('loadRenderers', function ($renderers) {
|
||||
);
|
||||
});
|
||||
|
||||
//Tempus Renderers:
|
||||
Events::on('loadTempusRenderers', function ($renderers) {
|
||||
$fhc_core_renderers =& $renderers();
|
||||
$fhc_core_renderers["reservierung"] = array(
|
||||
'calendarEvent' => absoluteJsImportUrl('public/js/components/Tempus/Renderer/Reservierungen/calendarEvent.js'),
|
||||
'modalTitle' => absoluteJsImportUrl('public/js/components/Tempus/Renderer/Reservierungen/modalTitle.js'),
|
||||
'modalContent' => absoluteJsImportUrl('public/js/components/Tempus/Renderer/Reservierungen/modalContent.js'),
|
||||
'calendarEventStyles' => APP_ROOT . 'public/css/Cis4/CoreCalendarEvents.css'
|
||||
);
|
||||
});
|
||||
|
||||
Events::on('loadTempusRenderers', function ($renderers) {
|
||||
$fhc_core_renderers =& $renderers();
|
||||
$fhc_core_renderers["lehreinheit"] = array(
|
||||
'calendarEvent' => absoluteJsImportUrl('public/js/components/Tempus/Renderer/Lehreinheit/calendarEvent.js'),
|
||||
'modalTitle' => absoluteJsImportUrl('public/js/components/Tempus/Renderer/Lehreinheit/modalTitle.js'),
|
||||
'modalContent' => absoluteJsImportUrl('public/js/components/Tempus/Renderer/Lehreinheit/modalContent.js'),
|
||||
'calendarEventStyles' => APP_ROOT . 'public/css/Cis4/CoreCalendarEvents.css'
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -3,3 +3,4 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
$config['infocenter_studiengang_kz'] = '10021, 10027, 10002';
|
||||
$config['infocenter_qualifikationskurs_kz'] = '10002';
|
||||
|
||||
@@ -193,7 +193,7 @@ $config['navigation_header'] = array(
|
||||
'description' => 'Extensions Manager',
|
||||
'expand' => true,
|
||||
'sort' => 10,
|
||||
'requiredPermissions' => 'admin:r'
|
||||
'requiredPermissions' => 'system/extensions:r'
|
||||
),
|
||||
'logsviewer' => array(
|
||||
'link' => site_url('system/LogsViewer'),
|
||||
@@ -206,7 +206,14 @@ $config['navigation_header'] = array(
|
||||
'link' => site_url('system/jq/JobsQueueViewer'),
|
||||
'description' => 'Jobs Queue Viewer',
|
||||
'expand' => true,
|
||||
'sort' => 20,
|
||||
'sort' => 30,
|
||||
'requiredPermissions' => 'system/developer:r'
|
||||
),
|
||||
'phrasesviewer' => array(
|
||||
'link' => site_url('system/phrases/PhrasesViewer'),
|
||||
'description' => 'Phrases viewer',
|
||||
'expand' => true,
|
||||
'sort' => 40,
|
||||
'requiredPermissions' => 'system/developer:r'
|
||||
),
|
||||
'anrechnungen' => array(
|
||||
|
||||
@@ -140,8 +140,6 @@ $route['api/frontend/v1/treemenudata/lvverwaltung/stdsem/(:any)/emp/(:any)/stg/(
|
||||
// load routes from extensions, also look for environment-specific configs
|
||||
$subdirs = ['application/config/extensions', 'application/config/' . ENVIRONMENT . '/extensions'];
|
||||
|
||||
$route['api/frontend/v1/tempus/Tags/getTagsByCalendar/(:num)'] = 'api/frontend/v1/tempus/Tags/getTagsByCalendar/$1';
|
||||
|
||||
foreach($subdirs as $subdir)
|
||||
{
|
||||
if(is_dir($subdir))
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
<?php
|
||||
|
||||
$config['send_update_mails'] = false;
|
||||
$config['calendar_start'] = 7;
|
||||
$config['calendar_end'] = 23;
|
||||
|
||||
|
||||
$config['tempus_tags'] = [
|
||||
'prioone' => ['readonly' => false],
|
||||
'priotwo' => ['readonly' => true],
|
||||
'hinweis' => ['readonly' => false],
|
||||
];
|
||||
@@ -27,8 +27,3 @@ $config['lvv'] = [
|
||||
"library" => "treemenu/LvVwLib",
|
||||
"permissions" => ["admin:r", "assistenz:r"]
|
||||
];
|
||||
|
||||
$config['tempus'] = [
|
||||
"library" => "treemenu/TempusLib",
|
||||
"permissions" => ["admin:r", "assistenz:r", "lehre/lvplan:r"]
|
||||
];
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
if (!defined('BASEPATH'))
|
||||
exit('No direct script access allowed');
|
||||
|
||||
class Compat extends Auth_Controller
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct([
|
||||
'ci' => ['basis/cis:r'],
|
||||
'legacy' => ['basis/cis:r'],
|
||||
|
||||
]);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Public methods
|
||||
|
||||
|
||||
/**
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function ci()
|
||||
{
|
||||
$this->load->view('CisRouterView/CisRouterView.php',['route' => 'Compat']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function legacy()
|
||||
{
|
||||
$this->load->view('CisRouterView/CisRouterView.php',['route' => 'Compat']);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,69 +0,0 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class Tempus extends Auth_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$permissions = [];
|
||||
$router = load_class('Router');
|
||||
$permissions[$router->method] = ['admin:r', 'assistenz:r'];
|
||||
parent::__construct($permissions);
|
||||
|
||||
// Load Libraries
|
||||
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||
|
||||
// Load Config
|
||||
$this->load->config('calendar');
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
$this->_loadView();
|
||||
}
|
||||
|
||||
public function sync()
|
||||
{
|
||||
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
$this->load->model('organisation/Studienplan_model', 'StudienplanModel');
|
||||
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||
$this->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel');
|
||||
$this->load->model('ressource/Kalenderstatus_model', 'KalenderStatusModel');
|
||||
|
||||
$this->OrganisationseinheitModel->addJoin('tbl_studiengang', 'oe_kurzbz', 'LEFT');
|
||||
|
||||
$this->OrganisationseinheitModel->addSelect('public.tbl_organisationseinheit.organisationseinheittyp_kurzbz,
|
||||
public.tbl_organisationseinheit.bezeichnung,
|
||||
public.tbl_studiengang.studiengang_kz,
|
||||
public.tbl_organisationseinheit.oe_kurzbz,
|
||||
tbl_studiengang.typ,
|
||||
COALESCE(public.tbl_studiengang.bezeichnung, \'\') as stgbezeichnung');
|
||||
$this->OrganisationseinheitModel->addOrder('tbl_organisationseinheit.aktiv', 'DESC');
|
||||
$this->OrganisationseinheitModel->addOrder('tbl_organisationseinheit.organisationseinheittyp_kurzbz');
|
||||
$organisationen = getData($this->OrganisationseinheitModel->loadWhere(array("tbl_organisationseinheit.aktiv" => true)));
|
||||
|
||||
|
||||
$this->StudiensemesterModel->addOrder('start', 'DESC');
|
||||
$studiensemestern = getData($this->StudiensemesterModel->load());
|
||||
|
||||
$this->_loadView(array('organisationen' => $organisationen, 'studiensemestern' => $studiensemestern));
|
||||
}
|
||||
|
||||
private function _loadView($extraVariables = [])
|
||||
{
|
||||
$this->load->view('Tempus', [
|
||||
'permissions' => [
|
||||
'admin' => $this->permissionlib->isBerechtigt('admin'),
|
||||
'stundenraster' => $this->permissionlib->isBerechtigt('basis/tempus_stundenraster'),
|
||||
],
|
||||
'variables' => array_merge([
|
||||
'semester_aktuell' => $this->variablelib->getVar('semester_aktuell'),
|
||||
'timezone' => $this->config->item('timezone')
|
||||
], $extraVariables)
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -67,8 +67,11 @@ class CisMenu extends FHCAPI_Controller
|
||||
|
||||
private function generateUrlForMenuItem($menuItem)
|
||||
{
|
||||
$menuItem->url = $this->menuItemUrlHelper($menuItem);
|
||||
unset($menuItem->content);
|
||||
if(!isset($menuItem->url))
|
||||
{
|
||||
$menuItem->url = $this->menuItemUrlHelper($menuItem);
|
||||
unset($menuItem->content);
|
||||
}
|
||||
|
||||
if ($menuItem->childs && count($menuItem->childs)) {
|
||||
$menuItem->childs = $this->generateUrlsForMenuItems($menuItem->childs);
|
||||
@@ -83,7 +86,7 @@ class CisMenu extends FHCAPI_Controller
|
||||
return site_url("/CisVue/Cms/content/" . $menuItem->content_id);
|
||||
}
|
||||
|
||||
if (!$menuItem->content || !mb_strlen($menuItem->content)) {
|
||||
if (!isset($menuItem->content) || !$menuItem->content || !mb_strlen($menuItem->content)) {
|
||||
return '';
|
||||
}
|
||||
|
||||
@@ -91,6 +94,8 @@ class CisMenu extends FHCAPI_Controller
|
||||
$doc->loadXML($menuItem->content);
|
||||
$urlElem = $doc->getElementsByTagName('url')->item(0);
|
||||
|
||||
$this->menuItemUrlTargetHelper($menuItem, $doc);
|
||||
|
||||
if (!$urlElem) {
|
||||
return '';
|
||||
}
|
||||
@@ -122,5 +127,18 @@ class CisMenu extends FHCAPI_Controller
|
||||
return $url;
|
||||
}
|
||||
|
||||
private function menuItemUrlTargetHelper($menuItem, $xmldoc)
|
||||
{
|
||||
if($menuItem->template_kurzbz === 'redirect')
|
||||
{
|
||||
$targetElem = $xmldoc->getElementsByTagName('target')->item(0);
|
||||
$target = ($targetElem) ? $targetElem->textContent : '';
|
||||
if(!in_array($target, array('_self', '_top', '_blank')))
|
||||
{
|
||||
$target = '_self';
|
||||
}
|
||||
$menuItem->target = $target;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@ class Lehrveranstaltung extends FHCAPI_Controller
|
||||
{
|
||||
$studiengang_kz = $this->getStudiengangKz($stg_kz);
|
||||
|
||||
if (is_null($studiengang_kz) || !preg_match("/^-?[1-9][0-9]*$/", (string)$studiengang_kz))
|
||||
if (is_null($studiengang_kz) || !preg_match("/^(-?[1-9][0-9]*|0)$/", (string)$studiengang_kz))
|
||||
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||
|
||||
$verband = null;
|
||||
|
||||
@@ -31,7 +31,7 @@ class RendererLoader extends FHCAPI_Controller
|
||||
|
||||
parent::__construct([
|
||||
'GetRenderers' => self::PERM_LOGGED,
|
||||
'GetTempusRenderers' => self::PERM_LOGGED,
|
||||
|
||||
]);
|
||||
|
||||
$this->load->library('LogLib');
|
||||
@@ -66,26 +66,6 @@ class RendererLoader extends FHCAPI_Controller
|
||||
$this->terminateWithSuccess($renderer_paths);
|
||||
}
|
||||
|
||||
public function GetTempusRenderers(){
|
||||
$renderer_paths = [];
|
||||
Events::trigger(
|
||||
'loadRenderers',
|
||||
function & () use (&$renderer_paths)
|
||||
{
|
||||
return $renderer_paths;
|
||||
}
|
||||
);
|
||||
|
||||
Events::trigger(
|
||||
'loadTempusRenderers',
|
||||
function & () use (&$renderer_paths)
|
||||
{
|
||||
return $renderer_paths;
|
||||
}
|
||||
);
|
||||
$this->terminateWithSuccess($renderer_paths);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -167,7 +167,9 @@ class Studium extends FHCAPI_Controller
|
||||
if($aktuelles_studienplan){
|
||||
$lehrveranstaltungen = $this->computeStudienplanLehrveranstaltungen($aktuelles_studienplan->studienplan_id, $aktuelles_semester);
|
||||
foreach($lehrveranstaltungen as $lehrv){
|
||||
foreach($lehrv->lehrveranstaltungen as $lv){
|
||||
// a lehrveranstaltung without a modul has no children and gets its lektoren directly
|
||||
$lvs = isset($lehrv->lehrveranstaltungen) ? $lehrv->lehrveranstaltungen : [$lehrv];
|
||||
foreach($lvs as $lv){
|
||||
$lvLektoren =$this->computeLektorenFromLehrveranstaltung($lv->lehrveranstaltung_id,$aktuelles_semester, $aktuelles_studiengang->studiengang_kz, $aktuelles_studiensemester->studiensemester_kurzbz);
|
||||
$lv->lektoren = $lvLektoren;
|
||||
}
|
||||
@@ -286,6 +288,7 @@ SELECT tbl_lehrveranstaltung.*,
|
||||
$lehrveranstaltungen = $this->LehrveranstaltungModel->execReadOnlyQuery($query,[$studienplan_id, $semester]);
|
||||
|
||||
$lehrveranstaltungen = $this->getDataOrTerminateWithError($lehrveranstaltungen);
|
||||
|
||||
usort($lehrveranstaltungen, function($a, $b){
|
||||
if($a->lehrtyp_kurzbz == "modul"){
|
||||
return -1;
|
||||
@@ -302,12 +305,17 @@ SELECT tbl_lehrveranstaltung.*,
|
||||
}
|
||||
else{
|
||||
$parent =array_filter($carry, function($item)use($lehrv){
|
||||
return $item->studienplan_lehrveranstaltung_id == $lehrv->studienplan_lehrveranstaltung_id_parent;
|
||||
return isset($item->lehrveranstaltungen)
|
||||
&& $item->studienplan_lehrveranstaltung_id == $lehrv->studienplan_lehrveranstaltung_id_parent;
|
||||
});
|
||||
$parent = current($parent);
|
||||
if($parent){
|
||||
$parent->lehrveranstaltungen[] = $lehrv;
|
||||
}
|
||||
else{
|
||||
// lehrveranstaltung without a modul: keep it on the top level
|
||||
array_push($carry, $lehrv);
|
||||
}
|
||||
}
|
||||
return $carry;
|
||||
}, []);
|
||||
|
||||
@@ -184,17 +184,54 @@ class Gruppe extends FHCAPI_Controller
|
||||
|
||||
$query_words = explode(' ', $query);
|
||||
|
||||
$gruppen_result = $this->_ci->GruppeModel->search($query_words);
|
||||
$this->_ci->GruppeModel->addSelect('gruppe_kurzbz,
|
||||
studiengang_kz,
|
||||
semester,
|
||||
bezeichnung,
|
||||
gid,
|
||||
\'false\' as lehrverband');
|
||||
$this->_ci->GruppeModel->db->where(array('sichtbar' => true, 'aktiv' => true, 'lehre' => true, 'direktinskription' => false, 'semester IS NOT NULL' => null));
|
||||
$this->_ci->GruppeModel->db->group_start();
|
||||
foreach ($query_words as $word)
|
||||
{
|
||||
$this->_ci->GruppeModel->db->group_start();
|
||||
$this->_ci->GruppeModel->db->where('gruppe_kurzbz ILIKE', "%" . $word . "%");
|
||||
$this->_ci->GruppeModel->db->or_where('bezeichnung ILIKE', "%" . $word . "%");
|
||||
$this->_ci->GruppeModel->db->group_end();
|
||||
}
|
||||
$this->_ci->GruppeModel->db->group_end();
|
||||
|
||||
$gruppen_result = $this->_ci->GruppeModel->load();
|
||||
|
||||
$gruppen_array = array();
|
||||
|
||||
if (isError($gruppen_result))
|
||||
$this->terminateWithError(getError($gruppen_result), self::ERROR_TYPE_GENERAL);
|
||||
|
||||
$gruppen_array = array();
|
||||
|
||||
if (hasData($gruppen_result))
|
||||
$gruppen_array = getData($gruppen_result);
|
||||
|
||||
$lehrverband_result = $this->_ci->LehrverbandModel->search($query_words);
|
||||
$this->_ci->LehrverbandModel->addSelect('CONCAT(UPPER(CONCAT(typ, kurzbz)), \'\', semester, verband, COALESCE(gruppe,\'\')) as gruppe_kurzbz,
|
||||
studiengang_kz,
|
||||
semester,
|
||||
tbl_lehrverband.bezeichnung,
|
||||
gid,
|
||||
\'true\' as lehrverband');
|
||||
$this->_ci->LehrverbandModel->addJoin('public.tbl_studiengang', 'studiengang_kz');
|
||||
$this->_ci->LehrverbandModel->addOrder('verband');
|
||||
$this->_ci->LehrverbandModel->addOrder('gruppe');
|
||||
$this->_ci->LehrverbandModel->db->where(array('tbl_lehrverband.aktiv' => true));
|
||||
|
||||
$this->_ci->LehrverbandModel->db->group_start();
|
||||
foreach ($query_words as $word)
|
||||
{
|
||||
$this->_ci->LehrverbandModel->db->group_start();
|
||||
$this->_ci->LehrverbandModel->db->where('CONCAT(CONCAT(typ, kurzbz), \'\', semester, verband, COALESCE(gruppe,\'\')) ILIKE', "%" . $word . "%");
|
||||
$this->_ci->LehrverbandModel->db->or_where('tbl_lehrverband.bezeichnung ILIKE', "%" . $word . "%");
|
||||
$this->_ci->LehrverbandModel->db->group_end();
|
||||
}
|
||||
$this->_ci->LehrverbandModel->db->group_end();
|
||||
$lehrverband_result = $this->_ci->LehrverbandModel->load();
|
||||
|
||||
$lehrverband_array = array();
|
||||
|
||||
|
||||
@@ -370,6 +370,7 @@ class LvTermine extends FHCAPI_Controller
|
||||
$result->semester = $item->semester;
|
||||
$result->verband = $item->verband;
|
||||
$result->gruppe = $item->gruppe;
|
||||
$result->studiensemester_kurzbz = $item->studiensemester_kurzbz;
|
||||
return $result;
|
||||
},
|
||||
$lehrverband_query_result));
|
||||
|
||||
@@ -42,6 +42,8 @@ class Projektarbeit extends FHCAPI_Controller
|
||||
$this->load->model('education/Note_model', 'NoteModel');
|
||||
$this->load->model('education/Projektbetreuer_model', 'BetreuerModel');
|
||||
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
$this->load->model('crm/Student_model', 'StudentModel');
|
||||
$this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
|
||||
|
||||
// load libraries
|
||||
$this->load->library('PermissionLib');
|
||||
@@ -100,16 +102,16 @@ class Projektarbeit extends FHCAPI_Controller
|
||||
private function fetchProjektarbeitById($projektarbeit_id) {
|
||||
$this->ProjektarbeitModel->resetQuery();
|
||||
$this->ProjektarbeitModel->addSelect(
|
||||
'lehre.tbl_projektarbeit.projektarbeit_id, titel, titel_english, themenbereich, projekttyp_kurzbz, lehrveranstaltung_id, lehreinheit_id,
|
||||
firma_id, beginn, ende, gesperrtbis, note, final, freigegeben, tbl_projektarbeit.anmerkung, fa.name AS firma_name'
|
||||
'lehre.tbl_projektarbeit.projektarbeit_id, titel, titel_english, themenbereich, projekttyp_kurzbz, lehrveranstaltung_id, lehreinheit_id,
|
||||
tbl_projektarbeit.studiensemester_kurzbz, firma_id, beginn, ende, gesperrtbis, note, final, freigegeben, tbl_projektarbeit.anmerkung, fa.name AS firma_name'
|
||||
);
|
||||
$this->ProjektarbeitModel->addJoin('lehre.tbl_lehreinheit le', 'lehreinheit_id');
|
||||
$this->ProjektarbeitModel->addJoin('lehre.tbl_lehrveranstaltung lv', 'lehrveranstaltung_id');
|
||||
$this->ProjektarbeitModel->addJoin('public.tbl_firma fa', 'firma_id', 'LEFT');
|
||||
|
||||
|
||||
return $this->ProjektarbeitModel->loadWhere(
|
||||
array('projektarbeit_id' => $projektarbeit_id)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -246,14 +248,38 @@ class Projektarbeit extends FHCAPI_Controller
|
||||
$additional_lehrveranstaltung_id = $this->input->get('additional_lehrveranstaltung_id');
|
||||
|
||||
if (!isset($student_uid)) $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Student UID']), self::ERROR_TYPE_GENERAL);
|
||||
if (!isset($studiensemester_kurzbz)) $this->terminateWithError('Studiensemster missing', self::ERROR_TYPE_GENERAL);
|
||||
if (!isset($studiensemester_kurzbz)) $this->terminateWithError('Studiensemester missing', self::ERROR_TYPE_GENERAL);
|
||||
|
||||
// get Lvs
|
||||
// get prestudent_id from student model
|
||||
$studentRes = $this->StudentModel->load(['student_uid' => $student_uid]);
|
||||
if(hasData($studentRes)) {
|
||||
$student = getData($studentRes);
|
||||
} else {
|
||||
$this->terminateWithError($studentRes, self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
|
||||
// to get prestudent_status history
|
||||
$historyRes = $this->PrestudentstatusModel->getHistoryPrestudent($student[0]->prestudent_id);
|
||||
if(hasData($historyRes)) {
|
||||
$history = getData($historyRes);
|
||||
} else {
|
||||
$this->terminateWithError($historyRes, self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
|
||||
// query for every lva of a studiengang that has projektarbeit flag true
|
||||
$lvsResult = $this->LehrveranstaltungModel->getLvsForProjektarbeit($student_uid, $studiengang_kz, $additional_lehrveranstaltung_id);
|
||||
|
||||
if (isError($lvsResult)) return $this->terminateWithError($lvsResult, self::ERROR_TYPE_GENERAL);
|
||||
|
||||
$lvs = hasData($lvsResult) ? getData($lvsResult) : [];
|
||||
|
||||
$lvsIDs = array_column($lvs, 'lehrveranstaltung_id');
|
||||
|
||||
// get current studienplan_id from status history to find out which lva options are actually assigned to the students studienplan
|
||||
// important so the projektarbeit has the correct lva assigned to be able to find and print the thesis title on the degree documents!
|
||||
$currentStatus = $history[0];
|
||||
$lvByStudienPlanRes = $this->LehrveranstaltungModel->getLvsByStudienplanByLvaIDs($currentStatus->studienplan_id, $lvsIDs);
|
||||
if(hasData($lvByStudienPlanRes)) {
|
||||
$lvs = getData($lvByStudienPlanRes);
|
||||
}
|
||||
|
||||
foreach ($lvs as $lv)
|
||||
{
|
||||
@@ -320,11 +346,18 @@ class Projektarbeit extends FHCAPI_Controller
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Projekttyp'])
|
||||
]);
|
||||
|
||||
$this->form_validation->set_rules('lehreinheit_id', 'Lehreinheit', 'required|is_natural', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Lehreinheit']),
|
||||
$this->form_validation->set_rules('lehreinheit_id', 'Lehreinheit', 'is_natural', [
|
||||
'is_natural' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Lehreinheit'])
|
||||
]);
|
||||
|
||||
$this->form_validation->set_rules('lehrveranstaltung_id', 'Lehrveranstaltung', 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Lehrveranstaltung'])
|
||||
]);
|
||||
|
||||
$this->form_validation->set_rules('studiensemester_kurzbz', 'Studiensemester', 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Studiensemester'])
|
||||
]);
|
||||
|
||||
$this->form_validation->set_rules('beginn', 'Beginn', 'is_valid_date', [
|
||||
'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field' => 'Beginn'])
|
||||
]);
|
||||
@@ -354,6 +387,8 @@ class Projektarbeit extends FHCAPI_Controller
|
||||
'projekttyp_kurzbz' => $formData['projekttyp_kurzbz'],
|
||||
'firma_id' => $formData['firma_id'] ?? null,
|
||||
'lehreinheit_id' => $formData['lehreinheit_id'],
|
||||
'lehrveranstaltung_id' => $formData['lehrveranstaltung_id'],
|
||||
'studiensemester_kurzbz' => $formData['studiensemester_kurzbz'],
|
||||
'beginn' => isset($formData['beginn']) && !isEmptyString($formData['beginn']) ? $formData['beginn'] : null,
|
||||
'ende' => isset($formData['ende']) && !isEmptyString($formData['ende']) ? $formData['ende'] : null,
|
||||
'note' => $formData['note'] ?? null,
|
||||
|
||||
@@ -108,6 +108,7 @@ class Students extends FHCAPI_Controller
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz
|
||||
]);
|
||||
|
||||
$studiensemester_kurzbz = $this->getStudiensemesterKurzbz($studiensemester_kurzbz);
|
||||
|
||||
$this->studentlistlib->addJoin(
|
||||
"(
|
||||
@@ -153,7 +154,8 @@ class Students extends FHCAPI_Controller
|
||||
$this->addMeta('ci_params', [
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz
|
||||
]);
|
||||
|
||||
|
||||
$studiensemester_kurzbz = $this->getStudiensemesterKurzbz($studiensemester_kurzbz);
|
||||
|
||||
$this->studentlistlib->addJoin(
|
||||
"(
|
||||
@@ -213,6 +215,7 @@ class Students extends FHCAPI_Controller
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz
|
||||
]);
|
||||
|
||||
$studiensemester_kurzbz = $this->getStudiensemesterKurzbz($studiensemester_kurzbz);
|
||||
|
||||
$this->studentlistlib->addJoin(
|
||||
"(
|
||||
|
||||
@@ -1,157 +0,0 @@
|
||||
<?php
|
||||
|
||||
if (!defined('BASEPATH'))
|
||||
exit('No direct script access allowed');
|
||||
|
||||
|
||||
class Config extends FHCAPI_Controller
|
||||
{
|
||||
private $_ci;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct([
|
||||
'get' => ['admin:r', 'assistenz:rw', 'lehre/lvplan:rw'],
|
||||
'getHeader' => ['admin:r', 'assistenz:rw', 'lehre/lvplan:rw'],
|
||||
'set' => ['admin:r', 'assistenz:rw', 'lehre/lvplan:rw'],
|
||||
'updateCollision' => ['admin:r', 'assistenz:rw', 'lehre/lvplan:rw'],
|
||||
]);
|
||||
|
||||
// Load Phrases
|
||||
$this->loadPhrases([
|
||||
'ui',
|
||||
]);
|
||||
|
||||
$this->_ci = &get_instance();
|
||||
$this->_ci->load->model('ressource/Kalenderstatus_model', 'KalenderStatusModel');
|
||||
$this->_ci->load->model('system/Variable_model', 'VariableModel');
|
||||
$this->_ci->load->library('VariableLib', array('uid' => getAuthUID()));
|
||||
}
|
||||
|
||||
public function get()
|
||||
{
|
||||
$config = [];
|
||||
|
||||
$var_array = array(
|
||||
'ignore_kollision',
|
||||
'kollision_student',
|
||||
'ignore_reservierung',
|
||||
'ignore_zeitsperre',
|
||||
'ignore_resources_collisions',
|
||||
'roomless_planning',
|
||||
'priority_room_planning',
|
||||
'dialog_room_planning'
|
||||
);
|
||||
$result = $this->_ci->VariableModel->getVariables(getAuthUID(), $var_array);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
$config['ignore_kollision'] = [
|
||||
"type" => "checkbox",
|
||||
"label" => $this->p->t('ui', 'ignore_kollision'),
|
||||
"value" => ($data['ignore_kollision'] ?? 'false') === 'true'
|
||||
|
||||
];
|
||||
|
||||
$config['kollision_student'] = [
|
||||
"type" => "checkbox",
|
||||
"label" => $this->p->t('ui', 'kollision_student'),
|
||||
"value" => ($data['kollision_student'] ?? 'false') === 'true'
|
||||
];
|
||||
|
||||
$config['ignore_reservierung'] = [
|
||||
"type" => "checkbox",
|
||||
"label" => $this->p->t('ui', 'ignore_reservierung'),
|
||||
"value" => ($data['ignore_reservierung'] ?? 'false') === 'true'
|
||||
|
||||
];
|
||||
|
||||
$config['ignore_zeitsperre'] = [
|
||||
"type" => "checkbox",
|
||||
"label" => $this->p->t('ui', 'ignore_zeitsperre'),
|
||||
"value" => ($data['ignore_zeitsperre'] ?? 'false') === 'true'
|
||||
];
|
||||
|
||||
$config['ignore_resources_collisions'] = [
|
||||
"type" => "checkbox",
|
||||
"label" => $this->p->t('ui', 'ignore_resources_collisions'),
|
||||
"value" => ($data['ignore_resources_collisions'] ?? 'false') === 'true'
|
||||
];
|
||||
|
||||
$config['roomless_planning'] = [
|
||||
"type" => "checkbox",
|
||||
"label" => $this->p->t('ui', 'roomless_planning'),
|
||||
"value" => ($data['roomless_planning'] ?? 'false') === 'true'
|
||||
];
|
||||
|
||||
$config['priority_room_planning'] = [
|
||||
"type" => "checkbox",
|
||||
"label" => $this->p->t('ui', 'priority_room_planning'),
|
||||
"value" => ($data['priority_room_planning'] ?? 'false') === 'true'
|
||||
];
|
||||
|
||||
$config['dialog_room_planning'] = [
|
||||
"type" => "checkbox",
|
||||
"label" => $this->p->t('ui', 'dialog_room_planning'),
|
||||
"value" => ($data['dialog_room_planning'] ?? 'false') === 'true'
|
||||
];
|
||||
|
||||
|
||||
$this->terminateWithSuccess($config);
|
||||
}
|
||||
public function getHeader()
|
||||
{
|
||||
$language = getUserLanguage() == 'German' ? 0 : 1;
|
||||
|
||||
$this->_ci->KalenderStatusModel->addSelect('*, array_to_json(bezeichnung_mehrsprachig::varchar[])->>' . $language .' AS status');
|
||||
$this->_ci->KalenderStatusModel->addOrder('sort');
|
||||
$this->_ci->KalenderStatusModel->db->where_not_in('status_kurzbz', array('archived', 'deleted'));
|
||||
$visible_status = $this->_ci->KalenderStatusModel->load();
|
||||
|
||||
$visible_status = getData($visible_status);
|
||||
|
||||
$config['visible_status']['all'] = 'Alle';
|
||||
|
||||
foreach ($visible_status as $status)
|
||||
{
|
||||
$config['visible_status'][$status->status_kurzbz] = $status->status;
|
||||
}
|
||||
|
||||
$this->terminateWithSuccess($config);
|
||||
}
|
||||
|
||||
public function set()
|
||||
{
|
||||
$configs = array(
|
||||
'ignore_kollision',
|
||||
'kollision_student',
|
||||
'ignore_reservierung',
|
||||
'ignore_zeitsperre',
|
||||
'ignore_resources_collisions',
|
||||
'roomless_planning',
|
||||
'priority_room_planning',
|
||||
'dialog_room_planning'
|
||||
);
|
||||
|
||||
foreach ($configs as $config)
|
||||
{
|
||||
$this->_ci->VariableModel->setVariable(
|
||||
getAuthUID(),
|
||||
$config,
|
||||
$this->input->post($config) === true ? 'true' : 'false'
|
||||
);
|
||||
}
|
||||
|
||||
$this->terminateWithSuccess();
|
||||
}
|
||||
|
||||
public function updateCollision()
|
||||
{
|
||||
$original_ignore = $this->_ci->variablelib->getVar('ignore_kollision');
|
||||
$this->_ci->VariableModel->setVariable(
|
||||
getAuthUID(),
|
||||
'ignore_kollision',
|
||||
$original_ignore === 'true' ? 'false' : 'true'
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,276 +0,0 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class Coursepicker extends FHCAPI_Controller
|
||||
{
|
||||
private $_ci;
|
||||
|
||||
const ALLOWED_COURSE_FILTER = ['uid', 'stg'];
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct([
|
||||
'getCourses' => 'lehre/lvplan:rw',
|
||||
]);
|
||||
|
||||
$this->_ci = &get_instance();
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$this->_ci->load->model('education/lehreinheit_model', 'LehreinheitModel');
|
||||
$this->_ci->load->model('education/Lehreinheitmitarbeiter_model', 'LehreinheitmitarbeiterModel');
|
||||
|
||||
|
||||
$this->loadPhrases(['ui']);
|
||||
}
|
||||
|
||||
public function getCourses()
|
||||
{
|
||||
$this->_ci->form_validation->set_data($_POST);
|
||||
$this->_ci->form_validation->set_rules('studiensemester_kurzbz',"studiensemester_kurzbz","required");
|
||||
|
||||
if($this->_ci->form_validation->run() === FALSE)
|
||||
$this->terminateWithValidationErrors($this->_ci->form_validation->error_array());
|
||||
|
||||
$studiensemester_kurzbz = $this->_ci->input->post('studiensemester_kurzbz', TRUE);
|
||||
|
||||
$filter = $this->_checkFilter(self::ALLOWED_COURSE_FILTER);
|
||||
|
||||
$this->_getBasePlan($studiensemester_kurzbz);
|
||||
|
||||
$this->_ci->LehreinheitModel->db->group_start();
|
||||
if (isset($filter->stg))
|
||||
$this->_addStgWhere($filter->stg);
|
||||
|
||||
if (isset($filter->uid))
|
||||
{
|
||||
$uid_array = (array) $filter->uid;
|
||||
$this->_ci->LehreinheitModel->db->or_where_in('tbl_benutzer.uid', $uid_array);
|
||||
}
|
||||
|
||||
$this->_ci->LehreinheitModel->db->group_end();
|
||||
|
||||
$this->_ci->LehreinheitModel->addOrder('lehreinheit_id');
|
||||
$result = $this->_ci->LehreinheitModel->load();
|
||||
$result = hasData($result) ? getData($result) : array();
|
||||
$this->terminateWithSuccess($this->_mapEvents($result));
|
||||
}
|
||||
|
||||
private function _getBasePlan($studiensemester_kurzbz)
|
||||
{
|
||||
$this->_ci->LehreinheitModel->addSelect('
|
||||
tbl_lehreinheit.lehreinheit_id,
|
||||
tbl_lehreinheit.lvnr,
|
||||
tbl_lehreinheit.lehrfach_id,
|
||||
lehrfach.kurzbz AS lehrfach,
|
||||
lehrfach.bezeichnung AS lehrfach_bez,
|
||||
lehrfach.farbe AS lehrfach_farbe,
|
||||
tbl_lehreinheit.lehrform_kurzbz AS lehrform,
|
||||
lema.mitarbeiter_uid AS lektor_uid,
|
||||
ma.kurzbz AS lektor,
|
||||
tbl_person.vorname,
|
||||
tbl_person.nachname,
|
||||
tbl_studiengang.studiengang_kz,
|
||||
upper(tbl_studiengang.typ::character varying::text || tbl_studiengang.kurzbz::text) AS studiengang,
|
||||
lvb.semester,
|
||||
lvb.verband,
|
||||
lvb.gruppe,
|
||||
lvb.gruppe_kurzbz,
|
||||
tbl_lehreinheit.raumtyp,
|
||||
tbl_lehreinheit.raumtypalternativ,
|
||||
tbl_lehreinheit.stundenblockung,
|
||||
tbl_lehreinheit.wochenrythmus,
|
||||
lema.semesterstunden,
|
||||
lema.planstunden,
|
||||
tbl_lehreinheit.start_kw,
|
||||
tbl_lehreinheit.anmerkung,
|
||||
tbl_lehreinheit.studiensemester_kurzbz
|
||||
');
|
||||
$this->_ci->LehreinheitModel->addJoin('lehre.tbl_lehreinheitmitarbeiter lema', 'tbl_lehreinheit.lehreinheit_id = lema.lehreinheit_id');
|
||||
$this->_ci->LehreinheitModel->addJoin('lehre.tbl_lehreinheitgruppe lvb', 'tbl_lehreinheit.lehreinheit_id = lvb.lehreinheit_id');
|
||||
$this->_ci->LehreinheitModel->addJoin('public.tbl_studiengang', 'lvb.studiengang_kz = tbl_studiengang.studiengang_kz');
|
||||
$this->_ci->LehreinheitModel->addJoin('lehre.tbl_lehrveranstaltung', 'tbl_lehreinheit.lehrveranstaltung_id = tbl_lehrveranstaltung.lehrveranstaltung_id');
|
||||
$this->_ci->LehreinheitModel->addJoin('lehre.tbl_lehrveranstaltung lehrfach', 'tbl_lehreinheit.lehrfach_id = lehrfach.lehrveranstaltung_id');
|
||||
$this->_ci->LehreinheitModel->addJoin('public.tbl_mitarbeiter ma', 'lema.mitarbeiter_uid = ma.mitarbeiter_uid');
|
||||
$this->_ci->LehreinheitModel->addJoin('lehre.tbl_lehrform', 'tbl_lehrform.lehrform_kurzbz = tbl_lehreinheit.lehrform_kurzbz');
|
||||
$this->_ci->LehreinheitModel->addJoin('public.tbl_benutzer', 'ma.mitarbeiter_uid = tbl_benutzer.uid');
|
||||
$this->_ci->LehreinheitModel->addJoin('public.tbl_person', 'tbl_benutzer.person_id = tbl_person.person_id');
|
||||
|
||||
$this->_ci->LehreinheitModel->db->group_start();
|
||||
$this->_ci->LehreinheitModel->db->where('tbl_lehrform.verplanen', true);
|
||||
$this->_ci->LehreinheitModel->db->where('tbl_lehreinheit.studiensemester_kurzbz', $studiensemester_kurzbz);
|
||||
$this->_ci->LehreinheitModel->db->group_end();
|
||||
|
||||
}
|
||||
|
||||
private function _addStgWhere($studiengaenge)
|
||||
{
|
||||
$this->_ci->LehreinheitModel->db->group_start();
|
||||
$first = true;
|
||||
foreach ($studiengaenge as $studiengang)
|
||||
{
|
||||
if ($first)
|
||||
$this->_ci->LehreinheitModel->db->group_start();
|
||||
else
|
||||
{
|
||||
$this->_ci->LehreinheitModel->db->or_group_start();
|
||||
}
|
||||
$first = false;
|
||||
|
||||
$this->_ci->LehreinheitModel->db->where('tbl_lehrveranstaltung.studiengang_kz', $studiengang['stg_kz']);
|
||||
|
||||
if (isset($studiengang['semester']))
|
||||
$this->_ci->LehreinheitModel->db->where('tbl_lehrveranstaltung.semester', $studiengang['semester']);
|
||||
|
||||
if (isset($studiengang['orgform_kurzbz']))
|
||||
$this->_ci->LehreinheitModel->db->where('tbl_lehrveranstaltung.orgform_kurzbz', $studiengang['orgform_kurzbz']);
|
||||
|
||||
$this->_ci->LehreinheitModel->db->group_end();
|
||||
}
|
||||
$this->_ci->LehreinheitModel->db->group_end();
|
||||
}
|
||||
|
||||
private function _mapEvents($result)
|
||||
{
|
||||
$lehreinheit_ids = array_values(array_unique(array_column($result, 'lehreinheit_id')));
|
||||
|
||||
$offen_map = array();
|
||||
if (!empty($lehreinheit_ids))
|
||||
{
|
||||
$offen_result = $this->_ci->LehreinheitModel->getOffeneStunden($lehreinheit_ids);
|
||||
if (hasData($offen_result))
|
||||
{
|
||||
foreach (getData($offen_result) as $row)
|
||||
{
|
||||
$offen_map[$row->lehreinheit_id . '_' . $row->mitarbeiter_uid] = $row;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$grouped = array();
|
||||
|
||||
foreach ($result as $row)
|
||||
{
|
||||
$lehreinheit_id = $row->lehreinheit_id;
|
||||
if (!isset($grouped[$lehreinheit_id]))
|
||||
{
|
||||
$grouped[$lehreinheit_id] = (object)array(
|
||||
'lehrfach_id' => $row->lehrfach_id,
|
||||
'lehrfach_bez' => $row->lehrfach_bez,
|
||||
'lehrfach_farbe' => $row->lehrfach_farbe,
|
||||
'studiengang_kz' => $row->studiengang_kz,
|
||||
'studiengang' => $row->studiengang,
|
||||
'semester' => $row->semester,
|
||||
'verband' => $row->verband,
|
||||
'gruppe' => $row->gruppe,
|
||||
'gruppe_kurzbz' => $row->gruppe_kurzbz,
|
||||
'raumtyp' => $row->raumtyp,
|
||||
'raumtypalternativ' => $row->raumtypalternativ,
|
||||
'anmerkung' => $row->anmerkung,
|
||||
'studiensemester_kurzbz' => $row->studiensemester_kurzbz,
|
||||
'fachbereich_kurzbz' => isset($row->fachbereich_kurzbz) ? $row->fachbereich_kurzbz : null,
|
||||
'lektoren' => array(),
|
||||
'lehreinheit_id' => $lehreinheit_id,
|
||||
'lvnr' => array(),
|
||||
'lehrfach' => array(),
|
||||
'lehrform' => array(),
|
||||
'stundenblockung' => array(),
|
||||
'wochenrythmus' => array(),
|
||||
'planstunden' => array(),
|
||||
'start_kw' => array(),
|
||||
'verplant' => array(),
|
||||
'offenestunden' => array(),
|
||||
'lehrverband' => array(),
|
||||
'lem' => array(),
|
||||
'verplant_gesamt' => 0,
|
||||
);
|
||||
}
|
||||
|
||||
$group = $grouped[$lehreinheit_id];
|
||||
|
||||
$group->lektoren[$row->lektor_uid] = (object)array(
|
||||
'uid' => $row->lektor_uid,
|
||||
'kurzbz' => trim($row->lektor),
|
||||
'name' => $row->vorname . ' ' . $row->nachname,
|
||||
);
|
||||
|
||||
$group->lvnr[] = $row->lvnr;
|
||||
$group->lehrfach[] = $row->lehrfach;
|
||||
$group->lehrform[] = $row->lehrform;
|
||||
$group->stundenblockung[] = $row->stundenblockung;
|
||||
$group->wochenrythmus[] = $row->wochenrythmus;
|
||||
$group->planstunden[] = $row->planstunden;
|
||||
$group->start_kw[] = $row->start_kw;
|
||||
|
||||
$offen_key = $lehreinheit_id . '_' . $row->lektor_uid;
|
||||
$offen = isset($offen_map[$offen_key]) ? $offen_map[$offen_key] : null;
|
||||
$verplant_wert = $offen ? $offen->verplant : 0;
|
||||
$offenestunden_wert = $offen ? $offen->offenestunden : 0;
|
||||
|
||||
$group->verplant[] = $verplant_wert;
|
||||
$group->offenestunden[] = $offenestunden_wert;
|
||||
$group->verplant_gesamt += $verplant_wert;
|
||||
|
||||
$lvb = $row->studiengang . '-' . $row->semester;
|
||||
|
||||
if ($row->verband != '' && $row->verband != ' ' && $row->verband != '0' && $row->verband != null)
|
||||
$lvb .= $row->verband;
|
||||
|
||||
if ($row->gruppe != '' && $row->gruppe != ' ' && $row->gruppe != '0' && $row->gruppe != null)
|
||||
$lvb .= $row->gruppe;
|
||||
|
||||
$group->lehrverband[] = ($row->gruppe_kurzbz != '' && $row->gruppe_kurzbz != null) ? $row->gruppe_kurzbz : $lvb;
|
||||
|
||||
$group->lem[] = array(
|
||||
'lehreinheit_id' => $row->lehreinheit_id,
|
||||
'mitarbeiter_uid' => $row->lektor_uid,
|
||||
);
|
||||
}
|
||||
|
||||
foreach ($grouped as $group)
|
||||
{
|
||||
$group->lektoren = array_values($group->lektoren);
|
||||
$group->lehrverband = array_values(array_unique($group->lehrverband));
|
||||
$group->lehrfach = $this->_formatArr($group->lehrfach);
|
||||
$group->lehrform = $this->_formatArr($group->lehrform);
|
||||
$group->stundenblockung = $this->_formatArr($group->stundenblockung);
|
||||
$group->wochenrythmus = $this->_formatArr($group->wochenrythmus);
|
||||
$group->planstunden = $this->_formatArr($group->planstunden);
|
||||
$group->start_kw = $this->_formatArr($group->start_kw);
|
||||
$group->verplant = $this->_formatArr($group->verplant);
|
||||
$group->offenestunden = $this->_formatArr($group->offenestunden);
|
||||
}
|
||||
return array_values($grouped);
|
||||
}
|
||||
private function _formatArr($arr)
|
||||
{
|
||||
$values = array_values(array_unique($arr));
|
||||
$formatted = implode(' ', $values);
|
||||
|
||||
if (count($values) > 1)
|
||||
$formatted .= ' ?';
|
||||
|
||||
return $formatted;
|
||||
}
|
||||
|
||||
private function _checkFilter($filters)
|
||||
{
|
||||
$filter_valid = false;
|
||||
$filter_object = new stdClass();
|
||||
foreach ($filters as $filter)
|
||||
{
|
||||
if ($this->_ci->input->post($filter))
|
||||
{
|
||||
$filter_valid = true;
|
||||
$filter_object->$filter = $this->_ci->input->post($filter);
|
||||
}
|
||||
}
|
||||
|
||||
if (!$filter_valid)
|
||||
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||
|
||||
return $filter_object;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class Favorites extends FHCAPI_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct([
|
||||
'index' => 'lehre/lvplan:rw',
|
||||
'set' => 'lehre/lvplan:rw'
|
||||
]);
|
||||
|
||||
// Load models
|
||||
$this->load->model('system/Variable_model', 'VariableModel');
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
$result = $this->VariableModel->getVariables(getAuthUID(), ['tempus_favorites']);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
if (!$data)
|
||||
$this->terminateWithSuccess(null);
|
||||
else
|
||||
$this->terminateWithSuccess(isset($data['tempus_favorites']) ? $data['tempus_favorites'] : null);
|
||||
}
|
||||
|
||||
public function set()
|
||||
{
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$this->form_validation->set_rules('favorites', 'Favorites', 'required');
|
||||
|
||||
if (!$this->form_validation->run())
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
|
||||
$favorites = $this->input->post('favorites');
|
||||
|
||||
$result = $this->VariableModel->setVariable(getAuthUID(), 'tempus_favorites', $favorites);
|
||||
|
||||
$this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess(true);
|
||||
}
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
<?php
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class Info extends FHCAPI_Controller
|
||||
{
|
||||
|
||||
private $_ci;
|
||||
|
||||
/**
|
||||
* Object initialization
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct([
|
||||
'getStudiengaenge' => 'lehre/lvplan:rw',
|
||||
]);
|
||||
|
||||
$this->_ci =& get_instance();
|
||||
|
||||
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||
|
||||
$this->loadPhrases([
|
||||
'ui'
|
||||
]);
|
||||
|
||||
}
|
||||
|
||||
public function getStudiengaenge()
|
||||
{
|
||||
$this->_ci->StudiengangModel->addDistinct();
|
||||
$this->_ci->StudiengangModel->addSelect('studiengang_kz');
|
||||
$this->_ci->StudiengangModel->addSelect("CONCAT(kurzbzlang, ' (', UPPER(CONCAT(typ, kurzbz)), ') - ', tbl_studiengang.bezeichnung) AS name");
|
||||
|
||||
$result = $this->getDataOrTerminateWithError($this->_ci->StudiengangModel->load());
|
||||
$this->terminateWithSuccess($result);
|
||||
}
|
||||
}
|
||||
@@ -1,514 +0,0 @@
|
||||
<?php
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class Kalender extends FHCAPI_Controller
|
||||
{
|
||||
|
||||
private $_ci;
|
||||
const ALLOWED_PLAN_FILTER = ['ort', 'uid', 'stg'];
|
||||
const ALLOWED_ROOM_FILTER = ['lehreinheit_id', 'kalender_id'];
|
||||
|
||||
const ALLOWED_TO_UPDATE = ['start_time', 'end_time', 'orte'];
|
||||
/**
|
||||
* Object initialization
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct([
|
||||
'getStunden' => 'lehre/lvplan:rw',
|
||||
'getCalendarHours' => 'lehre/lvplan:rw',
|
||||
'getPlan' => 'lehre/lvplan:rw',
|
||||
'getPlanByOrt' => 'lehre/lvplan:rw',
|
||||
'getRaumvorschlag' => 'lehre/lvplan:rw',
|
||||
'getRaumvorschlagSlots' => 'lehre/lvplan:rw',
|
||||
'getLehreinheiten' => 'lehre/lvplan:rw',
|
||||
'getHistory' => 'lehre/lvplan:rw',
|
||||
'deleteEntry' => 'lehre/lvplan:rw',
|
||||
'syncToLecturer' => 'lehre/lvplan:rw',
|
||||
'syncToStudent' => 'lehre/lvplan:rw',
|
||||
'getPlanLecturer' =>'lehre/lvplan:rw',
|
||||
'getPlanStudent' => 'lehre/lvplan:rw',
|
||||
'getZeitwuensche' => 'lehre/lvplan:rw',
|
||||
'getZeitsperren' => 'lehre/lvplan:rw',
|
||||
'updateKalenderEvent' => 'lehre/lvplan:rw',
|
||||
'deleteOrtEntry' => 'lehre/lvplan:rw',
|
||||
'deleteFromKalenderEvent' => 'lehre/lvplan:rw',
|
||||
'addKalenderEvent' => 'lehre/lvplan:rw',
|
||||
'calculateMultiWeekPlan' => 'lehre/lvplan:rw',
|
||||
'confirmMultiWeekPlan' => 'lehre/lvplan:rw',
|
||||
'addToKalenderEvent' => 'lehre/lvplan:rw',
|
||||
'sync' => 'lehre/lvplan:rw',
|
||||
]);
|
||||
|
||||
$this->_ci =& get_instance();
|
||||
|
||||
$this->_ci->load->library('LogLib');
|
||||
$this->_ci->load->library('form_validation');
|
||||
$this->_ci->load->library('KalenderLib');
|
||||
$this->_ci->load->library('KalenderSyncLib');
|
||||
$this->_ci->load->library('RaumvorschlagLib');
|
||||
$this->loadPhrases([
|
||||
'ui'
|
||||
]);
|
||||
$this->_ci->load->config('tempus');
|
||||
|
||||
|
||||
$this->_ci->loglib->setConfigs(array(
|
||||
'classIndex' => 5,
|
||||
'functionIndex' => 5,
|
||||
'lineIndex' => 4,
|
||||
'dbLogType' => 'API', // required
|
||||
'dbExecuteUser' => 'RESTful API'
|
||||
));
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------------
|
||||
// Public methods
|
||||
/**
|
||||
* fetches Stunden layout from database
|
||||
* @access public
|
||||
*
|
||||
*/
|
||||
public function getStunden()
|
||||
{
|
||||
$this->load->model('ressource/Stunde_model', 'StundeModel');
|
||||
|
||||
$this->_ci->StundeModel->addOrder('stunde', 'ASC');
|
||||
$stunden = $this->_ci->StundeModel->load();
|
||||
|
||||
$stunden = $this->getDataOrTerminateWithError($stunden);
|
||||
|
||||
$this->terminateWithSuccess($stunden);
|
||||
}
|
||||
|
||||
public function getCalendarHours()
|
||||
{
|
||||
$calender_start = $this->_ci->config->item('calendar_start') ?? 7;
|
||||
$calender_end = $this->_ci->config->item('calendar_end') ?? 23;
|
||||
|
||||
$this->terminateWithSuccess(array(
|
||||
'start' => $calender_start,
|
||||
'end' => $calender_end
|
||||
));
|
||||
}
|
||||
|
||||
public function getPlan()
|
||||
{
|
||||
$this->_ci->form_validation->set_data($_POST);
|
||||
$this->_ci->form_validation->set_rules('start_date',"start_date","required");
|
||||
$this->_ci->form_validation->set_rules('end_date',"end_date","required");
|
||||
|
||||
if($this->_ci->form_validation->run() === FALSE)
|
||||
$this->terminateWithValidationErrors($this->_ci->form_validation->error_array());
|
||||
|
||||
$start_date = $this->_ci->input->post('start_date', TRUE);
|
||||
$end_date = $this->_ci->input->post('end_date', TRUE);
|
||||
|
||||
$isCollisionCheckEnabled = $this->_ci->input->post('collisionCheck', TRUE) ?? false;
|
||||
$maxDailyEventLimit = $this->_ci->input->post('maxDailyEventLimit', TRUE) ?? false;
|
||||
|
||||
$filter = $this->_checkFilter(self::ALLOWED_PLAN_FILTER);
|
||||
|
||||
$stundenplan_data = $this->_ci->kalenderlib->getPlanForPlanner(
|
||||
$start_date,
|
||||
$end_date,
|
||||
isset($filter->ort) ? $filter->ort : null,
|
||||
isset($filter->uid) ? $filter->uid : null,
|
||||
isset($filter->stg) ? $filter->stg : null,
|
||||
$isCollisionCheckEnabled,
|
||||
$maxDailyEventLimit
|
||||
);
|
||||
|
||||
$this->terminateWithSuccess($stundenplan_data);
|
||||
}
|
||||
|
||||
public function getPlanStudent()
|
||||
{
|
||||
$this->_ci->form_validation->set_data($_GET);
|
||||
$this->_ci->form_validation->set_rules('start_date',"start_date","required");
|
||||
$this->_ci->form_validation->set_rules('end_date',"end_date","required");
|
||||
|
||||
if($this->_ci->form_validation->run() === FALSE)
|
||||
$this->terminateWithValidationErrors($this->_ci->form_validation->error_array());
|
||||
|
||||
$start_date = $this->_ci->input->get('start_date', TRUE);
|
||||
$end_date = $this->_ci->input->get('end_date', TRUE);
|
||||
|
||||
$stundenplan_data = $this->_ci->kalenderlib->getPlanForStudent(
|
||||
$start_date,
|
||||
$end_date
|
||||
);
|
||||
|
||||
$this->terminateWithSuccess($stundenplan_data);
|
||||
}
|
||||
|
||||
public function getPlanLecturer()
|
||||
{
|
||||
$this->_ci->form_validation->set_data($_GET);
|
||||
$this->_ci->form_validation->set_rules('start_date',"start_date","required");
|
||||
$this->_ci->form_validation->set_rules('end_date',"end_date","required");
|
||||
|
||||
if($this->_ci->form_validation->run() === FALSE)
|
||||
$this->terminateWithValidationErrors($this->_ci->form_validation->error_array());
|
||||
|
||||
$start_date = $this->_ci->input->get('start_date', TRUE);
|
||||
$end_date = $this->_ci->input->get('end_date', TRUE);
|
||||
|
||||
$stundenplan_data = $this->_ci->kalenderlib->getPlanForLecturer(
|
||||
$start_date,
|
||||
$end_date
|
||||
);
|
||||
|
||||
$this->terminateWithSuccess($stundenplan_data);
|
||||
}
|
||||
|
||||
public function getPlanByOrt($start_date = null, $end_date = null, $ort = null)
|
||||
{
|
||||
if (!isset($start_date) || !isset($end_date) || !isset($ort))
|
||||
{
|
||||
$this->_ci->form_validation->set_data($_GET);
|
||||
$this->_ci->form_validation->set_rules('start_date',"start_date","required");
|
||||
$this->_ci->form_validation->set_rules('end_date',"end_date","required");
|
||||
$this->_ci->form_validation->set_rules('ort',"ort","required");
|
||||
if($this->_ci->form_validation->run() === FALSE)
|
||||
$this->terminateWithValidationErrors($this->_ci->form_validation->error_array());
|
||||
|
||||
$start_date = $this->_ci->input->get('start_date', TRUE);
|
||||
$end_date = $this->_ci->input->get('end_date', TRUE);
|
||||
$ort = $this->_ci->input->get('ort', TRUE);
|
||||
}
|
||||
|
||||
$this->terminateWithSuccess($this->_ci->kalenderlib->getPlanByOrt($start_date, $end_date, $ort));
|
||||
}
|
||||
|
||||
public function getZeitsperren()
|
||||
{
|
||||
$this->_ci->form_validation->set_data($_GET);
|
||||
$this->_ci->form_validation->set_rules('start_date',"start_date","required");
|
||||
$this->_ci->form_validation->set_rules('end_date',"end_date","required");
|
||||
$this->_ci->form_validation->set_rules('emp',"emp","required");
|
||||
if($this->_ci->form_validation->run() === FALSE)
|
||||
$this->terminateWithValidationErrors($this->_ci->form_validation->error_array());
|
||||
|
||||
$start_date = $this->_ci->input->get('start_date', TRUE);
|
||||
$end_date = $this->_ci->input->get('end_date', TRUE);
|
||||
$emp = $this->_ci->input->get('emp', TRUE);
|
||||
|
||||
$stundenplan_data = $this->_ci->kalenderlib->getZeitsperren($start_date, $end_date, $emp);
|
||||
|
||||
$this->terminateWithSuccess($stundenplan_data);
|
||||
}
|
||||
|
||||
public function getZeitwuensche()
|
||||
{
|
||||
$this->_ci->form_validation->set_data($_GET);
|
||||
$this->_ci->form_validation->set_rules('start_date',"start_date","required");
|
||||
$this->_ci->form_validation->set_rules('end_date',"end_date","required");
|
||||
$this->_ci->form_validation->set_rules('emp',"emp","required");
|
||||
|
||||
if($this->_ci->form_validation->run() === FALSE)
|
||||
$this->terminateWithValidationErrors($this->_ci->form_validation->error_array());
|
||||
|
||||
$start_date = $this->_ci->input->get('start_date', TRUE);
|
||||
$end_date = $this->_ci->input->get('end_date', TRUE);
|
||||
$emp = $this->_ci->input->get('emp', TRUE);
|
||||
|
||||
$stundenplan_data = $this->_ci->kalenderlib->getZeitwuensche($start_date, $end_date, $emp);
|
||||
|
||||
$this->terminateWithSuccess($stundenplan_data);
|
||||
}
|
||||
|
||||
public function updateKalenderEvent()
|
||||
{
|
||||
$this->_ci->form_validation->set_data($_POST);
|
||||
$this->_ci->form_validation->set_rules('kalender_id',"kalender_id","required");
|
||||
|
||||
if($this->_ci->form_validation->run() === FALSE)
|
||||
$this->terminateWithValidationErrors($this->_ci->form_validation->error_array());
|
||||
|
||||
$updateFields = $this->_checkUpdate($this->_ci->input->post('updatedInfos', TRUE));
|
||||
$kalender_id = $this->_ci->input->post('kalender_id', TRUE);
|
||||
|
||||
$result = $this->_ci->kalenderlib->updateKalenderEvent($kalender_id, $updateFields->orte ?? null, $updateFields->start_time ?? null, $updateFields->end_time ?? null, $updateFields->location ?? null);
|
||||
|
||||
if (isError($result))
|
||||
$this->terminateWithError(getError($result), $result->code);
|
||||
|
||||
$this->terminateWithSuccess(getData($result));
|
||||
}
|
||||
|
||||
public function deleteOrtEntry()
|
||||
{
|
||||
$this->_ci->form_validation->set_data($_POST);
|
||||
$this->_ci->form_validation->set_rules('kalender_id',"kalender_id","required");
|
||||
|
||||
if($this->_ci->form_validation->run() === FALSE)
|
||||
$this->terminateWithValidationErrors($this->_ci->form_validation->error_array());
|
||||
|
||||
$kalender_id = $this->_ci->input->post('kalender_id', TRUE);
|
||||
$result = $this->_ci->kalenderlib->updateOrt($kalender_id, []);
|
||||
|
||||
if (isError($result))
|
||||
$this->terminateWithError(getError($result), $result->code);
|
||||
|
||||
$this->terminateWithSuccess(getData($result));
|
||||
}
|
||||
|
||||
public function getRaumvorschlag()
|
||||
{
|
||||
$this->_ci->form_validation->set_data($_POST);
|
||||
|
||||
$filter = $this->_checkFilter(self::ALLOWED_ROOM_FILTER);
|
||||
$this->terminateWithSuccess($this->_ci->raumvorschlaglib->getVorschlaege($filter->kalender_id));
|
||||
}
|
||||
|
||||
public function getRaumvorschlagSlots()
|
||||
{
|
||||
$this->_ci->form_validation->set_data($_GET);
|
||||
$this->_ci->form_validation->set_rules('lehreinheit_id',"lehreinheit_id","required");
|
||||
$this->_ci->form_validation->set_rules('start_date',"start_date","required");
|
||||
$this->_ci->form_validation->set_rules('end_date',"end_date","required");
|
||||
|
||||
if($this->_ci->form_validation->run() === FALSE)
|
||||
$this->terminateWithValidationErrors($this->_ci->form_validation->error_array());
|
||||
|
||||
$lehreinheit_id = $this->_ci->input->get('lehreinheit_id', TRUE);
|
||||
$start_date = $this->_ci->input->get('start_date', TRUE);
|
||||
$end_date = $this->_ci->input->get('end_date', TRUE);
|
||||
$this->terminateWithSuccess(getData($this->_ci->raumvorschlaglib->getVorschlaegeSlots($lehreinheit_id, $start_date, $end_date)));
|
||||
}
|
||||
|
||||
public function getLehreinheiten()
|
||||
{
|
||||
$this->_ci->form_validation->set_data($_GET);
|
||||
$this->_ci->form_validation->set_rules('kalender_id', "kalender_id", "required");
|
||||
$kalender_id = $this->_ci->input->get('kalender_id', TRUE);
|
||||
$result = $this->_ci->kalenderlib->getLehreinheiten($kalender_id);
|
||||
|
||||
if (isError($result))
|
||||
$this->terminateWithError(getError($result));
|
||||
|
||||
$this->terminateWithSuccess(hasData($result) ? getData($result) : []);
|
||||
}
|
||||
|
||||
public function getHistory()
|
||||
{
|
||||
$this->_ci->form_validation->set_data($_GET);
|
||||
$this->_ci->form_validation->set_rules('kalender_id',"kalender_id","required");
|
||||
|
||||
if($this->_ci->form_validation->run() === FALSE)
|
||||
$this->terminateWithValidationErrors($this->_ci->form_validation->error_array());
|
||||
|
||||
$kalender_id = $this->_ci->input->get('kalender_id', TRUE);
|
||||
|
||||
$result = $this->_ci->kalenderlib->getHistory($kalender_id);
|
||||
|
||||
if (isError($result))
|
||||
$this->terminateWithError(getError($result));
|
||||
|
||||
$this->terminateWithSuccess(getData($result));
|
||||
}
|
||||
|
||||
public function deleteEntry()
|
||||
{
|
||||
$this->_ci->form_validation->set_data($_POST);
|
||||
$this->_ci->form_validation->set_rules('kalender_id', "kalender_id", "required");
|
||||
|
||||
if($this->_ci->form_validation->run() === FALSE)
|
||||
$this->terminateWithValidationErrors($this->_ci->form_validation->error_array());
|
||||
|
||||
$kalender_id = $this->_ci->input->post('kalender_id', TRUE);
|
||||
|
||||
$result = $this->_ci->kalenderlib->deleteEntry($kalender_id);
|
||||
|
||||
if (isError($result))
|
||||
$this->terminateWithError(getError($result));
|
||||
|
||||
$this->terminateWithSuccess(getData($result));
|
||||
}
|
||||
|
||||
public function sync()
|
||||
{
|
||||
$result = $this->_ci->kalendersynclib->sync();
|
||||
$this->terminateWithSuccess(getData($result));
|
||||
}
|
||||
public function syncToLecturer()
|
||||
{
|
||||
$this->_ci->form_validation->set_data($_POST);
|
||||
$this->_ci->form_validation->set_rules('kalender_id', "kalender_id", "required");
|
||||
|
||||
if($this->_ci->form_validation->run() === FALSE)
|
||||
$this->terminateWithValidationErrors($this->_ci->form_validation->error_array());
|
||||
|
||||
$kalender_id = $this->_ci->input->post('kalender_id', TRUE);
|
||||
|
||||
$result = $this->_ci->kalenderlib->updateStatus($kalender_id, 'sync_preview');
|
||||
|
||||
if (isError($result))
|
||||
$this->terminateWithError(getError($result));
|
||||
|
||||
$this->terminateWithSuccess(getData($result));
|
||||
}
|
||||
public function syncToStudent()
|
||||
{
|
||||
$this->_ci->form_validation->set_data($_POST);
|
||||
$this->_ci->form_validation->set_rules('kalender_id', "kalender_id", "required");
|
||||
|
||||
if($this->_ci->form_validation->run() === FALSE)
|
||||
$this->terminateWithValidationErrors($this->_ci->form_validation->error_array());
|
||||
|
||||
$kalender_id = $this->_ci->input->post('kalender_id', TRUE);
|
||||
|
||||
$result = $this->_ci->kalenderlib->updateStatus($kalender_id, 'sync_live');
|
||||
|
||||
if (isError($result))
|
||||
$this->terminateWithError(getError($result));
|
||||
|
||||
$this->terminateWithSuccess(getData($result));
|
||||
}
|
||||
public function addKalenderEvent()
|
||||
{
|
||||
$this->_ci->form_validation->set_data($_POST);
|
||||
$this->_ci->form_validation->set_rules('lehreinheit_id',"lehreinheit_id","required");
|
||||
$this->_ci->form_validation->set_rules('start_date',"start_date","required");
|
||||
$this->_ci->form_validation->set_rules('end_date',"end_date","required");
|
||||
|
||||
if($this->_ci->form_validation->run() === FALSE)
|
||||
$this->terminateWithValidationErrors($this->_ci->form_validation->error_array());
|
||||
|
||||
$lehreinheit_id = $this->_ci->input->post('lehreinheit_id', TRUE);
|
||||
$ort_kurzbz = $this->_ci->input->post('ort_kurzbz', TRUE);
|
||||
$start_date = $this->_ci->input->post('start_date', TRUE);
|
||||
$end_date = $this->_ci->input->post('end_date', TRUE);
|
||||
$result = $this->_ci->kalenderlib->addKalenderEvent($start_date, $end_date, $lehreinheit_id, $ort_kurzbz);
|
||||
|
||||
if (isError($result))
|
||||
$this->terminateWithError(getError($result));
|
||||
|
||||
$this->terminateWithSuccess(getData($result));
|
||||
}
|
||||
|
||||
public function calculateMultiWeekPlan()
|
||||
{
|
||||
$this->_ci->form_validation->set_data($_POST);
|
||||
$this->_ci->form_validation->set_rules('lehreinheit_id',"lehreinheit_id","required");
|
||||
$this->_ci->form_validation->set_rules('start_date',"start_date","required");
|
||||
$this->_ci->form_validation->set_rules('end_date',"end_date","required");
|
||||
|
||||
if($this->_ci->form_validation->run() === FALSE)
|
||||
$this->terminateWithValidationErrors($this->_ci->form_validation->error_array());
|
||||
|
||||
$lehreinheit_id = $this->_ci->input->post('lehreinheit_id', TRUE);
|
||||
$ort_kurzbz = $this->_ci->input->post('ort_kurzbz', TRUE);
|
||||
$start_date = $this->_ci->input->post('start_date', TRUE);
|
||||
$end_date = $this->_ci->input->post('end_date', TRUE);
|
||||
|
||||
$result = $this->_ci->kalenderlib->calculateMultiWeekPlan($start_date, $end_date, $lehreinheit_id, $ort_kurzbz);
|
||||
|
||||
if (isError($result))
|
||||
$this->terminateWithError(getError($result));
|
||||
|
||||
$this->terminateWithSuccess(getData($result));
|
||||
}
|
||||
|
||||
public function confirmMultiWeekPlan()
|
||||
{
|
||||
$this->_ci->form_validation->set_data($_POST);
|
||||
$this->_ci->form_validation->set_rules('plan[]',"plan","required");
|
||||
$this->_ci->form_validation->set_rules('lehreinheit_id',"lehreinheit_id","required");
|
||||
|
||||
if($this->_ci->form_validation->run() === FALSE)
|
||||
$this->terminateWithValidationErrors($this->_ci->form_validation->error_array());
|
||||
|
||||
$plan = $this->_ci->input->post('plan', TRUE);
|
||||
$lehreinheit_id = $this->_ci->input->post('lehreinheit_id', TRUE);
|
||||
|
||||
$result = $this->_ci->kalenderlib->confirmMultiWeekPlan($plan, $lehreinheit_id);
|
||||
|
||||
if (isError($result))
|
||||
$this->terminateWithError(getError($result));
|
||||
|
||||
$this->terminateWithSuccess(getData($result));
|
||||
}
|
||||
|
||||
public function addToKalenderEvent()
|
||||
{
|
||||
$this->_ci->form_validation->set_data($_POST);
|
||||
$this->_ci->form_validation->set_rules('target_kalender_id',"target_kalender_id","required");
|
||||
$this->_ci->form_validation->set_rules('lehreinheit_id',"lehreinheit_id","required");
|
||||
|
||||
if($this->_ci->form_validation->run() === FALSE)
|
||||
$this->terminateWithValidationErrors($this->_ci->form_validation->error_array());
|
||||
|
||||
$target_kalender_id = $this->_ci->input->post('target_kalender_id', TRUE);
|
||||
$lehreinheit_id = $this->_ci->input->post('lehreinheit_id', TRUE);
|
||||
|
||||
$result = $this->_ci->kalenderlib->addToKalenderEvent($target_kalender_id, $lehreinheit_id);
|
||||
|
||||
if (isError($result))
|
||||
$this->terminateWithError(getError($result));
|
||||
|
||||
$this->terminateWithSuccess(getData($result));
|
||||
}
|
||||
|
||||
public function deleteFromKalenderEvent()
|
||||
{
|
||||
$this->_ci->form_validation->set_data($_POST);
|
||||
$this->_ci->form_validation->set_rules('kalender_id',"kalender_id","required");
|
||||
$this->_ci->form_validation->set_rules('lehreinheit_ids[]',"lehreinheit_ids","required");
|
||||
|
||||
|
||||
if($this->_ci->form_validation->run() === FALSE)
|
||||
$this->terminateWithValidationErrors($this->_ci->form_validation->error_array());
|
||||
|
||||
$kalender_id = $this->_ci->input->post('kalender_id', TRUE);
|
||||
$lehreinheit_ids = $this->_ci->input->post('lehreinheit_ids', TRUE);
|
||||
|
||||
$result = $this->_ci->kalenderlib->deleteFromKalenderEvent($kalender_id, $lehreinheit_ids);
|
||||
|
||||
if (isError($result))
|
||||
$this->terminateWithError(getError($result));
|
||||
|
||||
$this->terminateWithSuccess(getData($result));
|
||||
}
|
||||
|
||||
|
||||
private function _checkFilter($filters)
|
||||
{
|
||||
$filter_valid = true;
|
||||
$filter_object = new stdClass();
|
||||
foreach ($filters as $filter)
|
||||
{
|
||||
if ($this->_ci->input->post($filter))
|
||||
{
|
||||
$filter_valid = true;
|
||||
$filter_object->$filter = $this->_ci->input->post($filter);
|
||||
}
|
||||
}
|
||||
|
||||
if (!$filter_valid)
|
||||
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||
|
||||
return $filter_object;
|
||||
}
|
||||
|
||||
private function _checkUpdate($updateInfos)
|
||||
{
|
||||
$update_valid = false;
|
||||
$update_object = new stdClass();
|
||||
foreach (self::ALLOWED_TO_UPDATE as $filter)
|
||||
{
|
||||
if (isset($updateInfos[$filter]))
|
||||
{
|
||||
$update_valid = true;
|
||||
$update_object->$filter = $updateInfos[$filter];
|
||||
}
|
||||
}
|
||||
|
||||
if (!$update_valid)
|
||||
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||
|
||||
|
||||
return $update_object;
|
||||
}
|
||||
}
|
||||
@@ -1,304 +0,0 @@
|
||||
<?php
|
||||
|
||||
if (!defined('BASEPATH'))
|
||||
exit('No direct script access allowed');
|
||||
|
||||
|
||||
class KalenderSync extends FHCAPI_Controller
|
||||
{
|
||||
private $_ci;
|
||||
|
||||
const ALLOWED_STATUS = ['preview', 'live'];
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct([
|
||||
'getSyncs' => ['admin:r', 'assistenz:r'],
|
||||
'loadSync' => ['admin:r', 'assistenz:r'],
|
||||
'add' => ['admin:r', 'assistenz:r'],
|
||||
'start' => ['admin:r', 'assistenz:r'],
|
||||
'delete' => ['admin:r', 'assistenz:r'],
|
||||
'updateSync' => ['admin:r', 'assistenz:r'],
|
||||
'getStudienplan' => ['admin:r', 'assistenz:r'],
|
||||
'getSyncStatus' => ['admin:r', 'assistenz:r'],
|
||||
]);
|
||||
|
||||
$this->loadPhrases([
|
||||
'lehre',
|
||||
]);
|
||||
|
||||
$this->_ci = &get_instance();
|
||||
$this->_ci->load->library('form_validation');
|
||||
$this->_ci->load->model('organisation/Studienplan_model', 'StudienplanModel');
|
||||
$this->_ci->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||
$this->_ci->load->model('ressource/Kalendersyncstatus_model', 'KalendersyncstatusModel');
|
||||
$this->_ci->load->model('ressource/Kalenderstatus_model', 'KalenderStatusModel');
|
||||
$this->_ci->load->library('KalenderSyncLib');
|
||||
}
|
||||
|
||||
public function getSyncs()
|
||||
{
|
||||
$this->_ci->form_validation->set_data($_GET);
|
||||
$this->_ci->form_validation->set_rules('studiensemester_kurzbz',"studiensemester_kurzbz","required");
|
||||
|
||||
if($this->_ci->form_validation->run() === FALSE)
|
||||
$this->terminateWithValidationErrors($this->_ci->form_validation->error_array());
|
||||
$studiensemester_kurzbz = $this->_ci->input->get('studiensemester_kurzbz', TRUE);
|
||||
|
||||
$language = getUserLanguage() == 'German' ? 0 : 1;
|
||||
|
||||
$this->_ci->KalenderStatusModel->addSelect('tbl_kalender_syncstatus.*, array_to_json(bezeichnung_mehrsprachig::varchar[])->>' . $language .' AS sync_status, tbl_organisationseinheit.bezeichnung as oebezeichnung, tbl_studienplan.bezeichnung as studienplanbezeichnung');
|
||||
$this->_ci->KalenderStatusModel->addJoin('lehre.tbl_kalender_status', 'tbl_kalender_syncstatus.sync_status_kurzbz = tbl_kalender_status.status_kurzbz');
|
||||
$this->_ci->KalenderStatusModel->addJoin('public.tbl_organisationseinheit', 'tbl_kalender_syncstatus.oe_kurzbz = tbl_organisationseinheit.oe_kurzbz');
|
||||
$this->_ci->KalenderStatusModel->addJoin('lehre.tbl_studienplan', 'tbl_kalender_syncstatus.studienplan_id = tbl_studienplan.studienplan_id', 'LEFT');
|
||||
$this->_ci->KalenderStatusModel->addJoin('public.tbl_studiensemester', 'tbl_kalender_syncstatus.studiensemester_kurzbz = tbl_studiensemester.studiensemester_kurzbz');
|
||||
$this->_ci->KalenderStatusModel->addOrder('public.tbl_studiensemester.start', 'DESC');
|
||||
|
||||
|
||||
if ($studiensemester_kurzbz === 'all')
|
||||
$data = $this->_ci->KalendersyncstatusModel->load();
|
||||
else
|
||||
$data = $this->_ci->KalendersyncstatusModel->loadWhere(array('tbl_kalender_syncstatus.studiensemester_kurzbz' => $studiensemester_kurzbz));
|
||||
|
||||
if (isError($data))
|
||||
$this->terminateWithError(getError($data));
|
||||
|
||||
$this->terminateWithSuccess(getData($data));
|
||||
}
|
||||
|
||||
public function delete()
|
||||
{
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$this->form_validation->set_rules('kalender_syncstatus_id', 'kalender_syncstatus_id', 'required');
|
||||
|
||||
if (!$this->form_validation->run())
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
|
||||
$kalender_syncstatus_id = $this->input->post('kalender_syncstatus_id');
|
||||
|
||||
$result = $this->_ci->KalendersyncstatusModel->load($kalender_syncstatus_id);
|
||||
|
||||
if (isError($result))
|
||||
$this->terminateWithError(getError($result));
|
||||
|
||||
if (!hasData($result))
|
||||
$this->terminateWithError($this->p->t('lehre', 'errorDeleting'));
|
||||
|
||||
$del_result = $this->_ci->KalendersyncstatusModel->delete(getData($result)[0]->kalender_syncstatus_id);
|
||||
|
||||
if (isError($del_result))
|
||||
$this->terminateWithError(getError($del_result));
|
||||
$this->terminateWithSuccess($del_result);
|
||||
}
|
||||
|
||||
public function loadSync()
|
||||
{
|
||||
$this->_ci->form_validation->set_data($_GET);
|
||||
$this->_ci->form_validation->set_rules('kalender_syncstatus_id',"kalender_syncstatus_id","required");
|
||||
|
||||
if($this->_ci->form_validation->run() === FALSE)
|
||||
$this->terminateWithValidationErrors($this->_ci->form_validation->error_array());
|
||||
$kalender_syncstatus_id = $this->_ci->input->get('kalender_syncstatus_id', TRUE);
|
||||
$data = $this->_ci->KalendersyncstatusModel->loadWhere(array('kalender_syncstatus_id' => $kalender_syncstatus_id));
|
||||
if (isError($data))
|
||||
$this->terminateWithError(getError($data));
|
||||
|
||||
$this->terminateWithSuccess(getData($data)[0]);
|
||||
}
|
||||
|
||||
public function getSyncStatus()
|
||||
{
|
||||
$language = getUserLanguage() == 'German' ? 0 : 1;
|
||||
|
||||
$this->_ci->KalenderStatusModel->addSelect('*, array_to_json(bezeichnung_mehrsprachig::varchar[])->>' . $language .' AS bezeichnung, status_kurzbz');
|
||||
$this->_ci->KalenderStatusModel->db->where_in('status_kurzbz', self::ALLOWED_STATUS);
|
||||
$data = $this->_ci->KalenderStatusModel->load();
|
||||
|
||||
if (isError($data))
|
||||
$this->terminateWithError(getError($data));
|
||||
|
||||
$this->terminateWithSuccess(getData($data));
|
||||
}
|
||||
|
||||
|
||||
public function add()
|
||||
{
|
||||
$formData = $this->input->post('formData');
|
||||
|
||||
$this->_ci->form_validation->set_data($formData);
|
||||
|
||||
$this->_ci->form_validation->set_rules('oe_kurzbz',"oe_kurzbz","required");
|
||||
$this->_ci->form_validation->set_rules('studiensemester_kurzbz',"studiensemester_kurzbz","required");
|
||||
$this->_ci->form_validation->set_rules('sync_status_kurzbz',"sync_status_kurzbz","required");
|
||||
|
||||
if($this->_ci->form_validation->run() === FALSE)
|
||||
$this->terminateWithValidationErrors($this->_ci->form_validation->error_array());
|
||||
|
||||
$ausbildungssemester = isEmptyString($formData['ausbildungssemester']) ? null : $formData['ausbildungssemester'];
|
||||
$studienplan_id = isEmptyString($formData['studienplan_id']) ? null : $formData['studienplan_id'];
|
||||
|
||||
$existing = $this->_checkIfExist(
|
||||
$formData['oe_kurzbz'],
|
||||
$formData['studiensemester_kurzbz'],
|
||||
$ausbildungssemester,
|
||||
$studienplan_id
|
||||
);
|
||||
|
||||
if (isError($existing))
|
||||
$this->terminateWithError(getError($existing));
|
||||
|
||||
if (hasData($existing))
|
||||
{
|
||||
$this->terminateWithError('Es existiert bereits ein Eintrag.');
|
||||
}
|
||||
|
||||
$result = $this->_ci->KalendersyncstatusModel->insert(
|
||||
array(
|
||||
'oe_kurzbz' => $formData['oe_kurzbz'],
|
||||
'studiensemester_kurzbz' => $formData['studiensemester_kurzbz'],
|
||||
'datum_bis' => $formData['datum_bis'],
|
||||
'studienplan_id' => $studienplan_id,
|
||||
'ausbildungssemester' => $ausbildungssemester,
|
||||
'sync_status_kurzbz' => $formData['sync_status_kurzbz'],
|
||||
'mail' => $formData['mail'],
|
||||
'insertvon' => getAuthUID()
|
||||
)
|
||||
);
|
||||
|
||||
$this->terminateWithSuccess($result);
|
||||
}
|
||||
|
||||
|
||||
public function start()
|
||||
{
|
||||
$formData = $this->input->post('formData');
|
||||
|
||||
$this->_ci->form_validation->set_data($formData);
|
||||
|
||||
$this->_ci->form_validation->set_rules('oe_kurzbz',"oe_kurzbz","required");
|
||||
$this->_ci->form_validation->set_rules('studiensemester_kurzbz',"studiensemester_kurzbz","required");
|
||||
$this->_ci->form_validation->set_rules('sync_status_kurzbz',"sync_status_kurzbz","required");
|
||||
|
||||
if($this->_ci->form_validation->run() === FALSE)
|
||||
$this->terminateWithValidationErrors($this->_ci->form_validation->error_array());
|
||||
|
||||
$result = $this->_ci->kalendersynclib->runManual($formData['oe_kurzbz'], $formData['studiensemester_kurzbz'], $formData['ausbildungssemester'], $formData['studienplan_id'], $formData['mail'], $formData['datum_bis'], $formData['sync_status_kurzbz']);
|
||||
|
||||
if (isError($result))
|
||||
$this->terminateWithError(getError($result));
|
||||
|
||||
$this->terminateWithSuccess($result);
|
||||
}
|
||||
public function updateSync()
|
||||
{
|
||||
$formData = $this->input->post('formData');
|
||||
|
||||
$this->_ci->form_validation->set_data($formData);
|
||||
|
||||
$this->_ci->form_validation->set_rules('kalender_syncstatus_id',"kalender_syncstatus_id","required");
|
||||
$this->_ci->form_validation->set_rules('oe_kurzbz',"oe_kurzbz","required");
|
||||
$this->_ci->form_validation->set_rules('studiensemester_kurzbz',"studiensemester_kurzbz","required");
|
||||
$this->_ci->form_validation->set_rules('sync_status_kurzbz',"sync_status_kurzbz","required");
|
||||
|
||||
if($this->_ci->form_validation->run() === FALSE)
|
||||
$this->terminateWithValidationErrors($this->_ci->form_validation->error_array());
|
||||
|
||||
$ausbildungssemester = isEmptyString($formData['ausbildungssemester']) ? null : $formData['ausbildungssemester'];
|
||||
$studienplan_id = isEmptyString($formData['studienplan_id']) ? null : $formData['studienplan_id'];
|
||||
|
||||
$existing = $this->_checkIfExist(
|
||||
$formData['oe_kurzbz'],
|
||||
$formData['studiensemester_kurzbz'],
|
||||
$ausbildungssemester,
|
||||
$studienplan_id,
|
||||
$formData['kalender_syncstatus_id']
|
||||
);
|
||||
|
||||
if (isError($existing))
|
||||
$this->terminateWithError(getError($existing));
|
||||
|
||||
if (hasData($existing))
|
||||
{
|
||||
$this->terminateWithError('Es existiert bereits ein Eintrag.');
|
||||
}
|
||||
|
||||
$this->_ci->KalendersyncstatusModel->update(
|
||||
array('kalender_syncstatus_id' => $formData['kalender_syncstatus_id']),
|
||||
array(
|
||||
'oe_kurzbz' => $formData['oe_kurzbz'],
|
||||
'studiensemester_kurzbz' => $formData['studiensemester_kurzbz'],
|
||||
'datum_bis' => $formData['datum_bis'],
|
||||
'studienplan_id' => $studienplan_id,
|
||||
'ausbildungssemester' => $ausbildungssemester,
|
||||
'sync_status_kurzbz' => $formData['sync_status_kurzbz'],
|
||||
'mail' => $formData['mail'],
|
||||
'updatevon' => getAuthUID(),
|
||||
'updateamum' => date('c'),
|
||||
)
|
||||
);
|
||||
}
|
||||
public function getStudienplan()
|
||||
{
|
||||
$this->_ci->form_validation->set_data($_GET);
|
||||
$this->_ci->form_validation->set_rules('oe_kurzbz',"oe_kurzbz","required");
|
||||
|
||||
if($this->_ci->form_validation->run() === FALSE)
|
||||
$this->terminateWithValidationErrors($this->_ci->form_validation->error_array());
|
||||
|
||||
$oe_kurzbz = $this->_ci->input->get('oe_kurzbz', TRUE);
|
||||
$studiensemester_kurzbz = $this->_ci->input->get('studiensemester_kurzbz', TRUE);
|
||||
$ausbildungssemester = $this->_ci->input->get('ausbildungssemester', TRUE);
|
||||
|
||||
$this->_ci->StudiengangModel->addJoin('tbl_organisationseinheit', 'oe_kurzbz');
|
||||
$is_studiengang = $this->_ci->StudiengangModel->loadWhere(array('oe_kurzbz' => $oe_kurzbz));
|
||||
|
||||
if (hasData($is_studiengang) && !isEmptyString($studiensemester_kurzbz))
|
||||
{
|
||||
$studiengang = getData($is_studiengang)[0];
|
||||
|
||||
$studienplaene = $this->_ci->StudienplanModel->getStudienplaeneBySemester(
|
||||
$studiengang->studiengang_kz,
|
||||
$studiensemester_kurzbz,
|
||||
isEmptyString($ausbildungssemester) ? null : $ausbildungssemester
|
||||
);
|
||||
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($studienplaene);
|
||||
|
||||
$unique = array();
|
||||
foreach ($data as $row)
|
||||
{
|
||||
$unique[$row->studienplan_id] = (object) array(
|
||||
'studienplan_id' => $row->studienplan_id,
|
||||
'studienordnung_id' => $row->studienordnung_id,
|
||||
'bezeichnung' => $row->bezeichnung,
|
||||
'orgform_kurzbz' => $row->orgform_kurzbz
|
||||
);
|
||||
}
|
||||
|
||||
$this->terminateWithSuccess(array_values($unique));
|
||||
}
|
||||
$this->terminateWithSuccess();
|
||||
}
|
||||
|
||||
private function _checkIfExist($oe_kurzbz, $studiensemester_kurzbz, $ausbildungssemester, $studienplan_id, $kalender_syncstatus_id = null)
|
||||
{
|
||||
$this->_ci->KalendersyncstatusModel->db->where('oe_kurzbz', $oe_kurzbz);
|
||||
$this->_ci->KalendersyncstatusModel->db->where('studiensemester_kurzbz', $studiensemester_kurzbz);
|
||||
|
||||
if (is_null($ausbildungssemester))
|
||||
$this->_ci->KalendersyncstatusModel->db->where('ausbildungssemester IS NULL', null, false);
|
||||
else
|
||||
$this->_ci->KalendersyncstatusModel->db->where('ausbildungssemester', $ausbildungssemester);
|
||||
|
||||
if (is_null($studienplan_id))
|
||||
$this->_ci->KalendersyncstatusModel->db->where('studienplan_id IS NULL', null, false);
|
||||
else
|
||||
$this->_ci->KalendersyncstatusModel->db->where('studienplan_id', $studienplan_id);
|
||||
|
||||
if (!is_null($kalender_syncstatus_id))
|
||||
$this->_ci->KalendersyncstatusModel->db->where('kalender_syncstatus_id !=', $kalender_syncstatus_id);
|
||||
return $this->_ci->KalendersyncstatusModel->load();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,84 +0,0 @@
|
||||
<?php
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class OperationalResourceToCalenderAPI extends FHCAPI_Controller
|
||||
{
|
||||
/**
|
||||
* Object initialization
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct([
|
||||
'getAssignedResourcesByCalender' => ['admin:r', 'assistenz:r', 'lehre/lvplan:rw'],
|
||||
'storeResourcesToCalendarRelationship' => ['admin:w', 'assistenz:w', 'lehre/lvplan:rw'],
|
||||
'getSchedulableResourcesByCalendar' => ['admin:r', 'assistenz:r', 'lehre/lvplan:rw'],
|
||||
]);
|
||||
|
||||
$this->load->model('ressource/BetriebsmittelKalender_model', 'BetriebsmittelKalenderModel');
|
||||
$this->load->model('ressource/Betriebsmittel_model', 'BetriebsmittelModel');
|
||||
$this->load->model('ressource/Kalender_model', 'KalenderModel');
|
||||
|
||||
$this->load->library('CollisionChecker');
|
||||
$this->load->library('KalenderLib');
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------------
|
||||
// Public methods
|
||||
public function getSchedulableResourcesByCalendar($calenderID)
|
||||
{
|
||||
if (!isset($calenderID)) $this->terminateWithError("Missing required parameter 'kalender_id'");
|
||||
|
||||
$result = $this->KalenderModel->loadWhere(['kalender_id' => $calenderID]);
|
||||
if (isError($result)) $this->terminateWithError("Calendar with id '$calenderID' does not have a valid group id");
|
||||
|
||||
$calender = $this->getDataOrTerminateWithError($result)[0];
|
||||
if (!isset($calender)) $this->terminateWithError("Calendar with id '$calenderID' not found");
|
||||
|
||||
$result = $this->BetriebsmittelModel->getSchedulableEntriesByDatetimeInterval($calender->von, $calender->bis);
|
||||
$this->terminateWithSuccess($this->getDataOrTerminateWithError($result));
|
||||
}
|
||||
|
||||
public function getAssignedResourcesByCalender($calenderID)
|
||||
{
|
||||
if (!isset($calenderID)) $this->terminateWithError("Missing required parameter 'kalender_id'");
|
||||
|
||||
$result = $this->KalenderModel->loadWhere(['kalender_id' => $calenderID]);
|
||||
if (empty($result)) $this->terminateWithError("Calendar with id '$calenderID' not found");
|
||||
|
||||
$calenderGroupID = $this->getDataOrTerminateWithError($result)[0]->eindeutige_kalender_gruppen_id;
|
||||
if (!isset($calenderGroupID)) $this->terminateWithError("Calendar with id '$calenderID' does not have a valid group id");
|
||||
|
||||
|
||||
$this->BetriebsmittelKalenderModel->addSelect(['tbl_betriebsmittel_kalender.*', 'tbl_betriebsmittel.beschreibung', 'tbl_betriebsmittel.verplanen']);
|
||||
$this->BetriebsmittelKalenderModel->addJoin('wawi.tbl_betriebsmittel', 'betriebsmittel_id');
|
||||
$result = $this->BetriebsmittelKalenderModel->loadWhere([
|
||||
'eindeutige_kalender_gruppen_id' => $calenderGroupID,
|
||||
'tbl_betriebsmittel.verplanen' => true,
|
||||
]);
|
||||
|
||||
$this->terminateWithSuccess($this->getDataOrTerminateWithError($result));
|
||||
}
|
||||
|
||||
public function storeResourcesToCalendarRelationship()
|
||||
{
|
||||
$calenderID = $this->input->post('kalender_id');
|
||||
$assignedResources = $this->input->post('assignedResources');
|
||||
|
||||
if (!isset($calenderID)) $this->terminateWithError("Missing required parameter 'kalender_id'", 'general');
|
||||
if (!isset($assignedResources)) $this->terminateWithError("Missing required parameter 'assignedResources'", 'general');
|
||||
|
||||
$result = $this->KalenderModel->loadWhere(['kalender_id' => $calenderID]);
|
||||
if (empty($result)) $this->terminateWithError("Calendar with id '$calenderID' not found");
|
||||
|
||||
$calendar = $this->getDataOrTerminateWithError($result)[0];
|
||||
|
||||
$calenderGroupID = $calendar->eindeutige_kalender_gruppen_id;
|
||||
if (!isset($calenderGroupID)) $this->terminateWithError("Calendar with id '$calenderID' does not have a valid group id");
|
||||
|
||||
$result = $this->kalenderlib->addOperationalResourcesToKalenderEvent($calendar, $assignedResources);
|
||||
if (isError($result))
|
||||
$this->terminateWithError(getError($result));
|
||||
|
||||
$this->terminateWithSuccess(['message' => 'Resources assigned successfully']);
|
||||
}
|
||||
}
|
||||
@@ -1,233 +0,0 @@
|
||||
<?php
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class Reservierung extends FHCAPI_Controller
|
||||
{
|
||||
private $_ci;
|
||||
|
||||
/**
|
||||
* Object initialization
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct([
|
||||
'addReservierung' => 'lehre/lvplan:rw',
|
||||
'getRollen' => 'lehre/lvplan:rw',
|
||||
'getInformation' => 'lehre/lvplan:rw',
|
||||
'getLektor' => 'lehre/lvplan:rw',
|
||||
'searchGroup' => 'lehre/lvplan:rw',
|
||||
]);
|
||||
|
||||
$this->_ci =& get_instance();
|
||||
|
||||
$this->_ci->load->library('LogLib');
|
||||
$this->_ci->load->library('form_validation');
|
||||
$this->_ci->load->library('KalenderLib');
|
||||
|
||||
$this->_ci->load->model('ressource/Ort_model', 'OrtModel');
|
||||
$this->_ci->load->model('ressource/Kalender_Event_Rolle_model', 'KalenderEventRolleModel');
|
||||
$this->_ci->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||
$this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
$this->_ci->load->model('organisation/gruppe_model', 'GruppeModel');
|
||||
|
||||
|
||||
$this->loadPhrases([
|
||||
'ui'
|
||||
]);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------------
|
||||
// Public methods
|
||||
|
||||
public function getInformation()
|
||||
{
|
||||
$return_array = array('berechtigt' => false, 'studiengaenge' => []);
|
||||
|
||||
$this->_ci->OrtModel->db->join("
|
||||
(select ort,standort_id,strasse, plz
|
||||
FROM public.tbl_standort
|
||||
LEFT JOIN public.tbl_adresse USING(adresse_id)
|
||||
) standort", "standort_id", "LEFT", false);
|
||||
|
||||
$raeume = $this->_ci->OrtModel->loadWhere(array('aktiv' => true, 'reservieren' => true));
|
||||
$return_array['raeume'] = hasData($raeume) ? getData($raeume) : [];
|
||||
|
||||
if (!$this->_ci->permissionlib->isBerechtigt('lehre/reservierung'))
|
||||
$this->terminateWithSuccess($return_array);
|
||||
|
||||
$stg_berechtigungen = $this->_ci->permissionlib->getSTG_isEntitledFor('lehre/reservierung');
|
||||
if (isEmptyArray($stg_berechtigungen))
|
||||
$this->terminateWithSuccess($return_array);
|
||||
|
||||
$this->_ci->StudiengangModel->addSelect('studiengang_kz, UPPER(CONCAT(typ, kurzbz)) as kuerzel, kurzbzlang');
|
||||
$this->_ci->StudiengangModel->addOrder('typ, kurzbz');
|
||||
$this->_ci->StudiengangModel->db->where_in('studiengang_kz', $stg_berechtigungen);
|
||||
$studiengaenge = $this->_ci->StudiengangModel->loadWhere(array('aktiv' => true));
|
||||
|
||||
if (isError($studiengaenge))
|
||||
$this->terminateWithError(getError($studiengaenge));
|
||||
$language = getUserLanguage() == 'German' ? 0 : 1;
|
||||
$this->_ci->KalenderEventRolleModel->addOrder('sort');
|
||||
$this->_ci->KalenderEventRolleModel->addSelect('rolle_kurzbz, array_to_json(bezeichnung_mehrsprachig::varchar[])->>'. $language. ' as bezeichnung');
|
||||
|
||||
$rollen = $this->_ci->KalenderEventRolleModel->load();
|
||||
|
||||
$this->_ci->StudiensemesterModel->addOrder('start', 'DESC');
|
||||
$studiensemester = $this->_ci->StudiensemesterModel->load();
|
||||
|
||||
$return_array['studiengaenge'] = hasData($studiengaenge) ? getData($studiengaenge) : [];
|
||||
$return_array['berechtigt'] = true;
|
||||
$return_array['rollen'] = hasData($rollen) ? getData($rollen) : [];
|
||||
$return_array['studiensemester'] = hasData($studiensemester) ? getData($studiensemester) : [];
|
||||
|
||||
|
||||
$this->terminateWithSuccess($return_array);
|
||||
}
|
||||
public function getRaeume()
|
||||
{
|
||||
|
||||
$this->_ci->OrtModel->db->join("
|
||||
(select ort,standort_id,strasse, plz
|
||||
FROM public.tbl_standort
|
||||
LEFT JOIN public.tbl_adresse USING(adresse_id)
|
||||
) standort", "standort_id", "LEFT", false);
|
||||
|
||||
$result = $this->_ci->OrtModel->loadWhere(array('aktiv' => true, 'reservieren' => true));
|
||||
|
||||
$this->terminateWithSuccess(hasData($result) ? getData($result) : []);
|
||||
}
|
||||
|
||||
public function searchGroup()
|
||||
{
|
||||
$query = $this->input->get('query');
|
||||
if (is_null($query))
|
||||
$this->terminateWithError($this->_ci->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||
|
||||
$stg_berechtigungen = $this->_ci->permissionlib->getSTG_isEntitledFor('lehre/reservierung');
|
||||
|
||||
if (isEmptyArray($stg_berechtigungen))
|
||||
$this->terminateWithSuccess([]);
|
||||
|
||||
|
||||
$query_words = explode(' ', urldecode($query));
|
||||
|
||||
$gruppen_result = $this->_ci->GruppeModel->search($query_words);
|
||||
|
||||
if (isError($gruppen_result))
|
||||
$this->terminateWithError(getError($gruppen_result), self::ERROR_TYPE_GENERAL);
|
||||
|
||||
$gruppen_array = array();
|
||||
|
||||
if (hasData($gruppen_result))
|
||||
$gruppen_array = getData($gruppen_result);
|
||||
|
||||
$lehrverband_result = $this->_ci->LehrverbandModel->search($query_words);
|
||||
|
||||
$lehrverband_array = array();
|
||||
|
||||
if (isError($lehrverband_result))
|
||||
$this->terminateWithError(getError($lehrverband_result), self::ERROR_TYPE_GENERAL);
|
||||
|
||||
if (hasData($lehrverband_result))
|
||||
$lehrverband_array = getData($lehrverband_result);
|
||||
|
||||
$all_gruppen = array_merge($gruppen_array, $lehrverband_array);
|
||||
|
||||
$gefilterte_gruppen = array_filter($all_gruppen, function($gruppe) use ($stg_berechtigungen)
|
||||
{
|
||||
return in_array($gruppe->studiengang_kz, $stg_berechtigungen);
|
||||
});
|
||||
|
||||
$this->terminateWithSuccess($gefilterte_gruppen);
|
||||
}
|
||||
|
||||
public function getRollen()
|
||||
{
|
||||
$language = getUserLanguage() == 'German' ? 0 : 1;
|
||||
|
||||
$this->_ci->KalenderEventRolleModel->addOrder('sort');
|
||||
$this->_ci->KalenderEventRolleModel->addSelect('rolle_kurzbz, array_to_json(bezeichnung_mehrsprachig::varchar[])->>'. $language. ' as bezeichnung');
|
||||
|
||||
$result = $this->_ci->KalenderEventRolleModel->load();
|
||||
|
||||
$this->terminateWithSuccess(hasData($result) ? getData($result) : []);
|
||||
}
|
||||
public function addReservierung()
|
||||
{
|
||||
$this->_ci->form_validation->set_rules('titel', "titel", "required", ['required' => $this->p->t('ui', 'error_fieldRequired')]);
|
||||
$this->_ci->form_validation->set_rules('beschreibung', "beschreibung", "required", ['required' => $this->p->t('ui', 'error_fieldRequired')]);
|
||||
$this->_ci->form_validation->set_rules('start_date', "start_date", "required", ['required' => $this->p->t('ui', 'error_fieldRequired')]);
|
||||
$this->_ci->form_validation->set_rules('end_date', "end_date", "required", ['required' => $this->p->t('ui', 'error_fieldRequired')]);
|
||||
|
||||
if ($this->_ci->form_validation->run() === FALSE)
|
||||
$this->terminateWithValidationErrors($this->_ci->form_validation->error_array());
|
||||
|
||||
$orte = $this->_ci->input->post('orte', TRUE);
|
||||
|
||||
if (empty($orte) || (empty($orte['ort_kurzbz']) && empty($orte['location'])))
|
||||
{
|
||||
$this->terminateWithValidationErrors(['ort_kurzbz' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Raum'])]);
|
||||
}
|
||||
|
||||
$titel = $this->_ci->input->post('titel', TRUE);
|
||||
$beschreibung = $this->_ci->input->post('beschreibung', TRUE);
|
||||
$start_date = $this->_ci->input->post('start_date', TRUE);
|
||||
$end_date = $this->_ci->input->post('end_date', TRUE);
|
||||
$teilnehmer = $this->_ci->input->post('teilnehmer', TRUE);
|
||||
$specialGroups = $this->_ci->input->post('specialGroups', TRUE);
|
||||
$specialFinalGroups = $this->_ci->input->post('specialFinalGroups', TRUE);
|
||||
$groups = $this->_ci->input->post('groups', TRUE);
|
||||
|
||||
if ($this->_ci->permissionlib->isBerechtigt('lehre/reservierung'))
|
||||
{
|
||||
if (empty($teilnehmer) || !is_array($teilnehmer))
|
||||
{
|
||||
$teilnehmer[] = array('uid' => getAuthUID(), 'rolle' => 'organisator');
|
||||
}
|
||||
}
|
||||
else
|
||||
$teilnehmer[] = array('uid' => getAuthUID(), 'rolle' => 'organisator');
|
||||
|
||||
|
||||
$result = $this->_ci->kalenderlib->addReservierung($titel, $beschreibung, $orte, $start_date, $end_date, $teilnehmer, $specialFinalGroups, $specialGroups, $groups);
|
||||
|
||||
|
||||
if (isError($result))
|
||||
$this->terminateWithError(getError($result));
|
||||
|
||||
$this->terminateWithSuccess($result);
|
||||
}
|
||||
|
||||
|
||||
public function getLektor()
|
||||
{
|
||||
$query = $this->input->get('query');
|
||||
|
||||
if (is_null($query))
|
||||
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||
|
||||
$query_words = explode(' ', $query);
|
||||
|
||||
$this->_ci->MitarbeiterModel->addSelect('uid, person_id, vorname, nachname');
|
||||
$this->_ci->MitarbeiterModel->addJoin('public.tbl_benutzer', 'uid = mitarbeiter_uid');
|
||||
$this->_ci->MitarbeiterModel->addJoin('public.tbl_person', 'person_id');
|
||||
|
||||
$this->_ci->MitarbeiterModel->db->where('public.tbl_benutzer.aktiv', true);
|
||||
|
||||
$this->_ci->MitarbeiterModel->db->group_start();
|
||||
foreach ($query_words as $word)
|
||||
{
|
||||
$this->_ci->MitarbeiterModel->db->group_start();
|
||||
$this->_ci->MitarbeiterModel->db->where('tbl_person.vorname ILIKE', "%" . $word . "%");
|
||||
$this->_ci->MitarbeiterModel->db->or_where('tbl_person.nachname ILIKE', "%" . $word . "%");
|
||||
$this->_ci->MitarbeiterModel->db->or_where('uid ILIKE', "%" . $word . "%");
|
||||
$this->_ci->MitarbeiterModel->db->group_end();
|
||||
}
|
||||
$this->_ci->MitarbeiterModel->db->group_end();
|
||||
$this->_ci->MitarbeiterModel->addOrder('nachname');
|
||||
$this->_ci->MitarbeiterModel->addOrder('vorname');
|
||||
$result = $this->_ci->MitarbeiterModel->load();
|
||||
$this->terminateWithSuccess(hasData($result) ? getData($result) : array());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,53 +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,
|
||||
'getTagsByCalendar' => self::BERECHTIGUNG_KURZBZ,
|
||||
'addTag' => self::BERECHTIGUNG_KURZBZ,
|
||||
'updateTag' => self::BERECHTIGUNG_KURZBZ,
|
||||
'doneTag' => self::BERECHTIGUNG_KURZBZ,
|
||||
'deleteTag' => self::BERECHTIGUNG_KURZBZ
|
||||
]);
|
||||
|
||||
$this->config->load('tempus');
|
||||
}
|
||||
|
||||
public function getTag($readonly_tags = null)
|
||||
{
|
||||
parent::getTag($this->config->item('tempus_tags'));
|
||||
}
|
||||
public function getTags($tags = null)
|
||||
{
|
||||
parent::getTags($this->config->item('tempus_tags'));
|
||||
}
|
||||
public function getTagsByCalendar($eindeutige_kalender_gruppen_id = null)
|
||||
{
|
||||
parent::getTagsByAssignmentTypeValue('eindeutige_kalender_gruppen_id', $eindeutige_kalender_gruppen_id, $this->config->item('tempus_tags'));
|
||||
}
|
||||
public function addTag($withZuordnung = true, $updatable_tags = null)
|
||||
{
|
||||
parent::addTag(true, $this->config->item('tempus_tags'));
|
||||
}
|
||||
public function updateTag($updatable_tags = null)
|
||||
{
|
||||
parent::updateTag($this->config->item('tempus_tags'));
|
||||
}
|
||||
public function deleteTag($withZuordnung = true, $updatable_tags = null)
|
||||
{
|
||||
parent::deleteTag(true, $this->config->item('tempus_tags'));
|
||||
}
|
||||
public function doneTag($updatable_tags = null)
|
||||
{
|
||||
parent::doneTag($this->config->item('tempus_tags'));
|
||||
}
|
||||
}
|
||||
@@ -803,7 +803,7 @@ class ReihungstestJob extends JOB_Controller
|
||||
{
|
||||
if (!isset($studiensemester) || isEmptyString($studiensemester))
|
||||
{
|
||||
$this->logError("Studiensemster not passed as parameter");
|
||||
$this->logError("Studiensemester not passed as parameter");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
<?php
|
||||
|
||||
if (!defined("BASEPATH")) exit("No direct script access allowed");
|
||||
|
||||
class TempusJob extends JOB_Controller
|
||||
{
|
||||
private $_ci;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
$this->_ci =& get_instance();
|
||||
|
||||
$this->_ci->load->helper('hlp_sancho_helper');
|
||||
$this->_ci->load->library('KalenderLib');
|
||||
}
|
||||
|
||||
|
||||
public function sync()
|
||||
{
|
||||
$this->_ci->logInfo('Start job FHC-Core->Tempus->sync');
|
||||
$this->_ci->kalenderlib->sync();
|
||||
$this->_ci->logInfo('End job FHC-Core->Tempus->sync');
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,610 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* Job zur einmaligen Migration des Stundenplans
|
||||
*
|
||||
* Aufruf
|
||||
* php index.ci.php system/MigrateKalender
|
||||
*/
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class MigrateKalender extends CLI_Controller
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
$this->load->model('ressource/Kalender_model', 'KalenderModel');
|
||||
$this->load->model('ressource/Kalender_Lehreinheit_model', 'KalenderLehreinheitModel');
|
||||
$this->load->model('ressource/Kalender_Ort_model', 'KalenderOrtModel');
|
||||
$this->load->model('ressource/Stundenplandev_Kalender_model', 'SyncModel');
|
||||
$this->load->model('ressource/Reservierung_Kalender_model', 'SyncReservierungModel');
|
||||
$this->load->model('ressource/Kalender_Event_Teilnehmer_model', 'KalenderEventTeilnehmerModel');
|
||||
$this->load->model('ressource/Kalender_Event_model', 'KalenderEventModel');
|
||||
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
$this->load->model('person/Benutzer_model', 'BenutzerModel');
|
||||
}
|
||||
|
||||
/**
|
||||
* Everything has a beginning
|
||||
*/
|
||||
public function migrateStundenplan($von, $bis = null, $studiengang_kz = null)
|
||||
{
|
||||
if (is_null($von))
|
||||
return error('Parameter "von" ist erforderlich');
|
||||
|
||||
if (is_null($bis))
|
||||
$bis = '2100-12-31';
|
||||
|
||||
$db = new DB_Model();
|
||||
|
||||
$stpldevsql = '
|
||||
WITH eindeutige_stunden AS (
|
||||
SELECT DISTINCT unr, datum, stunde
|
||||
FROM lehre.tbl_stundenplandev
|
||||
WHERE datum >= ? AND datum <= ?';
|
||||
|
||||
$params = [$von, $bis];
|
||||
|
||||
if (!is_null($studiengang_kz))
|
||||
{
|
||||
$stpldevsql .= ' AND studiengang_kz = ?';
|
||||
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
$stpldevsql .= '),
|
||||
|
||||
block_keys AS (
|
||||
SELECT
|
||||
unr,
|
||||
datum,
|
||||
stunde,
|
||||
stunde - ROW_NUMBER() OVER (PARTITION BY unr, datum ORDER BY stunde) AS block_nr
|
||||
FROM eindeutige_stunden
|
||||
),
|
||||
blocks AS (
|
||||
SELECT
|
||||
bk.unr,
|
||||
bk.datum,
|
||||
bk.block_nr,
|
||||
MIN(bk.stunde) AS stunde_von,
|
||||
MAX(bk.stunde) AS stunde_bis,
|
||||
array_agg(DISTINCT sp.lehreinheit_id) AS lehreinheit_id,
|
||||
array_agg(DISTINCT sp.ort_kurzbz) AS ort_kurzbz,
|
||||
array_agg(sp.stundenplandev_id ORDER BY bk.stunde) AS stundenplandev_ids,
|
||||
MIN(sp.insertamum) AS insertamum,
|
||||
(array_agg(sp.insertvon ORDER BY sp.insertamum ASC))[1] AS insertvon,
|
||||
MAX(sp.updateamum) AS updateamum,
|
||||
(array_agg(sp.updatevon ORDER BY sp.updateamum DESC))[1] AS updatevon
|
||||
FROM block_keys bk JOIN lehre.tbl_stundenplandev sp ON sp.unr = bk.unr AND sp.datum = bk.datum AND sp.stunde = bk.stunde
|
||||
WHERE sp.datum >= ? AND sp.datum <= ?
|
||||
GROUP BY bk.unr, bk.datum, bk.block_nr
|
||||
)
|
||||
SELECT
|
||||
b.stundenplandev_ids,
|
||||
b.unr,
|
||||
b.datum,
|
||||
b.block_nr,
|
||||
b.lehreinheit_id,
|
||||
b.ort_kurzbz,
|
||||
b.datum + stundevon.beginn AS von,
|
||||
b.datum + stundebis.ende AS bis,
|
||||
b.insertamum,
|
||||
b.insertvon,
|
||||
b.updateamum,
|
||||
b.updatevon
|
||||
FROM blocks b
|
||||
JOIN lehre.tbl_stunde stundevon ON stundevon.stunde = b.stunde_von
|
||||
JOIN lehre.tbl_stunde stundebis ON stundebis.stunde = b.stunde_bis
|
||||
ORDER BY b.datum, b.unr, b.block_nr;';
|
||||
|
||||
array_push($params, $von, $bis);
|
||||
$stpldev = $db->execReadOnlyQuery($stpldevsql, $params);
|
||||
|
||||
if (hasData($stpldev))
|
||||
{
|
||||
// Pruefen ob der Eintrag schon in Sync Tabelle vorhanden ist
|
||||
// Wenn neuere Änderungen vorhanden dann Update
|
||||
// Wenn keine Änderungen seit leztem Sync dann Ueberspringen
|
||||
// Wenn noch nicht vorhanden neu anlegen
|
||||
// Danach ggf pruefen welceh Eintraege in der zwischenzeit geloescht wurden und
|
||||
// in der neuen Tabelle auch archivieren oder loeschen
|
||||
|
||||
$data = getData($stpldev);
|
||||
foreach($data as $block)
|
||||
{
|
||||
$ids = is_array($block->stundenplandev_ids) ? $block->stundenplandev_ids : explode(',', $block->stundenplandev_ids);
|
||||
/*$ids = array_map('intval', $ids);*/
|
||||
|
||||
$this->SyncModel->db->group_start();
|
||||
$where_ids_chunks = array_chunk($ids,25);
|
||||
foreach($where_ids_chunks as $where_ids)
|
||||
{
|
||||
$this->SyncModel->db->or_where_in('stundenplandev_id', $where_ids);
|
||||
}
|
||||
$this->SyncModel->db->group_end();
|
||||
|
||||
$sync_result = $this->SyncModel->load();
|
||||
|
||||
if (!hasData($sync_result))
|
||||
{
|
||||
$kalender_id = $this->_insertKalender($block, 'lehreinheit');
|
||||
if ($kalender_id)
|
||||
{
|
||||
$this->_insertSync($block->stundenplandev_ids, $kalender_id);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$syncData = getData($sync_result);
|
||||
$kalender_id = $syncData[0]->kalender_id;
|
||||
$last_sync = $syncData[0]->lastupdate;
|
||||
$synced_ids = array_column($syncData, 'stundenplandev_id');
|
||||
|
||||
if ($block->updateamum > $last_sync)
|
||||
{
|
||||
$this->_updateKalender($kalender_id, $block);
|
||||
$this->_updateSync($synced_ids, $kalender_id);
|
||||
}
|
||||
|
||||
$fehlende = array_diff($block->stundenplandev_ids, $synced_ids);
|
||||
if (!empty($fehlende))
|
||||
{
|
||||
$this->_insertSync($fehlende, $kalender_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function migrateReservierung($von, $bis = null, $ort_kurzbz = null)
|
||||
{
|
||||
if (is_null($von))
|
||||
return error('Parameter "von" ist erforderlich');
|
||||
|
||||
if (is_null($bis))
|
||||
$bis = '2100-12-31';
|
||||
|
||||
$db = new DB_Model();
|
||||
|
||||
$qry = "WITH eindeutige_stunden AS (
|
||||
SELECT DISTINCT titel, beschreibung, datum, stunde
|
||||
FROM campus.tbl_reservierung
|
||||
WHERE datum >= ? AND datum <= ?";
|
||||
|
||||
$params = array($von, $bis);
|
||||
|
||||
if (!is_null($ort_kurzbz))
|
||||
{
|
||||
$qry .= " AND ort_kurzbz = ?";
|
||||
$params[] = $ort_kurzbz;
|
||||
}
|
||||
|
||||
$qry .= "),
|
||||
block_keys AS (
|
||||
SELECT
|
||||
titel, beschreibung, datum, stunde,
|
||||
stunde - ROW_NUMBER() OVER (PARTITION BY titel, beschreibung, datum ORDER BY stunde) AS block_nr
|
||||
FROM eindeutige_stunden
|
||||
),
|
||||
blocks AS (
|
||||
SELECT
|
||||
bk.titel,
|
||||
bk.beschreibung,
|
||||
bk.datum,
|
||||
bk.block_nr,
|
||||
MIN(bk.stunde) AS stunde_von,
|
||||
MAX(bk.stunde) AS stunde_bis,
|
||||
array_agg(DISTINCT r.reservierung_id::text) AS reservierung_ids,
|
||||
array_agg(DISTINCT r.uid) AS uids,
|
||||
array_agg(DISTINCT r.gruppe_kurzbz) AS gruppen_kurzbz,
|
||||
array_agg(DISTINCT ROW(r.semester, r.verband, r.gruppe, r.studiengang_kz)::text) AS svg_kombis,
|
||||
array_agg(DISTINCT r.ort_kurzbz) AS ort_kurzbz,
|
||||
MIN(r.studiengang_kz) AS studiengang_kz,
|
||||
MIN(r.reservierung_id) AS reservierung_id,
|
||||
MAX(r.insertamum) AS insertamum,
|
||||
(array_agg(r.insertvon ORDER BY r.insertamum ASC))[1] AS insertvon
|
||||
FROM block_keys bk
|
||||
JOIN campus.tbl_reservierung r
|
||||
ON r.titel = bk.titel AND r.beschreibung = bk.beschreibung AND r.datum = bk.datum AND r.stunde = bk.stunde
|
||||
WHERE r.datum >= ? AND r.datum <= ?
|
||||
GROUP BY bk.titel, bk.beschreibung, bk.datum, bk.block_nr
|
||||
)
|
||||
SELECT
|
||||
b.*,
|
||||
(b.datum + s_von.beginn) AS von,
|
||||
(b.datum + s_bis.ende) AS bis
|
||||
FROM blocks b
|
||||
JOIN lehre.tbl_stunde s_von ON s_von.stunde = b.stunde_von
|
||||
JOIN lehre.tbl_stunde s_bis ON s_bis.stunde = b.stunde_bis
|
||||
ORDER BY b.reservierung_id DESC;";
|
||||
|
||||
array_push($params, $von, $bis);
|
||||
$reservierung_data = $db->execReadOnlyQuery($qry, $params);
|
||||
|
||||
|
||||
if (hasData($reservierung_data))
|
||||
{
|
||||
$data = getData($reservierung_data);
|
||||
|
||||
foreach($data as $block)
|
||||
{
|
||||
|
||||
$ids = is_array($block->reservierung_ids) ? $block->reservierung_ids : explode(',', $block->reservierung_ids);
|
||||
|
||||
$this->SyncReservierungModel->db->group_start();
|
||||
$where_ids_chunks = array_chunk($ids,25);
|
||||
foreach($where_ids_chunks as $where_ids)
|
||||
{
|
||||
$this->SyncReservierungModel->db->or_where_in('reservierung_id', $where_ids);
|
||||
}
|
||||
$this->SyncReservierungModel->db->group_end();
|
||||
|
||||
$sync_result = $this->SyncReservierungModel->load();
|
||||
|
||||
if (!hasData($sync_result))
|
||||
{
|
||||
$kalender_id = $this->_insertKalender($block, 'reservierung');
|
||||
if ($kalender_id)
|
||||
{
|
||||
$this->_insertReservierungSync($block->reservierung_ids, $kalender_id);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$syncData = getData($sync_result);
|
||||
$kalender_id = $syncData[0]->kalender_id;
|
||||
$last_sync = $syncData[0]->lastupdate;
|
||||
$synced_ids = array_column($syncData, 'reservierung_id');
|
||||
|
||||
if ($block->insertamum > $last_sync)
|
||||
{
|
||||
$this->_updateKalender($kalender_id, $block);
|
||||
$this->_updateReservierungSync($synced_ids, $kalender_id);
|
||||
}
|
||||
|
||||
$fehlende = array_diff($block->reservierung_ids, $synced_ids);
|
||||
if (!empty($fehlende))
|
||||
{
|
||||
$this->_insertReservierungSync($fehlende, $kalender_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function migrateStundenplanBetriebsmittelEntries() {
|
||||
$this->setKalendarEntriesGroupIDs();
|
||||
$this->setKalendarEntriesGroupIDsForChildren();
|
||||
|
||||
$dbModel = new DB_Model();
|
||||
|
||||
$deleteOldImportedTempusEntriesQuery = "DELETE from lehre.tbl_betriebsmittel_kalender WHERE quelle != 'tempus_neu' OR quelle IS NULL;";
|
||||
$createHelperTypeQuery = "DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM pg_type
|
||||
WHERE typname = 'betriebsmittel_info'
|
||||
) THEN
|
||||
CREATE TYPE betriebsmittel_info AS (
|
||||
betriebsmittel_id bigint,
|
||||
insertamum timestamp,
|
||||
insertvon text
|
||||
);
|
||||
END IF;
|
||||
END $$;";
|
||||
|
||||
$query = $deleteOldImportedTempusEntriesQuery .
|
||||
$createHelperTypeQuery .
|
||||
"WITH test AS (
|
||||
SELECT
|
||||
tk.eindeutige_kalender_gruppen_id AS eindeutige_kalender_gruppen_id,
|
||||
array_agg(tk.kalender_id),
|
||||
array_agg(
|
||||
ROW(tsb.betriebsmittel_id, tsb.insertamum, tsb.insertvon)::betriebsmittel_info
|
||||
) AS betriebsmittel_data
|
||||
FROM sync.tbl_stundenplandev_kalender AS sk
|
||||
JOIN lehre.tbl_kalender tk ON tk.kalender_id = sk.kalender_id
|
||||
JOIN lehre.tbl_stundenplan_betriebsmittel tsb ON tsb.stundenplandev_id = sk.stundenplandev_id
|
||||
GROUP BY tk.eindeutige_kalender_gruppen_id
|
||||
)
|
||||
INSERT INTO lehre.tbl_betriebsmittel_kalender (
|
||||
eindeutige_kalender_gruppen_id,
|
||||
betriebsmittel_id,
|
||||
insertamum,
|
||||
insertvon
|
||||
)
|
||||
SELECT
|
||||
t.eindeutige_kalender_gruppen_id,
|
||||
bm.betriebsmittel_id,
|
||||
bm.insertamum,
|
||||
bm.insertvon
|
||||
FROM test t
|
||||
CROSS JOIN LATERAL unnest(t.betriebsmittel_data) AS bm
|
||||
ON CONFLICT (eindeutige_kalender_gruppen_id, betriebsmittel_id) DO NOTHING;
|
||||
;";
|
||||
|
||||
$dbModel->db->query($query);
|
||||
}
|
||||
|
||||
private function setKalendarEntriesGroupIDs() {
|
||||
$dbModel = new DB_Model();
|
||||
|
||||
$query = "UPDATE lehre.tbl_kalender
|
||||
SET eindeutige_kalender_gruppen_id = gen_random_uuid()
|
||||
WHERE vorgaenger_kalender_id IS NULL
|
||||
AND eindeutige_kalender_gruppen_id IS NULL;";
|
||||
|
||||
$dbModel->db->query($query);
|
||||
|
||||
}
|
||||
|
||||
private function setKalendarEntriesGroupIDsForChildren() {
|
||||
$dbModel = new DB_Model();
|
||||
|
||||
$query = "WITH RECURSIVE tree AS
|
||||
(
|
||||
SELECT
|
||||
kalender_id,
|
||||
vorgaenger_kalender_id,
|
||||
kalender_id AS root_id,
|
||||
eindeutige_kalender_gruppen_id as root_eindeutige_kalender_gruppen_id
|
||||
FROM lehre.tbl_kalender
|
||||
WHERE vorgaenger_kalender_id IS NULL
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
i.kalender_id,
|
||||
i.vorgaenger_kalender_id,
|
||||
t.root_id,
|
||||
t.root_eindeutige_kalender_gruppen_id
|
||||
FROM lehre.tbl_kalender i
|
||||
JOIN tree t
|
||||
ON i.vorgaenger_kalender_id = t.kalender_id
|
||||
where i.eindeutige_kalender_gruppen_id is NULL
|
||||
|
||||
)
|
||||
UPDATE lehre.tbl_kalender k
|
||||
SET eindeutige_kalender_gruppen_id = t.root_eindeutige_kalender_gruppen_id
|
||||
FROM tree t
|
||||
WHERE k.kalender_id = t.kalender_id
|
||||
AND k.eindeutige_kalender_gruppen_id IS NULL;";
|
||||
|
||||
$dbModel->db->query($query);
|
||||
}
|
||||
|
||||
private function _insertKalender($block, $typ)
|
||||
{
|
||||
$result = $this->KalenderModel->insert(
|
||||
array (
|
||||
'von' => $block->von,
|
||||
'bis' => $block->bis,
|
||||
'typ' => $typ,
|
||||
'status_kurzbz'=> 'live',
|
||||
'insertamum' => $block->insertamum,
|
||||
'insertvon' => $block->insertvon,
|
||||
'updateamum' => $block->updateamum ?? null,
|
||||
'updatevon' => $block->updatevon ?? null
|
||||
)
|
||||
);
|
||||
if(!isSuccess($result))
|
||||
return null;
|
||||
|
||||
$kalender_id = getData($result);
|
||||
|
||||
if ($typ === 'lehreinheit')
|
||||
{
|
||||
$lehreinheit_ids = is_array($block->lehreinheit_id) ? $block->lehreinheit_id : explode(',', $block->lehreinheit_id);
|
||||
foreach ($lehreinheit_ids as $lehreinheit_id)
|
||||
{
|
||||
$leResult = $this->KalenderLehreinheitModel->insert(
|
||||
array (
|
||||
'kalender_id' => $kalender_id,
|
||||
'lehreinheit_id'=> $lehreinheit_id
|
||||
)
|
||||
);
|
||||
|
||||
if (!isSuccess($leResult))
|
||||
return null;
|
||||
}
|
||||
}
|
||||
else if ($typ === 'reservierung')
|
||||
{
|
||||
$eventResult = $this->KalenderEventModel->insert(array(
|
||||
'kalender_id' => $kalender_id,
|
||||
'titel' => $block->titel,
|
||||
'beschreibung' => $block->beschreibung
|
||||
));
|
||||
|
||||
if (!isSuccess($eventResult))
|
||||
return null;
|
||||
|
||||
if ($block->insertvon)
|
||||
{
|
||||
$user = $this->BenutzerModel->load(array('uid' => $block->insertvon));
|
||||
|
||||
if (hasData($user))
|
||||
{
|
||||
$this->KalenderEventTeilnehmerModel->insert(array(
|
||||
'kalender_id' => $kalender_id,
|
||||
'uid' => getData($user)[0]->uid,
|
||||
'rolle_kurzbz' => 'organisator'
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
$uids = is_array($block->uids) ? $block->uids : explode(',', $block->uids);
|
||||
foreach ($uids as $uid)
|
||||
{
|
||||
$this->KalenderEventTeilnehmerModel->insert(array(
|
||||
'kalender_id' => $kalender_id,
|
||||
'uid' => $uid,
|
||||
'rolle_kurzbz' => 'teilnehmer'
|
||||
));
|
||||
}
|
||||
|
||||
$semester_range = $this->StudiensemesterModel->getByDateRange($block->von, $block->bis);
|
||||
|
||||
if (isError($semester_range))
|
||||
return null;
|
||||
|
||||
$studiensemester_kurzbz = getData($semester_range)[0]->studiensemester_kurzbz ?? null;
|
||||
|
||||
$gruppen = is_array($block->gruppen_kurzbz) ? $block->gruppen_kurzbz : explode(',', $block->gruppen_kurzbz ?? '');
|
||||
|
||||
foreach ($gruppen as $gruppe_kurzbz)
|
||||
{
|
||||
$gruppe_kurzbz = trim($gruppe_kurzbz);
|
||||
if (!empty($gruppe_kurzbz))
|
||||
{
|
||||
$this->KalenderEventTeilnehmerModel->insert(array(
|
||||
'kalender_id' => $kalender_id,
|
||||
'gruppe_kurzbz' => $gruppe_kurzbz,
|
||||
'studiengang_kz' => $block->studiengang_kz,
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
'rolle_kurzbz' => 'teilnehmer'
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($block->svg_kombis as $kombi_str)
|
||||
{
|
||||
$kombi_str = trim($kombi_str, '()');
|
||||
list($sem, $verb, $grp, $stg_kz) = explode(',', $kombi_str);
|
||||
|
||||
$sem = trim($sem) === '' ? null : trim($sem);
|
||||
$verb = trim($verb) === '' ? null : trim($verb);
|
||||
$grp = trim($grp) === '' ? null : trim($grp);
|
||||
$stg_kz = trim($stg_kz) === '' ? null : trim($stg_kz);
|
||||
|
||||
if (is_null($sem) && is_null($verb) && is_null($grp) && is_null($stg_kz))
|
||||
continue;
|
||||
|
||||
$this->KalenderEventTeilnehmerModel->insert(array(
|
||||
'kalender_id' => $kalender_id,
|
||||
'studiengang_kz' => $stg_kz,
|
||||
'semester' => $sem,
|
||||
'verband' => $verb,
|
||||
'gruppe' => $grp,
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
'rolle_kurzbz' => 'teilnehmer'
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
$orte = is_array($block->ort_kurzbz) ? $block->ort_kurzbz : explode(',', $block->ort_kurzbz ?? '');
|
||||
|
||||
foreach ($orte as $ort)
|
||||
{
|
||||
$ort = trim($ort);
|
||||
if (!empty($ort))
|
||||
{
|
||||
$this->KalenderOrtModel->insert(
|
||||
array (
|
||||
'kalender_id' => $kalender_id,
|
||||
'ort_kurzbz' => $ort
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return $kalender_id;
|
||||
}
|
||||
|
||||
private function _insertSync($ids, $kalender_id)
|
||||
{
|
||||
foreach($ids as $id)
|
||||
{
|
||||
$this->SyncModel->insert(
|
||||
array (
|
||||
'stundenplandev_id' => $id,
|
||||
'kalender_id' => $kalender_id,
|
||||
'lastupdate' => date('Y-m-d H:i:s')
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
private function _insertReservierungSync($ids, $kalender_id)
|
||||
{
|
||||
|
||||
foreach($ids as $id)
|
||||
{
|
||||
$this->SyncReservierungModel->insert(
|
||||
array (
|
||||
'reservierung_id' => $id,
|
||||
'kalender_id' => $kalender_id,
|
||||
'lastupdate' => date('Y-m-d H:i:s')
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private function _updateKalender($kalender_id, $block)
|
||||
{
|
||||
$this->KalenderModel->update(
|
||||
array (
|
||||
'kalender_id' => $kalender_id
|
||||
),
|
||||
array (
|
||||
'von' => $block->von,
|
||||
'bis' => $block->bis,
|
||||
'updateamum'=> $block->updateamum,
|
||||
'updatevon' => $block->updatevon
|
||||
)
|
||||
);
|
||||
|
||||
$orte = is_array($block->ort_kurzbz) ? $block->ort_kurzbz : explode(',', $block->ort_kurzbz ?? '');
|
||||
$orte = array_filter(array_map('trim', $orte));
|
||||
|
||||
$this->KalenderOrtModel->delete(array('kalender_id' => $kalender_id));
|
||||
|
||||
foreach ($orte as $ort)
|
||||
{
|
||||
$this->KalenderOrtModel->insert(
|
||||
array (
|
||||
'kalender_id' => $kalender_id,
|
||||
'ort_kurzbz' => $ort
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private function _updateSync($ids, $kalender_id)
|
||||
{
|
||||
foreach($ids as $id)
|
||||
{
|
||||
$this->SyncModel->update(
|
||||
array (
|
||||
'stundenplandev_id' => $id,
|
||||
'kalender_id' => $kalender_id
|
||||
),
|
||||
array (
|
||||
'lastupdate' => date('Y-m-d H:i:s')
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private function _updateReservierungSync($ids, $kalender_id)
|
||||
{
|
||||
foreach($ids as $id)
|
||||
{
|
||||
$this->SyncReservierungModel->update(
|
||||
array (
|
||||
'reservierung_id' => $id,
|
||||
'kalender_id' => $kalender_id
|
||||
),
|
||||
array (
|
||||
'lastupdate' => date('Y-m-d H:i:s')
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,212 +0,0 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class Phrases extends Auth_Controller
|
||||
{
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(
|
||||
array(
|
||||
'index' => 'system/phrase:r',
|
||||
'table' => 'system/phrase:r',
|
||||
'view' => 'system/phrase:r',
|
||||
'deltext' => 'system/phrase:rw',
|
||||
'edit' => 'system/phrase:rw',
|
||||
'save' => 'system/phrase:rw',
|
||||
'newText' => 'system/phrase:rw',
|
||||
'editText' => 'system/phrase:rw',
|
||||
'saveText' => 'system/phrase:rw'
|
||||
)
|
||||
);
|
||||
|
||||
// Loads the phrases library
|
||||
$this->load->library('PhrasesLib');
|
||||
|
||||
// Loads the widget library
|
||||
$this->load->library('WidgetLib');
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$this->load->view('system/phrases/phrases.php');
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function table()
|
||||
{
|
||||
$phrases = $this->phraseslib->getPhraseByApp('aufnahme');
|
||||
if ($phrases->error)
|
||||
show_error(getError($phrases));
|
||||
|
||||
$data = array(
|
||||
'app' => 'aufnahme',
|
||||
'phrases' => $phrases->retval
|
||||
);
|
||||
|
||||
$this->load->view('system/phrases/phrasesList.php', $data);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function view($phrase_id)
|
||||
{
|
||||
if (!is_numeric($phrase_id))
|
||||
show_error('Invalid phrase_id parameter');
|
||||
|
||||
$phrase = $this->phraseslib->getPhrase($phrase_id);
|
||||
|
||||
$phrase_inhalt = $this->phraseslib->getPhraseInhalt($phrase_id);
|
||||
if ($phrase_inhalt->error)
|
||||
show_error(getError($phrase_inhalt));
|
||||
|
||||
$data = array(
|
||||
'phrase_id' => $phrase_id,
|
||||
'phrase' => $phrase->retval[0]->phrase,
|
||||
'phrase_inhalt' => $phrase_inhalt->retval
|
||||
);
|
||||
|
||||
$this->load->view('system/phrases/phrasesinhaltList.php', $data);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function deltext($phrasentext_id, $phrase_id)
|
||||
{
|
||||
if (!is_numeric($phrasentext_id) || !is_numeric($phrase_id))
|
||||
show_error('Invalid phrasentext_id or phrase_id parameter');
|
||||
|
||||
$phrase_inhalt = $this->phraseslib->delPhrasentext($phrasentext_id);
|
||||
if ($phrase_inhalt->error)
|
||||
show_error(getError($phrase_inhalt));
|
||||
|
||||
redirect('/system/Phrases/view/'.$phrase_id);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function edit($phrase_id = null)
|
||||
{
|
||||
if (!is_numeric($phrase_id)) return;
|
||||
|
||||
$phrase = $this->phraseslib->getPhrase($phrase_id);
|
||||
if ($phrase->error)
|
||||
show_error(getError($phrase));
|
||||
|
||||
if (count($phrase->retval) != 1)
|
||||
show_error('Phrase nicht vorhanden! ID: '.$phrase_id);
|
||||
|
||||
$data = array(
|
||||
'phrase' => $phrase->retval[0]
|
||||
);
|
||||
|
||||
$this->load->view('system/phrases/phrasesEdit', $data);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function save()
|
||||
{
|
||||
$phrase_id = $this->input->post('phrase_id');
|
||||
$data = array('phrase' => $this->input->post('phrase'));
|
||||
|
||||
$phrase = $this->phraseslib->savePhrase($phrase_id, $data);
|
||||
if ($phrase->error)
|
||||
show_error(getError($phrase));
|
||||
|
||||
$phrase_id = $phrase->retval;
|
||||
|
||||
redirect('/system/Phrases/edit/'.$phrase_id);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function newText()
|
||||
{
|
||||
$phrase_id = $this->input->post('phrase_id');
|
||||
|
||||
$this->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel');
|
||||
|
||||
$this->OrganisationseinheitModel->addLimit(1);
|
||||
$this->OrganisationseinheitModel->addOrder('oe_kurzbz');
|
||||
|
||||
$resultOE = $this->OrganisationseinheitModel->loadWhere(array('aktiv' => true, 'oe_parent_kurzbz' => null));
|
||||
if ($resultOE->error)
|
||||
show_error(getError($resultOE));
|
||||
|
||||
if (hasData($resultOE))
|
||||
{
|
||||
$orgeinheit_kurzbz = $resultOE->retval[0]->oe_kurzbz;
|
||||
|
||||
$data = array(
|
||||
'phrase_id' => $phrase_id,
|
||||
'sprache' => 'German',
|
||||
'text' => '',
|
||||
'description' => '',
|
||||
'orgeinheit_kurzbz' => $orgeinheit_kurzbz
|
||||
);
|
||||
|
||||
$phrase_inhalt = $this->phraseslib->insertPhraseinhalt($data);
|
||||
if ($phrase_inhalt->error)
|
||||
show_error(getError($phrase_inhalt));
|
||||
|
||||
$phrase_inhalt_id = $phrase_inhalt->retval;
|
||||
|
||||
redirect('/system/Phrases/editText/'.$phrase_inhalt_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
show_error('No valid organisation unit found');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function editText($phrasentext_id)
|
||||
{
|
||||
$phrase_inhalt = $this->phraseslib->getPhrasentextById($phrasentext_id);
|
||||
if ($phrase_inhalt->error)
|
||||
show_error(getError($phrase_inhalt));
|
||||
|
||||
$data = $phrase_inhalt->retval[0];
|
||||
|
||||
$this->load->view('system/phrases/phraseinhaltEdit', $data);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function saveText()
|
||||
{
|
||||
$phrase_inhalt_id = $this->input->post('phrase_inhalt_id');
|
||||
|
||||
$data = array(
|
||||
'orgeinheit_kurzbz' => $this->input->post('oe_kurzbz'),
|
||||
'orgform_kurzbz' => $this->input->post('orgform_kurzbz'),
|
||||
'text' => $this->input->post('text'),
|
||||
'description' => $this->input->post('description'),
|
||||
'sprache' => $this->input->post('sprache')
|
||||
);
|
||||
|
||||
$phrase_inhalt = $this->phraseslib->updatePhraseInhalt($phrase_inhalt_id, $data);
|
||||
if ($phrase_inhalt->error)
|
||||
show_error(getError($phrase_inhalt));
|
||||
|
||||
|
||||
redirect('/system/Phrases/editText/'.$phrase_inhalt_id);
|
||||
}
|
||||
}
|
||||
@@ -11,8 +11,8 @@ class CLI_Manager extends CLI_Controller
|
||||
*
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
// Load helpers to upload files
|
||||
$this->load->helper('form');
|
||||
@@ -28,9 +28,19 @@ class CLI_Manager extends CLI_Controller
|
||||
* die Commandline ohne Upload durchzufuehren.
|
||||
* @param $extensioName string Name der Extension
|
||||
* @param $filename Url Encoded Pfad zum tgz File der Extension
|
||||
* @param $perform_sql boolean ob die SQL Befehle ausgeführt werden
|
||||
*/
|
||||
public function uploadExtension($extensionName = null, $filename = null)
|
||||
public function installExtension($extensionName, $filename)
|
||||
{
|
||||
$this->extensionslib->installExtension($extensionName, urldecode($filename));
|
||||
$this->extensionslib->installExtension($extensionName, urldecode($filename), true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Install an extension, same as installExtension but without running the SQL statements
|
||||
*/
|
||||
public function installExtensionNoSQL($extensionName, $filename)
|
||||
{
|
||||
$this->extensionslib->installExtension($extensionName, urldecode($filename), false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -11,8 +11,8 @@ class Manager extends Auth_Controller
|
||||
*
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(
|
||||
{
|
||||
parent::__construct(
|
||||
array(
|
||||
'index' => 'system/extensions:r',
|
||||
'toggleExtension' => 'system/extensions:rw',
|
||||
@@ -21,11 +21,22 @@ class Manager extends Auth_Controller
|
||||
)
|
||||
);
|
||||
|
||||
// Load helpers to upload files
|
||||
// Loads the form helper
|
||||
$this->load->helper('form');
|
||||
|
||||
// Loads WidgetLib
|
||||
$this->load->library('WidgetLib');
|
||||
|
||||
// Loads the extensions library
|
||||
$this->load->library('ExtensionsLib');
|
||||
|
||||
$this->loadPhrases(
|
||||
array(
|
||||
'extensions',
|
||||
'table',
|
||||
'ui'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -33,11 +44,7 @@ class Manager extends Auth_Controller
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$viewData = array(
|
||||
'extensions' => $this->extensionslib->getInstalledExtensions()
|
||||
);
|
||||
|
||||
$this->load->view('system/extensions/manager.php', $viewData);
|
||||
$this->load->view('system/extensions/manager.php');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -45,23 +52,16 @@ class Manager extends Auth_Controller
|
||||
*/
|
||||
public function toggleExtension()
|
||||
{
|
||||
$toggleExtension = false;
|
||||
|
||||
$extension_id = $this->input->post('extension_id');
|
||||
$enabled = $this->input->post('enabled');
|
||||
|
||||
if ($enabled === 'true')
|
||||
{
|
||||
$toggleExtension = $this->extensionslib->enableExtension($extension_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
$toggleExtension = $this->extensionslib->disableExtension($extension_id);
|
||||
}
|
||||
// Clean the parameter
|
||||
$enabled = $enabled == 'true' ? true : false;
|
||||
|
||||
$this->output
|
||||
->set_content_type('application/json')
|
||||
->set_output(json_encode($toggleExtension));
|
||||
// Output the enable/disable of the extension
|
||||
$this->outputJsonSuccess(
|
||||
$this->extensionslib->toggleExtension($extension_id, $enabled)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -69,15 +69,11 @@ class Manager extends Auth_Controller
|
||||
*/
|
||||
public function delExtension()
|
||||
{
|
||||
$delExtension = false;
|
||||
|
||||
$extension_id = $this->input->post('extension_id');
|
||||
|
||||
$delExtension = $this->extensionslib->delExtension($extension_id);
|
||||
|
||||
$this->output
|
||||
->set_content_type('application/json')
|
||||
->set_output(json_encode($delExtension));
|
||||
$this->outputJsonSuccess($delExtension);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -87,9 +83,16 @@ class Manager extends Auth_Controller
|
||||
* die Commandline ohne Upload durchzufuehren.
|
||||
* @param $extensioName string Name der Extension
|
||||
* @param $filename Url Encoded Pfad zum tgz File der Extension
|
||||
* @param $perform_sql boolean ob die SQL Befehle ausgeführt werden
|
||||
*/
|
||||
public function uploadExtension($extensionName = null, $filename = null)
|
||||
public function uploadExtension()
|
||||
{
|
||||
$this->extensionslib->installExtension($extensionName, urldecode($filename));
|
||||
$notPerformSql = $this->input->post('notPerformSql');
|
||||
|
||||
// It converts the notPerformSql parameter from the checkbox value to a boolean one
|
||||
if ($notPerformSql == 'on') $notPerformSql = true;
|
||||
if ($notPerformSql !== true) $notPerformSql = false;
|
||||
|
||||
$this->extensionslib->installExtension(null, null, !$notPerformSql);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,6 +34,9 @@ class InfoCenter extends Auth_Controller
|
||||
const PREV_FILTER_ID = 'prev_filter_id';
|
||||
const KEEP_TABLESORTER_FILTER = 'keepTsFilter';
|
||||
|
||||
const ONBOARDING_INSERTVON = 'onboarding';
|
||||
const ONBOARDING_KENNZEICHENTYP = 'eobRegistrierungsId';
|
||||
|
||||
private $_uid; // contains the UID of the logged user
|
||||
|
||||
// Used to log with PersonLogLib
|
||||
@@ -175,6 +178,7 @@ class InfoCenter extends Auth_Controller
|
||||
$this->load->model('person/Kontakt_model', 'KontaktModel');
|
||||
$this->load->model('person/Geschlecht_model', 'GeschlechtModel');
|
||||
$this->load->model('person/adresse_model', 'AdresseModel');
|
||||
$this->load->model('person/Kennzeichen_model', 'KennzeichenModel');
|
||||
|
||||
// Loads libraries
|
||||
$this->load->library('PersonLogLib');
|
||||
@@ -1452,6 +1456,100 @@ class InfoCenter extends Auth_Controller
|
||||
|
||||
$this->outputJsonSuccess("Done!");
|
||||
}
|
||||
|
||||
public function getAbsageData()
|
||||
{
|
||||
$stg_typ = $this->getStudienArtBerechtigung(['b', 'm']);
|
||||
|
||||
if (!is_null($stg_typ))
|
||||
{
|
||||
$statusgruende = $this->StatusgrundModel->getStatus(self::ABGEWIESENERSTATUS, true)->retval;
|
||||
$studienSemester = $this->variablelib->getVar('infocenter_studiensemester');
|
||||
$studiengaenge = $this->StudiengangModel->getStudiengaengeWithOrgForm(array_column($stg_typ, 'typ'), $studienSemester);
|
||||
|
||||
$data = array (
|
||||
'statusgruende' => $statusgruende,
|
||||
'studiengaenge' => $studiengaenge->retval
|
||||
);
|
||||
|
||||
$this->outputJsonSuccess($data);
|
||||
}
|
||||
else
|
||||
$this->outputJsonSuccess(null);
|
||||
}
|
||||
|
||||
public function getStudienArtBerechtigung($typ = null)
|
||||
{
|
||||
$studiengang_kz_all = $this->permissionlib->getSTG_isEntitledFor('infocenter');
|
||||
$stg_typ = $this->StudiengangModel->getStudiengangTyp($studiengang_kz_all, $typ);
|
||||
return getData($stg_typ);
|
||||
}
|
||||
|
||||
public function getStudienartData()
|
||||
{
|
||||
$this->outputJsonSuccess($this->getStudienArtBerechtigung(['b', 'm', 'l']));
|
||||
}
|
||||
|
||||
public function saveAbsageForAll()
|
||||
{
|
||||
$statusgrund = $this->input->post('statusgrund');
|
||||
$studiengang = $this->input->post('studiengang');
|
||||
$abgeschickt = $this->input->post('abgeschickt');
|
||||
$personen = $this->input->post('personen');
|
||||
$studienSemester = $this->variablelib->getVar('infocenter_studiensemester');
|
||||
|
||||
if ($statusgrund === 'null' || $studiengang === 'null' || $abgeschickt === 'null' || empty($personen))
|
||||
$this->terminateWithJsonError("Bitte füllen Sie alle Felder aus");
|
||||
|
||||
if ($studiengang === 'all' && $abgeschickt === 'all')
|
||||
{
|
||||
foreach($personen as $person)
|
||||
{
|
||||
$prestudenten = $this->PrestudentModel->getByPersonWithoutLehrgang($person, $studienSemester);
|
||||
|
||||
if (!hasData($prestudenten))
|
||||
continue;
|
||||
|
||||
$prestudentenData = getData($prestudenten);
|
||||
|
||||
foreach ($prestudentenData as $prestudent)
|
||||
{
|
||||
$this->saveAbsage($prestudent->prestudent_id, $statusgrund);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->load->model('organisation/Studienplan_model', 'StudienplanModel');
|
||||
|
||||
$this->StudienplanModel->addSelect('1');
|
||||
$this->StudienplanModel->addJoin('lehre.tbl_studienordnung so', 'studienordnung_id');
|
||||
$escaped = $this->StudienplanModel->db->escape(strtoupper($studiengang));
|
||||
$this->StudienplanModel->db->where("UPPER(so.studiengangkurzbzlang || ':' || tbl_studienplan.orgform_kurzbz) = $escaped");
|
||||
$this->StudienplanModel->addLimit(1);
|
||||
$studiengangResult = $this->StudienplanModel->load();
|
||||
|
||||
if (hasData($studiengangResult))
|
||||
{
|
||||
foreach($personen as $person)
|
||||
{
|
||||
$prestudent = $this->PrestudentModel->getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester, $abgeschickt, $abgeschickt === 'all');
|
||||
|
||||
if (!hasData($prestudent))
|
||||
continue;
|
||||
|
||||
$prestudentData = getData($prestudent);
|
||||
$this->saveAbsage($prestudentData[0]->prestudent_id, $statusgrund);
|
||||
}
|
||||
}
|
||||
else
|
||||
$this->terminateWithJsonError("Falschen Studiengang übergeben!");
|
||||
|
||||
}
|
||||
|
||||
$this->outputJsonSuccess("Success");
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Private methods
|
||||
|
||||
@@ -1946,6 +2044,17 @@ class InfoCenter extends Auth_Controller
|
||||
show_error(getError($user_person));
|
||||
}
|
||||
|
||||
// add info about first electronig onboarding login
|
||||
$this->KennzeichenModel->addSelect('insertamum');
|
||||
$onboarding_first_login = $this->KennzeichenModel->loadWhere(
|
||||
array('person_id' => $person_id, 'kennzeichentyp_kurzbz' => self::ONBOARDING_KENNZEICHENTYP)
|
||||
);
|
||||
|
||||
if (isError($onboarding_first_login))
|
||||
{
|
||||
show_error(getError($onboarding_first_login));
|
||||
}
|
||||
|
||||
$data = array (
|
||||
'lockedby' => $lockedby,
|
||||
'lockedbyother' => $lockedbyother,
|
||||
@@ -1955,7 +2064,9 @@ class InfoCenter extends Auth_Controller
|
||||
'messages' => $messages->retval,
|
||||
'logs' => $logs,
|
||||
'notizen' => $notizen->retval,
|
||||
'notizenbewerbung' => $notizen_bewerbung->retval
|
||||
'notizenbewerbung' => $notizen_bewerbung->retval,
|
||||
'created_by_onboarding' => $stammdaten->retval->insertvon == self::ONBOARDING_INSERTVON,
|
||||
'onboarding_first_login' => hasData($onboarding_first_login) ? getData($onboarding_first_login)[0]->insertamum : null
|
||||
);
|
||||
|
||||
return $data;
|
||||
@@ -2375,97 +2486,4 @@ class InfoCenter extends Auth_Controller
|
||||
$this->loglib->logError('Studiengang has no mail for sending Freigabe mail');
|
||||
}
|
||||
}
|
||||
|
||||
public function getAbsageData()
|
||||
{
|
||||
$stg_typ = $this->getStudienArtBerechtigung(['b', 'm']);
|
||||
|
||||
if (!is_null($stg_typ))
|
||||
{
|
||||
$statusgruende = $this->StatusgrundModel->getStatus(self::ABGEWIESENERSTATUS, true)->retval;
|
||||
$studienSemester = $this->variablelib->getVar('infocenter_studiensemester');
|
||||
$studiengaenge = $this->StudiengangModel->getStudiengaengeWithOrgForm(array_column($stg_typ, 'typ'), $studienSemester);
|
||||
|
||||
$data = array (
|
||||
'statusgruende' => $statusgruende,
|
||||
'studiengaenge' => $studiengaenge->retval
|
||||
);
|
||||
|
||||
$this->outputJsonSuccess($data);
|
||||
}
|
||||
else
|
||||
$this->outputJsonSuccess(null);
|
||||
}
|
||||
|
||||
public function getStudienArtBerechtigung($typ = null)
|
||||
{
|
||||
$studiengang_kz_all = $this->permissionlib->getSTG_isEntitledFor('infocenter');
|
||||
$stg_typ = $this->StudiengangModel->getStudiengangTyp($studiengang_kz_all, $typ);
|
||||
return getData($stg_typ);
|
||||
}
|
||||
|
||||
public function getStudienartData()
|
||||
{
|
||||
$this->outputJsonSuccess($this->getStudienArtBerechtigung(['b', 'm', 'l']));
|
||||
}
|
||||
|
||||
public function saveAbsageForAll()
|
||||
{
|
||||
$statusgrund = $this->input->post('statusgrund');
|
||||
$studiengang = $this->input->post('studiengang');
|
||||
$abgeschickt = $this->input->post('abgeschickt');
|
||||
$personen = $this->input->post('personen');
|
||||
$studienSemester = $this->variablelib->getVar('infocenter_studiensemester');
|
||||
|
||||
if ($statusgrund === 'null' || $studiengang === 'null' || $abgeschickt === 'null' || empty($personen))
|
||||
$this->terminateWithJsonError("Bitte füllen Sie alle Felder aus");
|
||||
|
||||
if ($studiengang === 'all' && $abgeschickt === 'all')
|
||||
{
|
||||
foreach($personen as $person)
|
||||
{
|
||||
$prestudenten = $this->PrestudentModel->getByPersonWithoutLehrgang($person, $studienSemester);
|
||||
|
||||
if (!hasData($prestudenten))
|
||||
continue;
|
||||
|
||||
$prestudentenData = getData($prestudenten);
|
||||
|
||||
foreach ($prestudentenData as $prestudent)
|
||||
{
|
||||
$this->saveAbsage($prestudent->prestudent_id, $statusgrund);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->load->model('organisation/Studienplan_model', 'StudienplanModel');
|
||||
|
||||
$this->StudienplanModel->addSelect('1');
|
||||
$this->StudienplanModel->addJoin('lehre.tbl_studienordnung so', 'studienordnung_id');
|
||||
$escaped = $this->StudienplanModel->db->escape(strtoupper($studiengang));
|
||||
$this->StudienplanModel->db->where("UPPER(so.studiengangkurzbzlang || ':' || tbl_studienplan.orgform_kurzbz) = $escaped");
|
||||
$this->StudienplanModel->addLimit(1);
|
||||
$studiengangResult = $this->StudienplanModel->load();
|
||||
|
||||
if (hasData($studiengangResult))
|
||||
{
|
||||
foreach($personen as $person)
|
||||
{
|
||||
$prestudent = $this->PrestudentModel->getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester, $abgeschickt, $abgeschickt === 'all');
|
||||
|
||||
if (!hasData($prestudent))
|
||||
continue;
|
||||
|
||||
$prestudentData = getData($prestudent);
|
||||
$this->saveAbsage($prestudentData[0]->prestudent_id, $statusgrund);
|
||||
}
|
||||
}
|
||||
else
|
||||
$this->terminateWithJsonError("Falschen Studiengang übergeben!");
|
||||
|
||||
}
|
||||
|
||||
$this->outputJsonSuccess("Success");
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,8 @@ class Rueckstellung extends Auth_Controller
|
||||
private $_ci; // Code igniter instance
|
||||
private $_uid;
|
||||
|
||||
const ZGV_UEBERPRUEFUNG_MAIL_VORLAGE = 'ZGVUEP';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(
|
||||
@@ -23,6 +25,7 @@ class Rueckstellung extends Auth_Controller
|
||||
$this->load->model('crm/RueckstellungStatus_model', 'RueckstellungStatusModel');
|
||||
$this->load->model('person/Person_model', 'PersonModel');
|
||||
$this->load->library('PersonLogLib');
|
||||
$this->load->library('MessageLib');
|
||||
|
||||
$this->_setAuthUID(); // sets property uid
|
||||
|
||||
@@ -78,6 +81,8 @@ class Rueckstellung extends Auth_Controller
|
||||
|
||||
$this->_log($person_id, $status_kurzbz);
|
||||
|
||||
if ($status_kurzbz === 'onhold_zgv')
|
||||
$this->sendRueckstellungMessage($person_id);
|
||||
$this->outputJson($result);
|
||||
}
|
||||
|
||||
@@ -104,6 +109,10 @@ class Rueckstellung extends Auth_Controller
|
||||
if (isError($result))
|
||||
$this->terminateWithJsonError(getError($result));
|
||||
$this->_log($person, $status_kurzbz);
|
||||
|
||||
if ($status_kurzbz === 'onhold_zgv')
|
||||
$this->sendRueckstellungMessage($person);
|
||||
|
||||
}
|
||||
$this->outputJsonSuccess("Erfolgreich gespeichert!");
|
||||
}
|
||||
@@ -160,4 +169,26 @@ class Rueckstellung extends Auth_Controller
|
||||
$this->_uid
|
||||
);
|
||||
}
|
||||
|
||||
private function sendRueckstellungMessage($person_id)
|
||||
{
|
||||
$person = $this->_ci->PersonModel->load($person_id);
|
||||
|
||||
if (hasData($person))
|
||||
{
|
||||
$person = getData($person)[0];
|
||||
|
||||
return $this->messagelib->sendMessageUserTemplate(
|
||||
$person_id,
|
||||
self::ZGV_UEBERPRUEFUNG_MAIL_VORLAGE,
|
||||
array(
|
||||
'anrede' => $person->anrede,
|
||||
'nachname' => $person->nachname
|
||||
),
|
||||
null,
|
||||
getAuthPersonId(),
|
||||
'infocenter'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
+32
-14
@@ -1,7 +1,6 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Copyright (C) 2026 fhcomplete.org
|
||||
* 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
|
||||
@@ -17,16 +16,35 @@
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||
if (!defined("BASEPATH")) exit("No direct script access allowed");
|
||||
|
||||
class CLI_Manager extends CLI_Controller
|
||||
{
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
// Loads PhrasesLib
|
||||
$this->load->library('PhrasesLib');
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function installFrom($phrasesDirectoryPath)
|
||||
{
|
||||
$this->phraseslib->installFrom(urldecode($phrasesDirectoryPath));
|
||||
}
|
||||
|
||||
/**
|
||||
* Calls the PhrasesLib->syncFiles to create/update the phrases files under the directory application/phrases/
|
||||
*/
|
||||
public function syncFiles()
|
||||
{
|
||||
$this->phraseslib->syncFiles();
|
||||
}
|
||||
}
|
||||
|
||||
$config['root'] = [
|
||||
'stg' => [
|
||||
'semester' => [
|
||||
'group',
|
||||
'verband' => [
|
||||
'group'
|
||||
]
|
||||
],
|
||||
'orgform'
|
||||
]
|
||||
];
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
if (!defined("BASEPATH")) exit("No direct script access allowed");
|
||||
|
||||
class Manager extends Auth_Controller
|
||||
{
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(
|
||||
array(
|
||||
'installFromCore' => 'admin:rw'
|
||||
)
|
||||
);
|
||||
|
||||
// Loads PhrasesLib
|
||||
$this->load->library('PhrasesLib');
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function installFromCore()
|
||||
{
|
||||
$this->phraseslib->installFromCore();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Overview on cronjob logs
|
||||
*/
|
||||
class PhrasesViewer extends Auth_Controller
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(
|
||||
array(
|
||||
'index' => 'system/developer:r'
|
||||
)
|
||||
);
|
||||
|
||||
// Loads WidgetLib
|
||||
$this->load->library('WidgetLib');
|
||||
|
||||
// Loads phrases system
|
||||
$this->loadPhrases(
|
||||
array(
|
||||
'global',
|
||||
'ui',
|
||||
'filter'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Public methods
|
||||
|
||||
/**
|
||||
* Everything has a beginning
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$this->load->view('system/phrases/phrasesViewer.php');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
<?php
|
||||
interface ICollisionCheck
|
||||
{
|
||||
public function getName();
|
||||
|
||||
public function check($data);
|
||||
|
||||
public function checkAll($kalender_ids);
|
||||
|
||||
}
|
||||
@@ -44,6 +44,7 @@ class Tag_Controller extends FHCAPI_Controller
|
||||
{
|
||||
$language = $this->_getLanguageIndex();
|
||||
$index_bezeichnung_mehrsprachig = $language - 1;
|
||||
|
||||
$id = $this->input->get('id');
|
||||
|
||||
if (is_array($readonly_tags) && !isEmptyArray($readonly_tags))
|
||||
@@ -122,36 +123,7 @@ class Tag_Controller extends FHCAPI_Controller
|
||||
$notiztypen = $this->NotiztypModel->loadWhere(array('aktiv' => true));
|
||||
$this->terminateWithSuccess(hasData($notiztypen) ? getData($notiztypen) : array());
|
||||
}
|
||||
public function getTagsByAssignmentTypeValue($zuordnung_typ, $zuordnung_id, $tags = null)
|
||||
{
|
||||
$language = $this->_getLanguageIndex();
|
||||
$index_bezeichnung_mehrsprachig = $language - 1;
|
||||
|
||||
$this->NotizzuordnungModel->addSelect(
|
||||
'tbl_notizzuordnung.notiz_id as notiz_id,
|
||||
typ_kurzbz as tag_typ_kurzbz,
|
||||
array_to_json(bezeichnung_mehrsprachig::varchar[])->>'. $index_bezeichnung_mehrsprachig. ' as bezeichnung,
|
||||
style,
|
||||
beschreibung,
|
||||
tag,
|
||||
tbl_notiz.erledigt as done
|
||||
'
|
||||
);
|
||||
|
||||
if (is_array($tags) && !isEmptyArray($tags))
|
||||
{
|
||||
$tags = $this->_filterTag($tags, false);
|
||||
$this->NotizzuordnungModel->db->where_in('tbl_notiz_typ.typ_kurzbz', $tags);
|
||||
}
|
||||
|
||||
$this->NotizzuordnungModel->addJoin('public.tbl_notiz', 'public.tbl_notizzuordnung.notiz_id = public.tbl_notiz.notiz_id');
|
||||
$this->NotizzuordnungModel->addJoin('public.tbl_notiz_typ', 'public.tbl_notiz.typ = public.tbl_notiz_typ.typ_kurzbz');
|
||||
|
||||
$this->NotizzuordnungModel->addOrder('prioritaet');
|
||||
|
||||
$notiztypen = $this->NotizzuordnungModel->loadWhere(array('aktiv' => true, $zuordnung_typ => $zuordnung_id));
|
||||
$this->terminateWithSuccess(hasData($notiztypen) ? getData($notiztypen) : array());
|
||||
}
|
||||
public function addTag($withZuordnung = true, $updatable_tags = null)
|
||||
{
|
||||
$postData = $this->getPostJson();
|
||||
@@ -171,7 +143,7 @@ class Tag_Controller extends FHCAPI_Controller
|
||||
if (!in_array($postData->tag_typ_kurzbz, $tags))
|
||||
$this->terminateWithError($this->p->t('ui', 'keineBerechtigung'));
|
||||
}
|
||||
|
||||
|
||||
if ($withZuordnung)
|
||||
{
|
||||
$return = array();
|
||||
@@ -180,7 +152,7 @@ class Tag_Controller extends FHCAPI_Controller
|
||||
$this->terminateWithError('Error occurred', self::ERROR_TYPE_GENERAL);
|
||||
|
||||
$values = array_unique($postData->values);
|
||||
|
||||
|
||||
foreach ($values as $value)
|
||||
{
|
||||
$insertResult = $this->addNotiz($postData);
|
||||
|
||||
@@ -570,13 +570,3 @@ function buildDropdownEntryPrintArray($id, $name, $parameterurl, $uid=null, $ord
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
function generateUUID()
|
||||
{
|
||||
$data = openssl_random_pseudo_bytes(16);
|
||||
|
||||
$data[6] = chr(ord($data[6]) & 0x0f | 0x40);
|
||||
$data[8] = chr(ord($data[8]) & 0x3f | 0x80);
|
||||
|
||||
return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
|
||||
}
|
||||
@@ -1,20 +1,20 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* FH-Complete
|
||||
* Copyright (C) 2025 FH Technikum-Wien
|
||||
*
|
||||
* @package FHC-Helper
|
||||
* @author FHC-Team
|
||||
* @copyright Copyright (c) 2016 fhcomplete.org
|
||||
* @license GPLv3
|
||||
* @since Version 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* FHC Helper
|
||||
* 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 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* @subpackage Helpers
|
||||
* @category Helpers
|
||||
* 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
@@ -137,7 +137,7 @@ function generateJSPhrasesStorageObject($phrases)
|
||||
$toPrint = "\n";
|
||||
$toPrint .= '<script type="text/javascript">';
|
||||
$toPrint .= "\n";
|
||||
$toPrint .= ' var FHC_JS_PHRASES_STORAGE_OBJECT = '.$ci->pj->getJSON().';';
|
||||
$toPrint .= ' var FHC_JS_PHRASES_STORAGE_OBJECT = '.$ci->pj->toJSON().';';
|
||||
$toPrint .= "\n";
|
||||
$toPrint .= '</script>';
|
||||
$toPrint .= "\n\n";
|
||||
@@ -256,6 +256,9 @@ function generateSkipLink($skipID)
|
||||
echo $toPrint;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
function absoluteJsImportUrl($relurl)
|
||||
{
|
||||
$ci =& get_instance();
|
||||
@@ -488,3 +491,4 @@ class ExtendableAppsHelper
|
||||
array_push($this->extCustomJSs, 'public/js/FhcApps.js');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -741,7 +741,7 @@ class AnrechnungLib
|
||||
$fullname = hasData($result) ? $result->retval[0]->vorname. $result->retval[0]->nachname : '';
|
||||
|
||||
// Return filename
|
||||
return 'Anrechnungsantrag'. $orgform_kurzbz .'_LV-'. $lehrveranstaltung_id. '_'. $fullname;
|
||||
return 'Anrechnungsantrag'. $orgform_kurzbz .'_LV-'. $lehrveranstaltung_id. '_'. $fullname . '.pdf';
|
||||
}
|
||||
|
||||
public function LVhasLector($anrechnung_id)
|
||||
|
||||
@@ -1,67 +0,0 @@
|
||||
<?php
|
||||
|
||||
defined('BASEPATH') || exit('No direct script access allowed');
|
||||
|
||||
use CI3_Events as Events;
|
||||
|
||||
class CollisionChecker
|
||||
{
|
||||
private $_checks = [];
|
||||
|
||||
private $_ci;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->_ci =& get_instance();
|
||||
|
||||
$this->_ci->load->library('collision/checks/RoomCollisionCheck');
|
||||
$this->_ci->load->library('collision/checks/LectureCollisionCheck');
|
||||
$this->_ci->load->library('collision/checks/VerbandCollisionCheck');
|
||||
$this->_ci->load->library('collision/checks/StudentCollisionCheck');
|
||||
$this->_ci->load->library('collision/checks/ResourcesCollisionCheck');
|
||||
$this->register($this->_ci->roomcollisioncheck);
|
||||
$this->register($this->_ci->lecturecollisioncheck);
|
||||
$this->register($this->_ci->verbandcollisioncheck);
|
||||
$this->register($this->_ci->studentcollisioncheck);
|
||||
$this->register($this->_ci->resourcescollisioncheck);
|
||||
Events::trigger('collision_register', $this);
|
||||
}
|
||||
|
||||
public function register(ICollisionCheck $check)
|
||||
{
|
||||
$this->_checks[$check->getName()] = $check;
|
||||
}
|
||||
|
||||
public function run($data)
|
||||
{
|
||||
$errors = [];
|
||||
|
||||
foreach ($this->_checks as $check)
|
||||
{
|
||||
$result = $check->check($data);
|
||||
|
||||
if (!empty($result))
|
||||
{
|
||||
$errors = array_merge($errors, $result);
|
||||
}
|
||||
}
|
||||
|
||||
return $errors;
|
||||
}
|
||||
|
||||
public function runAll($kalender_ids)
|
||||
{
|
||||
$results = array_fill_keys($kalender_ids, []);
|
||||
|
||||
foreach ($this->_checks as $check)
|
||||
{
|
||||
$batchResult = $check->checkAll($kalender_ids);
|
||||
foreach ($batchResult as $kalender_id => $errors)
|
||||
{
|
||||
$results[$kalender_id] = array_merge($results[$kalender_id], $errors);
|
||||
}
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright (C) 2022 fhcomplete.org
|
||||
* 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
|
||||
@@ -19,6 +19,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
use \stdClass as stdClass;
|
||||
use \PharData as PharData;
|
||||
|
||||
/**
|
||||
* Library to manage core extensions
|
||||
@@ -33,11 +34,20 @@ class ExtensionsLib
|
||||
const EXTENSION_JSON_NAME = 'extension.json'; // file that contains extension data
|
||||
const EXTENSIONS_DIR_NAME = 'extensions'; // name of the directories where will be created the symlinks
|
||||
|
||||
private $_ci;
|
||||
const PHRASES_DIRECTORY = 'phrases/'; // directory name where phrases files are
|
||||
|
||||
private $ARCHIVE_EXTENSIONS = array('.tgz', '.tbz2'); // accepted file extensions for an uploaded extension
|
||||
private $UPLOAD_PATH; // temporary directory to store the upload file and checks the archive
|
||||
private $EXTENSIONS_PATH; // directory where all the extensions are
|
||||
const UPLOAD_PATH = 'tmp/';
|
||||
|
||||
private $_ci; // Code igniter instance
|
||||
|
||||
private $_errorOccurred; // boolean, true if an error occurred while installing an extension
|
||||
private $_currentInstalledExtensionVersion; // contains the version of the current installation of an extension
|
||||
|
||||
// NOTE: the following have been declared as properties to maintain compatibility with previous PHP versions
|
||||
// where arrays cannot be declared as constants
|
||||
|
||||
// Accepted file extensions for an uploaded extension
|
||||
private $ARCHIVE_EXTENSIONS = array('.tgz', '.tbz2');
|
||||
|
||||
// Directories that are part of the extension archive
|
||||
private $SOFTLINK_TARGET_DIRECTORIES = array(
|
||||
@@ -45,16 +55,11 @@ class ExtensionsLib
|
||||
DOC_ROOT => array('public')
|
||||
);
|
||||
|
||||
private $_errorOccurred; // boolean, true if an error occurred while installing an extension
|
||||
private $_currentInstalledExtensionVersion; // contains the version of the current installation of an extension
|
||||
|
||||
/**
|
||||
* Class constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->UPLOAD_PATH = APPPATH.'tmp/';
|
||||
$this->EXTENSIONS_PATH = APPPATH.'extensions/';
|
||||
// Get code igniter instance
|
||||
$this->_ci =& get_instance();
|
||||
|
||||
@@ -63,6 +68,8 @@ class ExtensionsLib
|
||||
|
||||
// Loads EPrintfLib
|
||||
$this->_ci->load->library('EPrintfLib');
|
||||
// Loads PhrasesLib
|
||||
$this->_ci->load->library('PhrasesLib');
|
||||
|
||||
// Loading models
|
||||
$this->_ci->load->model('system/Extensions_model', 'ExtensionsModel');
|
||||
@@ -70,6 +77,13 @@ class ExtensionsLib
|
||||
// Set default values fot class properties
|
||||
$this->_errorOccurred = false;
|
||||
$this->_currentInstalledExtensionVersion = 0;
|
||||
|
||||
// If SERVER_NAME is _not_ declared or it is an empty string
|
||||
if (!defined('SERVER_NAME') || (defined('SERVER_NAME') && isEmptyString(SERVER_NAME)))
|
||||
{
|
||||
$this->_printError('Global constant SERVER_NAME is not declared or it is not valid');
|
||||
exit();
|
||||
}
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------------------------------
|
||||
@@ -82,32 +96,44 @@ class ExtensionsLib
|
||||
* @param $extensionName string Name of Extension (optional)
|
||||
* @param $filename Path to tgz Extension File (optional)
|
||||
*/
|
||||
public function installExtension($extensionName = null, $filename = null)
|
||||
public function installExtension($extensionName, $filename, $perform_sql)
|
||||
{
|
||||
$extensionDB = null; // contains data from DB about an extension
|
||||
$extensionJson = null; // contains the extension.json data
|
||||
|
||||
$this->_printInfo('WARNING!!! Please do not change page or stop this procedure before it is finished');
|
||||
|
||||
if (!is_null($extensionName) && !is_null($filename))
|
||||
{
|
||||
$uploadData = new stdClass();
|
||||
$uploadData->fullPath = $filename;
|
||||
$uploadData->extensionName = $extensionName;
|
||||
}
|
||||
else
|
||||
// Create an object with the given paramenters
|
||||
$uploadData = new stdClass();
|
||||
$uploadData->fullPath = $filename;
|
||||
$uploadData->extensionName = $extensionName;
|
||||
|
||||
// If no extension name or file name are provided
|
||||
if (is_null($extensionName) || is_null($filename))
|
||||
{
|
||||
$this->_loadUploadLibrary(); // loads CI upload library
|
||||
$uploadData = $this->_uploadExtension(); // perform the upload of the file and returns info about it
|
||||
}
|
||||
|
||||
if ($uploadData != null) // if no error occurred
|
||||
// If a file has been uploaded
|
||||
if (isset($uploadData))
|
||||
{
|
||||
// If the given filename is the upper directory or the current one
|
||||
if (trim($uploadData->fullPath) == '..' || trim($uploadData->fullPath) == '.')
|
||||
{
|
||||
$this->_printFailure('wrong file name: / has to be escaped with %2F');
|
||||
$uploadData = null; // then it is a wrong one!
|
||||
}
|
||||
}
|
||||
|
||||
// If the no error occurred
|
||||
if ($uploadData != null)
|
||||
{
|
||||
$this->_extractExtension($uploadData->fullPath); // extract the archive of the uploaded extension
|
||||
|
||||
if (!$this->_errorOccurred) // if no error occurred
|
||||
{
|
||||
// Retives data about any previous installation of this extension
|
||||
// Retrieves data about any previous installation of this extension on this server
|
||||
$extensionDB = $this->_loadPreviousInstallation($uploadData->extensionName);
|
||||
}
|
||||
|
||||
@@ -128,15 +154,17 @@ class ExtensionsLib
|
||||
$this->_printStart('Proceding with the installation of the extension: '.$extensionJson->name);
|
||||
$this->_printEnd();
|
||||
|
||||
$this->_cleanPreviousInstallation($extensionJson); // cleans any previous installation
|
||||
// Remove any previous installation from file system and database
|
||||
$this->_cleanPreviousInstallation($extensionJson);
|
||||
|
||||
$this->_installExtension($extensionJson); // records extension data in DB
|
||||
// Records extension data in DB
|
||||
$this->_installExtension($extensionJson);
|
||||
|
||||
if (!$this->_errorOccurred) // if no error occurred
|
||||
if (!$this->_errorOccurred && $perform_sql === true) // if no error occurred
|
||||
{
|
||||
// Loads and executes neede SQL scripts
|
||||
// Loads and executes the needed SQL scripts
|
||||
$this->_loadSQLs(
|
||||
$this->UPLOAD_PATH.$extensionJson->name.'/'.ExtensionsLib::SQL_DIRECTORY,
|
||||
$this->_getUploadPath().$extensionJson->name.DIRECTORY_SEPARATOR.ExtensionsLib::SQL_DIRECTORY,
|
||||
$extensionJson
|
||||
);
|
||||
}
|
||||
@@ -152,20 +180,19 @@ class ExtensionsLib
|
||||
// Create the symlinks to the installed extension
|
||||
$this->_createSymLinks($extensionJson->name);
|
||||
}
|
||||
|
||||
if (!$this->_errorOccurred) // if no error occurred
|
||||
{
|
||||
// Create the symlinks to the installed extension
|
||||
$this->_installPhrases($extensionJson->name);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->_errorOccurred = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->_errorOccurred = true;
|
||||
}
|
||||
|
||||
if ($this->_errorOccurred === false) // if no errors occurred
|
||||
{
|
||||
if (!$this->_rrm($uploadData->fullPath)) // removes uploaded file
|
||||
// If a file has been uploaded then remove them
|
||||
if (isset($uploadData) && !$this->_rrm($uploadData->fullPath))
|
||||
{
|
||||
$this->_printInfo('Error while cleaning upload directory. Not a blocking error');
|
||||
}
|
||||
@@ -191,19 +218,26 @@ class ExtensionsLib
|
||||
$result = $this->_ci->ExtensionsModel->load($extensionId);
|
||||
if (hasData($result)) // if something was found
|
||||
{
|
||||
$extensionName = $result->retval[0]->name; // extension name
|
||||
$this->_delSoftLinks($extensionName); // not to be checked, could fail if the extension is disabled
|
||||
// remove the extension from the extensions installation directory
|
||||
$delExtension = $this->_rrm($this->EXTENSIONS_PATH.$extensionName);
|
||||
// If this server is _not_ the same where the extension was installed then exit with a failure
|
||||
if (getData($result)[0]->server_kurzbz != SERVER_NAME) return false;
|
||||
|
||||
$extensionName = getData($result)[0]->name; // extension name
|
||||
|
||||
// Not to be checked, could fail if the extension is disabled
|
||||
$this->_delSoftLinks($extensionName);
|
||||
|
||||
// Remove the extension from the extensions installation directory
|
||||
$delExtension = $this->_rrm($this->_getExtensionsPath().$extensionName);
|
||||
|
||||
// Select all the version of this extension
|
||||
$this->_ci->ExtensionsModel->addSelect('extension_id');
|
||||
$result = $this->_ci->ExtensionsModel->loadWhere(array('name' => $extensionName));
|
||||
|
||||
$result = $this->_ci->ExtensionsModel->loadWhere(array('name' => $extensionName, 'server_kurzbz' => SERVER_NAME));
|
||||
|
||||
// If something was found
|
||||
if (hasData($result))
|
||||
{
|
||||
// Loops on them
|
||||
foreach ($result->retval as $extension)
|
||||
foreach (getData($result) as $extension) // loops on them
|
||||
{
|
||||
// Remove them all
|
||||
$result = $this->_ci->ExtensionsModel->delete($extension->extension_id);
|
||||
@@ -220,23 +254,57 @@ class ExtensionsLib
|
||||
*/
|
||||
public function getInstalledExtensions()
|
||||
{
|
||||
return $this->_ci->ExtensionsModel->getInstalledExtensions();
|
||||
$this->_ci->ExtensionsModel->addOrder('name', 'ASC');
|
||||
$this->_ci->ExtensionsModel->addOrder('server_kurzbz', 'ASC');
|
||||
$this->_ci->ExtensionsModel->addOrder('version', 'ASC');
|
||||
|
||||
return $this->_ci->ExtensionsModel->loadWhere(array('server_kurzbz' => SERVER_NAME));
|
||||
}
|
||||
|
||||
/**
|
||||
* To enable an extension
|
||||
* To enable/disable an extension
|
||||
*/
|
||||
public function enableExtension($extensionId)
|
||||
public function toggleExtension($extensionId, $enabled)
|
||||
{
|
||||
return $this->_toggleExtension($extensionId, true);
|
||||
}
|
||||
$_toggleExtension = false;
|
||||
|
||||
/**
|
||||
* To disable an extension
|
||||
*/
|
||||
public function disableExtension($extensionId)
|
||||
{
|
||||
return $this->_toggleExtension($extensionId, false);
|
||||
// Loads data from DB about the given extension
|
||||
$result = $this->_ci->ExtensionsModel->load($extensionId);
|
||||
if (hasData($result))
|
||||
{
|
||||
// If this server is _not_ the same where the extension was installed then exit with a failure
|
||||
if (getData($result)[0]->server_kurzbz != SERVER_NAME) return false;
|
||||
|
||||
$extensionName = getData($result)[0]->name; // extension name
|
||||
|
||||
// If to be enabled
|
||||
if ($enabled === true)
|
||||
{
|
||||
// Add the symlinks
|
||||
$_toggleExtension = $this->_addSoftLinks($extensionName);
|
||||
}
|
||||
else // If to be disabled
|
||||
{
|
||||
// Remove all the symlinks
|
||||
$_toggleExtension = $this->_delSoftLinks($extensionName);
|
||||
}
|
||||
|
||||
if ($_toggleExtension) // if is a success
|
||||
{
|
||||
// Updates DB
|
||||
$result = $this->_ci->ExtensionsModel->update($extensionId, array('enabled' => $enabled));
|
||||
if (isSuccess($result))
|
||||
{
|
||||
$_toggleExtension = true;
|
||||
}
|
||||
else // if DB update fails remove symlinks from file system
|
||||
{
|
||||
$this->_delSoftLinks($extensionName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $_toggleExtension;
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------------------------------
|
||||
@@ -250,7 +318,7 @@ class ExtensionsLib
|
||||
$this->_ci->load->library(
|
||||
'upload',
|
||||
array(
|
||||
'upload_path' => $this->UPLOAD_PATH,
|
||||
'upload_path' => $this->_getUploadPath(),
|
||||
'allowed_types' => '*',
|
||||
'overwrite' => true
|
||||
)
|
||||
@@ -314,7 +382,7 @@ class ExtensionsLib
|
||||
// Extracts the uploaded file
|
||||
$pd = new PharData($uploadPath);
|
||||
|
||||
$pd->extractTo($this->UPLOAD_PATH, null, true);
|
||||
$pd->extractTo($this->_getUploadPath(), null, true);
|
||||
}
|
||||
catch (UnexpectedValueException $uva)
|
||||
{
|
||||
@@ -322,6 +390,16 @@ class ExtensionsLib
|
||||
$this->_printFailure('provided an invalid archive');
|
||||
}
|
||||
catch (PharException $pe)
|
||||
{
|
||||
$this->_errorOccurred = true;
|
||||
$this->_printFailure('phar error occurred');
|
||||
}
|
||||
catch (InvalidArgumentException $iae)
|
||||
{
|
||||
$this->_errorOccurred = true;
|
||||
$this->_printFailure('wrong file name');
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
$this->_errorOccurred = true;
|
||||
$this->_printFailure('generic error occurred, check logs');
|
||||
@@ -344,24 +422,29 @@ class ExtensionsLib
|
||||
// Loads the last version of the previous installation of this extension
|
||||
$this->_ci->ExtensionsModel->addOrder('version', 'DESC');
|
||||
$this->_ci->ExtensionsModel->addLimit(1);
|
||||
$result = $this->_ci->ExtensionsModel->loadWhere(array('name' => $extensionName));
|
||||
|
||||
// Loads extensions installed on this server
|
||||
$result = $this->_ci->ExtensionsModel->loadWhere(
|
||||
array(
|
||||
'name' => $extensionName,
|
||||
'server_kurzbz' => SERVER_NAME
|
||||
)
|
||||
);
|
||||
|
||||
// In an error occurred
|
||||
if (isError($result))
|
||||
{
|
||||
$this->_errorOccurred = true;
|
||||
$this->_printFailure('data base error: '.$result->retval);
|
||||
$this->_printFailure('data base error: '.getData($result));
|
||||
}
|
||||
else
|
||||
elseif (hasData($result))
|
||||
{
|
||||
if (hasData($result)) // if found
|
||||
{
|
||||
$extensionDB = $result->retval[0]; // return it!
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->_printMessage('not found');
|
||||
}
|
||||
$extensionDB = getData($result)[0];
|
||||
}
|
||||
|
||||
// If no data have been found
|
||||
if ($extensionDB == null) $this->_printMessage('not found');
|
||||
|
||||
$this->_printSuccess(!$this->_errorOccurred);
|
||||
|
||||
$this->_printEnd();
|
||||
@@ -377,10 +460,10 @@ class ExtensionsLib
|
||||
$this->_printStart('Checking extension file system structure');
|
||||
|
||||
// Checks if the root directory of this archive has the same name of the extension
|
||||
if (is_dir($this->UPLOAD_PATH.$extensionName))
|
||||
if (is_dir($this->_getUploadPath().$extensionName))
|
||||
{
|
||||
// Checks if file extension.json exists inside the uploaded archive
|
||||
if (!file_exists($this->UPLOAD_PATH.$extensionName.'/'.ExtensionsLib::EXTENSION_JSON_NAME))
|
||||
if (!file_exists($this->_getUploadPath().$extensionName.DIRECTORY_SEPARATOR.ExtensionsLib::EXTENSION_JSON_NAME))
|
||||
{
|
||||
$this->_errorOccurred = true;
|
||||
$this->_printFailure('missing extension.json');
|
||||
@@ -402,11 +485,14 @@ class ExtensionsLib
|
||||
*/
|
||||
private function _chkExtensionJson($extensionName, $extensionDB)
|
||||
{
|
||||
// Set a default FHComplete version
|
||||
$fhcomplete_version = 0;
|
||||
|
||||
$this->_printStart('Parsing and checking extension.json');
|
||||
|
||||
// Decodes extension.json
|
||||
$extensionJson = json_decode(
|
||||
file_get_contents($this->UPLOAD_PATH.$extensionName.'/'.ExtensionsLib::EXTENSION_JSON_NAME)
|
||||
file_get_contents($this->_getUploadPath().$extensionName.DIRECTORY_SEPARATOR.ExtensionsLib::EXTENSION_JSON_NAME)
|
||||
);
|
||||
|
||||
// Checks if the parameter name of the extension.json has the same value of the extension name
|
||||
@@ -416,36 +502,41 @@ class ExtensionsLib
|
||||
if (isset($extensionJson->version))
|
||||
{
|
||||
$extensionJson->currentInstalledVersion = 0; // default current installed version of this extension
|
||||
|
||||
if ($extensionDB != null) // if no previous installation was found in DB
|
||||
|
||||
// If a previous installation was found in DB
|
||||
if ($extensionDB != null)
|
||||
{
|
||||
// Then get the data from database
|
||||
$extensionJson->extension_id = $extensionDB->extension_id; // get the extension_id from DB
|
||||
$extensionJson->currentInstalledVersion = $extensionDB->version; // get the current installed version from DB
|
||||
|
||||
// Prompt a summary
|
||||
$this->_printMessage('Extension already installed!');
|
||||
$this->_printMessage('Current version: '.$extensionDB->version);
|
||||
$this->_printMessage('Version of the uploaded extension: '.$extensionJson->version);
|
||||
|
||||
// Check if the version of the uploaded extension is the same
|
||||
// as the one from the dataabase
|
||||
if ($extensionJson->version == $extensionDB->version)
|
||||
{
|
||||
$this->_printMessage('Updating the same version!');
|
||||
}
|
||||
elseif ($extensionJson->version > $extensionDB->version)
|
||||
elseif ($extensionJson->version > $extensionDB->version) // or it is higher
|
||||
{
|
||||
$this->_printMessage('Updating to a new version!');
|
||||
}
|
||||
else // downgrade is not possible
|
||||
else // otherwise is lower, then the downgrade is not possible
|
||||
{
|
||||
$extensionJson = null;
|
||||
$this->_printFailure('downgrade must be performed manually');
|
||||
}
|
||||
}
|
||||
else
|
||||
else // otherwise if it is not installed on this server
|
||||
{
|
||||
$this->_printMessage('Version of the uploaded extension: '.$extensionJson->version);
|
||||
}
|
||||
|
||||
// If no errors occurred
|
||||
// If no errors occurred then check the JSON file content within the uploaded extension
|
||||
if ($extensionJson != null)
|
||||
{
|
||||
// Default value
|
||||
@@ -454,7 +545,7 @@ class ExtensionsLib
|
||||
require_once('version.php'); // get the core version
|
||||
|
||||
// Checks if the required core version of the extension is the same of this system
|
||||
if (isset($extensionJson->core_version) && version_compare($extensionJson->core_version, $fhcomplete_version,'<='))
|
||||
if (isset($extensionJson->core_version) && version_compare($extensionJson->core_version, $fhcomplete_version, '<='))
|
||||
{
|
||||
$this->_printMessage('Required core version: '.$extensionJson->core_version);
|
||||
$this->_printMessage('Current core version: '.$fhcomplete_version);
|
||||
@@ -467,7 +558,7 @@ class ExtensionsLib
|
||||
// Gets the required dependencies
|
||||
$result = $this->_ci->ExtensionsModel->getDependencies($extensionJson->dependencies);
|
||||
// If they are matcheds
|
||||
if (hasData($result) && count($result->retval) == count($extensionJson->dependencies))
|
||||
if (hasData($result) && count(getData($result)) == count($extensionJson->dependencies))
|
||||
{
|
||||
if (isset($extensionJson->dependencies))
|
||||
{
|
||||
@@ -562,6 +653,7 @@ class ExtensionsLib
|
||||
{
|
||||
$this->_printStart('Adding new entry in the DB');
|
||||
|
||||
// Insert into database the extension information
|
||||
$result = $this->_ci->ExtensionsModel->insert(
|
||||
array(
|
||||
'name' => $extensionJson->name,
|
||||
@@ -570,7 +662,8 @@ class ExtensionsLib
|
||||
'license' => isset($extensionJson->license) ? $extensionJson->license : null,
|
||||
'url' => isset($extensionJson->url) ? $extensionJson->url : null,
|
||||
'core_version' => $extensionJson->core_version,
|
||||
'dependencies' => isset($extensionJson->dependencies) ? $extensionJson->dependencies : null
|
||||
'dependencies' => isset($extensionJson->dependencies) ? $extensionJson->dependencies : null,
|
||||
'server_kurzbz' => SERVER_NAME
|
||||
)
|
||||
);
|
||||
if (isSuccess($result))
|
||||
@@ -606,14 +699,16 @@ class ExtensionsLib
|
||||
// Loops through the versions
|
||||
for ($sqlDir = $startVersion; $sqlDir <= $extensionJson->version; $sqlDir++)
|
||||
{
|
||||
// Gets all the SQL files in the directory having the same name of the version
|
||||
$files = glob($pkgSQLsPath.DIRECTORY_SEPARATOR.$sqlDir.'/*'.ExtensionsLib::SQL_FILE_EXTENSION);
|
||||
|
||||
// If a directory with the same value of the version is present in the sql scripts directory
|
||||
$files = glob($pkgSQLsPath.'/'.$sqlDir.'/*'.ExtensionsLib::SQL_FILE_EXTENSION);
|
||||
if ($files != false)
|
||||
{
|
||||
{
|
||||
// Loads every sql files
|
||||
foreach ($files as $file)
|
||||
{
|
||||
$sql = file_get_contents($file); // gets the entire content of the file
|
||||
$sql = file_get_contents($file); // gets the entire content of the file
|
||||
|
||||
$this->_printMessage('Executing query:');
|
||||
$this->_printMessage($sql);
|
||||
@@ -651,17 +746,20 @@ class ExtensionsLib
|
||||
{
|
||||
$this->_printStart('Moving the upload extension from upload folder to extension folder');
|
||||
|
||||
$this->_printMessage('Current extension directory: '.$this->UPLOAD_PATH.$extensionName);
|
||||
$this->_printMessage('Directory where it will be moved: '.$this->EXTENSIONS_PATH.$extensionName);
|
||||
$this->_printMessage('Current extension directory: '.$this->_getUploadPath().$extensionName);
|
||||
$this->_printMessage('Directory where it will be moved: '.$this->_getExtensionsPath().$extensionName);
|
||||
|
||||
if (rename($this->UPLOAD_PATH.$extensionName.'/', $this->EXTENSIONS_PATH.$extensionName))
|
||||
if (!file_exists($this->_getExtensionsPath().$extensionName))
|
||||
{
|
||||
$this->_printSuccess(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->_errorOccurred = true;
|
||||
$this->_printFailure('error while moving');
|
||||
if (rename($this->_getUploadPath().$extensionName.DIRECTORY_SEPARATOR, $this->_getExtensionsPath().$extensionName))
|
||||
{
|
||||
$this->_printSuccess(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->_errorOccurred = true;
|
||||
$this->_printFailure('error while moving');
|
||||
}
|
||||
}
|
||||
|
||||
$this->_printEnd();
|
||||
@@ -695,13 +793,21 @@ class ExtensionsLib
|
||||
{
|
||||
$_delSoftLinks = false;
|
||||
|
||||
// For every set of target directories where:
|
||||
// rootPath: is the prefix of the absolute path for the target directory
|
||||
// targetDirectories: is an array of target directories
|
||||
foreach ($this->SOFTLINK_TARGET_DIRECTORIES as $rootPath => $targetDirectories)
|
||||
{
|
||||
// For every target directory in the current set
|
||||
foreach ($targetDirectories as $targetDirectory)
|
||||
{
|
||||
if (file_exists($rootPath.$targetDirectory.'/'.ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$extensionName))
|
||||
// If the symlink exists
|
||||
if (file_exists($rootPath.$targetDirectory.DIRECTORY_SEPARATOR.ExtensionsLib::EXTENSIONS_DIR_NAME.DIRECTORY_SEPARATOR.$extensionName))
|
||||
{
|
||||
$_delSoftLinks = unlink($rootPath.$targetDirectory.'/'.ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$extensionName);
|
||||
// Try to delete it
|
||||
$_delSoftLinks = unlink(
|
||||
$rootPath.$targetDirectory.DIRECTORY_SEPARATOR.ExtensionsLib::EXTENSIONS_DIR_NAME.DIRECTORY_SEPARATOR.$extensionName
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -714,29 +820,23 @@ class ExtensionsLib
|
||||
*/
|
||||
private function _rrm($dir)
|
||||
{
|
||||
if (!file_exists($dir))
|
||||
// If the directory does not exist return success
|
||||
if (!file_exists($dir)) return true;
|
||||
|
||||
// If it is not a directory then delete it and return the result
|
||||
if (!is_dir($dir)) return unlink($dir);
|
||||
|
||||
// For each subdirectory
|
||||
foreach (scandir($dir) as $subdir)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
// If it is the same directory or the parent directory skip to the next one
|
||||
if ($subdir == '.' || $subdir == '..') continue;
|
||||
|
||||
if (!is_dir($dir))
|
||||
{
|
||||
return unlink($dir);
|
||||
}
|
||||
|
||||
foreach (scandir($dir) as $item)
|
||||
{
|
||||
if ($item == '.' || $item == '..')
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!$this->_rrm($dir.DIRECTORY_SEPARATOR.$item))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
// Try to remove a subdirectory, if it fails then return a failure
|
||||
if (!$this->_rrm($dir.DIRECTORY_SEPARATOR.$subdir)) return false;
|
||||
}
|
||||
|
||||
// Delete the directory and return the result
|
||||
return rmdir($dir);
|
||||
}
|
||||
|
||||
@@ -746,27 +846,36 @@ class ExtensionsLib
|
||||
private function _addSoftLinks($extensionName)
|
||||
{
|
||||
$_addSoftLinks = false;
|
||||
$extensionPath = $this->EXTENSIONS_PATH.$extensionName.'/';
|
||||
$extensionPath = $this->_getExtensionsPath().$extensionName.DIRECTORY_SEPARATOR;
|
||||
|
||||
// For every target directory
|
||||
// For every set of target directories where:
|
||||
// rootPath: is the prefix of the absolute path for the target directory
|
||||
// targetDirectories: is an array of target directories
|
||||
foreach ($this->SOFTLINK_TARGET_DIRECTORIES as $rootPath => $targetDirectories)
|
||||
{
|
||||
// For every target directory in the current set
|
||||
foreach ($targetDirectories as $targetDirectory)
|
||||
{
|
||||
// If destination of the symlink does not exist
|
||||
if (!file_exists($rootPath.$targetDirectory.'/'.ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$extensionName))
|
||||
// Checks if the link already exists
|
||||
$_addSoftLinks = file_exists(
|
||||
$rootPath.$targetDirectory.DIRECTORY_SEPARATOR.ExtensionsLib::EXTENSIONS_DIR_NAME.DIRECTORY_SEPARATOR.$extensionName
|
||||
);
|
||||
|
||||
// If the symlink does not exist
|
||||
if (!$_addSoftLinks)
|
||||
{
|
||||
// If the target directory does not exist than creates that
|
||||
if (!is_dir($extensionPath.$targetDirectory))
|
||||
{
|
||||
mkdir($extensionPath.$targetDirectory);
|
||||
}
|
||||
// If the target directory does not exist than creates it
|
||||
if (!is_dir($extensionPath.$targetDirectory)) mkdir($extensionPath.$targetDirectory);
|
||||
|
||||
// Create the symlink
|
||||
$_addSoftLinks = symlink(
|
||||
$_addSoftLinks = @symlink(
|
||||
// Target
|
||||
$extensionPath.$targetDirectory,
|
||||
$rootPath.$targetDirectory.'/'.ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$extensionName
|
||||
// Link
|
||||
$rootPath.$targetDirectory.DIRECTORY_SEPARATOR.ExtensionsLib::EXTENSIONS_DIR_NAME.DIRECTORY_SEPARATOR.$extensionName
|
||||
);
|
||||
|
||||
// On failure
|
||||
if (!$_addSoftLinks)
|
||||
{
|
||||
log_message('error', 'Failed to create Symlink to '.$extensionPath.$targetDirectory);
|
||||
@@ -796,9 +905,9 @@ class ExtensionsLib
|
||||
$this->_printMessage('Removing the extracted data from the upload directory');
|
||||
if ($uploadData != null
|
||||
&& isset($uploadData->extensionName)
|
||||
&& file_exists($this->UPLOAD_PATH.$uploadData->extensionName))
|
||||
&& file_exists($this->_getUploadPath().$uploadData->extensionName))
|
||||
{
|
||||
$this->_rrm($this->UPLOAD_PATH.$uploadData->extensionName);
|
||||
$this->_rrm($this->_getUploadPath().$uploadData->extensionName);
|
||||
}
|
||||
|
||||
// If the upload of the file is a success and the extension name is present and no previous installation were found
|
||||
@@ -812,16 +921,13 @@ class ExtensionsLib
|
||||
{
|
||||
// Remove them all from file system and DB
|
||||
$this->_printMessage('Removing entries in the DB related to this extension and from extensions directory');
|
||||
$this->delExtension($result->retval[0]->extension_id);
|
||||
$this->delExtension(getData($result)[0]->extension_id);
|
||||
}
|
||||
}
|
||||
else // otherwise
|
||||
// Otherwise remove them all only from DB
|
||||
elseif ($extensionJson != null && isset($extensionJson->extension_id))
|
||||
{
|
||||
// Remove them all only from DB
|
||||
if ($extensionJson != null && isset($extensionJson->extension_id))
|
||||
{
|
||||
$this->_ci->ExtensionsModel->delete($extensionJson->extension_id);
|
||||
}
|
||||
$this->_ci->ExtensionsModel->delete($extensionJson->extension_id);
|
||||
}
|
||||
|
||||
$this->_printMessage('Rollback finished');
|
||||
@@ -830,46 +936,19 @@ class ExtensionsLib
|
||||
}
|
||||
|
||||
/**
|
||||
* To enable/disable an extension
|
||||
* Returns the absolute upload path
|
||||
*/
|
||||
private function _toggleExtension($extensionId, $enabled)
|
||||
private function _getUploadPath()
|
||||
{
|
||||
$_toggleExtension = false;
|
||||
return APPPATH.self::UPLOAD_PATH;
|
||||
}
|
||||
|
||||
// Loads data from DB about the given extension
|
||||
$result = $this->_ci->ExtensionsModel->load($extensionId);
|
||||
if (hasData($result))
|
||||
{
|
||||
$extensionName = $result->retval[0]->name; // extension name
|
||||
|
||||
// If to be enabled
|
||||
if ($enabled === true)
|
||||
{
|
||||
// Add the symlinks
|
||||
$_toggleExtension = $this->_addSoftLinks($extensionName);
|
||||
}
|
||||
else // If to be disabled
|
||||
{
|
||||
// Remove all the symlinks
|
||||
$_toggleExtension = $this->_delSoftLinks($extensionName);
|
||||
}
|
||||
|
||||
if ($_toggleExtension) // if is a success
|
||||
{
|
||||
// Updates DB
|
||||
$result = $this->_ci->ExtensionsModel->update($extensionId, array('enabled' => $enabled));
|
||||
if (isSuccess($result))
|
||||
{
|
||||
$_toggleExtension = true;
|
||||
}
|
||||
else // if DB update fails remove symlinks from file system
|
||||
{
|
||||
$this->_delSoftLinks($extensionName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $_toggleExtension;
|
||||
/**
|
||||
* Returns the absolute extensions path
|
||||
*/
|
||||
private function _getExtensionsPath()
|
||||
{
|
||||
return APPPATH.self::EXTENSIONS_DIR_NAME.DIRECTORY_SEPARATOR;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -931,4 +1010,13 @@ class ExtensionsLib
|
||||
{
|
||||
$this->_printInfo('------------------------------------------------------------------------------------------');
|
||||
}
|
||||
|
||||
/**
|
||||
* Install the phrases from the given extension
|
||||
*/
|
||||
private function _installPhrases($extensionName)
|
||||
{
|
||||
$this->_ci->phraseslib->installFrom($this->_getExtensionsPath().$extensionName.'/'.self::PHRASES_DIRECTORY);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,171 +0,0 @@
|
||||
<?php
|
||||
|
||||
if (! defined("BASEPATH")) exit("No direct script access allowed");
|
||||
|
||||
class KalenderNotificationLib
|
||||
{
|
||||
private $_ci;
|
||||
public function __construct()
|
||||
{
|
||||
$this->_ci =& get_instance();
|
||||
$this->_ci->load->library('MailLib');
|
||||
$this->_ci->load->config('tempus');
|
||||
$this->_ci->load->model('ressource/Kalender_model', 'KalenderModel');
|
||||
}
|
||||
|
||||
public function sendMails($mail_infos)
|
||||
{
|
||||
if (!$this->_ci->config->item('send_update_mails'))
|
||||
return true;
|
||||
|
||||
$lektor_added = array();
|
||||
$lektor_changed = array();
|
||||
$lektor_deleted = array();
|
||||
|
||||
$student_added = array();
|
||||
$student_changed = array();
|
||||
$student_deleted = array();
|
||||
|
||||
foreach ($mail_infos as $info)
|
||||
{
|
||||
$entry = $info['entry'];
|
||||
$new_status = $info['new_status'];
|
||||
$notify = $info['notify'];
|
||||
|
||||
$old_entry = null;
|
||||
if ($entry->vorgaenger_kalender_id)
|
||||
{
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender_ort', 'tbl_kalender.kalender_id = tbl_kalender_ort.kalender_id', 'LEFT');
|
||||
$vorgaenger = $this->_ci->KalenderModel->load(array('tbl_kalender.kalender_id' => $entry->vorgaenger_kalender_id));
|
||||
if (hasData($vorgaenger))
|
||||
$old_entry = getData($vorgaenger)[0];
|
||||
}
|
||||
|
||||
if ($new_status === 'deleted')
|
||||
$row = $this->_buildMailDeleted($entry);
|
||||
else if ($old_entry)
|
||||
$row = $this->_buildMailChanged($old_entry, $entry);
|
||||
else
|
||||
$row = $this->_buildMailNew($entry);
|
||||
|
||||
if (in_array('lektor', $notify))
|
||||
{
|
||||
if ($new_status === 'deleted')
|
||||
$lektor_deleted[] = $row;
|
||||
else if ($old_entry)
|
||||
$lektor_changed[] = $row;
|
||||
else
|
||||
$lektor_added[] = $row;
|
||||
}
|
||||
|
||||
if (in_array('student', $notify))
|
||||
{
|
||||
if ($new_status === 'deleted')
|
||||
$student_deleted[] = $row;
|
||||
else if ($old_entry)
|
||||
$student_changed[] = $row;
|
||||
else
|
||||
$student_added[] = $row;
|
||||
}
|
||||
}
|
||||
|
||||
$lektor_entries = '';
|
||||
$student_entries = '';
|
||||
|
||||
if (!empty($lektor_added))
|
||||
$lektor_entries .= $this->_addToList($lektor_added, 'hinzugefügt') . '<hr/>';
|
||||
|
||||
if (!empty($lektor_changed))
|
||||
$lektor_entries .= $this->_addToList($lektor_changed, 'geändert') . '<hr/>';
|
||||
|
||||
if (!empty($lektor_deleted))
|
||||
$lektor_entries .= $this->_addToList($lektor_deleted, 'gelöscht') . '<hr/>';
|
||||
|
||||
if (!empty($student_added))
|
||||
$student_entries .= $this->_addToList($student_added, 'hinzugefügt') . '<hr/>';
|
||||
|
||||
if (!empty($student_changed))
|
||||
$student_entries .= $this->_addToList($student_changed, 'geändert') . '<hr/>';
|
||||
|
||||
if (!empty($student_deleted))
|
||||
$student_entries .= $this->_addToList($student_deleted, 'gelöscht') . '<hr/>';
|
||||
|
||||
//TODO (david) richtigen Empfänger
|
||||
if (!empty($lektor_entries))
|
||||
$this->_ci->maillib->send('', '[email protected]', 'Lektor Tempus Update', $lektor_entries);
|
||||
if (!empty($student_entries))
|
||||
$this->_ci->maillib->send('', '[email protected]', 'Student Tempus Update', $student_entries);
|
||||
}
|
||||
|
||||
private function _addToList($entries, $status)
|
||||
{
|
||||
return 'Folgende Einträge wurden <b>'. $status .'</b>: <ul>' . implode('', $entries) . '</ul>';
|
||||
|
||||
}
|
||||
private function _buildMailNew($entry)
|
||||
{
|
||||
$von = date('d.m.Y H:i', strtotime($entry->von));
|
||||
$bis = date('H:i', strtotime($entry->bis));
|
||||
|
||||
return '<li>
|
||||
<b>Kalender ID ' . ($entry->kalender_id ?? '-') . '</b>
|
||||
<ul>
|
||||
<li><b>Uhrzeit:</b> ' . $von . ' - ' . $bis . '</li>
|
||||
<li><b>Ort:</b> ' . ($entry->ort_kurzbz ?? '-') . '</li>
|
||||
</ul>
|
||||
</li>';
|
||||
}
|
||||
|
||||
private function _buildMailChanged($old_entry, $new_entry)
|
||||
{
|
||||
$old_von = date('d.m.Y H:i', strtotime($old_entry->von));
|
||||
$old_bis = date('H:i', strtotime($old_entry->bis));
|
||||
$new_von = date('d.m.Y H:i', strtotime($new_entry->von));
|
||||
$new_bis = date('H:i', strtotime($new_entry->bis));
|
||||
|
||||
$old_ort = $old_entry->ort_kurzbz ?? '-';
|
||||
$new_ort = $new_entry->ort_kurzbz ?? '-';
|
||||
|
||||
$uhrzeit_changed = ($old_von . $old_bis) !== ($new_von . $new_bis);
|
||||
$ort_changed = $old_ort !== $new_ort;
|
||||
|
||||
$changes = '';
|
||||
|
||||
if ($uhrzeit_changed)
|
||||
{
|
||||
$changes .= '<li>
|
||||
<b>Uhrzeit:</b>
|
||||
<s style="color:red;">' . $old_von . ' - ' . $old_bis . '</s>
|
||||
<span style="color:green;">' . $new_von . ' - ' . $new_bis . '</span>
|
||||
</li>';
|
||||
}
|
||||
|
||||
if ($ort_changed)
|
||||
{
|
||||
$changes .= '<li>
|
||||
<b>Ort:</b>
|
||||
<s style="color:red;">' . $old_ort . '</s>
|
||||
<span style="color:green;">' . $new_ort . '</span>
|
||||
</li>';
|
||||
}
|
||||
|
||||
return '<li>
|
||||
<b>Kalender ID ' . ($new_entry->kalender_id ?? '-') . '</b>
|
||||
<ul>' . $changes . '</ul>
|
||||
</li>';
|
||||
}
|
||||
|
||||
private function _buildMailDeleted($entry)
|
||||
{
|
||||
$von = date('d.m.Y H:i', strtotime($entry->von));
|
||||
$bis = date('H:i', strtotime($entry->bis));
|
||||
|
||||
return '<li style="color:red;">
|
||||
<b><s>Kalender ID ' . ($entry->kalender_id ?? '-') . '</s></b>
|
||||
<ul>
|
||||
<li><s>' . $von . ' - ' . $bis . '</s></li>
|
||||
<li><s>' . ($entry->ort_kurzbz ?? '-') . '</s></li>
|
||||
</ul>
|
||||
</li>';
|
||||
}
|
||||
}
|
||||
@@ -1,429 +0,0 @@
|
||||
<?php
|
||||
|
||||
if (! defined("BASEPATH")) exit("No direct script access allowed");
|
||||
|
||||
class KalenderSyncLib
|
||||
{
|
||||
private $_ci;
|
||||
|
||||
private $status_map = array(
|
||||
'preview' => array('planning', 'sync_preview'),
|
||||
'live' => array('planning', 'sync_preview', 'preview', 'sync_live')
|
||||
);
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->_ci =& get_instance();
|
||||
|
||||
$this->_ci->load->model('ressource/Kalender_model', 'KalenderModel');
|
||||
$this->_ci->load->model('ressource/Kalendersyncstatus_model', 'KalendersyncstatusModel');
|
||||
$this->_ci->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||
$this->_ci->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel');
|
||||
$this->_ci->load->library('KalenderLib');
|
||||
}
|
||||
|
||||
public function run($studiensemester_kurzbz)
|
||||
{
|
||||
$this->_ci->KalendersyncstatusModel->db->where('studiensemester_kurzbz', $studiensemester_kurzbz);
|
||||
|
||||
$configs = $this->_ci->KalendersyncstatusModel->load();
|
||||
|
||||
if (isError($configs))
|
||||
return $configs;
|
||||
|
||||
if (!hasData($configs))
|
||||
return success([]);
|
||||
|
||||
$results = [];
|
||||
$mail_infos_gesamt = [];
|
||||
|
||||
foreach (getData($configs) as $config)
|
||||
{
|
||||
|
||||
$ziel_status = isEmptyString($config->sync_status_kurzbz) ? 'live' : $config->sync_status_kurzbz;
|
||||
|
||||
$relevante_stati = array_merge($this->status_map[$ziel_status], array('to_delete', 'to_delete_live', 'to_delete_preview'));
|
||||
|
||||
$kalender_ids_result = $this->getKalenderIds(
|
||||
$config->oe_kurzbz,
|
||||
$config->studiensemester_kurzbz,
|
||||
$relevante_stati,
|
||||
$config->ausbildungssemester,
|
||||
$config->studienplan_id,
|
||||
$config->datum_bis
|
||||
);
|
||||
|
||||
if (isError($kalender_ids_result))
|
||||
return $kalender_ids_result;
|
||||
|
||||
$kalender_ids = getData($kalender_ids_result);
|
||||
|
||||
$sync_result = $this->_syncKalenderIds($kalender_ids, $ziel_status);
|
||||
|
||||
if (isError($sync_result))
|
||||
return $sync_result;
|
||||
|
||||
$sync_data = getData($sync_result);
|
||||
|
||||
if ((bool) $config->mail)
|
||||
$mail_infos_gesamt = array_merge($mail_infos_gesamt, $sync_data['mail_infos']);
|
||||
|
||||
$results[] = [
|
||||
'kalender_syncstatus_id' => $config->kalender_syncstatus_id,
|
||||
'oe_kurzbz' => $config->oe_kurzbz,
|
||||
'ausbildungssemester' => $config->ausbildungssemester,
|
||||
'studienplan_id' => $config->studienplan_id,
|
||||
'ziel_status' => $ziel_status,
|
||||
'mail' => (bool) $config->mail,
|
||||
'synced' => $sync_data['synced']
|
||||
];
|
||||
}
|
||||
|
||||
if (!empty($mail_infos_gesamt))
|
||||
{
|
||||
$this->_ci->load->library('KalenderNotificationLib');
|
||||
$this->_ci->kalendernotificationlib->sendMails($mail_infos_gesamt);
|
||||
}
|
||||
|
||||
return success($results);
|
||||
}
|
||||
|
||||
public function runManual($oe_kurzbz, $studiensemester_kurzbz, $ausbildungssemester = null, $studienplan_id = null, $mail = true, $datum_bis = null, $ziel_status = 'live')
|
||||
{
|
||||
$relevante_stati = array_merge($this->status_map[$ziel_status], array('to_delete', 'to_delete_live', 'to_delete_preview'));
|
||||
|
||||
$kalender_ids_result = $this->getKalenderIds(
|
||||
$oe_kurzbz,
|
||||
$studiensemester_kurzbz,
|
||||
$relevante_stati,
|
||||
$ausbildungssemester,
|
||||
$studienplan_id,
|
||||
$datum_bis
|
||||
);
|
||||
|
||||
if (isError($kalender_ids_result))
|
||||
return $kalender_ids_result;
|
||||
|
||||
$kalender_ids = getData($kalender_ids_result);
|
||||
|
||||
$sync_result = $this->_syncKalenderIds($kalender_ids, $ziel_status);
|
||||
|
||||
if (isError($sync_result))
|
||||
return $sync_result;
|
||||
|
||||
$sync_data = getData($sync_result);
|
||||
|
||||
if ($mail && !empty($sync_data['mail_infos']))
|
||||
{
|
||||
$this->_ci->load->library('KalenderNotificationLib');
|
||||
$this->_ci->kalendernotificationlib->sendMails($sync_data['mail_infos']);
|
||||
}
|
||||
|
||||
return success(['synced' => $sync_data['synced']]);
|
||||
}
|
||||
|
||||
public function sync()
|
||||
{
|
||||
$mail_infos_gesamt = [];
|
||||
$synced_gesamt = 0;
|
||||
|
||||
$todelete_ids_result = $this->_getManuallySetStatus(array('to_delete', 'to_delete_live', 'to_delete_preview'));
|
||||
|
||||
if (isError($todelete_ids_result))
|
||||
return $todelete_ids_result;
|
||||
|
||||
$todelete_result = $this->_syncKalenderIds(getData($todelete_ids_result), null);
|
||||
|
||||
if (isError($todelete_result))
|
||||
return $todelete_result;
|
||||
|
||||
$todelete_data = getData($todelete_result);
|
||||
$mail_infos_gesamt = array_merge($mail_infos_gesamt, $todelete_data['mail_infos']);
|
||||
$synced_gesamt += $todelete_data['synced'];
|
||||
|
||||
$preview_ids_result = $this->_getManuallySetStatus(array('sync_preview'));
|
||||
|
||||
if (isError($preview_ids_result))
|
||||
return $preview_ids_result;
|
||||
|
||||
$preview_result = $this->_syncKalenderIds(getData($preview_ids_result), 'preview');
|
||||
|
||||
if (isError($preview_result))
|
||||
return $preview_result;
|
||||
|
||||
$preview_data = getData($preview_result);
|
||||
$mail_infos_gesamt = array_merge($mail_infos_gesamt, $preview_data['mail_infos']);
|
||||
$synced_gesamt += $preview_data['synced'];
|
||||
|
||||
$live_ids_result = $this->_getManuallySetStatus(array('sync_live'));
|
||||
|
||||
if (isError($live_ids_result))
|
||||
return $live_ids_result;
|
||||
|
||||
$live_result = $this->_syncKalenderIds(getData($live_ids_result), 'live');
|
||||
|
||||
if (isError($live_result))
|
||||
return $live_result;
|
||||
|
||||
$live_data = getData($live_result);
|
||||
$mail_infos_gesamt = array_merge($mail_infos_gesamt, $live_data['mail_infos']);
|
||||
$synced_gesamt += $live_data['synced'];
|
||||
|
||||
if (!empty($mail_infos_gesamt))
|
||||
{
|
||||
$this->_ci->load->library('KalenderNotificationLib');
|
||||
$this->_ci->kalendernotificationlib->sendMails($mail_infos_gesamt);
|
||||
}
|
||||
|
||||
return success(['synced' => $synced_gesamt]);
|
||||
}
|
||||
|
||||
private function _getManuallySetStatus($status_kurzbz_list)
|
||||
{
|
||||
if (empty($status_kurzbz_list))
|
||||
return success([]);
|
||||
|
||||
$this->_ci->KalenderModel->addSelect('tbl_kalender.kalender_id');
|
||||
$this->_ci->KalenderModel->db->where_in('status_kurzbz', $status_kurzbz_list);
|
||||
$result = $this->_ci->KalenderModel->load();
|
||||
|
||||
if (isError($result))
|
||||
return $result;
|
||||
|
||||
if (!hasData($result))
|
||||
return success([]);
|
||||
|
||||
return success(array_column(getData($result), 'kalender_id'));
|
||||
}
|
||||
|
||||
public function getKalenderIds($oe_kurzbz, $studiensemester_kurzbz, $status_kurzbz_list, $ausbildungssemester = null, $studienplan_id = null, $datum_bis = null)
|
||||
{
|
||||
if (empty($status_kurzbz_list))
|
||||
return success([]);
|
||||
|
||||
$studiengang_result = $this->_getStudiengang($oe_kurzbz);
|
||||
|
||||
if (isError($studiengang_result))
|
||||
return $studiengang_result;
|
||||
|
||||
$studiengang_kz = getData($studiengang_result);
|
||||
|
||||
if (!hasData($studiengang_result))
|
||||
{
|
||||
$organisationseinheiten = $this->_ci->OrganisationseinheitModel->getChilds($oe_kurzbz);
|
||||
$oe_kurzbz = hasData($organisationseinheiten) ? array_column(getData($organisationseinheiten), 'oe_kurzbz') : [];
|
||||
}
|
||||
|
||||
$this->_ci->KalenderModel->addDistinct('tbl_kalender.kalender_id');
|
||||
$this->_ci->KalenderModel->addSelect('tbl_kalender.kalender_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender_lehreinheit', 'tbl_kalender.kalender_id = tbl_kalender_lehreinheit.kalender_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_lehreinheit', 'tbl_kalender_lehreinheit.lehreinheit_id = tbl_lehreinheit.lehreinheit_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_lehrveranstaltung', 'tbl_lehreinheit.lehrveranstaltung_id = tbl_lehrveranstaltung.lehrveranstaltung_id');
|
||||
|
||||
if (!is_null($studiengang_kz))
|
||||
{
|
||||
$this->_ci->KalenderModel->db->where('tbl_lehrveranstaltung.studiengang_kz', $studiengang_kz);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->_ci->KalenderModel->db->where_in('tbl_lehrveranstaltung.oe_kurzbz', $oe_kurzbz);
|
||||
}
|
||||
|
||||
$this->_ci->KalenderModel->db->where('tbl_lehreinheit.studiensemester_kurzbz', $studiensemester_kurzbz);
|
||||
$this->_ci->KalenderModel->db->where_in('tbl_kalender.status_kurzbz', $status_kurzbz_list);
|
||||
|
||||
$this->_ci->KalenderModel->db->where('NOT EXISTS (
|
||||
SELECT 1 FROM lehre.tbl_kalender nachfolger
|
||||
WHERE nachfolger.vorgaenger_kalender_id = tbl_kalender.kalender_id)', null, false);
|
||||
|
||||
if (!is_null($studienplan_id))
|
||||
{
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_studienplan_lehrveranstaltung', 'tbl_lehrveranstaltung.lehrveranstaltung_id = tbl_studienplan_lehrveranstaltung.lehrveranstaltung_id');
|
||||
$this->_ci->KalenderModel->db->where('tbl_studienplan_lehrveranstaltung.studienplan_id', $studienplan_id);
|
||||
}
|
||||
|
||||
if (!is_null($ausbildungssemester))
|
||||
$this->_ci->KalenderModel->db->where('tbl_lehrveranstaltung.semester', $ausbildungssemester);
|
||||
|
||||
if (!is_null($datum_bis))
|
||||
{
|
||||
$end_date = date('Y-m-d', strtotime($datum_bis . ' +1 day'));
|
||||
$this->_ci->KalenderModel->db->where('tbl_kalender.von <', $end_date);
|
||||
}
|
||||
|
||||
$result = $this->_ci->KalenderModel->load();
|
||||
|
||||
if (isError($result))
|
||||
return $result;
|
||||
|
||||
if (!hasData($result))
|
||||
return success([]);
|
||||
|
||||
return success(array_column(getData($result), 'kalender_id'));
|
||||
}
|
||||
|
||||
|
||||
private function _archiveVorgaenger($vorgaenger_kalender_id, $stop_at_live = false)
|
||||
{
|
||||
$return_array = array();
|
||||
if (!$vorgaenger_kalender_id) return success($return_array);
|
||||
|
||||
$current_id = $vorgaenger_kalender_id;
|
||||
|
||||
while ($current_id)
|
||||
{
|
||||
$vorgaenger = $this->_ci->KalenderModel->load(array('kalender_id' => $current_id));
|
||||
if (!hasData($vorgaenger)) return success($return_array);
|
||||
|
||||
$vorgaenger = getData($vorgaenger)[0];
|
||||
|
||||
if ($stop_at_live && $vorgaenger->status_kurzbz === 'live')
|
||||
return success($return_array);
|
||||
|
||||
if (in_array($vorgaenger->status_kurzbz, array('preview', 'live')))
|
||||
{
|
||||
$this->_ci->KalenderModel->update(
|
||||
array('kalender_id' => $current_id),
|
||||
array('status_kurzbz' => 'archived', 'status_kurzbz_max' => $vorgaenger->status_kurzbz)
|
||||
);
|
||||
|
||||
$return_array[] = $vorgaenger;
|
||||
}
|
||||
|
||||
$current_id = $vorgaenger->vorgaenger_kalender_id;
|
||||
}
|
||||
return success($return_array);
|
||||
}
|
||||
|
||||
private function _syncKalenderIds($kalender_ids, $ziel_status)
|
||||
{
|
||||
if (empty($kalender_ids))
|
||||
return success(['synced' => 0, 'mail_infos' => []]);
|
||||
|
||||
$this->_ci->KalenderModel->addSelect('tbl_kalender.*, tbl_kalender_ort.ort_kurzbz, tbl_kalender_ort.location');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender_ort', 'tbl_kalender.kalender_id = tbl_kalender_ort.kalender_id', 'LEFT');
|
||||
$this->_ci->KalenderModel->db->where_in('tbl_kalender.kalender_id', $kalender_ids);
|
||||
$this->_ci->KalenderModel->addOrder('tbl_kalender.kalender_id', 'DESC');
|
||||
$to_update = $this->_ci->KalenderModel->load();
|
||||
|
||||
if (isError($to_update))
|
||||
return $to_update;
|
||||
|
||||
if (!hasData($to_update))
|
||||
return success(['synced' => 0, 'mail_infos' => []]);
|
||||
|
||||
$mail_infos = [];
|
||||
$synced = 0;
|
||||
|
||||
foreach (getData($to_update) as $entry)
|
||||
{
|
||||
if (in_array($entry->status_kurzbz, array('to_delete', 'to_delete_live', 'to_delete_preview')))
|
||||
{
|
||||
$notify = array();
|
||||
if ($entry->status_kurzbz === 'to_delete_live')
|
||||
{
|
||||
$status_max = 'live';
|
||||
$notify = array('lektor', 'student');
|
||||
}
|
||||
else if ($entry->status_kurzbz === 'to_delete_preview')
|
||||
{
|
||||
$status_max = 'preview';
|
||||
$notify = array('lektor');
|
||||
}
|
||||
else if ($entry->status_kurzbz === 'to_delete')
|
||||
{
|
||||
$status_max = 'planning';
|
||||
}
|
||||
|
||||
$this->_ci->KalenderModel->update(array('kalender_id' => $entry->kalender_id), array('status_kurzbz' => 'deleted', 'status_kurzbz_max' => $status_max));
|
||||
$mail_infos[] = array('entry' => $entry, 'new_status' => 'deleted', 'notify' => $notify);
|
||||
|
||||
$vorgaenger_array = $this->_archiveVorgaenger($entry->vorgaenger_kalender_id);
|
||||
|
||||
|
||||
|
||||
if (hasData($vorgaenger_array))
|
||||
{
|
||||
foreach(getData($vorgaenger_array) as $vorgaenger)
|
||||
{
|
||||
$archive_notify = array();
|
||||
|
||||
if ($vorgaenger->status_kurzbz === 'preview')
|
||||
$archive_notify = array('lektor');
|
||||
else if ($vorgaenger->status_kurzbz === 'live')
|
||||
{
|
||||
$archive_notify = array('student', 'lektor');
|
||||
|
||||
$history = $this->_ci->kalenderlib->getHistory($vorgaenger->kalender_id, false, false);
|
||||
if (hasData($history))
|
||||
{
|
||||
$history = getData($history);
|
||||
|
||||
foreach ($history as $entry)
|
||||
{
|
||||
if ($entry->status_kurzbz === 'deleted' && $entry->status_kurzbz_max === 'preview')
|
||||
{
|
||||
$archive_notify = array('student');
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$mail_infos[] = array('entry' => $vorgaenger, 'new_status' => 'deleted', 'notify' => $archive_notify);
|
||||
}
|
||||
}
|
||||
|
||||
$synced++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($ziel_status === 'preview' && in_array($entry->status_kurzbz, array('planning', 'sync_preview')))
|
||||
{
|
||||
$this->_ci->KalenderModel->update(array('kalender_id' => $entry->kalender_id), array('status_kurzbz' => 'preview'));
|
||||
$this->_archiveVorgaenger($entry->vorgaenger_kalender_id, true);
|
||||
$mail_infos[] = array('entry' => $entry, 'new_status' => 'preview', 'notify' => array('lektor'));
|
||||
$synced++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($ziel_status === 'live' && in_array($entry->status_kurzbz, array('planning', 'sync_preview', 'sync_live')))
|
||||
{
|
||||
$this->_ci->KalenderModel->update(array('kalender_id' => $entry->kalender_id), array('status_kurzbz' => 'live'));
|
||||
$this->_archiveVorgaenger($entry->vorgaenger_kalender_id, false);
|
||||
$mail_infos[] = array('entry' => $entry, 'new_status' => 'live', 'notify' => array('lektor', 'student'));
|
||||
$synced++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($ziel_status === 'live' && $entry->status_kurzbz === 'preview')
|
||||
{
|
||||
$current = getData($this->_ci->KalenderModel->load(array('kalender_id' => $entry->kalender_id)))[0];
|
||||
if ($current->status_kurzbz === 'archived')
|
||||
continue;
|
||||
|
||||
$this->_ci->KalenderModel->update(array('kalender_id' => $entry->kalender_id), array('status_kurzbz' => 'live'));
|
||||
$this->_archiveVorgaenger($entry->vorgaenger_kalender_id, false);
|
||||
$mail_infos[] = array('entry' => $entry, 'new_status' => 'live', 'notify' => array('lektor', 'student'));
|
||||
$synced++;
|
||||
}
|
||||
}
|
||||
|
||||
return success(['synced' => $synced, 'mail_infos' => $mail_infos]);
|
||||
}
|
||||
|
||||
|
||||
private function _getStudiengang($oe_kurzbz)
|
||||
{
|
||||
$this->_ci->StudiengangModel->addJoin('tbl_organisationseinheit', 'oe_kurzbz');
|
||||
$result = $this->_ci->StudiengangModel->loadWhere(array('oe_kurzbz' => $oe_kurzbz));
|
||||
|
||||
if (isError($result))
|
||||
return $result;
|
||||
|
||||
if (!hasData($result))
|
||||
return success(null);
|
||||
|
||||
return success(getData($result)[0]->studiengang_kz);
|
||||
}
|
||||
}
|
||||
@@ -1,98 +1,96 @@
|
||||
<?php
|
||||
/**
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
use \Netcarver\Textile\Parser as NTParser;
|
||||
|
||||
class PhrasesLib
|
||||
{
|
||||
// Directory name where all the category files are
|
||||
const CORE_PHRASES_DIRECTORY = 'phrases/';
|
||||
// Old config file used for the phrases
|
||||
const CORE_PHRASES_LEGACY_CFG_FILE = 'system/phrasesupdate.php';
|
||||
|
||||
// Who adds phrases into the database
|
||||
const INSERT_BY = 'PhrasesManager';
|
||||
|
||||
// Array elements names
|
||||
const APP = 'app';
|
||||
const CATEGORY = 'category';
|
||||
const PHRASE = 'phrase';
|
||||
const SPRACHE = 'sprache';
|
||||
const TEXT = 'text';
|
||||
const DESCRIPTION = 'description';
|
||||
|
||||
private $_ci; // Code igniter instance
|
||||
private $_phrases; // Contains the retrieved phrases
|
||||
|
||||
/**
|
||||
* Loads parser library
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->_ci =& get_instance();
|
||||
|
||||
$this->_phrases = null; // set the property _phrases as null by default
|
||||
|
||||
// CI parser
|
||||
$this->_ci->load->library('parser');
|
||||
// Loads EPrintfLib
|
||||
$this->_ci->load->library('EPrintfLib');
|
||||
|
||||
// Loads the PhraseModel
|
||||
$this->_ci->load->model('system/Phrase_model', 'PhraseModel');
|
||||
// Loads the PhrasentextModel
|
||||
$this->_ci->load->model('system/Phrasentext_model', 'PhrasentextModel');
|
||||
|
||||
// Workaround to use more parameters in the construct since PHP doesn't support many constructors
|
||||
$this->_extend_construct(func_get_args());
|
||||
}
|
||||
$this->_extendConstruct(func_get_args());
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Public methods
|
||||
|
||||
/**
|
||||
* getPhrase() - loads a specific Phrase
|
||||
*/
|
||||
public function getPhrase($phrase_id)
|
||||
{
|
||||
if (isEmptyString($phrase_id)) return error(MSG_ERR_INVALID_MSG_ID);
|
||||
|
||||
return $this->_ci->PhraseModel->load($phrase_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* getSubMessages() - will return all Messages subordinated from a specified message.
|
||||
*/
|
||||
public function getPhraseByApp($app = null)
|
||||
{
|
||||
return $this->_ci->PhraseModel->loadWhere(array('app' => $app));
|
||||
}
|
||||
|
||||
/**
|
||||
* getPhraseInhalt
|
||||
*/
|
||||
public function getPhraseInhalt($phrase_id)
|
||||
{
|
||||
if (isEmptyString($phrase_id)) return error(MSG_ERR_INVALID_MSG_ID);
|
||||
|
||||
return $this->_ci->PhrasentextModel->loadWhere(array('phrase_id' => $phrase_id));
|
||||
}
|
||||
|
||||
/**
|
||||
* delPhrasentext
|
||||
*/
|
||||
public function delPhrasentext($phrasentext_id)
|
||||
{
|
||||
if (isEmptyString($phrasentext_id)) return error(MSG_ERR_INVALID_MSG_ID);
|
||||
|
||||
return $this->_ci->PhrasentextModel->delete(array('phrasentext_id' => $phrasentext_id));
|
||||
}
|
||||
|
||||
/**
|
||||
* savePhrase() - will save a spezific Phrase.
|
||||
*/
|
||||
public function savePhrase($phrase_id, $data)
|
||||
{
|
||||
if (isEmptyString($data)) return error(MSG_ERR_INVALID_MSG_ID);
|
||||
|
||||
return $this->_ci->PhraseModel->update($phrase_id, $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* getVorlagetextByVorlage() - will load tbl_vorlagestudiengang for a spezific Template.
|
||||
*/
|
||||
public function getPhrasentextById($phrasentext_id)
|
||||
* Return the phrases in JSON format
|
||||
*/
|
||||
public function toJSON()
|
||||
{
|
||||
if (isEmptyString($phrasentext_id)) return error('Not a valid phrasentext_id');
|
||||
|
||||
return $this->_ci->PhrasentextModel->load($phrasentext_id);
|
||||
}
|
||||
return json_encode($this->_phrases);
|
||||
}
|
||||
|
||||
/**
|
||||
* getPhrases() - Retrieves phrases from the DB
|
||||
* getPhrase() - loads a specific Phrase
|
||||
*/
|
||||
public function getPhrase($phrase_id)
|
||||
{
|
||||
if (isEmptyString($phrase_id)) return error(MSG_ERR_INVALID_MSG_ID);
|
||||
|
||||
return $this->_ci->PhraseModel->load($phrase_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* getPhrases() - Retrieves phrases from the DB
|
||||
* The given parameter are the same needed to read from the table system.tb_phrase
|
||||
*/
|
||||
public function getPhrases($app, $sprache, $phrase = null, $orgeinheit_kurzbz = null, $orgform_kurzbz = null, $blockTags = null)
|
||||
{
|
||||
*/
|
||||
public function getPhrases($app, $sprache, $phrase = null, $orgeinheit_kurzbz = null, $orgform_kurzbz = null, $blockTags = null)
|
||||
{
|
||||
if (isset($app) && isset($sprache))
|
||||
{
|
||||
$result = $this->_ci->PhraseModel->getPhrases($app, $sprache, $phrase, $orgeinheit_kurzbz, $orgform_kurzbz);
|
||||
@@ -100,7 +98,7 @@ class PhrasesLib
|
||||
if (hasData($result))
|
||||
{
|
||||
// Textile parser
|
||||
$textileParser = new \Netcarver\Textile\Parser();
|
||||
$textileParser = new NTParser();
|
||||
|
||||
for ($i = 0; $i < count($result->retval); $i++)
|
||||
{
|
||||
@@ -139,31 +137,7 @@ class PhrasesLib
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* insertPhraseinhalt() - will load tbl_vorlagestudiengang for a spezific Template.
|
||||
*/
|
||||
public function insertPhraseinhalt($data)
|
||||
{
|
||||
return $this->_ci->PhrasentextModel->insert($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* getVorlagetextById() - will load tbl_vorlagestudiengang for a spezific Template.
|
||||
*/
|
||||
public function getVorlagetextById($vorlagestudiengang_id)
|
||||
{
|
||||
return $this->_ci->VorlageStudiengangModel->load($vorlagestudiengang_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* saveVorlagetext() - will load tbl_vorlagestudiengang for a spezific Template.
|
||||
*/
|
||||
public function updatePhraseInhalt($phrasentext_id, $data)
|
||||
{
|
||||
return $this->_ci->PhrasentextModel->update($phrasentext_id, $data);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves a phrases from the the property _phrases with the given parameters
|
||||
@@ -176,7 +150,7 @@ class PhrasesLib
|
||||
public function t($category, $phrase, $parameters = array(), $orgeinheit_kurzbz = null, $orgform_kurzbz = null)
|
||||
{
|
||||
// If the property _phrases is populated
|
||||
if (is_array($this->_phrases))
|
||||
if (!isEmptyArray($this->_phrases))
|
||||
{
|
||||
// Loops through the _phrases property
|
||||
for ($i = 0; $i < count($this->_phrases); $i++)
|
||||
@@ -202,6 +176,107 @@ class PhrasesLib
|
||||
}
|
||||
|
||||
/**
|
||||
* Install phrases from the core
|
||||
*/
|
||||
public function installFromCore()
|
||||
{
|
||||
$this->_installPhrases(APPPATH.self::CORE_PHRASES_DIRECTORY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Install phrases from the given path
|
||||
*/
|
||||
public function installFrom($phrasesDirectory)
|
||||
{
|
||||
$this->_installPhrases($phrasesDirectory);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates/updates the phrases files under the directory application/phrases/
|
||||
*/
|
||||
public function syncFiles()
|
||||
{
|
||||
// Legacy phrases file absolute path
|
||||
$legacyPhrasesFile = FHCPATH.self::CORE_PHRASES_LEGACY_CFG_FILE;
|
||||
|
||||
// Try to include the legacy file used to store the phrases
|
||||
// It is using the @ to suppress errors in case the file is not readable or does not exist
|
||||
// In case is not readable or does not exists it stops the execution and prompts a message
|
||||
if ((@include_once $legacyPhrasesFile) === false)
|
||||
{
|
||||
$this->_ci->eprintflib->printError($legacyPhrasesFile.' not found or not readable!'."\n");
|
||||
exit;
|
||||
}
|
||||
|
||||
// If the phrases array exists and it is not empty, otherwise it stops the executions and prompts a message
|
||||
if (!isset($phrases) || isEmptyArray($phrases))
|
||||
{
|
||||
$this->_ci->eprintflib->printError($legacyPhrasesFile.' does not contain a populated array called "$phrases"');
|
||||
exit;
|
||||
}
|
||||
|
||||
// For each phrases contained in the array
|
||||
foreach ($phrases as $phrase)
|
||||
{
|
||||
// If it contains the element category
|
||||
if (isset($phrase[self::CATEGORY]) && isset($phrase[self::PHRASE]))
|
||||
{
|
||||
//
|
||||
$toAppend = false;
|
||||
|
||||
// Path and name of the phrases category file
|
||||
$phrasesCategoryFile = APPPATH.self::CORE_PHRASES_DIRECTORY.$phrase[self::CATEGORY].'.php';
|
||||
|
||||
// Checks if a phrases file already exists for this category
|
||||
if (file_exists($phrasesCategoryFile))
|
||||
{
|
||||
// Get the phrases file category content
|
||||
$phrasesCategoryFileContent = file_get_contents($phrasesCategoryFile);
|
||||
|
||||
// If an error occurred
|
||||
if ($phrasesCategoryFileContent === false)
|
||||
{
|
||||
$this->_ci->eprintflib->printError('Was not possible to get the content of: '.$phrasesCategoryFile);
|
||||
exit;
|
||||
}
|
||||
|
||||
// Check if the phrase already exists inside this file
|
||||
if (stristr($phrasesCategoryFileContent, $phrase[self::PHRASE]) === false) $toAppend = true;
|
||||
}
|
||||
else // if not then
|
||||
{
|
||||
// Create the new phrases category file
|
||||
if (!$this->_createPhraseToCategoryFile($phrasesCategoryFile))
|
||||
{
|
||||
$this->_ci->eprintflib->printError('Was not possible to create the phrases category file: '.$phrasesCategoryFile);
|
||||
exit;
|
||||
}
|
||||
|
||||
$this->_ci->eprintflib->printMessage('Created new phrases category file: '.$phrasesCategoryFile);
|
||||
$toAppend = true;
|
||||
}
|
||||
|
||||
// If the phrase is to be appended to the phrases category file
|
||||
if ($toAppend)
|
||||
{
|
||||
// And then append the phrase to it
|
||||
if (!$this->_appendPhraseToCategoryFile($phrase, $phrasesCategoryFile))
|
||||
{
|
||||
$this->_ci->eprintflib->printError('Was not possible to append to the phrases category file: '.$phrasesCategoryFile);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
else // otherwise prompt an error message and continue
|
||||
{
|
||||
$this->_ci->eprintflib->printInfo('Missing "'.self::CATEGORY.'" or "'.self::PHRASE.'" for the following element:');
|
||||
var_dump($phrase);
|
||||
$this->_ci->eprintflib->printInfo('-------------------------------------------');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Workaround to reload the phrases array on an already constructed library.
|
||||
* @parameters -> look for _setPhrases docs
|
||||
*/
|
||||
@@ -215,6 +290,68 @@ class PhrasesLib
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Private methods
|
||||
|
||||
/**
|
||||
* Append a new phrases to the related phrases category file
|
||||
*/
|
||||
private function _appendPhraseToCategoryFile($phrase, $phrasesCategoryFile)
|
||||
{
|
||||
// Open the category phrases file and a temporary one
|
||||
$srcFileHandle = @fopen($phrasesCategoryFile, 'r');
|
||||
// In case exists then it is truncated
|
||||
$dstFileHandle = @fopen($phrasesCategoryFile.'.tmp', 'w');
|
||||
|
||||
// If an error occurred then return false
|
||||
if (!$srcFileHandle || !$dstFileHandle) return false;
|
||||
|
||||
$line = '';
|
||||
// Read the file line by line
|
||||
while (!feof($srcFileHandle))
|
||||
{
|
||||
// Read a single line from the source file
|
||||
$line = fgets($srcFileHandle, 4096);
|
||||
// If an error occurred then exit
|
||||
if ($line === false && !feof($srcFileHandle)) return false;
|
||||
|
||||
// If the first phrase or the end of the array
|
||||
if ($line == '$phrases = array();' || stristr($line, ');'))
|
||||
{
|
||||
$first_coma = ',';
|
||||
if ($line == '$phrases = array();') $first_coma = '';
|
||||
|
||||
// If found then append the new phrase to the current line
|
||||
// and replace the end of the array
|
||||
$line = str_replace(');', $first_coma."\n".var_export($phrase, true)."\n".');', $line);
|
||||
}
|
||||
|
||||
// In any case copy the line to the temp file
|
||||
if (@fwrite($dstFileHandle, $line) === false) return false;
|
||||
}
|
||||
|
||||
// Close the file handles
|
||||
fclose($srcFileHandle);
|
||||
fclose($dstFileHandle);
|
||||
|
||||
// Delete the old file
|
||||
if (@unlink($phrasesCategoryFile) === false) return false;
|
||||
|
||||
// Rename the temp file as the old one
|
||||
if (@rename($phrasesCategoryFile.'.tmp', $phrasesCategoryFile) === false) return false;
|
||||
|
||||
return true; // if everything was fine
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new phrases category file with the given name
|
||||
* and having an empy array called $phrases as content
|
||||
*/
|
||||
private function _createPhraseToCategoryFile($phrasesCategoryFile)
|
||||
{
|
||||
return !(file_put_contents(
|
||||
$phrasesCategoryFile,
|
||||
'<?php'."\n\n".'$phrases = array();'
|
||||
) === false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Extends the functionalities of the constructor of this class
|
||||
* This is a workaround to use more parameters in the construct since PHP doesn't support many constructors
|
||||
@@ -224,22 +361,19 @@ class PhrasesLib
|
||||
* - could be an array of categories, and for each category there is an array of phrases
|
||||
* language: optional parameter must be a string. It's used to load phrases
|
||||
*/
|
||||
private function _extend_construct($params)
|
||||
private function _extendConstruct($params)
|
||||
{
|
||||
// Checks if the $params is an array with at least one element
|
||||
if (is_array($params) && count($params) > 0)
|
||||
if (!isEmptyArray($params))
|
||||
{
|
||||
$parameters = $params[0]; // temporary variable
|
||||
$isIndexArray = false; //flag for indexed array
|
||||
|
||||
// If there are parameters
|
||||
if (is_array($parameters) && count($parameters) > 0)
|
||||
if (!isEmptyArray($parameters))
|
||||
{
|
||||
$categories = $parameters[0]; // categories is always the first parameter
|
||||
if (!is_array($categories)) // if it is not an array, then convert into one
|
||||
{
|
||||
$categories = array($categories);
|
||||
}
|
||||
// If it is not an array, then convert into one
|
||||
if (!is_array($categories)) $categories = array($categories);
|
||||
|
||||
// Retrieves the language of the logged user
|
||||
$language = getUserLanguage(count($parameters) == 2 ? $parameters[1] : null);
|
||||
@@ -279,7 +413,7 @@ class PhrasesLib
|
||||
// If language is not default language and phrasentext is null -> fallback to default language
|
||||
if ($language != DEFAULT_LANGUAGE)
|
||||
{
|
||||
// get array with phrasentexte in the default language
|
||||
// Get array with phrasentexte in the default language
|
||||
$defaultPhrases = null;
|
||||
if ($isIndexArray)
|
||||
{
|
||||
@@ -290,19 +424,19 @@ class PhrasesLib
|
||||
$defaultPhrases = $this->_ci->PhraseModel->getPhrasesByCategoryAndPhrasesAndLanguage($categories, DEFAULT_LANGUAGE);
|
||||
}
|
||||
|
||||
// combine array with phrasentexte in users language and in default language
|
||||
// Combine array with phrasentexte in users language and in default language
|
||||
// (default used if phrasentext in users language is null or not set)
|
||||
if (hasData($phrases) && hasData($defaultPhrases))
|
||||
{
|
||||
// loop through phrases in default language
|
||||
// Loop through phrases in default language
|
||||
foreach ($defaultPhrases->retval as $defaultPhrase)
|
||||
{
|
||||
$found = false; // flag for found phrase
|
||||
|
||||
// loop through phrases in users language
|
||||
// Loop through phrases in users language
|
||||
foreach ($phrases->retval as $phrase)
|
||||
{
|
||||
// if same phrase and category found and text is not null
|
||||
// If same phrase and category found and text is not null
|
||||
// use phrase in users language
|
||||
if ($phrase->phrase == $defaultPhrase->phrase
|
||||
&& $phrase->category == $defaultPhrase->category
|
||||
@@ -313,13 +447,11 @@ class PhrasesLib
|
||||
}
|
||||
}
|
||||
|
||||
// otherwise use phrase in default language
|
||||
if (!$found)
|
||||
{
|
||||
array_push($phrases->retval, $defaultPhrase);
|
||||
}
|
||||
// Otherwise use phrase in default language
|
||||
if (!$found) array_push($phrases->retval, $defaultPhrase);
|
||||
}
|
||||
}
|
||||
// Otherwise if only defaultPhrases have data
|
||||
elseif (hasData($defaultPhrases))
|
||||
{
|
||||
$phrases = $defaultPhrases;
|
||||
@@ -327,19 +459,227 @@ class PhrasesLib
|
||||
}
|
||||
|
||||
// If there are phrases loaded then store them in the property _phrases
|
||||
if (hasData($phrases))
|
||||
{
|
||||
$this->_phrases = $phrases->retval;
|
||||
}
|
||||
|
||||
if (hasData($phrases)) $this->_phrases = $phrases->retval;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the property _phrases JSON encoded
|
||||
* @return json encoded property _phrases
|
||||
* Install phrases from the given directory
|
||||
*/
|
||||
public function getJSON()
|
||||
private function _installPhrases($phrasesDirectory)
|
||||
{
|
||||
return json_encode($this->_phrases);
|
||||
$this->_ci->eprintflib->printInfo('------------------------------------------------------------------------------------------');
|
||||
$this->_ci->eprintflib->printInfo('Phrases installation started from: '.$phrasesDirectory);
|
||||
|
||||
// If the given directory name does not exist
|
||||
if (!is_dir($phrasesDirectory))
|
||||
{
|
||||
$this->_ci->eprintflib->printError('The directory '.$phrasesDirectory.' does not exist');
|
||||
}
|
||||
else // otherwise install the phrases from the given directory
|
||||
{
|
||||
// Get the list of category files from the given directory
|
||||
$phrasesCategoryFiles = scandir($phrasesDirectory);
|
||||
|
||||
if ($phrasesCategoryFiles == false)
|
||||
{
|
||||
$this->_ci->eprintflib->printError('An error occurred while trying to access to the given directory: '.$phrasesDirectory);
|
||||
}
|
||||
else
|
||||
{
|
||||
// If no files are inside the given directory
|
||||
if (count($phrasesCategoryFiles) == 2)
|
||||
{
|
||||
$this->_ci->eprintflib->printInfo('No phrases files are inside the given directory: '.$phrasesDirectory);
|
||||
}
|
||||
|
||||
// For each file in this directory that represents a phrases category
|
||||
foreach ($phrasesCategoryFiles as $phrasesCategoryFile)
|
||||
{
|
||||
// Gets the infos about the file
|
||||
$pathInfo = pathinfo($phrasesDirectory.$phrasesCategoryFile);
|
||||
|
||||
// Skip the upper directory, the same directory and files that are not a php file
|
||||
if ($phrasesCategoryFile != '.'
|
||||
&& $phrasesCategoryFile != '..'
|
||||
&& $pathInfo['extension'] == 'php')
|
||||
{
|
||||
$phrases = null; // define the variable
|
||||
|
||||
// Include the php file that contains phrases for that category
|
||||
require_once($phrasesDirectory.$phrasesCategoryFile);
|
||||
|
||||
// If this file contains an array called phrases
|
||||
if (isset($phrases) && is_array($phrases))
|
||||
{
|
||||
$addPhrases = $this->_addPhrases($phrases); // add them to the database
|
||||
|
||||
// If a blocking error occurred then print an error and stop the execution
|
||||
if (isError($addPhrases))
|
||||
{
|
||||
$this->_ci->eprintflib->printError(getError($addPhrases));
|
||||
break;
|
||||
}
|
||||
}
|
||||
else // otherwise print an error and continue with the next file
|
||||
{
|
||||
$this->_ci->eprintflib->printInfo(
|
||||
'The file '.$phrasesDirectory.$phrasesCategoryFile.' does not contain an array called "phrases"'
|
||||
);
|
||||
}
|
||||
|
||||
// Clean for the next file
|
||||
unset($phrases);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->_ci->eprintflib->printInfo('Phrases installation ended');
|
||||
$this->_ci->eprintflib->printInfo('------------------------------------------------------------------------------------------');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add new phrases to the database
|
||||
*/
|
||||
private function _addPhrases($phrases)
|
||||
{
|
||||
// For eache given phrase
|
||||
foreach ($phrases as $phrase)
|
||||
{
|
||||
$phrase_id = null; // The id of the new/existing phrase
|
||||
|
||||
// Checks the mandatory fields, if one of them is not valid continue with the next phrase
|
||||
if (!$this->_isValidElement($phrase, self::APP)) continue;
|
||||
if (!$this->_isValidElement($phrase, self::CATEGORY)) continue;
|
||||
if (!$this->_isValidElement($phrase, self::PHRASE)) continue;
|
||||
|
||||
// Checks if the phrase already exists in the database
|
||||
$phraseResult = $this->_ci->PhraseModel->loadWhere(
|
||||
array(
|
||||
'app' => $phrase[self::APP],
|
||||
'category' => $phrase[self::CATEGORY],
|
||||
'phrase' => $phrase[self::PHRASE]
|
||||
)
|
||||
);
|
||||
|
||||
// If an error occurred then return the error itself
|
||||
if (isError($phraseResult)) return $phraseResult;
|
||||
|
||||
// If no phrase has been found
|
||||
if (!hasData($phraseResult))
|
||||
{
|
||||
// Then add the phrase to the database
|
||||
$phraseInsertResult = $this->_ci->PhraseModel->insert(
|
||||
array(
|
||||
'app' => $phrase[self::APP],
|
||||
'category' => $phrase[self::CATEGORY],
|
||||
'phrase' => $phrase[self::PHRASE],
|
||||
'insertamum' => 'NOW()',
|
||||
'insertvon' => self::INSERT_BY
|
||||
)
|
||||
);
|
||||
|
||||
// If an error occurred then return the error itself
|
||||
if (isError($phraseInsertResult)) return $phraseInsertResult;
|
||||
|
||||
$phrase_id = getData($phraseInsertResult); // the phrase_id of the new added phrase
|
||||
|
||||
// Prints info about the new added phrase
|
||||
$this->_ci->eprintflib->printMessage(
|
||||
sprintf(
|
||||
'A new phrase has been added into the database: '.
|
||||
'phrase_id => %s | app => %s | category => %s | phrase => %s',
|
||||
$phrase_id,
|
||||
$phrase[self::APP],
|
||||
$phrase[self::CATEGORY],
|
||||
$phrase[self::PHRASE]
|
||||
)
|
||||
);
|
||||
}
|
||||
else // otherwise if the phrase already exists in the database
|
||||
{
|
||||
$phrase_id = getData($phraseResult)[0]->phrase_id; // gets the phrase_id
|
||||
}
|
||||
|
||||
// If not a valid phrase_id
|
||||
if ($phrase_id == null) return error('Not a valid phrase id');
|
||||
|
||||
// For each phrase text, one text for each language
|
||||
foreach ($phrase['phrases'] as $phraseText)
|
||||
{
|
||||
// Checks the mandatory fields, if one of them is not valid continue with the next phrase text
|
||||
if (!$this->_isValidElement($phraseText, self::SPRACHE)) continue;
|
||||
if (!$this->_isValidElement($phraseText, self::TEXT)) continue;
|
||||
|
||||
// Set the not optional fields if they have not been set
|
||||
if (!isset($phraseText[self::DESCRIPTION])) $phraseText[self::DESCRIPTION] = null;
|
||||
|
||||
// Checks if the phrase already exists in the database
|
||||
$phraseTextResult = $this->_ci->PhrasentextModel->loadWhere(
|
||||
array(
|
||||
'phrase_id' => $phrase_id,
|
||||
'sprache' => $phraseText[self::SPRACHE]
|
||||
)
|
||||
);
|
||||
|
||||
// If an error occurred then return the error itself
|
||||
if (isError($phraseTextResult)) return $phraseTextResult;
|
||||
|
||||
// If no text for the phrase was found
|
||||
if (!hasData($phraseTextResult))
|
||||
{
|
||||
// Then add the text phrase to the database
|
||||
$phraseTextInsertResult = $this->_ci->PhrasentextModel->insert(
|
||||
array(
|
||||
'phrase_id' => $phrase_id,
|
||||
'sprache' => $phraseText[self::SPRACHE],
|
||||
'text' => $phraseText[self::TEXT],
|
||||
'description' => $phraseText[self::DESCRIPTION],
|
||||
'insertvon' => self::INSERT_BY,
|
||||
'insertamum' => 'NOW()',
|
||||
'orgeinheit_kurzbz' => null,
|
||||
'orgform_kurzbz' => null
|
||||
)
|
||||
);
|
||||
|
||||
// If an error occurred then return the error itself
|
||||
if (isError($phraseTextInsertResult)) return $phraseTextInsertResult;
|
||||
|
||||
// Prints info about the new added text phrase
|
||||
$this->_ci->eprintflib->printMessage(
|
||||
sprintf(
|
||||
'A new text has been added into the database: '.
|
||||
'phrase_id => %s | sprache => %s | text => %s | description => %s',
|
||||
$phrase_id,
|
||||
$phraseText[self::SPRACHE],
|
||||
substr($phraseText[self::TEXT], 0, 42).'...',
|
||||
substr($phraseText[self::DESCRIPTION], 0, 42).'...'
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If here then no blocking errors occurred
|
||||
return success();
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the given array element exists in the given array and if it is a valid string and then returns true
|
||||
* Otherwise prints an info and then returns false
|
||||
*/
|
||||
private function _isValidElement($array, $elementName)
|
||||
{
|
||||
// If a not valid text is set
|
||||
if ((isset($array[$elementName]) && isEmptyString($array[$elementName])) || !isset($array[$elementName]))
|
||||
{
|
||||
$this->_ci->eprintflib->printInfo('Not a valid element "'.$elementName.'":');
|
||||
var_dump($array); // KEEP IT!!!
|
||||
$this->_ci->eprintflib->printEOL();
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,563 +0,0 @@
|
||||
<?php
|
||||
|
||||
if (! defined("BASEPATH")) exit("No direct script access allowed");
|
||||
|
||||
use CI3_Events as Events;
|
||||
|
||||
class RaumvorschlagLib
|
||||
{
|
||||
private $_ci;
|
||||
public function __construct()
|
||||
{
|
||||
$this->_ci =& get_instance();
|
||||
|
||||
$this->_ci->load->model('ressource/Kalender_model', 'KalenderModel');
|
||||
$this->_ci->load->model('ressource/Kalender_Lehreinheit_model', 'KalenderLehreinheitModel');
|
||||
$this->_ci->load->model('ressource/Kalender_Event_model', 'KalenderEventModel');
|
||||
$this->_ci->load->model('ressource/Kalender_Event_Teilnehmer_model', 'KalenderEventTeilnehmerModel');
|
||||
$this->_ci->load->model('ressource/Kalender_Ort_model', 'KalenderOrtModel');
|
||||
$this->_ci->load->model('education/Lehreinheit_model', 'LehreinheitModel');
|
||||
$this->_ci->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
||||
$this->_ci->load->model('education/LehreinheitMitarbeiter_model', 'LehreinheitMitarbeiterModel');
|
||||
$this->_ci->load->model('ressource/Ort_model', 'OrtModel');
|
||||
$this->_ci->load->model('organisation/gruppe_model', 'GruppeModel');
|
||||
$this->_ci->load->model('organisation/Lehrverband_model', 'LehrverbandModel');
|
||||
$this->_ci->load->model('ressource/Zeitsperre_model', 'ZeitsperreModel');
|
||||
$this->_ci->load->model('ressource/Stunde_model', 'StundeModel');
|
||||
$this->_ci->load->model('education/Lehreinheitgruppe_model', 'LehreinheitgruppeModel');
|
||||
|
||||
$this->_ci->load->library('CollisionChecker');
|
||||
$this->_ci->load->library('KalenderLib');
|
||||
$this->_ci->load->library('PhrasesLib', array('ui'));
|
||||
$this->_ci->load->library('VariableLib', array('uid' => getAuthUID()));
|
||||
}
|
||||
|
||||
|
||||
public function getVorschlaege($kalender_id)
|
||||
{
|
||||
$event = $this->_ci->kalenderlib->getByKalenderId($kalender_id);
|
||||
$event = $event[0];
|
||||
return $this->_getVorschlaegeForEvent($event);
|
||||
}
|
||||
|
||||
public function getVorschlaegeByLehreinheit($lehreinheit_id, $von, $bis)
|
||||
{
|
||||
$teilnehmer = $this->_getLehreinheitTeilnehmer($lehreinheit_id);
|
||||
|
||||
$event = (object) [
|
||||
'kalender_id' => null,
|
||||
'lehreinheit_id' => [$lehreinheit_id],
|
||||
'isostart' => (new DateTime($von))->format('c'),
|
||||
'isoend' => (new DateTime($bis))->format('c'),
|
||||
'datum' => (new DateTime($von))->format('Y-m-d'),
|
||||
'lektor' => $teilnehmer->lektor_data,
|
||||
'gruppe' => $teilnehmer->gruppen_data,
|
||||
];
|
||||
|
||||
return $this->_getVorschlaegeForEvent($event);
|
||||
}
|
||||
|
||||
public function getVorschlaegeSlots($lehreinheit_id, $start_date, $end_date)
|
||||
{
|
||||
$lehreinheit_result = $this->_ci->LehreinheitModel->load($lehreinheit_id);
|
||||
if (!hasData($lehreinheit_result))
|
||||
return error('Lehreinheit nicht gefunden');
|
||||
$lehreinheit = getData($lehreinheit_result)[0];
|
||||
|
||||
$block = $lehreinheit->stundenblockung;
|
||||
if ($block <= 0)
|
||||
return error('Stundenblockung ist ungültig');
|
||||
|
||||
$this->_ci->StundeModel->addOrder('stunde', 'ASC');
|
||||
$stunden_result = $this->_ci->StundeModel->load();
|
||||
$stunden = hasData($stunden_result) ? array_values(getData($stunden_result)) : [];
|
||||
|
||||
if (empty($stunden))
|
||||
return error('Kein Stunden-Raster gefunden');
|
||||
|
||||
$teilnehmer = $this->_getLehreinheitTeilnehmer($lehreinheit_id);
|
||||
$grp = $this->_splitGruppen($teilnehmer->gruppen_data);
|
||||
$lektor_uids = array_column($teilnehmer->lektor_data, 'mitarbeiter_uid');
|
||||
|
||||
$verplante_events = $this->_ci->kalenderlib->getForRaumvorschlag(
|
||||
$start_date,
|
||||
$end_date,
|
||||
$lektor_uids,
|
||||
$grp->gruppen_kurzbz,
|
||||
$grp->lehrverband_gruppen
|
||||
);
|
||||
|
||||
$start_day = strtotime($start_date);
|
||||
$end_day = strtotime($end_date);
|
||||
|
||||
$moegliche_slots = array();
|
||||
|
||||
$verplante_zeitsperren = $this->_getZeitsperen($start_date, $end_date, $lektor_uids);
|
||||
while ($start_day <= $end_day)
|
||||
{
|
||||
$tag = date('Y-m-d', $start_day);
|
||||
|
||||
$verplante_tages_events = array_values(array_filter($verplante_events, function($event) use ($tag)
|
||||
{
|
||||
return $event->datum === $tag;
|
||||
}));
|
||||
|
||||
foreach ($stunden as $index => $start_stunde)
|
||||
{
|
||||
if (!isset($stunden[$index + $block - 1]))
|
||||
continue;
|
||||
|
||||
$end_stunde = $stunden[$index + $block - 1];
|
||||
|
||||
$slot_start = $tag . ' ' . $start_stunde->beginn;
|
||||
$slot_end = $tag . ' ' . $end_stunde->ende;
|
||||
|
||||
if (!$this->_isFrei($slot_start, $slot_end, $verplante_zeitsperren, $lektor_uids, 'lektor'))
|
||||
continue;
|
||||
|
||||
if (!$this->_isFrei($slot_start, $slot_end, $verplante_tages_events, $lektor_uids, 'lektor'))
|
||||
continue;
|
||||
|
||||
if (!$this->_isFrei($slot_start, $slot_end, $verplante_tages_events, $grp->gruppen_kurzbz, 'gruppe'))
|
||||
continue;
|
||||
|
||||
if (!$this->_isFrei($slot_start, $slot_end, $verplante_tages_events, $grp->lehrverband_gruppen_bezeichnung, 'lehrverband'))
|
||||
continue;
|
||||
|
||||
$moegliche_slots[] = [
|
||||
'isostart' => (new DateTime($slot_start))->format('c'),
|
||||
'isoend' => (new DateTime($slot_end))->format('c'),
|
||||
'marker_isoend' => (new DateTime($tag . ' ' . $start_stunde->ende))->format('c'),
|
||||
];
|
||||
}
|
||||
|
||||
$start_day = strtotime('+1 day', $start_day);
|
||||
}
|
||||
|
||||
|
||||
$slots = [];
|
||||
foreach ($moegliche_slots as $slot)
|
||||
{
|
||||
$event_obj = (object) [
|
||||
'kalender_id' => null,
|
||||
'lehreinheit_id' => [$lehreinheit_id],
|
||||
'isostart' => $slot['isostart'],
|
||||
'isoend' => $slot['isoend'],
|
||||
];
|
||||
|
||||
$raumkandidaten = $this->_getRaumkandidaten($event_obj);
|
||||
|
||||
if (empty($raumkandidaten))
|
||||
continue;
|
||||
|
||||
$ratings = $this->_getRatings($verplante_events, $slot, $raumkandidaten, $lektor_uids, $grp->gruppen_kurzbz, $grp->lehrverband_gruppen_bezeichnung);
|
||||
$best = $ratings[0];
|
||||
$anzahl_weitere = count($ratings) - 1;
|
||||
|
||||
$slots[] = [
|
||||
'isostart' => $slot['isostart'],
|
||||
'isoend' => $slot['isoend'],
|
||||
'marker_isoend' => $slot['marker_isoend'],
|
||||
'rating' => $this->_scoreToRating($best['score']),
|
||||
'label' => $anzahl_weitere > 0 ? $best['ort_kurzbz'] . ' (' . $best['score'] . ') + ' . $anzahl_weitere . ' weitere' : $best['ort_kurzbz'] . ' (' . $best['score'] . ')',
|
||||
'raeume' => $ratings,
|
||||
];
|
||||
}
|
||||
return success($slots);
|
||||
}
|
||||
|
||||
private function _getZeitsperen($start_date, $end_date, $uids)
|
||||
{
|
||||
|
||||
if (empty($uids)) return [];
|
||||
|
||||
if (($this->_ci->variablelib->getVar('ignore_kollision') === 'true') || ($this->_ci->variablelib->getVar('ignore_zeitsperre') === 'true')) return [];
|
||||
|
||||
|
||||
$this->_ci->ZeitsperreModel->addSelect('mitarbeiter_uid, vondatum, vonstunde_z.beginn as von_beginn, bisdatum, bisstunde_z.ende as bis_ende');
|
||||
$this->_ci->ZeitsperreModel->addJoin('lehre.tbl_stunde vonstunde_z', 'vonstunde_z.stunde = tbl_zeitsperre.vonstunde', 'LEFT');
|
||||
$this->_ci->ZeitsperreModel->addJoin('lehre.tbl_stunde bisstunde_z', 'bisstunde_z.stunde = tbl_zeitsperre.bisstunde', 'LEFT');
|
||||
$this->_ci->ZeitsperreModel->db->where('zeitsperretyp_kurzbz !=', 'ZVerfueg');
|
||||
$this->_ci->ZeitsperreModel->db->where('(tbl_zeitsperre.vondatum + COALESCE(vonstunde_z.beginn, \'00:00\'))::timestamp <', $end_date);
|
||||
$this->_ci->ZeitsperreModel->db->where('(tbl_zeitsperre.bisdatum + COALESCE(bisstunde_z.ende, \'23:59\'))::timestamp >', $start_date);
|
||||
|
||||
$this->_ci->ZeitsperreModel->db->where_in('mitarbeiter_uid', $uids);
|
||||
$result = $this->_ci->ZeitsperreModel->load();
|
||||
|
||||
if (!hasData($result)) return [];
|
||||
|
||||
$events = [];
|
||||
foreach (getData($result) as $row)
|
||||
{
|
||||
$von = new DateTime($row->vondatum . ' ' . ($row->von_beginn ?? '00:00'));
|
||||
$bis = new DateTime($row->bisdatum . ' ' . ($row->bis_ende ?? '23:59'));
|
||||
|
||||
$events[] = (object)[
|
||||
'isostart' => $von->format('c'),
|
||||
'isoend' => $bis->format('c'),
|
||||
'lektor' => [['mitarbeiter_uid' => $row->mitarbeiter_uid]]
|
||||
];
|
||||
}
|
||||
return $events;
|
||||
}
|
||||
|
||||
private function _getLehreinheitTeilnehmer($lehreinheit_id)
|
||||
{
|
||||
$lektoren_result = $this->_ci->LehreinheitMitarbeiterModel->loadWhere(['lehreinheit_id' => $lehreinheit_id]);
|
||||
$lektor_data = [];
|
||||
if (hasData($lektoren_result))
|
||||
{
|
||||
$lektor_data = getData($lektoren_result);
|
||||
}
|
||||
|
||||
$gruppen_result = $this->_ci->LehreinheitgruppeModel->getByLehreinheit($lehreinheit_id);
|
||||
$gruppen_data = [];
|
||||
if (hasData($gruppen_result))
|
||||
{
|
||||
$gruppen_rows = getData($gruppen_result);
|
||||
|
||||
foreach ($gruppen_rows as $gruppe)
|
||||
{
|
||||
$gruppen_data[] = (array) $gruppe;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return (object)[
|
||||
'lektor_data' => $lektor_data,
|
||||
'gruppen_data' => $gruppen_data,
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
private function _splitGruppen($gruppen_data)
|
||||
{
|
||||
$gruppen_kurzbz = array_values(array_filter(array_column($gruppen_data, 'gruppe_kurzbz')));
|
||||
$lehrverband_gruppen = array_values(array_filter($gruppen_data, function($gruppe)
|
||||
{
|
||||
return empty($gruppe['gruppe_kurzbz']);
|
||||
}));
|
||||
$lehrverband_gruppen_bezeichnung = array_column($lehrverband_gruppen, 'bezeichnung');
|
||||
|
||||
return (object)[
|
||||
'gruppen_kurzbz' => $gruppen_kurzbz,
|
||||
'lehrverband_gruppen' => $lehrverband_gruppen,
|
||||
'lehrverband_gruppen_bezeichnung' => $lehrverband_gruppen_bezeichnung
|
||||
];
|
||||
|
||||
}
|
||||
//TODO (david) umbauen auf CollisionChecks
|
||||
private function _isFrei($slot_start, $slot_end, $events, $check_array, $type)
|
||||
{
|
||||
if (empty($check_array)) return true;
|
||||
|
||||
$slot_start_ts = strtotime($slot_start);
|
||||
$slot_end_ts = strtotime($slot_end);
|
||||
|
||||
foreach ($events as $event)
|
||||
{
|
||||
$event_start_ts = strtotime($event->isostart);
|
||||
$event_end_ts = strtotime($event->isoend);
|
||||
|
||||
if ($event_end_ts <= $slot_start_ts || $event_start_ts >= $slot_end_ts)
|
||||
continue;
|
||||
|
||||
$event_uids = $this->_getIds($event, $type);
|
||||
|
||||
if (!empty(array_intersect($event_uids, $check_array)))
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private function _scoreToRating($score)
|
||||
{
|
||||
if ($score >= 90)
|
||||
return 'good';
|
||||
if ($score >= 60)
|
||||
return 'mid';
|
||||
return 'bad';
|
||||
}
|
||||
private function _getVorschlaegeForEvent($event)
|
||||
{
|
||||
$raumkandidaten = $this->_getRaumkandidaten($event);
|
||||
if (empty($raumkandidaten)) return [];
|
||||
|
||||
$lektor_uids = array_column($event->lektor, 'mitarbeiter_uid');
|
||||
$grp = $this->_splitGruppen($event->gruppe);
|
||||
|
||||
$tages_events = $this->_ci->kalenderlib->getForRaumvorschlag(
|
||||
$event->datum,
|
||||
$event->datum,
|
||||
$lektor_uids,
|
||||
$grp->gruppen_kurzbz,
|
||||
$grp->lehrverband_gruppen
|
||||
);
|
||||
|
||||
return $this->_getRatings($tages_events, $event, $raumkandidaten, $lektor_uids, $grp->gruppen_kurzbz, $grp->lehrverband_gruppen_bezeichnung);
|
||||
}
|
||||
private function _getRatings($events, $event, $raumkandidaten, $lektor_uids, $gruppen_kurzbz, $lehrverband_gruppen_bezeichnung)
|
||||
{
|
||||
$event = (object)$event;
|
||||
$lektor_davor = $this->_getEventDavor($events, $event->isostart, $lektor_uids, 'lektor');
|
||||
$gruppen_davor = $this->_getEventDavor($events, $event->isostart, $gruppen_kurzbz, 'gruppe');
|
||||
$lehrverband_davor = $this->_getEventDavor($events, $event->isostart, $lehrverband_gruppen_bezeichnung, 'lehrverband');
|
||||
|
||||
$lektor_davor_ort = $lektor_davor ? $this->_getOrtDetails($lektor_davor->ort_kurzbz) : null;
|
||||
$gruppen_davor_ort = $gruppen_davor ? $this->_getOrtDetails($gruppen_davor->ort_kurzbz) : null;
|
||||
$lehrverband_davor_ort = $lehrverband_davor ? $this->_getOrtDetails($lehrverband_davor->ort_kurzbz) : null;
|
||||
|
||||
$unique = [];
|
||||
|
||||
foreach ($raumkandidaten as $raum)
|
||||
{
|
||||
$unique[$raum->ort_kurzbz] = $raum;
|
||||
}
|
||||
|
||||
$kandidaten = array_values($unique);
|
||||
|
||||
|
||||
$ratings = [];
|
||||
foreach ($kandidaten as $raum)
|
||||
{
|
||||
$rating = ['ort_kurzbz' => $raum->ort_kurzbz, 'score' => 100, 'details' => [],
|
||||
'raumtyp_kurzbz' => $raum->raumtyp_kurzbz, 'max_person' => $raum->max_person];
|
||||
$this->_rateLektor($rating, $raum, $lektor_davor_ort);
|
||||
$this->_rateGruppen($rating, $raum, $gruppen_davor_ort);
|
||||
$this->_rateGruppen($rating, $raum, $lehrverband_davor_ort);
|
||||
|
||||
Events::trigger('room_rating',
|
||||
function & () use (&$rating) {
|
||||
return $rating;
|
||||
},
|
||||
$raum,
|
||||
$event
|
||||
);
|
||||
$ratings[] = $rating;
|
||||
}
|
||||
|
||||
usort($ratings, function($a, $b)
|
||||
{
|
||||
return $b['score'] <=> $a['score'];
|
||||
});
|
||||
|
||||
return $ratings;
|
||||
|
||||
}
|
||||
|
||||
private function _getOrtDetails($ort_kurzbz_array)
|
||||
{
|
||||
$ort_kurzbz_array = (array) $ort_kurzbz_array;
|
||||
if (empty($ort_kurzbz_array)) return [];
|
||||
$this->_ci->OrtModel->addSelect('ort_kurzbz, stockwerk, standort_id');
|
||||
$this->_ci->OrtModel->db->where_in('ort_kurzbz', $ort_kurzbz_array);
|
||||
$result = $this->_ci->OrtModel->load();
|
||||
|
||||
return hasData($result) ? getData($result) : [];
|
||||
}
|
||||
|
||||
private function _rateLektor(&$rating, $raum, $lektor_davor_orte)
|
||||
{
|
||||
if (empty($lektor_davor_orte)) return;
|
||||
|
||||
foreach ($lektor_davor_orte as $ort)
|
||||
{
|
||||
if ($ort->ort_kurzbz === $raum->ort_kurzbz)
|
||||
{
|
||||
$rating['score'] += 20;
|
||||
$rating['details'][] = '+20 ' . $this->_ci->phraseslib->t('ui', 'lecturer_already_here');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$gleiches_gebaeude = array_filter($lektor_davor_orte, function($ort) use ($raum)
|
||||
{
|
||||
return $ort->standort_id === $raum->standort_id;
|
||||
});
|
||||
|
||||
if (empty($gleiches_gebaeude))
|
||||
{
|
||||
$rating['score'] -= 20;
|
||||
$rating['details'][] = '-20 '. $this->_ci->phraseslib->t('ui', 'lecturer_building_change');
|
||||
return;
|
||||
}
|
||||
|
||||
$diffs = array_map(function($ort) use ($raum)
|
||||
{
|
||||
return abs($ort->stockwerk - $raum->stockwerk);
|
||||
}, $gleiches_gebaeude);
|
||||
|
||||
$diff = min($diffs);
|
||||
|
||||
if ($diff > 0)
|
||||
{
|
||||
$rating['score'] -= $diff * 5;
|
||||
$rating['details'][] = '-' . ($diff * 5) . ' ' . $this->_ci->phraseslib->t('ui', 'lecturer_floor_change');
|
||||
}
|
||||
}
|
||||
|
||||
private function _rateGruppen(&$rating, $raum, $gruppen_davor_orte)
|
||||
{
|
||||
if (empty($gruppen_davor_orte)) return;
|
||||
|
||||
foreach ($gruppen_davor_orte as $ort)
|
||||
{
|
||||
if ($ort->ort_kurzbz === $raum->ort_kurzbz)
|
||||
{
|
||||
$rating['score'] += 10;
|
||||
$rating['details'][] = '+10 ' . $this->_ci->phraseslib->t('ui', 'student_already_here');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$gleiches_gebaeude = array_filter($gruppen_davor_orte, function($ort) use ($raum)
|
||||
{
|
||||
return $ort->standort_id === $raum->standort_id;
|
||||
});
|
||||
|
||||
if (empty($gleiches_gebaeude))
|
||||
{
|
||||
$rating['score'] -= 20;
|
||||
$rating['details'][] = '-20 '. $this->_ci->phraseslib->t('ui', 'student_building_change');
|
||||
return;
|
||||
}
|
||||
|
||||
$diffs = array_map(function($ort) use ($raum)
|
||||
{
|
||||
return abs($ort->stockwerk - $raum->stockwerk);
|
||||
}, $gleiches_gebaeude);
|
||||
|
||||
$diff = min($diffs);
|
||||
|
||||
if ($diff > 0)
|
||||
{
|
||||
$rating['score'] -= $diff * 5;
|
||||
$rating['details'][] = '-' . ($diff * 5) . ' '. $this->_ci->phraseslib->t('ui', 'student_floor_change');
|
||||
}
|
||||
}
|
||||
|
||||
private function _getEventDavor($events, $von, $uids, $type)
|
||||
{
|
||||
$kandidat = null;
|
||||
|
||||
foreach ($events as $event)
|
||||
{
|
||||
if ($event->isoend > $von)
|
||||
continue;
|
||||
|
||||
//Wenn zwischen zwei Events eine 30+ Minuten Pause liegt, wird das Event davor nicht berücksichtigt
|
||||
if ((strtotime($von) - strtotime($event->isoend)) > 30 * 60)
|
||||
continue;
|
||||
|
||||
if (empty($event->ort_kurzbz))
|
||||
continue;
|
||||
|
||||
$event_uids = $this->_getIds($event, $type);
|
||||
|
||||
if (empty(array_intersect($event_uids, $uids)))
|
||||
continue;
|
||||
|
||||
if ($kandidat === null || $event->isoend > $kandidat->isoend)
|
||||
$kandidat = $event;
|
||||
}
|
||||
|
||||
return $kandidat;
|
||||
}
|
||||
|
||||
private function _getIds($event, $type)
|
||||
{
|
||||
$event_uids = array();
|
||||
|
||||
if ($type === 'lektor')
|
||||
$event_uids = array_column($event->lektor, 'mitarbeiter_uid');
|
||||
else if ($type === 'gruppe')
|
||||
$event_uids = array_column($event->gruppe, 'gruppe_kurzbz');
|
||||
else if ($type === 'lehrverband')
|
||||
$event_uids = array_column($event->gruppe, 'bezeichnung');
|
||||
|
||||
return $event_uids;
|
||||
}
|
||||
|
||||
private function _getRaumkandidaten($event)
|
||||
{
|
||||
$raumtyp = null;
|
||||
$raumtypalternativ = null;
|
||||
|
||||
if (!empty($event->lehreinheit_id))
|
||||
{
|
||||
$lehreinheit = $this->_ci->LehreinheitModel->load($event->lehreinheit_id[0]);
|
||||
if (hasData($lehreinheit))
|
||||
{
|
||||
$lehreinheit = getData($lehreinheit)[0];
|
||||
$raumtyp = $lehreinheit->raumtyp ?? null;
|
||||
$raumtypalternativ = $lehreinheit->raumtypalternativ ?? null;
|
||||
}
|
||||
}
|
||||
|
||||
$this->_ci->KalenderModel->addDistinct('tbl_kalender_ort.ort_kurzbz');
|
||||
$this->_ci->KalenderModel->addSelect('tbl_kalender_ort.ort_kurzbz');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender_ort', 'tbl_kalender.kalender_id = tbl_kalender_ort.kalender_id');
|
||||
$this->_ci->KalenderModel->db->where('tbl_kalender.von <', $event->isoend);
|
||||
$this->_ci->KalenderModel->db->where('tbl_kalender.bis >', $event->isostart);
|
||||
if (!is_null($event->kalender_id))
|
||||
{
|
||||
$this->_ci->KalenderModel->db->where('tbl_kalender.kalender_id !=', $event->kalender_id);
|
||||
}
|
||||
$this->_ci->KalenderModel->db->where_not_in('tbl_kalender.status_kurzbz', ['deleted', 'to_delete', 'to_delete_live', 'to_delete_preview', 'archived']);
|
||||
$this->_ci->KalenderModel->db->where('tbl_kalender_ort.ort_kurzbz IS NOT NULL', null, false);
|
||||
$this->_ci->KalenderModel->db->where(
|
||||
'NOT EXISTS (
|
||||
SELECT 1 FROM lehre.tbl_kalender nachfolger
|
||||
WHERE nachfolger.vorgaenger_kalender_id = tbl_kalender.kalender_id
|
||||
)', null, false
|
||||
);
|
||||
|
||||
$belegte = $this->_ci->KalenderModel->load();
|
||||
|
||||
$belegte_orte = hasData($belegte) ? array_column(getData($belegte), 'ort_kurzbz') : [];
|
||||
|
||||
if (empty($raumtyp))
|
||||
{
|
||||
$raeume = $this->_getFreieRaeume(null, $belegte_orte);
|
||||
return hasData($raeume) ? getData($raeume) : [];
|
||||
}
|
||||
|
||||
$vorschlaege = [];
|
||||
|
||||
$raeume = $this->_getFreieRaeume($raumtyp, $belegte_orte);
|
||||
if (hasData($raeume))
|
||||
$vorschlaege = getData($raeume);
|
||||
|
||||
if (count($vorschlaege) < 5 && !empty($raumtypalternativ))
|
||||
{
|
||||
$bereits_gefunden = array_merge($belegte_orte, array_column($vorschlaege, 'ort_kurzbz'));
|
||||
$alternativ = $this->_getFreieRaeume($raumtypalternativ, $bereits_gefunden);
|
||||
|
||||
if (!isError($alternativ) && hasData($alternativ))
|
||||
$vorschlaege = array_merge($vorschlaege, getData($alternativ));
|
||||
}
|
||||
|
||||
return $vorschlaege;
|
||||
}
|
||||
|
||||
private function _getFreieRaeume($raumtyp, $belegte_orte)
|
||||
{
|
||||
$this->_ci->OrtModel->addSelect('ort_kurzbz, stockwerk, standort_id, max_person, raumtyp_kurzbz');
|
||||
$this->_ci->OrtModel->addJoin('public.tbl_ortraumtyp', 'ort_kurzbz');
|
||||
|
||||
if (!empty($raumtyp))
|
||||
$this->_ci->OrtModel->db->where('raumtyp_kurzbz', $raumtyp);
|
||||
else
|
||||
$this->_ci->OrtModel->db->where('reservieren', true);
|
||||
|
||||
$this->_ci->OrtModel->db->where('aktiv', true);
|
||||
$this->_ci->OrtModel->db->where("ort_kurzbz NOT LIKE '\_%'", null, false);
|
||||
|
||||
if (!empty($belegte_orte))
|
||||
$this->_ci->OrtModel->db->where_not_in('ort_kurzbz', $belegte_orte);
|
||||
$this->_ci->OrtModel->addOrder('hierarchie, ort_kurzbz');
|
||||
|
||||
return $this->_ci->OrtModel->load();
|
||||
}
|
||||
}
|
||||
@@ -1,303 +0,0 @@
|
||||
<?php
|
||||
|
||||
class LectureCollisionCheck implements ICollisionCheck
|
||||
{
|
||||
|
||||
private $_ci;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->_ci =& get_instance();
|
||||
$this->_ci->load->model('ressource/Kalender_model', 'KalenderModel');
|
||||
$this->_ci->load->model('ressource/Zeitsperre_model', 'ZeitsperreModel');
|
||||
$this->_ci->load->model('education/Lehreinheitmitarbeiter_model', 'LehreinheitmitarbeiterModel');
|
||||
$this->_ci->load->library('VariableLib', array('uid' => getAuthUID()));
|
||||
$this->_ci->load->library('PhrasesLib', array('ui'));
|
||||
|
||||
}
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return 'lecture';
|
||||
}
|
||||
|
||||
public function check($data)
|
||||
{
|
||||
if (!isset($data->von, $data->bis)) return [];
|
||||
if (empty($data->kalender_id) && empty($data->lehreinheit_id) && empty($data->uids)) return [];
|
||||
|
||||
if ($this->_ci->variablelib->getVar('ignore_kollision') === 'true') return [];
|
||||
|
||||
if (!empty($data->kalender_id))
|
||||
$uids = $this->_getUids($data->kalender_id);
|
||||
else if (!empty($data->lehreinheit_id))
|
||||
$uids = $this->_getUidsFromLehreinheit($data->lehreinheit_id);
|
||||
else
|
||||
$uids = $data->uids;
|
||||
|
||||
if (empty($uids)) return [];
|
||||
|
||||
$collisions = [];
|
||||
|
||||
$collisions = array_merge($collisions, $this->_checkLehreinheit($uids, $data));
|
||||
$collisions = array_merge($collisions, $this->_checkReservierung($uids, $data));
|
||||
$collisions = array_merge($collisions, $this->_checkZeitsperre($uids, $data));
|
||||
|
||||
return $collisions;
|
||||
}
|
||||
|
||||
public function checkAll($kalender_ids)
|
||||
{
|
||||
if (empty($kalender_ids)) return [];
|
||||
|
||||
$kollisionsfreie_user = unserialize(KOLLISIONSFREIE_USER);
|
||||
$grouped = [];
|
||||
|
||||
$this->_ci->KalenderModel->addSelect('DISTINCT ON (tbl_kalender.kalender_id) tbl_kalender.kalender_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender_lehreinheit current_kalender_le', 'current_kalender_le.kalender_id = tbl_kalender.kalender_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_lehreinheit current_lehreinheit', 'current_lehreinheit.lehreinheit_id = current_kalender_le.lehreinheit_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_lehreinheitmitarbeiter current_lehreinheit_ma', 'current_lehreinheit_ma.lehreinheit_id = current_lehreinheit.lehreinheit_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_lehreinheitmitarbeiter other_lehreinheithreinheit_ma', 'other_lehreinheithreinheit_ma.mitarbeiter_uid = current_lehreinheit_ma.mitarbeiter_uid');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_lehreinheit other_lehreinheit', 'other_lehreinheit.lehreinheit_id = other_lehreinheithreinheit_ma.lehreinheit_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender_lehreinheit other_kalender_le', 'other_kalender_le.lehreinheit_id = other_lehreinheit.lehreinheit_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender other_kalender', 'other_kalender.kalender_id = other_kalender_le.kalender_id');
|
||||
|
||||
$this->_ci->KalenderModel->db->where('other_kalender.kalender_id != tbl_kalender.kalender_id', null, false);
|
||||
$this->_ci->KalenderModel->db->where('other_kalender.von < tbl_kalender.bis', null, false);
|
||||
$this->_ci->KalenderModel->db->where('other_kalender.bis > tbl_kalender.von', null, false);
|
||||
$this->_ci->KalenderModel->db->where_not_in('other_kalender.status_kurzbz', array('archived', 'deleted', 'to_delete', 'to_delete_live', 'to_delete_preview'));
|
||||
$this->_ci->KalenderModel->db->where_not_in('current_lehreinheit_ma.mitarbeiter_uid', $kollisionsfreie_user);
|
||||
|
||||
$this->_ci->KalenderModel->db->group_start();
|
||||
$where_ids_chunks = array_chunk($kalender_ids,25);
|
||||
foreach($where_ids_chunks as $where_ids)
|
||||
{
|
||||
$this->_ci->KalenderModel->db->or_where_in('tbl_kalender.kalender_id', $where_ids);
|
||||
}
|
||||
$this->_ci->KalenderModel->db->group_end();
|
||||
|
||||
$this->_ci->KalenderModel->db->where(
|
||||
'other_kalender.kalender_id NOT IN (SELECT vorgaenger_kalender_id FROM lehre.tbl_kalender WHERE vorgaenger_kalender_id IS NOT NULL)',
|
||||
null, false
|
||||
);
|
||||
$result = $this->_ci->KalenderModel->load();
|
||||
if (!isError($result) && hasData($result))
|
||||
{
|
||||
foreach (getData($result) as $row)
|
||||
{
|
||||
$grouped[$row->kalender_id][] = true;
|
||||
}
|
||||
}
|
||||
|
||||
$this->_ci->KalenderModel->addSelect('DISTINCT ON (tbl_kalender.kalender_id) tbl_kalender.kalender_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender_lehreinheit current_kalender_le', 'current_kalender_le.kalender_id = tbl_kalender.kalender_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_lehreinheit current_lehreinheit', 'current_lehreinheit.lehreinheit_id = current_kalender_le.lehreinheit_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_lehreinheitmitarbeiter current_lehreinheit_ma', 'current_lehreinheit_ma.lehreinheit_id = current_lehreinheit.lehreinheit_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender_event_teilnehmer other_t', 'other_t.uid = current_lehreinheit_ma.mitarbeiter_uid');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender_event other_e', 'other_e.kalender_id = other_t.kalender_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender other_kalender', 'other_kalender.kalender_id = other_e.kalender_id');
|
||||
|
||||
$this->_ci->KalenderModel->db->where('other_kalender.kalender_id != tbl_kalender.kalender_id', null, false);
|
||||
$this->_ci->KalenderModel->db->where('other_kalender.von < tbl_kalender.bis', null, false);
|
||||
$this->_ci->KalenderModel->db->where('other_kalender.bis > tbl_kalender.von', null, false);
|
||||
$this->_ci->KalenderModel->db->where_not_in('other_kalender.status_kurzbz', ['archived', 'deleted', 'to_delete', 'to_delete_live', 'to_delete_preview']);
|
||||
$this->_ci->KalenderModel->db->where_not_in('current_lehreinheit_ma.mitarbeiter_uid', $kollisionsfreie_user);
|
||||
|
||||
$this->_ci->KalenderModel->db->group_start();
|
||||
$where_ids_chunks = array_chunk($kalender_ids,25);
|
||||
foreach($where_ids_chunks as $where_ids)
|
||||
{
|
||||
$this->_ci->KalenderModel->db->or_where_in('tbl_kalender.kalender_id', $where_ids);
|
||||
}
|
||||
$this->_ci->KalenderModel->db->group_end();
|
||||
|
||||
$this->_ci->KalenderModel->db->where(
|
||||
'other_kalender.kalender_id NOT IN (SELECT vorgaenger_kalender_id FROM lehre.tbl_kalender WHERE vorgaenger_kalender_id IS NOT NULL)',
|
||||
null, false
|
||||
);
|
||||
$result = $this->_ci->KalenderModel->load();
|
||||
if (!isError($result) && hasData($result))
|
||||
{
|
||||
foreach (getData($result) as $row)
|
||||
{
|
||||
$grouped[$row->kalender_id][] = true;
|
||||
}
|
||||
}
|
||||
|
||||
$this->_ci->KalenderModel->addSelect('DISTINCT ON (tbl_kalender.kalender_id) tbl_kalender.kalender_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender_lehreinheit current_kalender_le', 'current_kalender_le.kalender_id = tbl_kalender.kalender_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_lehreinheit current_lehreinheit', 'current_lehreinheit.lehreinheit_id = current_kalender_le.lehreinheit_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_lehreinheitmitarbeiter current_lehreinheit_ma', 'current_lehreinheit_ma.lehreinheit_id = current_lehreinheit.lehreinheit_id');
|
||||
$this->_ci->KalenderModel->addJoin('campus.tbl_zeitsperre z',
|
||||
"z.mitarbeiter_uid = current_lehreinheit_ma.mitarbeiter_uid
|
||||
AND z.zeitsperretyp_kurzbz != 'ZVerfueg'");
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_stunde vonstunde_z', 'vonstunde_z.stunde = z.vonstunde', 'LEFT');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_stunde bisstunde_z', 'bisstunde_z.stunde = z.bisstunde', 'LEFT');
|
||||
|
||||
$this->_ci->KalenderModel->db->where('(z.vondatum + COALESCE(vonstunde_z.beginn, \'00:00\'))::timestamp < tbl_kalender.bis', null, false);
|
||||
$this->_ci->KalenderModel->db->where('(z.bisdatum + COALESCE(bisstunde_z.ende, \'23:59\'))::timestamp > tbl_kalender.von', null, false);
|
||||
$this->_ci->KalenderModel->db->where_not_in('current_lehreinheit_ma.mitarbeiter_uid', $kollisionsfreie_user);
|
||||
$this->_ci->KalenderModel->db->group_start();
|
||||
$where_ids_chunks = array_chunk($kalender_ids,25);
|
||||
foreach($where_ids_chunks as $where_ids)
|
||||
{
|
||||
$this->_ci->KalenderModel->db->or_where_in('tbl_kalender.kalender_id', $where_ids);
|
||||
}
|
||||
$this->_ci->KalenderModel->db->group_end();
|
||||
$result = $this->_ci->KalenderModel->load();
|
||||
|
||||
|
||||
if (!isError($result) && hasData($result))
|
||||
{
|
||||
foreach (getData($result) as $row)
|
||||
{
|
||||
$grouped[$row->kalender_id][] = true;
|
||||
}
|
||||
}
|
||||
|
||||
return $grouped;
|
||||
}
|
||||
|
||||
private function _getUids($kalender_id)
|
||||
{
|
||||
$kollisionsfreie_user = unserialize(KOLLISIONSFREIE_USER);
|
||||
|
||||
$this->_ci->KalenderModel->addDistinct('mitarbeiter_uid, tbl_kalender_event_teilnehmer.uid');
|
||||
$this->_ci->KalenderModel->addSelect('mitarbeiter_uid, tbl_kalender_event_teilnehmer.uid');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender_lehreinheit', 'kalender_id', 'LEFT');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_lehreinheit', 'lehreinheit_id', 'LEFT');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_lehreinheitmitarbeiter', 'lehreinheit_id', 'LEFT');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender_event', 'kalender_id', 'LEFT');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender_event_teilnehmer', 'tbl_kalender_event.kalender_id = tbl_kalender_event_teilnehmer.kalender_id', 'LEFT');
|
||||
|
||||
$this->_ci->KalenderModel->db->group_start();
|
||||
$this->_ci->KalenderModel->db->where_not_in('mitarbeiter_uid', $kollisionsfreie_user);
|
||||
$this->_ci->KalenderModel->db->or_where('mitarbeiter_uid IS NULL', null, false);
|
||||
$this->_ci->KalenderModel->db->group_end();
|
||||
|
||||
$result = $this->_ci->KalenderModel->loadWhere(array(
|
||||
'tbl_kalender.kalender_id' => $kalender_id
|
||||
));
|
||||
|
||||
if (isError($result) || !hasData($result)) return [];
|
||||
|
||||
$data = getData($result);
|
||||
$mitarbeiter_uids = array_filter(array_column($data, 'mitarbeiter_uid'));
|
||||
$event_teilnehmer = array_filter(array_column($data, 'uid'));
|
||||
|
||||
return array_unique(array_merge($mitarbeiter_uids, $event_teilnehmer));
|
||||
}
|
||||
|
||||
private function _getUidsFromLehreinheit($lehreinheit_id)
|
||||
{
|
||||
$kollisionsfreie_user = unserialize(KOLLISIONSFREIE_USER);
|
||||
|
||||
$result = $this->_ci->LehreinheitmitarbeiterModel->loadWhere(array('lehreinheit_id' => $lehreinheit_id));
|
||||
|
||||
if (isError($result) || !hasData($result)) return [];
|
||||
|
||||
$uids = array_column(getData($result), 'mitarbeiter_uid');
|
||||
$uids = array_diff(array_filter($uids), $kollisionsfreie_user);
|
||||
|
||||
return array_values(array_unique($uids));
|
||||
}
|
||||
|
||||
private function _checkLehreinheit($uids, $data)
|
||||
{
|
||||
$kollisionsfreie_user = unserialize(KOLLISIONSFREIE_USER);
|
||||
|
||||
$this->_ci->KalenderModel->addDistinct('mitarbeiter_uid, tbl_kalender.von, tbl_kalender.bis');
|
||||
$this->_ci->KalenderModel->addSelect('mitarbeiter_uid, tbl_kalender.von, tbl_kalender.bis');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender_lehreinheit', 'kalender_id', 'LEFT');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_lehreinheit', 'lehreinheit_id', 'LEFT');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_lehreinheitmitarbeiter', 'lehreinheit_id', 'LEFT');
|
||||
|
||||
$this->_ci->KalenderModel->db->where_in('mitarbeiter_uid', $uids);
|
||||
if (!empty($data->kalender_id))
|
||||
$this->_ci->KalenderModel->db->where('tbl_kalender.kalender_id !=', $data->kalender_id);
|
||||
$this->_ci->KalenderModel->db->where_not_in('tbl_kalender.status_kurzbz', array('archived', 'deleted', 'to_delete', 'to_delete_live', 'to_delete_preview'));
|
||||
$this->_ci->KalenderModel->db->where_not_in('mitarbeiter_uid', $kollisionsfreie_user);
|
||||
$this->_ci->KalenderModel->db->where(
|
||||
'tbl_kalender.kalender_id NOT IN (SELECT vorgaenger_kalender_id FROM lehre.tbl_kalender WHERE vorgaenger_kalender_id IS NOT NULL)',
|
||||
null, false
|
||||
);
|
||||
|
||||
$result = $this->_ci->KalenderModel->loadWhere(array(
|
||||
'von <' => $data->bis,
|
||||
'bis >' => $data->von,
|
||||
));
|
||||
|
||||
if (isError($result) || !hasData($result)) return [];
|
||||
|
||||
return array_map(function($row)
|
||||
{
|
||||
return [
|
||||
'message' => $this->_ci->phraseslib->t('ui', 'ma_le_kollision') . ': ' . $row->mitarbeiter_uid . ' (' . date('d.m.Y H:i', strtotime($row->von)) . ' - ' . date('d.m.Y H:i', strtotime($row->bis)) . ')',
|
||||
'errorCode' => 'lector_collision',
|
||||
];
|
||||
}, getData($result));
|
||||
}
|
||||
|
||||
private function _checkReservierung($uids, $data)
|
||||
{
|
||||
if ($this->_ci->variablelib->getVar('ignore_reservierung') === 'true') return [];
|
||||
|
||||
$kollisionsfreie_user = unserialize(KOLLISIONSFREIE_USER);
|
||||
|
||||
|
||||
$this->_ci->KalenderModel->addDistinct('tbl_kalender_event_teilnehmer.uid, tbl_kalender.von, tbl_kalender.bis');
|
||||
$this->_ci->KalenderModel->addSelect('tbl_kalender_event_teilnehmer.uid, tbl_kalender.von, tbl_kalender.bis');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender_event', 'kalender_id', 'LEFT');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender_event_teilnehmer', 'tbl_kalender_event.kalender_id = tbl_kalender_event_teilnehmer.kalender_id', 'LEFT');
|
||||
|
||||
$this->_ci->KalenderModel->db->where_in('tbl_kalender_event_teilnehmer.uid', $uids);
|
||||
if (!empty($data->kalender_id))
|
||||
$this->_ci->KalenderModel->db->where('tbl_kalender.kalender_id !=', $data->kalender_id);
|
||||
$this->_ci->KalenderModel->db->where_not_in('tbl_kalender.status_kurzbz', array('archived', 'deleted', 'to_delete', 'to_delete_live', 'to_delete_preview'));
|
||||
$this->_ci->KalenderModel->db->where_not_in('uid', $kollisionsfreie_user);
|
||||
$this->_ci->KalenderModel->db->where(
|
||||
'tbl_kalender.kalender_id NOT IN (SELECT vorgaenger_kalender_id FROM lehre.tbl_kalender WHERE vorgaenger_kalender_id IS NOT NULL)',
|
||||
null, false
|
||||
);
|
||||
$result = $this->_ci->KalenderModel->loadWhere(array(
|
||||
'von <' => $data->bis,
|
||||
'bis >' => $data->von,
|
||||
));
|
||||
|
||||
if (isError($result) || !hasData($result)) return [];
|
||||
|
||||
return array_map(function($row)
|
||||
{
|
||||
return [
|
||||
'message' => $this->_ci->phraseslib->t('ui', 'reservierung_kollision') . ': ' . $row->uid . ' (' . date('d.m.Y H:i', strtotime($row->von)) . ' - ' . date('d.m.Y H:i', strtotime($row->bis)) . ')',
|
||||
'errorCode' => 'reservation_collision',
|
||||
];
|
||||
}, getData($result));
|
||||
}
|
||||
|
||||
private function _checkZeitsperre($uids, $data)
|
||||
{
|
||||
if ($this->_ci->variablelib->getVar('ignore_zeitsperre') === 'true') return [];
|
||||
|
||||
$this->_ci->ZeitsperreModel->addSelect('mitarbeiter_uid, vondatum, vonstunde_z.beginn as von_beginn, bisdatum, bisstunde_z.ende as bis_ende');
|
||||
$this->_ci->ZeitsperreModel->addJoin('lehre.tbl_stunde vonstunde_z', 'vonstunde_z.stunde = tbl_zeitsperre.vonstunde', 'LEFT');
|
||||
$this->_ci->ZeitsperreModel->addJoin('lehre.tbl_stunde bisstunde_z', 'bisstunde_z.stunde = tbl_zeitsperre.bisstunde', 'LEFT');
|
||||
$this->_ci->ZeitsperreModel->db->where('zeitsperretyp_kurzbz !=', 'ZVerfueg');
|
||||
$this->_ci->ZeitsperreModel->db->where('(tbl_zeitsperre.vondatum + COALESCE(vonstunde_z.beginn, \'00:00\'))::timestamp <', $data->bis);
|
||||
$this->_ci->ZeitsperreModel->db->where('(tbl_zeitsperre.bisdatum + COALESCE(bisstunde_z.ende, \'23:59\'))::timestamp >', $data->von);
|
||||
|
||||
$this->_ci->ZeitsperreModel->db->where_in('mitarbeiter_uid', $uids);
|
||||
$result = $this->_ci->ZeitsperreModel->load();
|
||||
|
||||
if (isError($result) || !hasData($result)) return [];
|
||||
|
||||
return array_map(function($row)
|
||||
{
|
||||
return [
|
||||
'message' => $this->_ci->phraseslib->t('ui', 'ma_zeitsperre_kollision') . ': ' . $row->mitarbeiter_uid . ' (' . date('d.m.Y H:i', strtotime($row->vondatum . ' ' . $row->von_beginn)) . ' - ' . date('d.m.Y H:i', strtotime($row->bisdatum . ' ' . $row->bis_ende)) . ')',
|
||||
'errorCode' => 'absences_collision',
|
||||
];
|
||||
}, getData($result));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,94 +0,0 @@
|
||||
<?php
|
||||
|
||||
class ResourcesCollisionCheck implements ICollisionCheck
|
||||
{
|
||||
|
||||
private $_ci;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->_ci =& get_instance();
|
||||
$this->_ci->load->model('ressource/Kalender_model', 'KalenderModel');
|
||||
$this->_ci->load->library('VariableLib', array('uid' => getAuthUID()));
|
||||
$this->_ci->load->library('PhrasesLib', array('ui'));
|
||||
}
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return 'resources';
|
||||
}
|
||||
|
||||
public function check($data)
|
||||
{
|
||||
if (!isset($data->betriebsmittel_ids, $data->von, $data->bis)) return [];
|
||||
|
||||
if (empty($data->betriebsmittel_ids)) return [];
|
||||
|
||||
if ($this->_ci->variablelib->getVar('ignore_kollision') === 'true') return [];
|
||||
if ($this->_ci->variablelib->getVar('ignore_resources_collisions') === 'true') return [];
|
||||
|
||||
$this->_ci->KalenderModel->addSelect('kalender_id, von, bis, bm.beschreibung AS betriebsmittel_beschreibung');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_betriebsmittel_kalender bk', 'bk.eindeutige_kalender_gruppen_id = tbl_kalender.eindeutige_kalender_gruppen_id');
|
||||
$this->_ci->KalenderModel->addJoin('wawi.tbl_betriebsmittel bm', 'bm.betriebsmittel_id = bk.betriebsmittel_id');
|
||||
|
||||
if (!empty($data->kalender_id))
|
||||
$this->_ci->KalenderModel->db->where('tbl_kalender.kalender_id !=', $data->kalender_id);
|
||||
$this->_ci->KalenderModel->db->where('tbl_kalender.kalender_id NOT IN (SELECT vorgaenger_kalender_id FROM lehre.tbl_kalender WHERE vorgaenger_kalender_id IS NOT NULL)', null, false);
|
||||
$this->_ci->KalenderModel->db->where_not_in('tbl_kalender.status_kurzbz', ['archived', 'deleted', 'to_delete', 'to_delete_live', 'to_delete_preview']);
|
||||
$this->_ci->KalenderModel->db->where_in('bk.betriebsmittel_id', $data->betriebsmittel_ids);
|
||||
|
||||
|
||||
$result = $this->_ci->KalenderModel->loadWhere(array(
|
||||
'von <' => $data->bis,
|
||||
'bis >' => $data->von,
|
||||
));
|
||||
|
||||
if (isError($result)) return [];
|
||||
if (!hasData($result)) return [];
|
||||
|
||||
return array_map(function($row)
|
||||
{
|
||||
return [
|
||||
'errorCode' => 'resource_collision',
|
||||
'message' => $this->_ci->phraseslib->t('ui', 'resource_collision') . ': ' . $row->betriebsmittel_beschreibung . ' (' . date('d.m.Y H:i', strtotime($row->von)) . ' - ' . date('d.m.Y H:i', strtotime($row->bis)) . ')'
|
||||
];
|
||||
}, getData($result));
|
||||
}
|
||||
|
||||
public function checkAll($kalender_ids)
|
||||
{
|
||||
if (empty($kalender_ids)) return [];
|
||||
|
||||
$this->_ci->KalenderModel->addSelect('DISTINCT ON (tbl_kalender.kalender_id) tbl_kalender.kalender_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_betriebsmittel_kalender current_bk', 'current_bk.eindeutige_kalender_gruppen_id = tbl_kalender.eindeutige_kalender_gruppen_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_betriebsmittel_kalender other_bk', 'other_bk.betriebsmittel_id = current_bk.betriebsmittel_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender other_kalender', 'other_kalender.eindeutige_kalender_gruppen_id = other_bk.eindeutige_kalender_gruppen_id');
|
||||
|
||||
$this->_ci->KalenderModel->db->where('other_kalender.kalender_id != tbl_kalender.kalender_id', null, false);
|
||||
$this->_ci->KalenderModel->db->where('other_kalender.von < tbl_kalender.bis', null, false);
|
||||
$this->_ci->KalenderModel->db->where('other_kalender.bis > tbl_kalender.von', null, false);
|
||||
$this->_ci->KalenderModel->db->where_not_in('other_kalender.status_kurzbz', ['archived', 'deleted', 'to_delete', 'to_delete_live', 'to_delete_preview']);
|
||||
|
||||
$this->_ci->KalenderModel->db->group_start();
|
||||
$where_ids_chunks = array_chunk($kalender_ids,25);
|
||||
foreach($where_ids_chunks as $where_ids)
|
||||
{
|
||||
$this->_ci->KalenderModel->db->or_where_in('tbl_kalender.kalender_id', $where_ids);
|
||||
}
|
||||
$this->_ci->KalenderModel->db->group_end();
|
||||
|
||||
$this->_ci->KalenderModel->db->where('other_kalender.kalender_id NOT IN (SELECT vorgaenger_kalender_id FROM lehre.tbl_kalender WHERE vorgaenger_kalender_id IS NOT NULL)', null, false);
|
||||
|
||||
$result = $this->_ci->KalenderModel->load();
|
||||
|
||||
if (isError($result) || !hasData($result)) return [];
|
||||
|
||||
$grouped = [];
|
||||
foreach (getData($result) as $row)
|
||||
{
|
||||
$grouped[$row->kalender_id][] = true;
|
||||
}
|
||||
|
||||
return $grouped;
|
||||
}
|
||||
}
|
||||
@@ -1,90 +0,0 @@
|
||||
<?php
|
||||
|
||||
class RoomCollisionCheck implements ICollisionCheck
|
||||
{
|
||||
|
||||
private $_ci;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->_ci =& get_instance();
|
||||
$this->_ci->load->model('ressource/Kalender_model', 'KalenderModel');
|
||||
$this->_ci->load->library('VariableLib', array('uid' => getAuthUID()));
|
||||
$this->_ci->load->library('PhrasesLib', array('ui'));
|
||||
}
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return 'room';
|
||||
}
|
||||
|
||||
public function check($data)
|
||||
{
|
||||
if (!isset($data->ort_kurzbz, $data->von, $data->bis) || isEmptyArray($data->ort_kurzbz)) return [];
|
||||
|
||||
if ($this->_ci->variablelib->getVar('ignore_kollision') === 'true') return [];
|
||||
|
||||
$this->_ci->KalenderModel->addSelect('kalender_id, ort_kurzbz, von, bis');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender_ort', 'kalender_id');
|
||||
|
||||
if (!empty($data->kalender_id))
|
||||
$this->_ci->KalenderModel->db->where('tbl_kalender.kalender_id !=', $data->kalender_id);
|
||||
$this->_ci->KalenderModel->db->where('tbl_kalender.kalender_id NOT IN (SELECT vorgaenger_kalender_id FROM lehre.tbl_kalender WHERE vorgaenger_kalender_id IS NOT NULL)', null, false);
|
||||
$this->_ci->KalenderModel->db->where_not_in('tbl_kalender.status_kurzbz', array('archived', 'deleted', 'to_delete', 'to_delete_live', 'to_delete_preview'));
|
||||
|
||||
$this->_ci->KalenderModel->db->where_in('ort_kurzbz', $data->ort_kurzbz);
|
||||
$result = $this->_ci->KalenderModel->loadWhere(array(
|
||||
'von <' => $data->bis,
|
||||
'bis >' => $data->von,
|
||||
));
|
||||
|
||||
if (isError($result)) return [];
|
||||
if (!hasData($result)) return [];
|
||||
|
||||
return array_map(function($row)
|
||||
{
|
||||
return [
|
||||
'errorCode' => 'room_collision',
|
||||
'message' => $this->_ci->phraseslib->t('ui', 'raum_kollision') . ': ' . $row->ort_kurzbz . ' (' . date('d.m.Y H:i', strtotime($row->von)) . ' - ' . date('d.m.Y H:i', strtotime($row->bis)) . ')'
|
||||
];
|
||||
}, getData($result));
|
||||
}
|
||||
|
||||
public function checkAll($kalender_ids)
|
||||
{
|
||||
if (empty($kalender_ids)) return [];
|
||||
|
||||
$this->_ci->KalenderModel->addSelect('DISTINCT ON (tbl_kalender.kalender_id) tbl_kalender.kalender_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender_ort current_ort', 'current_ort.kalender_id = tbl_kalender.kalender_id');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender_ort other_ort', 'other_ort.ort_kurzbz = current_ort.ort_kurzbz');
|
||||
$this->_ci->KalenderModel->addJoin('lehre.tbl_kalender other_kalender', 'other_kalender.kalender_id = other_ort.kalender_id');
|
||||
|
||||
$this->_ci->KalenderModel->db->where('other_kalender.kalender_id != tbl_kalender.kalender_id', null, false);
|
||||
$this->_ci->KalenderModel->db->where('other_kalender.von < tbl_kalender.bis', null, false);
|
||||
$this->_ci->KalenderModel->db->where('other_kalender.bis > tbl_kalender.von', null, false);
|
||||
$this->_ci->KalenderModel->db->where_not_in('other_kalender.status_kurzbz', array('archived', 'deleted', 'to_delete', 'to_delete_live', 'to_delete_preview'));
|
||||
|
||||
$this->_ci->KalenderModel->db->group_start();
|
||||
$where_ids_chunks = array_chunk($kalender_ids,25);
|
||||
foreach($where_ids_chunks as $where_ids)
|
||||
{
|
||||
$this->_ci->KalenderModel->db->or_where_in('tbl_kalender.kalender_id', $where_ids);
|
||||
}
|
||||
$this->_ci->KalenderModel->db->group_end();
|
||||
|
||||
$this->_ci->KalenderModel->db->where('other_kalender.kalender_id NOT IN (SELECT vorgaenger_kalender_id FROM lehre.tbl_kalender WHERE vorgaenger_kalender_id IS NOT NULL)', null, false);
|
||||
|
||||
$result = $this->_ci->KalenderModel->load();
|
||||
|
||||
|
||||
if (isError($result) || !hasData($result)) return [];
|
||||
|
||||
$grouped = [];
|
||||
foreach (getData($result) as $row)
|
||||
{
|
||||
$grouped[$row->kalender_id][] = true;
|
||||
}
|
||||
|
||||
return $grouped;
|
||||
}
|
||||
}
|
||||
@@ -1,286 +0,0 @@
|
||||
<?php
|
||||
|
||||
class StudentCollisionCheck implements ICollisionCheck
|
||||
{
|
||||
private $_ci;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->_ci =& get_instance();
|
||||
$this->_ci->load->model('ressource/Kalender_model', 'KalenderModel');
|
||||
$this->_ci->load->library('VariableLib', array('uid' => getAuthUID()));
|
||||
$this->_ci->load->library('PhrasesLib', array('ui'));
|
||||
}
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return 'student';
|
||||
}
|
||||
|
||||
public function check($data)
|
||||
{
|
||||
if (!isset($data->von, $data->bis)) return [];
|
||||
if (!isset($data->kalender_id) && !isset($data->lehreinheit_id)) return [];
|
||||
|
||||
if ($this->_ci->variablelib->getVar('ignore_kollision') === 'true') return [];
|
||||
if ($this->_ci->variablelib->getVar('kollision_student') !== 'true') return [];
|
||||
|
||||
$kollisionsfreie_user = unserialize(KOLLISIONSFREIE_USER);
|
||||
$placeholders = implode(',', array_fill(0, count($kollisionsfreie_user), '?'));
|
||||
|
||||
|
||||
$dbModel = new DB_Model();
|
||||
|
||||
if (isset($data->kalender_id))
|
||||
{
|
||||
$qry1 = "
|
||||
SELECT DISTINCT tbl_benutzergruppe.uid
|
||||
FROM lehre.tbl_kalender
|
||||
JOIN lehre.tbl_kalender_lehreinheit USING(kalender_id)
|
||||
JOIN lehre.tbl_lehreinheit ON tbl_lehreinheit.lehreinheit_id = tbl_kalender_lehreinheit.lehreinheit_id
|
||||
JOIN lehre.tbl_lehreinheitgruppe ON tbl_lehreinheitgruppe.lehreinheit_id = tbl_lehreinheit.lehreinheit_id
|
||||
JOIN public.tbl_gruppe
|
||||
ON tbl_gruppe.studiengang_kz = tbl_lehreinheitgruppe.studiengang_kz
|
||||
AND tbl_gruppe.semester = tbl_lehreinheitgruppe.semester
|
||||
AND tbl_gruppe.gruppe_kurzbz = tbl_lehreinheitgruppe.gruppe_kurzbz
|
||||
JOIN public.tbl_benutzergruppe ON tbl_benutzergruppe.gruppe_kurzbz = tbl_gruppe.gruppe_kurzbz
|
||||
AND tbl_benutzergruppe.studiensemester_kurzbz = tbl_lehreinheit.studiensemester_kurzbz
|
||||
|
||||
WHERE tbl_kalender.kalender_id = ?
|
||||
AND tbl_benutzergruppe.uid NOT IN ($placeholders)
|
||||
UNION ALL
|
||||
|
||||
SELECT DISTINCT tbl_studentlehrverband.student_uid AS uid
|
||||
FROM lehre.tbl_kalender
|
||||
JOIN lehre.tbl_kalender_lehreinheit USING(kalender_id)
|
||||
JOIN lehre.tbl_lehreinheit ON tbl_lehreinheit.lehreinheit_id = tbl_kalender_lehreinheit.lehreinheit_id
|
||||
JOIN lehre.tbl_lehreinheitgruppe ON tbl_lehreinheitgruppe.lehreinheit_id = tbl_lehreinheit.lehreinheit_id
|
||||
JOIN public.tbl_studentlehrverband
|
||||
ON tbl_studentlehrverband.studiengang_kz = tbl_lehreinheitgruppe.studiengang_kz
|
||||
AND tbl_studentlehrverband.semester = tbl_lehreinheitgruppe.semester
|
||||
AND tbl_studentlehrverband.studiensemester_kurzbz = tbl_lehreinheit.studiensemester_kurzbz
|
||||
AND (tbl_lehreinheitgruppe.verband = tbl_studentlehrverband.verband OR tbl_lehreinheitgruppe.verband IS NULL OR btrim(tbl_lehreinheitgruppe.verband::text) = '' OR tbl_studentlehrverband.verband IS NULL)
|
||||
AND (tbl_lehreinheitgruppe.gruppe = tbl_studentlehrverband.gruppe OR tbl_lehreinheitgruppe.gruppe IS NULL OR btrim(tbl_lehreinheitgruppe.gruppe::text) = '' OR tbl_studentlehrverband.gruppe IS NULL)
|
||||
WHERE tbl_kalender.kalender_id = ?
|
||||
AND tbl_studentlehrverband.student_uid NOT IN ($placeholders)
|
||||
";
|
||||
|
||||
$qry_1_param = $data->kalender_id;
|
||||
}
|
||||
else
|
||||
{
|
||||
$qry1 = "
|
||||
SELECT DISTINCT tbl_benutzergruppe.uid
|
||||
FROM lehre.tbl_lehreinheit
|
||||
JOIN lehre.tbl_lehreinheitgruppe ON tbl_lehreinheitgruppe.lehreinheit_id = tbl_lehreinheit.lehreinheit_id
|
||||
JOIN public.tbl_gruppe
|
||||
ON tbl_gruppe.studiengang_kz = tbl_lehreinheitgruppe.studiengang_kz
|
||||
AND tbl_gruppe.semester = tbl_lehreinheitgruppe.semester
|
||||
AND tbl_gruppe.gruppe_kurzbz = tbl_lehreinheitgruppe.gruppe_kurzbz
|
||||
JOIN public.tbl_benutzergruppe ON tbl_benutzergruppe.gruppe_kurzbz = tbl_gruppe.gruppe_kurzbz
|
||||
AND tbl_benutzergruppe.studiensemester_kurzbz = tbl_lehreinheit.studiensemester_kurzbz
|
||||
|
||||
WHERE tbl_lehreinheit.lehreinheit_id = ?
|
||||
AND tbl_benutzergruppe.uid NOT IN ($placeholders)
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT DISTINCT tbl_studentlehrverband.student_uid AS uid
|
||||
FROM lehre.tbl_lehreinheit
|
||||
JOIN lehre.tbl_lehreinheitgruppe ON tbl_lehreinheitgruppe.lehreinheit_id = tbl_lehreinheit.lehreinheit_id
|
||||
JOIN public.tbl_studentlehrverband
|
||||
ON tbl_studentlehrverband.studiengang_kz = tbl_lehreinheitgruppe.studiengang_kz
|
||||
AND tbl_studentlehrverband.semester = tbl_lehreinheitgruppe.semester
|
||||
AND tbl_studentlehrverband.studiensemester_kurzbz = tbl_lehreinheit.studiensemester_kurzbz
|
||||
AND (tbl_lehreinheitgruppe.verband = tbl_studentlehrverband.verband OR tbl_lehreinheitgruppe.verband IS NULL OR btrim(tbl_lehreinheitgruppe.verband::text) = '' OR tbl_studentlehrverband.verband IS NULL)
|
||||
AND (tbl_lehreinheitgruppe.gruppe = tbl_studentlehrverband.gruppe OR tbl_lehreinheitgruppe.gruppe IS NULL OR btrim(tbl_lehreinheitgruppe.gruppe::text) = '' OR tbl_studentlehrverband.gruppe IS NULL)
|
||||
WHERE tbl_lehreinheit.lehreinheit_id = ?
|
||||
AND tbl_studentlehrverband.student_uid NOT IN ($placeholders)
|
||||
";
|
||||
|
||||
$qry_1_param = $data->lehreinheit_id;
|
||||
}
|
||||
|
||||
$result1 = $dbModel->execReadOnlyQuery($qry1, array_merge(
|
||||
[$qry_1_param],
|
||||
$kollisionsfreie_user,
|
||||
[$qry_1_param],
|
||||
$kollisionsfreie_user
|
||||
));
|
||||
|
||||
if (isError($result1) || !hasData($result1)) return [];
|
||||
|
||||
$curUids = array_flip(array_column(getData($result1), 'uid'));
|
||||
|
||||
$exclude_kalender = isset($data->kalender_id) ? "AND tbl_kalender.kalender_id != ?" : "";
|
||||
$exclude_kalender_param = isset($data->kalender_id) ? [$data->kalender_id] : [];
|
||||
|
||||
$qry2 = "
|
||||
SELECT DISTINCT tbl_kalender.kalender_id, tbl_kalender.von, tbl_kalender.bis, tbl_benutzergruppe.uid
|
||||
FROM lehre.tbl_kalender
|
||||
JOIN lehre.tbl_kalender_lehreinheit ON tbl_kalender_lehreinheit.kalender_id = tbl_kalender.kalender_id
|
||||
JOIN lehre.tbl_lehreinheit ON tbl_lehreinheit.lehreinheit_id = tbl_kalender_lehreinheit.lehreinheit_id
|
||||
JOIN lehre.tbl_lehreinheitgruppe ON tbl_lehreinheitgruppe.lehreinheit_id = tbl_lehreinheit.lehreinheit_id
|
||||
JOIN public.tbl_gruppe
|
||||
ON tbl_gruppe.studiengang_kz = tbl_lehreinheitgruppe.studiengang_kz
|
||||
AND tbl_gruppe.semester = tbl_lehreinheitgruppe.semester
|
||||
AND tbl_gruppe.gruppe_kurzbz = tbl_lehreinheitgruppe.gruppe_kurzbz
|
||||
JOIN public.tbl_benutzergruppe ON tbl_benutzergruppe.gruppe_kurzbz = tbl_gruppe.gruppe_kurzbz
|
||||
AND tbl_benutzergruppe.studiensemester_kurzbz = tbl_lehreinheit.studiensemester_kurzbz
|
||||
WHERE tbl_kalender.von < ?
|
||||
AND tbl_kalender.bis > ?
|
||||
$exclude_kalender
|
||||
AND tbl_kalender.status_kurzbz NOT IN ('archived', 'deleted', 'to_delete', 'to_delete_live', 'to_delete_preview')
|
||||
AND tbl_benutzergruppe.uid NOT IN ($placeholders)
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM lehre.tbl_kalender vorgaenger
|
||||
WHERE vorgaenger.vorgaenger_kalender_id = tbl_kalender.kalender_id
|
||||
)
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT DISTINCT tbl_kalender.kalender_id, tbl_kalender.von, tbl_kalender.bis, tbl_studentlehrverband.student_uid AS uid
|
||||
FROM lehre.tbl_kalender
|
||||
JOIN lehre.tbl_kalender_lehreinheit ON tbl_kalender_lehreinheit.kalender_id = tbl_kalender.kalender_id
|
||||
JOIN lehre.tbl_lehreinheit ON tbl_lehreinheit.lehreinheit_id = tbl_kalender_lehreinheit.lehreinheit_id
|
||||
JOIN lehre.tbl_lehreinheitgruppe ON tbl_lehreinheitgruppe.lehreinheit_id = tbl_lehreinheit.lehreinheit_id
|
||||
JOIN public.tbl_studentlehrverband
|
||||
ON tbl_studentlehrverband.studiengang_kz = tbl_lehreinheitgruppe.studiengang_kz
|
||||
AND tbl_studentlehrverband.semester = tbl_lehreinheitgruppe.semester
|
||||
AND tbl_studentlehrverband.studiensemester_kurzbz = tbl_lehreinheit.studiensemester_kurzbz
|
||||
AND (tbl_lehreinheitgruppe.verband = tbl_studentlehrverband.verband OR tbl_lehreinheitgruppe.verband IS NULL OR btrim(tbl_lehreinheitgruppe.verband::text) = '' OR tbl_studentlehrverband.verband IS NULL)
|
||||
AND (tbl_lehreinheitgruppe.gruppe = tbl_studentlehrverband.gruppe OR tbl_lehreinheitgruppe.gruppe IS NULL OR btrim(tbl_lehreinheitgruppe.gruppe::text) = '' OR tbl_studentlehrverband.gruppe IS NULL)
|
||||
WHERE tbl_kalender.von < ?
|
||||
AND tbl_kalender.bis > ?
|
||||
$exclude_kalender
|
||||
AND tbl_kalender.status_kurzbz NOT IN ('archived', 'deleted', 'to_delete', 'to_delete_live', 'to_delete_preview')
|
||||
AND tbl_studentlehrverband.student_uid NOT IN ($placeholders)
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM lehre.tbl_kalender vorgaenger
|
||||
WHERE vorgaenger.vorgaenger_kalender_id = tbl_kalender.kalender_id
|
||||
)
|
||||
";
|
||||
|
||||
$result2 = $dbModel->execReadOnlyQuery($qry2, array_merge(
|
||||
[$data->bis, $data->von], $exclude_kalender_param, $kollisionsfreie_user,
|
||||
[$data->bis, $data->von], $exclude_kalender_param, $kollisionsfreie_user
|
||||
));
|
||||
|
||||
if (isError($result2) || !hasData($result2)) return [];
|
||||
|
||||
$conflicts = [];
|
||||
foreach (getData($result2) as $row)
|
||||
{
|
||||
if (isset($curUids[$row->uid]))
|
||||
{
|
||||
$conflicts[] = [
|
||||
'message' =>
|
||||
$this->_ci->phraseslib->t('ui', 'student_kollision')
|
||||
. ': ' . $row->uid
|
||||
. ' (' . date('d.m.Y H:i', strtotime($row->von))
|
||||
. ' - ' . date('d.m.Y H:i', strtotime($row->bis)) . ')',
|
||||
'errorCode' => 'student_collision'
|
||||
];
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return $conflicts;
|
||||
}
|
||||
|
||||
public function checkAll($kalender_ids)
|
||||
{
|
||||
|
||||
if (empty($kalender_ids)) return [];
|
||||
|
||||
if ($this->_ci->variablelib->getVar('kollision_student') !== 'true') return [];
|
||||
|
||||
$dbModel = new DB_Model();
|
||||
$placeholders = implode(',', array_fill(0, count($kalender_ids), '?'));
|
||||
|
||||
$sql = "
|
||||
SELECT DISTINCT current_kalender.kalender_id, current_benutzergruppe.uid
|
||||
FROM lehre.tbl_kalender current_kalender
|
||||
JOIN lehre.tbl_kalender_lehreinheit current_kalender_le ON current_kalender_le.kalender_id = current_kalender.kalender_id
|
||||
JOIN lehre.tbl_lehreinheit current_lehreinheit ON current_lehreinheit.lehreinheit_id = current_kalender_le.lehreinheit_id
|
||||
JOIN lehre.tbl_lehreinheitgruppe current_lehreinheitgruppe ON current_lehreinheitgruppe.lehreinheit_id = current_lehreinheit.lehreinheit_id
|
||||
JOIN public.tbl_gruppe current_gruppe
|
||||
ON current_gruppe.studiengang_kz = current_lehreinheitgruppe.studiengang_kz
|
||||
AND current_gruppe.semester = current_lehreinheitgruppe.semester
|
||||
AND current_gruppe.gruppe_kurzbz = current_lehreinheitgruppe.gruppe_kurzbz
|
||||
JOIN public.tbl_benutzergruppe current_benutzergruppe ON current_benutzergruppe.gruppe_kurzbz = current_gruppe.gruppe_kurzbz
|
||||
AND current_benutzergruppe.studiensemester_kurzbz = current_lehreinheit.studiensemester_kurzbz
|
||||
JOIN lehre.tbl_kalender other_kalender
|
||||
ON other_kalender.kalender_id != current_kalender.kalender_id
|
||||
AND other_kalender.von < current_kalender.bis
|
||||
AND other_kalender.bis > current_kalender.von
|
||||
AND other_kalender.status_kurzbz NOT IN ('archived', 'deleted', 'to_delete', 'to_delete_live', 'to_delete_preview')
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM lehre.tbl_kalender vorgaenger
|
||||
WHERE vorgaenger.vorgaenger_kalender_id = other_kalender.kalender_id
|
||||
)
|
||||
JOIN lehre.tbl_kalender_lehreinheit other_kalender_le ON other_kalender_le.kalender_id = other_kalender.kalender_id
|
||||
JOIN lehre.tbl_lehreinheit other_lehreinheit ON other_lehreinheit.lehreinheit_id = other_kalender_le.lehreinheit_id
|
||||
JOIN lehre.tbl_lehreinheitgruppe other_lehreinheitgruppe ON other_lehreinheitgruppe.lehreinheit_id = other_lehreinheit.lehreinheit_id
|
||||
JOIN public.tbl_gruppe other_gruppe
|
||||
ON other_gruppe.studiengang_kz = other_lehreinheitgruppe.studiengang_kz
|
||||
AND other_gruppe.semester = other_lehreinheitgruppe.semester
|
||||
AND other_gruppe.gruppe_kurzbz = other_lehreinheitgruppe.gruppe_kurzbz
|
||||
JOIN public.tbl_benutzergruppe other_benutzergruppe
|
||||
ON other_benutzergruppe.gruppe_kurzbz = other_gruppe.gruppe_kurzbz
|
||||
AND other_benutzergruppe.uid = current_benutzergruppe.uid
|
||||
AND other_benutzergruppe.studiensemester_kurzbz = other_lehreinheit.studiensemester_kurzbz
|
||||
|
||||
|
||||
WHERE current_kalender.kalender_id IN ($placeholders)
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT DISTINCT current_kalender.kalender_id, current_studentlehrverband.student_uid AS uid
|
||||
FROM lehre.tbl_kalender current_kalender
|
||||
JOIN lehre.tbl_kalender_lehreinheit current_kalender_le ON current_kalender_le.kalender_id = current_kalender.kalender_id
|
||||
JOIN lehre.tbl_lehreinheit current_lehreinheit ON current_lehreinheit.lehreinheit_id = current_kalender_le.lehreinheit_id
|
||||
JOIN lehre.tbl_lehreinheitgruppe current_lehreinheitgruppe ON current_lehreinheitgruppe.lehreinheit_id = current_lehreinheit.lehreinheit_id
|
||||
JOIN public.tbl_studentlehrverband current_studentlehrverband
|
||||
ON current_studentlehrverband.studiengang_kz = current_lehreinheitgruppe.studiengang_kz
|
||||
AND current_studentlehrverband.semester = current_lehreinheitgruppe.semester
|
||||
AND current_studentlehrverband.studiensemester_kurzbz = current_lehreinheit.studiensemester_kurzbz
|
||||
AND (current_lehreinheitgruppe.verband = current_studentlehrverband.verband OR current_lehreinheitgruppe.verband IS NULL OR btrim(current_lehreinheitgruppe.verband::text) = '' OR current_studentlehrverband.verband IS NULL)
|
||||
AND (current_lehreinheitgruppe.gruppe = current_studentlehrverband.gruppe OR current_lehreinheitgruppe.gruppe IS NULL OR btrim(current_lehreinheitgruppe.gruppe::text) = '' OR current_studentlehrverband.gruppe IS NULL)
|
||||
|
||||
JOIN lehre.tbl_kalender other_kalender
|
||||
ON other_kalender.kalender_id != current_kalender.kalender_id
|
||||
AND other_kalender.von < current_kalender.bis
|
||||
AND other_kalender.bis > current_kalender.von
|
||||
AND other_kalender.status_kurzbz NOT IN ('archived', 'deleted', 'to_delete', 'to_delete_live', 'to_delete_preview')
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM lehre.tbl_kalender vorgaenger
|
||||
WHERE vorgaenger.vorgaenger_kalender_id = other_kalender.kalender_id
|
||||
)
|
||||
JOIN lehre.tbl_kalender_lehreinheit other_kalender_le ON other_kalender_le.kalender_id = other_kalender.kalender_id
|
||||
JOIN lehre.tbl_lehreinheit other_lehreinheit ON other_lehreinheit.lehreinheit_id = other_kalender_le.lehreinheit_id
|
||||
JOIN lehre.tbl_lehreinheitgruppe other_lehreinheitgruppe ON other_lehreinheitgruppe.lehreinheit_id = other_lehreinheit.lehreinheit_id
|
||||
JOIN public.tbl_studentlehrverband other_slv
|
||||
ON other_slv.studiengang_kz = other_lehreinheitgruppe.studiengang_kz
|
||||
AND other_slv.semester = other_lehreinheitgruppe.semester
|
||||
AND other_slv.studiensemester_kurzbz = other_lehreinheit.studiensemester_kurzbz
|
||||
AND other_slv.student_uid = current_studentlehrverband.student_uid
|
||||
AND (other_lehreinheitgruppe.verband = other_slv.verband OR other_lehreinheitgruppe.verband IS NULL OR btrim(other_lehreinheitgruppe.verband::text) = '' OR other_slv.verband IS NULL)
|
||||
AND (other_lehreinheitgruppe.gruppe = other_slv.gruppe OR other_lehreinheitgruppe.gruppe IS NULL OR btrim(other_lehreinheitgruppe.gruppe::text) = '' OR other_slv.gruppe IS NULL)
|
||||
|
||||
WHERE current_kalender.kalender_id IN ($placeholders)
|
||||
";
|
||||
|
||||
$result = $dbModel->execReadOnlyQuery($sql, array_merge($kalender_ids, $kalender_ids));
|
||||
|
||||
if (isError($result) || !hasData($result)) return [];
|
||||
|
||||
$grouped = [];
|
||||
foreach (getData($result) as $row)
|
||||
{
|
||||
$grouped[$row->kalender_id][] = true;
|
||||
}
|
||||
|
||||
return $grouped;
|
||||
}
|
||||
}
|
||||
@@ -1,413 +0,0 @@
|
||||
<?php
|
||||
|
||||
class VerbandCollisionCheck implements ICollisionCheck
|
||||
{
|
||||
|
||||
private $_ci;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->_ci =& get_instance();
|
||||
$this->_ci->load->model('ressource/Kalender_model', 'KalenderModel');
|
||||
$this->_ci->load->library('VariableLib', array('uid' => getAuthUID()));
|
||||
$this->_ci->load->library('PhrasesLib', array('ui'));
|
||||
|
||||
}
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return 'verband';
|
||||
}
|
||||
|
||||
public function check($data)
|
||||
{
|
||||
if (!isset($data->von, $data->bis)) return [];
|
||||
if (!isset($data->kalender_id) && !isset($data->lehreinheit_id)) return [];
|
||||
|
||||
if ($this->_ci->variablelib->getVar('ignore_kollision') === 'true') return [];
|
||||
|
||||
$kollision_student = $this->_ci->variablelib->getVar('kollision_student') === 'false';
|
||||
$kollision_reservierung = $this->_ci->variablelib->getVar('ignore_reservierung') === 'false';
|
||||
|
||||
if (!isset($data->kalender_id)) $kollision_reservierung = false;
|
||||
|
||||
if (!$kollision_student && !$kollision_reservierung) return [];
|
||||
|
||||
$dbModel = new DB_Model();
|
||||
$collisions = [];
|
||||
|
||||
$group_matching_qry = "
|
||||
(
|
||||
(
|
||||
current_lehreinheitguppe.gruppe_kurzbz IS NULL
|
||||
AND other_lehreinheitguppe.gruppe_kurzbz IS NULL
|
||||
AND (
|
||||
current_lehreinheitguppe.verband IS NULL
|
||||
OR (
|
||||
current_lehreinheitguppe.verband = other_lehreinheitguppe.verband
|
||||
AND (current_lehreinheitguppe.gruppe IS NULL OR other_lehreinheitguppe.gruppe IS NULL OR current_lehreinheitguppe.gruppe = other_lehreinheitguppe.gruppe)
|
||||
)
|
||||
)
|
||||
)
|
||||
OR
|
||||
(
|
||||
current_lehreinheitguppe.gruppe_kurzbz IS NOT NULL
|
||||
AND other_lehreinheitguppe.gruppe_kurzbz IS NOT NULL
|
||||
AND current_gruppe.direktinskription IS NOT TRUE
|
||||
AND other_gruppe.direktinskription IS NOT TRUE
|
||||
)
|
||||
OR
|
||||
(
|
||||
(
|
||||
current_lehreinheitguppe.gruppe_kurzbz IS NULL
|
||||
AND other_lehreinheitguppe.gruppe_kurzbz IS NOT NULL
|
||||
AND other_gruppe.direktinskription IS NOT TRUE
|
||||
)
|
||||
OR
|
||||
(
|
||||
current_lehreinheitguppe.gruppe_kurzbz IS NOT NULL
|
||||
AND other_lehreinheitguppe.gruppe_kurzbz IS NULL
|
||||
AND current_gruppe.direktinskription IS NOT TRUE
|
||||
)
|
||||
)
|
||||
)
|
||||
";
|
||||
|
||||
if ($kollision_student)
|
||||
{
|
||||
$union_event = "";
|
||||
|
||||
if ($kollision_reservierung)
|
||||
{
|
||||
$union_event = "
|
||||
UNION
|
||||
SELECT tbl_kalender_event_teilnehmer.studiengang_kz, tbl_kalender_event_teilnehmer.semester, tbl_kalender_event_teilnehmer.verband, tbl_kalender_event_teilnehmer.gruppe, tbl_kalender_event_teilnehmer.gruppe_kurzbz, tbl_kalender_event_teilnehmer.kalender_id
|
||||
FROM lehre.tbl_kalender_event_teilnehmer
|
||||
WHERE tbl_kalender_event_teilnehmer.rolle_kurzbz = 'teilnehmer'
|
||||
";
|
||||
}
|
||||
|
||||
$other_lehreinheitgruppe_subquery = "
|
||||
SELECT tbl_lehreinheitgruppe.studiengang_kz, tbl_lehreinheitgruppe.semester, tbl_lehreinheitgruppe.verband, tbl_lehreinheitgruppe.gruppe,
|
||||
tbl_lehreinheitgruppe.gruppe_kurzbz, tbl_kalender_lehreinheit.kalender_id
|
||||
FROM lehre.tbl_kalender_lehreinheit
|
||||
JOIN lehre.tbl_lehreinheit ON tbl_lehreinheit.lehreinheit_id = tbl_kalender_lehreinheit.lehreinheit_id
|
||||
JOIN lehre.tbl_lehreinheitgruppe ON tbl_lehreinheitgruppe.lehreinheit_id = tbl_lehreinheit.lehreinheit_id
|
||||
". $union_event ."
|
||||
";
|
||||
|
||||
if (isset($data->kalender_id))
|
||||
{
|
||||
$sql_gruppen = "
|
||||
SELECT
|
||||
other_kalender.von,
|
||||
other_kalender.bis,
|
||||
COALESCE(
|
||||
other_lehreinheitguppe.gruppe_kurzbz,
|
||||
UPPER(stg.typ::text || stg.kurzbz::text) || '-' || other_lehreinheitguppe.semester ||
|
||||
COALESCE(other_lehreinheitguppe.verband::text, '') ||
|
||||
COALESCE(other_lehreinheitguppe.gruppe::text, '')
|
||||
) AS gruppenname
|
||||
FROM lehre.tbl_kalender current_kalender
|
||||
|
||||
JOIN (
|
||||
". $other_lehreinheitgruppe_subquery ."
|
||||
) current_lehreinheitguppe ON current_lehreinheitguppe.kalender_id = current_kalender.kalender_id
|
||||
|
||||
LEFT JOIN public.tbl_gruppe current_gruppe
|
||||
ON current_gruppe.gruppe_kurzbz = current_lehreinheitguppe.gruppe_kurzbz
|
||||
|
||||
JOIN lehre.tbl_kalender other_kalender
|
||||
ON other_kalender.kalender_id != current_kalender.kalender_id
|
||||
AND other_kalender.von < ?
|
||||
AND other_kalender.bis > ?
|
||||
|
||||
JOIN (
|
||||
". $other_lehreinheitgruppe_subquery ."
|
||||
) other_lehreinheitguppe ON other_lehreinheitguppe.kalender_id = other_kalender.kalender_id
|
||||
|
||||
LEFT JOIN public.tbl_gruppe other_gruppe
|
||||
ON other_gruppe.gruppe_kurzbz = other_lehreinheitguppe.gruppe_kurzbz
|
||||
|
||||
LEFT JOIN public.tbl_studiengang stg
|
||||
ON stg.studiengang_kz = other_lehreinheitguppe.studiengang_kz
|
||||
|
||||
WHERE current_kalender.kalender_id = ?
|
||||
AND other_kalender.status_kurzbz NOT IN ('archived', 'deleted', 'to_delete', 'to_delete_live', 'to_delete_preview')
|
||||
AND current_lehreinheitguppe.studiengang_kz = other_lehreinheitguppe.studiengang_kz
|
||||
AND current_lehreinheitguppe.semester = other_lehreinheitguppe.semester
|
||||
AND ". $group_matching_qry ."
|
||||
AND other_kalender.kalender_id NOT IN (
|
||||
SELECT vorgaenger_kalender_id
|
||||
FROM lehre.tbl_kalender
|
||||
WHERE vorgaenger_kalender_id IS NOT NULL
|
||||
)
|
||||
";
|
||||
|
||||
$params = [$data->bis, $data->von, $data->kalender_id];
|
||||
}
|
||||
else
|
||||
{
|
||||
$sql_gruppen = "
|
||||
SELECT
|
||||
other_kalender.von,
|
||||
other_kalender.bis,
|
||||
COALESCE(
|
||||
other_lehreinheitguppe.gruppe_kurzbz,
|
||||
UPPER(stg.typ::text || stg.kurzbz::text) || '-' || other_lehreinheitguppe.semester ||
|
||||
COALESCE(other_lehreinheitguppe.verband::text, '') ||
|
||||
COALESCE(other_lehreinheitguppe.gruppe::text, '')
|
||||
) AS gruppenname
|
||||
FROM lehre.tbl_lehreinheitgruppe current_lehreinheitguppe
|
||||
LEFT JOIN public.tbl_gruppe current_gruppe
|
||||
ON current_gruppe.gruppe_kurzbz = current_lehreinheitguppe.gruppe_kurzbz
|
||||
|
||||
JOIN lehre.tbl_kalender other_kalender
|
||||
ON other_kalender.von < ?
|
||||
AND other_kalender.bis > ?
|
||||
|
||||
JOIN (
|
||||
". $other_lehreinheitgruppe_subquery ."
|
||||
) other_lehreinheitguppe ON other_lehreinheitguppe.kalender_id = other_kalender.kalender_id
|
||||
|
||||
LEFT JOIN public.tbl_gruppe other_gruppe
|
||||
ON other_gruppe.gruppe_kurzbz = other_lehreinheitguppe.gruppe_kurzbz
|
||||
|
||||
LEFT JOIN public.tbl_studiengang stg
|
||||
ON stg.studiengang_kz = other_lehreinheitguppe.studiengang_kz
|
||||
|
||||
WHERE current_lehreinheitguppe.lehreinheit_id = ?
|
||||
AND other_kalender.status_kurzbz NOT IN ('archived', 'deleted', 'to_delete', 'to_delete_live', 'to_delete_preview')
|
||||
AND current_lehreinheitguppe.studiengang_kz = other_lehreinheitguppe.studiengang_kz
|
||||
AND current_lehreinheitguppe.semester = other_lehreinheitguppe.semester
|
||||
AND ". $group_matching_qry ."
|
||||
AND other_kalender.kalender_id NOT IN (
|
||||
SELECT vorgaenger_kalender_id
|
||||
FROM lehre.tbl_kalender
|
||||
WHERE vorgaenger_kalender_id IS NOT NULL
|
||||
)
|
||||
";
|
||||
|
||||
$params = [$data->bis, $data->von, $data->lehreinheit_id];
|
||||
}
|
||||
|
||||
$result = $dbModel->execReadOnlyQuery($sql_gruppen, $params);
|
||||
|
||||
if (!isError($result) && hasData($result))
|
||||
{
|
||||
foreach (getData($result) as $row)
|
||||
{
|
||||
$collisions[] = [
|
||||
'message' => $this->_ci->phraseslib->t('ui', 'verband_kollision') . ': ' . $row->gruppenname . ' (' . date('d.m.Y H:i', strtotime($row->von)) . ' - ' . date('d.m.Y H:i', strtotime($row->bis)) . ')',
|
||||
'errorCode' => 'verband_collision',
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($kollision_reservierung && !$kollision_student)
|
||||
{
|
||||
$sql_reservierung = "
|
||||
SELECT
|
||||
other_kalender.von,
|
||||
other_kalender.bis,
|
||||
COALESCE(
|
||||
other_event_teilnehmer.gruppe_kurzbz,
|
||||
UPPER(stg.typ::text || stg.kurzbz::text) || '-' || other_event_teilnehmer.semester ||
|
||||
COALESCE(other_event_teilnehmer.verband::text, '') ||
|
||||
COALESCE(other_event_teilnehmer.gruppe::text, '')
|
||||
) AS gruppenname
|
||||
FROM lehre.tbl_kalender_event_teilnehmer current_event_teilnehmer
|
||||
LEFT JOIN public.tbl_gruppe current_gruppe
|
||||
ON current_gruppe.gruppe_kurzbz = current_event_teilnehmer.gruppe_kurzbz
|
||||
|
||||
JOIN lehre.tbl_kalender other_kalender
|
||||
ON other_kalender.kalender_id != ?
|
||||
AND other_kalender.von < ?
|
||||
AND other_kalender.bis > ?
|
||||
|
||||
JOIN lehre.tbl_kalender_event_teilnehmer other_event_teilnehmer
|
||||
ON other_event_teilnehmer.kalender_id = other_kalender.kalender_id
|
||||
AND other_event_teilnehmer.rolle_kurzbz = 'teilnehmer'
|
||||
|
||||
LEFT JOIN public.tbl_gruppe other_gruppe
|
||||
ON other_gruppe.gruppe_kurzbz = other_event_teilnehmer.gruppe_kurzbz
|
||||
|
||||
LEFT JOIN public.tbl_studiengang stg
|
||||
ON stg.studiengang_kz = other_event_teilnehmer.studiengang_kz
|
||||
|
||||
WHERE current_event_teilnehmer.kalender_id = ?
|
||||
AND current_event_teilnehmer.rolle_kurzbz = 'teilnehmer'
|
||||
AND other_kalender.status_kurzbz NOT IN ('archived', 'deleted', 'to_delete', 'to_delete_live', 'to_delete_preview')
|
||||
AND current_event_teilnehmer.studiengang_kz = other_event_teilnehmer.studiengang_kz
|
||||
AND current_event_teilnehmer.semester = other_event_teilnehmer.semester
|
||||
AND (
|
||||
(
|
||||
current_event_teilnehmer.gruppe_kurzbz IS NULL
|
||||
AND other_event_teilnehmer.gruppe_kurzbz IS NULL
|
||||
AND (
|
||||
current_event_teilnehmer.verband IS NULL
|
||||
OR (
|
||||
current_event_teilnehmer.verband = other_event_teilnehmer.verband
|
||||
AND (current_event_teilnehmer.gruppe IS NULL OR other_event_teilnehmer.gruppe IS NULL OR current_event_teilnehmer.gruppe = other_event_teilnehmer.gruppe)
|
||||
)
|
||||
)
|
||||
)
|
||||
OR
|
||||
(
|
||||
current_event_teilnehmer.gruppe_kurzbz IS NOT NULL
|
||||
AND other_event_teilnehmer.gruppe_kurzbz IS NOT NULL
|
||||
AND current_gruppe.direktinskription IS NOT TRUE
|
||||
AND other_gruppe.direktinskription IS NOT TRUE
|
||||
)
|
||||
OR
|
||||
(
|
||||
(
|
||||
current_event_teilnehmer.gruppe_kurzbz IS NULL
|
||||
AND other_event_teilnehmer.gruppe_kurzbz IS NOT NULL
|
||||
AND other_gruppe.direktinskription IS NOT TRUE
|
||||
)
|
||||
OR
|
||||
(
|
||||
current_event_teilnehmer.gruppe_kurzbz IS NOT NULL
|
||||
AND other_event_teilnehmer.gruppe_kurzbz IS NULL
|
||||
AND current_gruppe.direktinskription IS NOT TRUE
|
||||
)
|
||||
)
|
||||
)
|
||||
AND other_kalender.kalender_id NOT IN (
|
||||
SELECT vorgaenger_kalender_id
|
||||
FROM lehre.tbl_kalender
|
||||
WHERE vorgaenger_kalender_id IS NOT NULL
|
||||
)
|
||||
";
|
||||
|
||||
$result = $dbModel->execReadOnlyQuery($sql_reservierung, [
|
||||
$data->kalender_id,
|
||||
$data->bis,
|
||||
$data->von,
|
||||
$data->kalender_id,
|
||||
]);
|
||||
|
||||
if (!isError($result) && hasData($result))
|
||||
{
|
||||
foreach (getData($result) as $row)
|
||||
{
|
||||
$collisions[] = [
|
||||
'errorCode' => 'reservation_collision',
|
||||
'message' => $this->_ci->phraseslib->t('ui', 'reservierung_kollision') . ': ' . $row->gruppenname . ' (' . date('d.m.Y H:i', strtotime($row->von)) . ' - ' . date('d.m.Y H:i', strtotime($row->bis)) . ')'
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $collisions;
|
||||
}
|
||||
|
||||
public function checkAll($kalender_ids)
|
||||
{
|
||||
if (empty($kalender_ids)) return [];
|
||||
|
||||
$dbModel = new DB_Model();
|
||||
|
||||
$placeholders = implode(',', array_fill(0, count($kalender_ids), '?'));
|
||||
|
||||
$sql = "
|
||||
SELECT DISTINCT ON (current_kalender.kalender_id) current_kalender.kalender_id
|
||||
FROM lehre.tbl_kalender current_kalender
|
||||
|
||||
JOIN (
|
||||
SELECT tbl_lehreinheitgruppe.studiengang_kz, tbl_lehreinheitgruppe.semester, tbl_lehreinheitgruppe.verband, tbl_lehreinheitgruppe.gruppe,
|
||||
tbl_lehreinheitgruppe.gruppe_kurzbz, tbl_kalender_lehreinheit.kalender_id
|
||||
FROM lehre.tbl_kalender_lehreinheit
|
||||
JOIN lehre.tbl_lehreinheit ON tbl_lehreinheit.lehreinheit_id = tbl_kalender_lehreinheit.lehreinheit_id
|
||||
JOIN lehre.tbl_lehreinheitgruppe ON tbl_lehreinheitgruppe.lehreinheit_id = tbl_lehreinheit.lehreinheit_id
|
||||
UNION
|
||||
SELECT tbl_kalender_event_teilnehmer.studiengang_kz, tbl_kalender_event_teilnehmer.semester, tbl_kalender_event_teilnehmer.verband, tbl_kalender_event_teilnehmer.gruppe,
|
||||
tbl_kalender_event_teilnehmer.gruppe_kurzbz, tbl_kalender_event_teilnehmer.kalender_id
|
||||
FROM lehre.tbl_kalender_event_teilnehmer
|
||||
) current_lehreinheitguppe ON current_lehreinheitguppe.kalender_id = current_kalender.kalender_id
|
||||
|
||||
LEFT JOIN public.tbl_gruppe current_gruppe
|
||||
ON current_gruppe.gruppe_kurzbz = current_lehreinheitguppe.gruppe_kurzbz
|
||||
|
||||
JOIN lehre.tbl_kalender other_kalender
|
||||
ON other_kalender.kalender_id != current_kalender.kalender_id
|
||||
AND other_kalender.von < current_kalender.bis
|
||||
AND other_kalender.bis > current_kalender.von
|
||||
|
||||
JOIN (
|
||||
SELECT tbl_lehreinheitgruppe.studiengang_kz, tbl_lehreinheitgruppe.semester, tbl_lehreinheitgruppe.verband, tbl_lehreinheitgruppe.gruppe,
|
||||
tbl_lehreinheitgruppe.gruppe_kurzbz, tbl_kalender_lehreinheit.kalender_id
|
||||
FROM lehre.tbl_kalender_lehreinheit
|
||||
JOIN lehre.tbl_lehreinheit ON tbl_lehreinheit.lehreinheit_id = tbl_kalender_lehreinheit.lehreinheit_id
|
||||
JOIN lehre.tbl_lehreinheitgruppe ON tbl_lehreinheitgruppe.lehreinheit_id = tbl_lehreinheit.lehreinheit_id
|
||||
UNION
|
||||
SELECT tbl_kalender_event_teilnehmer.studiengang_kz, tbl_kalender_event_teilnehmer.semester, tbl_kalender_event_teilnehmer.verband, tbl_kalender_event_teilnehmer.gruppe,
|
||||
tbl_kalender_event_teilnehmer.gruppe_kurzbz, tbl_kalender_event_teilnehmer.kalender_id
|
||||
FROM lehre.tbl_kalender_event_teilnehmer
|
||||
) other_lehreinheitguppe ON other_lehreinheitguppe.kalender_id = other_kalender.kalender_id
|
||||
|
||||
LEFT JOIN public.tbl_gruppe other_gruppe
|
||||
ON other_gruppe.gruppe_kurzbz = other_lehreinheitguppe.gruppe_kurzbz
|
||||
|
||||
WHERE current_kalender.kalender_id IN ({$placeholders})
|
||||
AND other_kalender.status_kurzbz NOT IN ('archived', 'deleted', 'to_delete', 'to_delete_live', 'to_delete_preview')
|
||||
AND current_lehreinheitguppe.studiengang_kz = other_lehreinheitguppe.studiengang_kz
|
||||
AND current_lehreinheitguppe.semester = other_lehreinheitguppe.semester
|
||||
AND (
|
||||
(
|
||||
current_lehreinheitguppe.gruppe_kurzbz IS NULL
|
||||
AND other_lehreinheitguppe.gruppe_kurzbz IS NULL
|
||||
AND (
|
||||
current_lehreinheitguppe.verband IS NULL
|
||||
OR (
|
||||
current_lehreinheitguppe.verband = other_lehreinheitguppe.verband
|
||||
AND (current_lehreinheitguppe.gruppe IS NULL OR other_lehreinheitguppe.gruppe IS NULL OR current_lehreinheitguppe.gruppe = other_lehreinheitguppe.gruppe)
|
||||
)
|
||||
)
|
||||
)
|
||||
OR
|
||||
(
|
||||
current_lehreinheitguppe.gruppe_kurzbz IS NOT NULL
|
||||
AND other_lehreinheitguppe.gruppe_kurzbz IS NOT NULL
|
||||
AND current_gruppe.direktinskription IS NOT TRUE
|
||||
AND other_gruppe.direktinskription IS NOT TRUE
|
||||
)
|
||||
OR
|
||||
(
|
||||
(
|
||||
current_lehreinheitguppe.gruppe_kurzbz IS NULL
|
||||
AND other_lehreinheitguppe.gruppe_kurzbz IS NOT NULL
|
||||
AND other_gruppe.direktinskription IS NOT TRUE
|
||||
)
|
||||
OR
|
||||
(
|
||||
current_lehreinheitguppe.gruppe_kurzbz IS NOT NULL
|
||||
AND other_lehreinheitguppe.gruppe_kurzbz IS NULL
|
||||
AND current_gruppe.direktinskription IS NOT TRUE
|
||||
)
|
||||
)
|
||||
)
|
||||
AND other_kalender.kalender_id NOT IN (
|
||||
SELECT vorgaenger_kalender_id
|
||||
FROM lehre.tbl_kalender
|
||||
WHERE vorgaenger_kalender_id IS NOT NULL
|
||||
)
|
||||
|
||||
";
|
||||
|
||||
$result = $dbModel->execReadOnlyQuery($sql, $kalender_ids);
|
||||
|
||||
if (isError($result) || !hasData($result)) return [];
|
||||
|
||||
$grouped = [];
|
||||
foreach (getData($result) as $row)
|
||||
{
|
||||
$grouped[$row->kalender_id][] = true;
|
||||
}
|
||||
|
||||
return $grouped;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,148 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Copyright (C) 2026 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');
|
||||
|
||||
/**
|
||||
* Tempus Menu library
|
||||
*/
|
||||
class TempusLib
|
||||
{
|
||||
protected $_ci = null;
|
||||
|
||||
public $config = [];
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
// Get code igniter instance
|
||||
$this->_ci =& get_instance();
|
||||
|
||||
// Load Tree-config
|
||||
$this->_ci->load->config('treemenu/custom/tempus');
|
||||
$this->config = $this->_ci->config->item('root');
|
||||
|
||||
// Load Libraries
|
||||
$this->_ci->load->library('treemenu/base/StgLib');
|
||||
|
||||
// Load Model
|
||||
$this->_ci->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||
}
|
||||
|
||||
public function stg($path_template)
|
||||
{
|
||||
$permittedStgs = $this->getPermittedStudiengangKzs();
|
||||
|
||||
if (!$permittedStgs)
|
||||
return [];
|
||||
|
||||
return $this->_ci->stglib->studiengang($path_template, $permittedStgs);
|
||||
}
|
||||
|
||||
public function semester($path_template, $has_children, $stg)
|
||||
{
|
||||
|
||||
$stg = $this->getStgFromUrl($stg);
|
||||
|
||||
if ($stg === null)
|
||||
return [];
|
||||
|
||||
if (!$has_children)
|
||||
$this->_ci->StudiengangModel->db->select('TRUE AS leaf', false);
|
||||
|
||||
return $this->_ci->stglib->semester($path_template, $stg->studiengang_kz);
|
||||
}
|
||||
|
||||
public function verband($path_template, $stg, $semester)
|
||||
{
|
||||
$stg = $this->getStgFromUrl($stg);
|
||||
|
||||
if ($stg === null)
|
||||
return [];
|
||||
|
||||
$this->_ci->StudiengangModel->addSelect("CASE WHEN MAX(gruppe)='' OR MAX(gruppe)=' ' THEN TRUE ELSE FALSE END AS leaf");
|
||||
$this->_ci->StudiengangModel->addGroupBy('v.studiengang_kz, v.semester');
|
||||
|
||||
|
||||
return $this->_ci->stglib->verband($path_template, $stg->studiengang_kz, $semester);
|
||||
}
|
||||
|
||||
public function group($path_template, $stg, $semester, $verband)
|
||||
{
|
||||
$stg = $this->getStgFromUrl($stg);
|
||||
|
||||
if ($stg === null)
|
||||
return [];
|
||||
|
||||
$this->_ci->StudiengangModel->db->select('TRUE AS leaf', false);
|
||||
|
||||
if ($verband === null) {
|
||||
$this->_ci->load->model('organisation/Gruppe_model', 'GruppeModel');
|
||||
$this->_ci->GruppeModel->addSelect('semester');
|
||||
|
||||
return $this->_ci->stglib->group($path_template, $stg->studiengang_kz, $semester);
|
||||
}
|
||||
|
||||
|
||||
return $this->_ci->stglib->verbandsgroup($path_template, $stg->studiengang_kz, $semester, $verband);
|
||||
}
|
||||
|
||||
public function orgform($path_template, $stg)
|
||||
{
|
||||
$stg = $this->getStgFromUrl($stg);
|
||||
|
||||
if ($stg === null)
|
||||
return [];
|
||||
|
||||
if (!$stg->mischform)
|
||||
return [];
|
||||
|
||||
$this->_ci->StudiengangModel->db->select('TRUE AS leaf', false);
|
||||
|
||||
$this->_ci->load->model('organisation/Studienordnung_model', 'StudienordnungModel');
|
||||
$this->_ci->StudienordnungModel->addSelect("p.orgform_kurzbz");
|
||||
|
||||
return $this->_ci->stglib->orgform($path_template, $stg->studiengang_kz);
|
||||
}
|
||||
|
||||
protected function getPermittedStudiengangKzs()
|
||||
{
|
||||
$permittedStgs = $this->_ci->permissionlib->getSTG_isEntitledFor('admin') ?: [];
|
||||
$permittedStgs = array_merge($permittedStgs, $this->_ci->permissionlib->getSTG_isEntitledFor('assistenz') ?: []);
|
||||
$permittedStgs = array_merge($permittedStgs, $this->_ci->permissionlib->getSTG_isEntitledFor('lehre/lvplan') ?: []);
|
||||
return $permittedStgs;
|
||||
}
|
||||
|
||||
protected function getStgFromUrl($stg)
|
||||
{
|
||||
$permittedStgs = $this->getPermittedStudiengangKzs();
|
||||
|
||||
if (!$permittedStgs)
|
||||
return null;
|
||||
|
||||
$this->_ci->StudiengangModel->db->where_in('studiengang_kz', $permittedStgs);
|
||||
$stg = $this->_ci->StudiengangModel->loadWhere([
|
||||
'LOWER(CONCAT(typ, kurzbz)) =' => $stg
|
||||
]);
|
||||
|
||||
if (!hasData($stg))
|
||||
return null;
|
||||
|
||||
return current(getData($stg));
|
||||
}
|
||||
}
|
||||
@@ -31,18 +31,20 @@ class Vertrag_model extends DB_Model
|
||||
*/
|
||||
public function save($person_id, $mitarbeiter_uid, $lehrveranstaltung_id, $lehreinheit_id, $projektarbeit_id = null, $vertragsstunden, $betrag, $studiensemester_kurzbz)
|
||||
{
|
||||
$person_id = (isset($person_id) && is_numeric($person_id))
|
||||
$vertragstyp_kurzbz = (is_null($projektarbeit_id)) ? 'Lehrauftrag' : 'Betreuung';
|
||||
|
||||
$person_id = (isset($person_id) && is_numeric($person_id))
|
||||
? $person_id
|
||||
: show_error('peron_id must be set and numeric.');
|
||||
$lehreinheit_id = (isset($lehreinheit_id) && is_numeric($lehreinheit_id))
|
||||
? $lehreinheit_id
|
||||
: show_error('lehreinheit_id must be set and numeric.');
|
||||
$lehrveranstaltung_id = (isset($lehrveranstaltung_id) && is_numeric($lehrveranstaltung_id))
|
||||
? $lehrveranstaltung_id
|
||||
: show_error('lehrveranstaltung_id must be set and numeric.');
|
||||
$projektarbeit_id = (isset($projektarbeit_id) && is_numeric($projektarbeit_id))
|
||||
? $projektarbeit_id
|
||||
: null;
|
||||
$lehreinheit_id = (isset($lehreinheit_id) && is_numeric($lehreinheit_id))
|
||||
? $lehreinheit_id
|
||||
: (($vertragstyp_kurzbz == 'Betreuung') ? null : show_error('lehreinheit_id must be set and numeric.'));
|
||||
$vertragsstunden = (isset($vertragsstunden) && is_numeric($vertragsstunden))
|
||||
? $vertragsstunden
|
||||
: 0;
|
||||
@@ -53,7 +55,7 @@ class Vertrag_model extends DB_Model
|
||||
? $mitarbeiter_uid
|
||||
: show_error('mitarbeiter_uid must be set and a string value.');;
|
||||
|
||||
$vertragstyp_kurzbz = (is_null($projektarbeit_id)) ? 'Lehrauftrag' : 'Betreuung';
|
||||
|
||||
|
||||
// First check if Vertrag already exists for that Lehrauftrag or for that Projektbetreuerauftrag
|
||||
if ($vertragstyp_kurzbz == 'Lehrauftrag')
|
||||
@@ -257,7 +259,7 @@ class Vertrag_model extends DB_Model
|
||||
}
|
||||
elseif ($vertragstyp_kurzbz == 'Betreuung')
|
||||
{
|
||||
$this->addSelect('lehreinheit_id');
|
||||
$this->addSelect('lehreinheit_id, lehre.tbl_projektarbeit.lehrveranstaltung_id, lehre.tbl_projektarbeit.studiensemester_kurzbz');
|
||||
$this->addJoin('lehre.tbl_projektbetreuer', 'vertrag_id');
|
||||
$this->addJoin('lehre.tbl_projektarbeit', 'projektarbeit_id');
|
||||
if ($result = $this->loadWhere(array('vertrag_id' => $vertrag_id)))
|
||||
@@ -281,17 +283,22 @@ class Vertrag_model extends DB_Model
|
||||
{
|
||||
if ($result = getData($this->getLehreinheitID($vertrag_id)))
|
||||
{
|
||||
$this->load->model('education/Lehreinheit_model', 'LehreinheitModel');
|
||||
$this->LehreinheitModel->addSelect($select);
|
||||
if (!empty($result[0]->lehreinheit_id))
|
||||
{
|
||||
$this->load->model('education/Lehreinheit_model', 'LehreinheitModel');
|
||||
$this->LehreinheitModel->addSelect($select);
|
||||
|
||||
if($result = $this->LehreinheitModel->load($result[0]->lehreinheit_id))
|
||||
{
|
||||
return success($result->retval);
|
||||
}
|
||||
else
|
||||
{
|
||||
return error('Fehler beim Laden der Lehreinheit');
|
||||
if ($result = $this->LehreinheitModel->load($result[0]->lehreinheit_id))
|
||||
{
|
||||
return success($result->retval);
|
||||
}
|
||||
else
|
||||
{
|
||||
return error('Fehler beim Laden der Lehreinheit');
|
||||
}
|
||||
}
|
||||
|
||||
return success($result);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -563,14 +570,13 @@ SELECT
|
||||
null::integer as pruefung_id,
|
||||
projektarbeit_id,
|
||||
(tbl_projektbetreuer.stunden*tbl_projektbetreuer.stundensatz) as betrag1,
|
||||
tbl_lehreinheit.studiensemester_kurzbz,
|
||||
tbl_projektarbeit.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
|
||||
@@ -619,14 +625,13 @@ SELECT
|
||||
null::integer as pruefung_id,
|
||||
projektarbeit_id,
|
||||
(tbl_projektbetreuer.stunden * tbl_projektbetreuer.stundensatz) as betrag,
|
||||
tbl_lehreinheit.studiensemester_kurzbz,
|
||||
tbl_projektarbeit.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 = ?
|
||||
|
||||
@@ -177,7 +177,7 @@ class Prestudentstatus_model extends DB_Model
|
||||
* @param prestudent_id ID of the Prestudent.
|
||||
* @param $status_kurzbz kurzbz of the status.
|
||||
* @param $ausbildungssemester ausbildungssemester of the status.
|
||||
* @param $studiensemester_kurzbz studiensemster of the status.
|
||||
* @param $studiensemester_kurzbz studiensemester of the status.
|
||||
*
|
||||
* @return result object with all the status entries
|
||||
*/
|
||||
|
||||
@@ -395,80 +395,6 @@ EOSQL;
|
||||
return $this->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
|
||||
public function getOffeneStunden($lehreinheit_ids)
|
||||
{
|
||||
if (!is_array($lehreinheit_ids))
|
||||
$lehreinheit_ids = [$lehreinheit_ids];
|
||||
|
||||
if (empty($lehreinheit_ids))
|
||||
return success([]);
|
||||
|
||||
$db = new DB_Model();
|
||||
$placeholders = implode(',', array_fill(0, count($lehreinheit_ids), '?'));
|
||||
|
||||
$qry = "WITH eventdauer AS (
|
||||
SELECT
|
||||
tbl_kalender_lehreinheit.lehreinheit_id,
|
||||
tbl_kalender.von,
|
||||
tbl_kalender.bis,
|
||||
tbl_kalender.kalender_id
|
||||
FROM lehre.tbl_lehreinheit
|
||||
JOIN lehre.tbl_kalender_lehreinheit USING(lehreinheit_id)
|
||||
JOIN lehre.tbl_kalender USING(kalender_id)
|
||||
WHERE tbl_lehreinheit.lehreinheit_id IN ($placeholders)
|
||||
AND NOT EXISTS (SELECT 1 FROM lehre.tbl_kalender nachfolger
|
||||
WHERE nachfolger.vorgaenger_kalender_id = tbl_kalender.kalender_id)
|
||||
AND tbl_kalender.status_kurzbz NOT IN ('deleted', 'todelete', 'archived')
|
||||
GROUP BY tbl_kalender_lehreinheit.lehreinheit_id, tbl_kalender.von, tbl_kalender.bis, tbl_kalender.kalender_id
|
||||
),
|
||||
raster AS (
|
||||
SELECT
|
||||
eventdauer.lehreinheit_id,
|
||||
eventdauer.kalender_id,
|
||||
eventdauer.von,
|
||||
eventdauer.bis,
|
||||
vonstunde.stunde AS vonstunde_nr,
|
||||
bisstunde.stunde AS bisstunde_nr
|
||||
FROM eventdauer
|
||||
LEFT JOIN lehre.tbl_stunde vonstunde ON eventdauer.von::time = vonstunde.beginn
|
||||
LEFT JOIN lehre.tbl_stunde bisstunde ON eventdauer.bis::time = bisstunde.ende
|
||||
),
|
||||
unterrichtsdauer AS (
|
||||
SELECT
|
||||
raster.lehreinheit_id,
|
||||
raster.kalender_id,
|
||||
sum(EXTRACT(EPOCH FROM (LEAST(stunde.ende, raster.bis::time) - GREATEST(stunde.beginn, raster.von::time))) / 60) AS minuten
|
||||
FROM raster JOIN lehre.tbl_stunde stunde ON stunde.beginn < raster.bis::time AND stunde.ende > raster.von::time
|
||||
WHERE raster.vonstunde_nr IS NULL OR raster.bisstunde_nr IS NULL
|
||||
GROUP BY raster.lehreinheit_id, raster.kalender_id
|
||||
),
|
||||
verplantestunden AS (
|
||||
SELECT raster.lehreinheit_id, raster.kalender_id,
|
||||
CASE
|
||||
WHEN raster.vonstunde_nr IS NOT NULL AND raster.bisstunde_nr IS NOT NULL
|
||||
THEN (raster.bisstunde_nr - raster.vonstunde_nr + 1)
|
||||
ELSE coalesce(unterrichtsdauer.minuten, 0) / 45
|
||||
END AS verplantestunde
|
||||
FROM raster LEFT JOIN unterrichtsdauer ON unterrichtsdauer.lehreinheit_id = raster.lehreinheit_id AND unterrichtsdauer.kalender_id = raster.kalender_id
|
||||
),
|
||||
verplant_gesamt AS (
|
||||
SELECT lehreinheit_id, SUM(verplantestunde) AS verplant
|
||||
FROM verplantestunden
|
||||
GROUP BY lehreinheit_id
|
||||
)
|
||||
SELECT
|
||||
lema.lehreinheit_id,
|
||||
lema.mitarbeiter_uid,
|
||||
lema.planstunden,
|
||||
ROUND(coalesce(verplant_gesamt.verplant, 0), 2) AS verplant,
|
||||
ROUND((lema.planstunden - coalesce(verplant_gesamt.verplant, 0)), 2) AS offenestunden
|
||||
FROM lehre.tbl_lehreinheitmitarbeiter lema
|
||||
LEFT JOIN verplant_gesamt ON verplant_gesamt.lehreinheit_id = lema.lehreinheit_id
|
||||
WHERE lema.lehreinheit_id IN ($placeholders)";
|
||||
|
||||
return $db->execReadOnlyQuery($qry, array_merge($lehreinheit_ids, $lehreinheit_ids));
|
||||
}
|
||||
|
||||
private function getLVTmp($stg_kz = null)
|
||||
{
|
||||
$qry = "SELECT DISTINCT ON(lehrveranstaltung_id) *,
|
||||
|
||||
@@ -85,9 +85,18 @@ class Lehreinheitmitarbeiter_model extends DB_Model
|
||||
|
||||
public function getLektorenByLe($lehreinheit_id)
|
||||
{
|
||||
$this->addSelect('vorname, nachname, tbl_lehreinheitmitarbeiter.*, stundenplan.verplant');
|
||||
$this->addSelect('tbl_person.vorname, tbl_person.nachname, tbl_lehreinheitmitarbeiter.*, stundenplan.verplant,
|
||||
COALESCE(insertvonperson.vorname || \' \' || insertvonperson.nachname, tbl_lehreinheitmitarbeiter.insertvon) as insertvon,
|
||||
COALESCE(updatevonperson.vorname || \' \' || updatevonperson.nachname, tbl_lehreinheitmitarbeiter.updatevon) as updatevon');
|
||||
$this->addJoin('tbl_benutzer', 'uid = mitarbeiter_uid');
|
||||
$this->addJoin('tbl_person', 'person_id');
|
||||
$this->addJoin('tbl_benutzer insertvonbenutzer', 'insertvonbenutzer.uid = tbl_lehreinheitmitarbeiter.insertvon', 'LEFT');
|
||||
$this->addJoin('tbl_person insertvonperson', 'insertvonperson.person_id = insertvonbenutzer.person_id', 'LEFT');
|
||||
|
||||
$this->addJoin('tbl_benutzer updatevonbenutzer', 'updatevonbenutzer.uid = tbl_lehreinheitmitarbeiter.updatevon', 'LEFT');
|
||||
$this->addJoin('tbl_person updatevonperson', 'updatevonperson.person_id = updatevonbenutzer.person_id', 'LEFT');
|
||||
|
||||
|
||||
|
||||
$this->addJoin('(
|
||||
SELECT 1 as verplant, lehreinheit_id, mitarbeiter_uid
|
||||
|
||||
@@ -1263,6 +1263,39 @@ class Lehrveranstaltung_model extends DB_Model
|
||||
";
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets lehrveranstaltungen of Studienplan of a certain lva_id set
|
||||
* used if a bigger set of lva id is already available and it needs to be checked against a certain studienplan aswell
|
||||
* @param $studienplan_id ID des Studienplans
|
||||
* @param $lva_ids LVA_ID welche abgegleicht werden sollen
|
||||
* @return array|null
|
||||
*/
|
||||
public function getLvsByStudienplanByLvaIDs($studienplan_id, $lva_ids)
|
||||
{
|
||||
$params = array($studienplan_id, $lva_ids);
|
||||
|
||||
$qry = "SELECT tbl_lehrveranstaltung.*,
|
||||
tbl_studienplan_lehrveranstaltung.studienplan_lehrveranstaltung_id,
|
||||
tbl_studienplan_lehrveranstaltung.semester as stpllv_semester,
|
||||
tbl_studienplan_lehrveranstaltung.pflicht as stpllv_pflicht,
|
||||
tbl_studienplan_lehrveranstaltung.koordinator as stpllv_koordinator,
|
||||
tbl_studienplan_lehrveranstaltung.studienplan_lehrveranstaltung_id_parent,
|
||||
tbl_studienplan_lehrveranstaltung.sort stpllv_sort,
|
||||
tbl_studienplan_lehrveranstaltung.curriculum,
|
||||
tbl_studienplan_lehrveranstaltung.export,
|
||||
tbl_studienplan_lehrveranstaltung.genehmigung
|
||||
FROM lehre.tbl_lehrveranstaltung
|
||||
JOIN lehre.tbl_studienplan_lehrveranstaltung
|
||||
USING(lehrveranstaltung_id)
|
||||
WHERE tbl_studienplan_lehrveranstaltung.studienplan_id = ?
|
||||
AND tbl_studienplan_lehrveranstaltung.lehrveranstaltung_id IN ?
|
||||
";
|
||||
|
||||
$qry .= " ORDER BY stpllv_sort, semester, sort";
|
||||
|
||||
return $this->execQuery($qry, $params);
|
||||
}
|
||||
|
||||
public function getAllOe($lv_id)
|
||||
{
|
||||
$qry = "SELECT DISTINCT oe_kurzbz
|
||||
|
||||
@@ -50,8 +50,7 @@ class Paabgabe_model extends DB_Model
|
||||
JOIN lehre.tbl_projektbetreuer USING(projektarbeit_id)
|
||||
JOIN public.tbl_benutzer bn_student ON(tbl_projektarbeit.student_uid=bn_student.uid)
|
||||
JOIN public.tbl_person person_student ON(bn_student.person_id=person_student.person_id)
|
||||
JOIN lehre.tbl_lehreinheit ON(tbl_projektarbeit.lehreinheit_id=tbl_lehreinheit.lehreinheit_id)
|
||||
JOIN lehre.tbl_lehrveranstaltung ON(tbl_lehreinheit.lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id)
|
||||
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
|
||||
JOIN public.tbl_studiengang ON(tbl_lehrveranstaltung.studiengang_kz=tbl_studiengang.studiengang_kz)
|
||||
JOIN campus.tbl_paabgabetyp USING(paabgabetyp_kurzbz)
|
||||
WHERE
|
||||
@@ -68,14 +67,13 @@ class Paabgabe_model extends DB_Model
|
||||
campus.tbl_paabgabe.insertvon, campus.tbl_paabgabe.insertamum, campus.tbl_paabgabe.updatevon, campus.tbl_paabgabe.updateamum,
|
||||
campus.tbl_paabgabe.note, upload_allowed, beurteilungsnotiz, student_uid, tbl_projektarbeit.note, lehre.tbl_projektarbeit.titel,
|
||||
UPPER(tbl_studiengang.typ) as stgtyp, UPPER(tbl_studiengang.kurzbz) as stgkz, public.tbl_studiengang.studiengang_kz,
|
||||
public.tbl_studiengang.oe_kurzbz as stg_oe_kurzbz, tbl_lehreinheit.studiensemester_kurzbz,
|
||||
public.tbl_studiengang.oe_kurzbz as stg_oe_kurzbz, tbl_projektarbeit.studiensemester_kurzbz,
|
||||
public.tbl_person.anrede, public.tbl_person.titelpre, public.tbl_person.vorname, public.tbl_person.nachname, public.tbl_person.titelpost
|
||||
FROM campus.tbl_paabgabe
|
||||
JOIN campus.tbl_paabgabetyp USING (paabgabetyp_kurzbz)
|
||||
JOIN lehre.tbl_projektarbeit USING (projektarbeit_id)
|
||||
JOIN lehre.tbl_lehreinheit using(lehreinheit_id)
|
||||
JOIN lehre.tbl_lehrveranstaltung using(lehrveranstaltung_id)
|
||||
JOIN public.tbl_studiengang on(lehre.tbl_lehrveranstaltung.studiengang_kz = public.tbl_studiengang.studiengang_kz)
|
||||
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
|
||||
JOIN public.tbl_studiengang ON(lehre.tbl_lehrveranstaltung.studiengang_kz = public.tbl_studiengang.studiengang_kz)
|
||||
JOIN public.tbl_benutzer ON (public.tbl_benutzer.uid = student_uid)
|
||||
JOIN public.tbl_person USING (person_id)
|
||||
|
||||
@@ -93,7 +91,7 @@ class Paabgabe_model extends DB_Model
|
||||
campus.tbl_paabgabe.insertvon, campus.tbl_paabgabe.insertamum, campus.tbl_paabgabe.updatevon, campus.tbl_paabgabe.updateamum,
|
||||
campus.tbl_paabgabe.note, upload_allowed, beurteilungsnotiz, student_uid, tbl_projektarbeit.note, lehre.tbl_projektarbeit.titel,
|
||||
UPPER(tbl_studiengang.typ) as stgtyp, UPPER(tbl_studiengang.kurzbz) as stgkz, public.tbl_studiengang.studiengang_kz,
|
||||
public.tbl_studiengang.oe_kurzbz as stg_oe_kurzbz, tbl_lehreinheit.studiensemester_kurzbz,
|
||||
public.tbl_studiengang.oe_kurzbz as stg_oe_kurzbz, tbl_projektarbeit.studiensemester_kurzbz,
|
||||
lehre.tbl_projektbetreuer.betreuerart_kurzbz, lehre.tbl_projektbetreuer.person_id,
|
||||
public.tbl_person.anrede, public.tbl_person.titelpre, public.tbl_person.vorname, public.tbl_person.nachname, public.tbl_person.titelpost
|
||||
|
||||
@@ -101,8 +99,7 @@ class Paabgabe_model extends DB_Model
|
||||
JOIN campus.tbl_paabgabetyp USING (paabgabetyp_kurzbz)
|
||||
JOIN lehre.tbl_projektarbeit USING (projektarbeit_id)
|
||||
JOIN lehre.tbl_projektbetreuer USING (projektarbeit_id)
|
||||
JOIN lehre.tbl_lehreinheit using(lehreinheit_id)
|
||||
JOIN lehre.tbl_lehrveranstaltung using(lehrveranstaltung_id)
|
||||
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
|
||||
JOIN public.tbl_studiengang on(lehre.tbl_lehrveranstaltung.studiengang_kz = public.tbl_studiengang.studiengang_kz)
|
||||
JOIN public.tbl_benutzer ON (public.tbl_benutzer.uid = student_uid)
|
||||
JOIN public.tbl_person ON (public.tbl_benutzer.person_id = public.tbl_person.person_id)
|
||||
|
||||
@@ -25,7 +25,7 @@ class Projektarbeit_model extends DB_Model
|
||||
{
|
||||
$qry = "SELECT
|
||||
pa.*, tbl_projekttyp.bezeichnung,
|
||||
tbl_lehreinheit.studiensemester_kurzbz, tbl_lehrveranstaltung.lehrveranstaltung_id,
|
||||
pa.studiensemester_kurzbz, pa.lehrveranstaltung_id,
|
||||
tbl_firma.name AS firma_name,
|
||||
(
|
||||
SELECT
|
||||
@@ -41,7 +41,6 @@ class Projektarbeit_model extends DB_Model
|
||||
FROM
|
||||
lehre.tbl_projektarbeit pa
|
||||
JOIN lehre.tbl_projekttyp USING (projekttyp_kurzbz)
|
||||
JOIN lehre.tbl_lehreinheit USING (lehreinheit_id)
|
||||
JOIN lehre.tbl_lehrveranstaltung USING (lehrveranstaltung_id)
|
||||
LEFT JOIN public.tbl_firma USING (firma_id)
|
||||
WHERE
|
||||
@@ -57,7 +56,7 @@ class Projektarbeit_model extends DB_Model
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= ' AND tbl_lehreinheit.studiensemester_kurzbz=?';
|
||||
$qry .= ' AND tbl_projektarbeit.studiensemester_kurzbz=?';
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
@@ -134,7 +133,7 @@ class Projektarbeit_model extends DB_Model
|
||||
projektarbeit_id,
|
||||
lehre.tbl_projekttyp.bezeichnung as projekttypbezeichnung,
|
||||
lehre.tbl_projekttyp.projekttyp_kurzbz as projekttypkurzbz,
|
||||
lehre.tbl_lehreinheit.studiensemester_kurzbz,
|
||||
lehre.tbl_projektarbeit.studiensemester_kurzbz,
|
||||
lehre.tbl_lehrveranstaltung.studiengang_kz,
|
||||
public.tbl_studiengang.kurzbzlang,
|
||||
lehre.tbl_projektarbeit.note as note,
|
||||
@@ -157,7 +156,6 @@ class Projektarbeit_model extends DB_Model
|
||||
LEFT JOIN public.tbl_benutzer USING(person_id)
|
||||
LEFT JOIN lehre.tbl_projekttyp USING (projekttyp_kurzbz)
|
||||
LEFT JOIN lehre.tbl_betreuerart USING(betreuerart_kurzbz)
|
||||
LEFT JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
|
||||
LEFT JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
|
||||
LEFT JOIN public.tbl_mitarbeiter ON(public.tbl_mitarbeiter.mitarbeiter_uid = public.tbl_benutzer.uid)
|
||||
LEFT JOIN public.tbl_studiengang USING(studiengang_kz)
|
||||
@@ -366,7 +364,7 @@ class Projektarbeit_model extends DB_Model
|
||||
tbl_studiengang.typ, tbl_studiengang.kurzbz,
|
||||
tbl_projektarbeit.projekttyp_kurzbz, tbl_projekttyp.bezeichnung,
|
||||
tbl_projektarbeit.titel, tbl_projektarbeit.projektarbeit_id, tbl_projektarbeit.note,
|
||||
student_benutzer.uid, tbl_student.matrikelnr, tbl_lehreinheit.studiensemester_kurzbz, public.tbl_student.student_uid,
|
||||
student_benutzer.uid, tbl_student.matrikelnr, tbl_projektarbeit.studiensemester_kurzbz, public.tbl_student.student_uid,
|
||||
|
||||
lehre.tbl_projektarbeit.sprache,
|
||||
lehre.tbl_projektarbeit.seitenanzahl,
|
||||
@@ -430,7 +428,6 @@ class Projektarbeit_model extends DB_Model
|
||||
LEFT JOIN public.tbl_benutzer student_benutzer ON student_benutzer.uid = lehre.tbl_projektarbeit.student_uid
|
||||
LEFT JOIN public.tbl_person student_person ON student_benutzer.person_id = student_person.person_id
|
||||
LEFT JOIN public.tbl_student ON student_benutzer.uid = public.tbl_student.student_uid
|
||||
LEFT JOIN lehre.tbl_lehreinheit USING (lehreinheit_id)
|
||||
LEFT JOIN lehre.tbl_lehrveranstaltung USING (lehrveranstaltung_id)
|
||||
LEFT JOIN public.tbl_studiengang ON public.tbl_student.studiengang_kz = public.tbl_studiengang.studiengang_kz
|
||||
LEFT JOIN lehre.tbl_projekttyp USING (projekttyp_kurzbz)
|
||||
@@ -503,7 +500,7 @@ class Projektarbeit_model extends DB_Model
|
||||
student_person.vorname AS student_vorname,
|
||||
student_person.nachname AS student_nachname,
|
||||
public.tbl_student.matrikelnr,
|
||||
tbl_lehreinheit.studiensemester_kurzbz,
|
||||
tbl_projektarbeit.studiensemester_kurzbz,
|
||||
betreuer_benutzer.uid AS betreuer_benutzer_uid,
|
||||
betreuer_person.titelpre AS betreuer_titelpre,
|
||||
betreuer_person.vorname AS betreuer_vorname,
|
||||
@@ -565,7 +562,6 @@ class Projektarbeit_model extends DB_Model
|
||||
LEFT JOIN public.tbl_benutzer student_benutzer ON student_benutzer.uid = lehre.tbl_projektarbeit.student_uid
|
||||
LEFT JOIN public.tbl_person student_person ON student_benutzer.person_id = student_person.person_id
|
||||
LEFT JOIN public.tbl_student ON student_benutzer.uid = public.tbl_student.student_uid
|
||||
LEFT JOIN lehre.tbl_lehreinheit USING (lehreinheit_id)
|
||||
LEFT JOIN lehre.tbl_lehrveranstaltung USING (lehrveranstaltung_id)
|
||||
LEFT JOIN public.tbl_studiengang ON public.tbl_student.studiengang_kz = public.tbl_studiengang.studiengang_kz
|
||||
LEFT JOIN lehre.tbl_projekttyp USING (projekttyp_kurzbz)
|
||||
@@ -633,7 +629,7 @@ class Projektarbeit_model extends DB_Model
|
||||
student_person.vorname AS student_vorname,
|
||||
student_person.nachname AS student_nachname,
|
||||
public.tbl_student.matrikelnr,
|
||||
tbl_lehreinheit.studiensemester_kurzbz,
|
||||
tbl_projektarbeit.studiensemester_kurzbz,
|
||||
betreuer_benutzer.uid AS betreuer_benutzer_uid,
|
||||
betreuer_person.titelpre AS betreuer_titelpre,
|
||||
betreuer_person.vorname AS betreuer_vorname,
|
||||
@@ -695,7 +691,6 @@ class Projektarbeit_model extends DB_Model
|
||||
LEFT JOIN public.tbl_benutzer student_benutzer ON student_benutzer.uid = lehre.tbl_projektarbeit.student_uid
|
||||
LEFT JOIN public.tbl_person student_person ON student_benutzer.person_id = student_person.person_id
|
||||
LEFT JOIN public.tbl_student ON student_benutzer.uid = public.tbl_student.student_uid
|
||||
LEFT JOIN lehre.tbl_lehreinheit USING (lehreinheit_id)
|
||||
LEFT JOIN lehre.tbl_lehrveranstaltung USING (lehrveranstaltung_id)
|
||||
LEFT JOIN public.tbl_studiengang ON public.tbl_student.studiengang_kz = public.tbl_studiengang.studiengang_kz
|
||||
LEFT JOIN lehre.tbl_projekttyp USING (projekttyp_kurzbz)
|
||||
|
||||
@@ -11,26 +11,4 @@ class Gruppe_model extends DB_Model
|
||||
$this->dbTable = 'public.tbl_gruppe';
|
||||
$this->pk = 'gruppe_kurzbz';
|
||||
}
|
||||
|
||||
public function search($query_words)
|
||||
{
|
||||
$this->addSelect('gruppe_kurzbz,
|
||||
studiengang_kz,
|
||||
semester,
|
||||
bezeichnung,
|
||||
gid,
|
||||
\'false\' as lehrverband');
|
||||
$this->db->where(array('sichtbar' => true, 'aktiv' => true, 'lehre' => true, 'direktinskription' => false, 'semester IS NOT NULL' => null));
|
||||
$this->db->group_start();
|
||||
foreach ($query_words as $word)
|
||||
{
|
||||
$this->db->group_start();
|
||||
$this->db->where('gruppe_kurzbz ILIKE', "%" . $word . "%");
|
||||
$this->db->or_where('bezeichnung ILIKE', "%" . $word . "%");
|
||||
$this->db->group_end();
|
||||
}
|
||||
$this->db->group_end();
|
||||
|
||||
return $this->load();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,29 +41,4 @@ class Lehrverband_model extends DB_Model
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function search($query_words)
|
||||
{
|
||||
$this->addSelect('CONCAT(UPPER(CONCAT(typ, kurzbz)), \'\', semester, verband, COALESCE(gruppe,\'\')) as gruppe_kurzbz,
|
||||
studiengang_kz,
|
||||
semester,
|
||||
tbl_lehrverband.bezeichnung,
|
||||
gid,
|
||||
\'true\' as lehrverband');
|
||||
$this->addJoin('public.tbl_studiengang', 'studiengang_kz');
|
||||
$this->addOrder('verband');
|
||||
$this->addOrder('gruppe');
|
||||
$this->db->where(array('tbl_lehrverband.aktiv' => true));
|
||||
|
||||
$this->db->group_start();
|
||||
foreach ($query_words as $word)
|
||||
{
|
||||
$this->db->group_start();
|
||||
$this->db->where('CONCAT(CONCAT(typ, kurzbz), \'\', semester, verband, COALESCE(gruppe,\'\')) ILIKE', "%" . $word . "%");
|
||||
$this->db->or_where('tbl_lehrverband.bezeichnung ILIKE', "%" . $word . "%");
|
||||
$this->db->group_end();
|
||||
}
|
||||
$this->db->group_end();
|
||||
return $this->load();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -218,7 +218,7 @@ class Studiensemester_model extends DB_Model
|
||||
*/
|
||||
public function getByDate($date)
|
||||
{
|
||||
// gets the studiensemster of a date or the next closest previous studiensemester if a date is not within a studiensemester
|
||||
// gets the studiensemester of a date or the next closest previous studiensemester if a date is not within a studiensemester
|
||||
$query = "
|
||||
SELECT studiensemester_kurzbz, start, ende
|
||||
FROM public.tbl_studiensemester
|
||||
|
||||
@@ -98,7 +98,7 @@ class Notiz_model extends DB_Model
|
||||
/**
|
||||
* Add a Notiz for a given person
|
||||
*/
|
||||
public function addNotizForPerson($person_id, $titel, $text, $erledigt, $verfasser_uid)
|
||||
public function addNotizForPerson($person_id, $titel, $text, $erledigt, $verfasser_uid, $insertvon = null)
|
||||
{
|
||||
// Loads model Notizzuordnung_model
|
||||
$this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel');
|
||||
@@ -106,8 +106,15 @@ class Notiz_model extends DB_Model
|
||||
// Start DB transaction
|
||||
$this->db->trans_start(false);
|
||||
|
||||
$result = $this->insert(array('titel' => $titel, 'text' => $text, 'erledigt' => $erledigt, 'verfasser_uid' => $verfasser_uid,
|
||||
"insertvon" => $verfasser_uid));
|
||||
$result = $this->insert(
|
||||
array(
|
||||
'titel' => $titel,
|
||||
'text' => $text,
|
||||
'erledigt' => $erledigt,
|
||||
'verfasser_uid' => $verfasser_uid,
|
||||
'insertvon' => $insertvon ?? $verfasser_uid
|
||||
)
|
||||
);
|
||||
|
||||
if (isSuccess($result))
|
||||
{
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
<?php
|
||||
class BetriebsmittelKalender_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'lehre.tbl_betriebsmittel_kalender';
|
||||
$this->pk = 'betriebsmittel_kalender_id';
|
||||
}
|
||||
}
|
||||
@@ -31,26 +31,4 @@ class Betriebsmittel_model extends DB_Model
|
||||
|
||||
return $this->execQuery($qry);
|
||||
}
|
||||
|
||||
public function getSchedulableEntriesByDatetimeInterval($from, $to)
|
||||
{
|
||||
$qry = "SELECT
|
||||
*
|
||||
FROM
|
||||
wawi.tbl_betriebsmittel
|
||||
WHERE
|
||||
verplanen=true
|
||||
AND
|
||||
NOT EXISTS(
|
||||
SELECT 1 FROM lehre.tbl_betriebsmittel_kalender
|
||||
JOIN lehre.tbl_kalender ON tbl_kalender.eindeutige_kalender_gruppen_id = tbl_betriebsmittel_kalender.eindeutige_kalender_gruppen_id
|
||||
WHERE
|
||||
betriebsmittel_id=tbl_betriebsmittel.betriebsmittel_id
|
||||
AND tbl_kalender.von < ?
|
||||
AND tbl_kalender.bis > ?
|
||||
)";
|
||||
|
||||
|
||||
return $this->execQuery($qry, array($to, $from));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
<?php
|
||||
class Kalender_Event_Rolle_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'lehre.tbl_kalender_event_rolle';
|
||||
$this->pk = array('rolle_kurzbz');
|
||||
$this->hasSequence = false;
|
||||
}
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
<?php
|
||||
class
|
||||
Kalender_Event_Teilnehmer_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'lehre.tbl_kalender_event_teilnehmer';
|
||||
$this->pk = array('kalender_event_teilnehmer_id');
|
||||
$this->hasSequence = false;
|
||||
}
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
<?php
|
||||
class Kalender_Event_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'lehre.tbl_kalender_event';
|
||||
$this->pk = array('kalender_id');
|
||||
$this->hasSequence = false;
|
||||
}
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
<?php
|
||||
class Kalender_Lehreinheit_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'lehre.tbl_kalender_lehreinheit';
|
||||
$this->pk = array('kalender_id','lehreinheit_id');
|
||||
$this->hasSequence = false;
|
||||
}
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
<?php
|
||||
class Kalender_Ort_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'lehre.tbl_kalender_ort';
|
||||
$this->pk = 'kalender_ort_id';
|
||||
}
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
<?php
|
||||
class Kalender_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'lehre.tbl_kalender';
|
||||
$this->pk = 'kalender_id';
|
||||
}
|
||||
|
||||
public function generateUniqueGroupId()
|
||||
{
|
||||
while (true) {
|
||||
$uniqueGroupId = generateUUID();
|
||||
$result = $this->loadWhere(['eindeutige_kalender_gruppen_id' => $uniqueGroupId]);
|
||||
if (!hasData($result)) {
|
||||
return $uniqueGroupId;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
<?php
|
||||
class Kalenderstatus_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'lehre.tbl_kalender_status';
|
||||
$this->pk = 'status_kurzbz';
|
||||
}
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
<?php
|
||||
class Kalendersyncstatus_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'lehre.tbl_kalender_syncstatus';
|
||||
$this->pk = 'kalender_syncstatus_id';
|
||||
}
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
<?php
|
||||
class Reservierung_Kalender_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'sync.tbl_reservierung_kalender';
|
||||
$this->pk = 'reservierung_kalender_id';
|
||||
}
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
<?php
|
||||
class Stundenplandev_Kalender_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'sync.tbl_stundenplandev_kalender';
|
||||
$this->pk = 'stundenplandev_kalender_id';
|
||||
}
|
||||
}
|
||||
@@ -26,22 +26,6 @@ class Extensions_model extends DB_Model
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function getInstalledExtensions()
|
||||
{
|
||||
$query = 'SELECT extension_id, e1.name, e1.version, description, license, url, core_version, dependencies, enabled
|
||||
FROM system.tbl_extensions e1
|
||||
INNER JOIN (
|
||||
SELECT name, MAX(version) AS version
|
||||
FROM system.tbl_extensions
|
||||
GROUP BY name) e2
|
||||
ON (e1.name = e2.name AND e1.version = e2.version)';
|
||||
|
||||
return $this->execQuery($query);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@@ -50,3 +34,4 @@ class Extensions_model extends DB_Model
|
||||
return $this->execQuery($sql);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
$phrases = array(
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'DMS-Link',
|
||||
'phrase' => 'lvplanSyncFAQ',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => '7188',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => '7188',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
);
|
||||
@@ -0,0 +1,457 @@
|
||||
<?php
|
||||
|
||||
$phrases = array(
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'LvPlan',
|
||||
'phrase' => 'previousWeek',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Vorherige Woche',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Previous week',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'LvPlan',
|
||||
'phrase' => 'previousYear',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Vorheriges Jahr',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Previous year',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'LvPlan',
|
||||
'phrase' => 'previousMonth',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Vorheriges Monat',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Previous month',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'LvPlan',
|
||||
'phrase' => 'previousDay',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Vorheriger Tag',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Previous day',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'LvPlan',
|
||||
'phrase' => 'nextDay',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Nächster Tag',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Next day',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'LvPlan',
|
||||
'phrase' => 'nextWeek',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Nächste Woche',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Next week',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'LvPlan',
|
||||
'phrase' => 'nextMonth',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Nächster Monat',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Next month',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'LvPlan',
|
||||
'phrase' => 'nextYear',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Nächstes Jahr',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Next year',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'LvPlan',
|
||||
'phrase' => 'modeDay',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Tages Ansicht',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Daily view',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'LvPlan',
|
||||
'phrase' => 'modeWeek',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Wochen Ansicht',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Week view',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'LvPlan',
|
||||
'phrase' => 'modeMonth',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Monats Ansicht',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Month view',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'LvPlan',
|
||||
'phrase' => 'noStgProvided',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'kein Studiengang hinterlegt',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'no degree-program provided',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'LvPlan',
|
||||
'phrase' => 'headerLvPlanLvVerband',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Lv-Plan Lehrverband',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Course-Plan Teaching Association',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'LvPlan',
|
||||
'phrase' => 'chooseStg',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Studiengang auswählen...',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Select a degree-program...',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'LvPlan',
|
||||
'phrase' => 'loadLvPlan',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Lehrverband laden',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Load Course-Plan',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'LvPlan',
|
||||
'phrase' => 'backToDropdown',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Zurück zum Auswahl-Dropdown',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Back to Dropdown',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'LvPlan',
|
||||
'phrase' => 'error_SemMissing',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Semester wählen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Select a semester',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'LvPlan',
|
||||
'phrase' => 'error_VerbandMissing',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Verband wählen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Select a verband',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'LvPlan',
|
||||
'phrase' => 'copy',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Kopieren',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Copy',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
);
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,141 @@
|
||||
<?php
|
||||
/* Copyright (C) 2013 FH Technikum-Wien
|
||||
*
|
||||
* 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 2 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
$phrases = array(
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'account',
|
||||
'phrase' => 'title',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Account Aktivierung',
|
||||
'description' => '',
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Account Activation',
|
||||
'description' => '',
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'account',
|
||||
'phrase' => 'usage',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Bitte wählen Sie ein Passwort für Ihren Account.<br>Das Passwort muss zumindest 8 Zeichen enthalten, davon mindestens 1 Großbuchstabe, 1 Kleinbuchstabe und eine Ziffer.<br>Das Passwort darf keine Leerzeichen und Umlaute enthalten.<br>Erlaubte Sonderzeichen sind: -$#[]{}!().,*:;_',
|
||||
'description' => '',
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Please choose a password for your account<br>The password must contain at least 8 characters, of which 1 must be upper case, 1 lower case and 1 a numeral.<br>The password may not include spaces or umlauts.<br>The following special characters are allowed: -$#[]{}!().,*:;_',
|
||||
'description' => '',
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'account',
|
||||
'phrase' => 'username',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Username',
|
||||
'description' => '',
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Username',
|
||||
'description' => '',
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'account',
|
||||
'phrase' => 'code',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Code',
|
||||
'description' => '',
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Code',
|
||||
'description' => '',
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'account',
|
||||
'phrase' => 'activate',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Abschicken',
|
||||
'description' => '',
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Activate',
|
||||
'description' => '',
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'account',
|
||||
'phrase' => 'missingParameters',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Bitte geben Sie Benutzername, Code und Passwort ein',
|
||||
'description' => '',
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Please enter username, code and password',
|
||||
'description' => '',
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'account',
|
||||
'phrase' => 'wrongActivationCode',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Der angegebene Aktivierungscode ist falsch',
|
||||
'description' => '',
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'The provided activation code is wrong',
|
||||
'description' => '',
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
@@ -0,0 +1,388 @@
|
||||
<?php
|
||||
|
||||
$phrases = array(
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'admission',
|
||||
'phrase' => 'admission_edit',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Aufnahmetermin bearbeiten',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Edit appointment for participation placement test',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'admission',
|
||||
'phrase' => 'admission_delete',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Aufnahmetermin Löschen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Delete Admission Date',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'admission',
|
||||
'phrase' => 'admission_new',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Termin für Teilnahme am Reihungstest anlegen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Create appointment for participation placement test',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'admission',
|
||||
'phrase' => 'anmeldundRtAm',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Anmeldung zum Reihungstest am',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Registration for the ranking test on',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'admission',
|
||||
'phrase' => 'rtAngetreten',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Zum Reihungstest angetreten',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Participated in the ranking test',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'admission',
|
||||
'phrase' => 'rtAbsolviert',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Reihungstestverfahren absolviert',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Placement test procedure completed',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'admission',
|
||||
'phrase' => 'gesamtpunkte',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Gesamtpunkte',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Total Points',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'admission',
|
||||
'phrase' => 'gesamtpunkteBerechnen',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Gesamtpunkte berechnen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Calculate total points',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'admission',
|
||||
'phrase' => 'allgemein',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Allgemein',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Generally',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'admission',
|
||||
'phrase' => 'headerRTVerwaltung',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Zur Reihungstestverwaltung',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Administration Placement Test',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'admission',
|
||||
'phrase' => 'loadZukuenftigeRT',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Nur zukünftige Reihungstests laden',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Show future placement tests only',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'admission',
|
||||
'phrase' => 'getRTErgebnis',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Reihungstestergebnis holen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Get placement test result',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'admission',
|
||||
'phrase' => 'stufe',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Stufe',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'level',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'admission',
|
||||
'phrase' => 'anmeldedatum',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Anmeldedatum',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Registration Date',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'admission',
|
||||
'phrase' => 'teilgenommen',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'teilgenommen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'participated',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'admission',
|
||||
'phrase' => 'stg_kurz',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Kürzel',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'shorthand',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
$phrases = array(
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'alert',
|
||||
'phrase' => 'attention',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Achtung',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Attention',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'alert',
|
||||
'phrase' => 'confirm_delete',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Möchten Sie wirklich löschen?',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Do you really want to delete?',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'alert',
|
||||
'phrase' => 'systemerror',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Systemfehler',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'System Error',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
@@ -0,0 +1,220 @@
|
||||
<?php
|
||||
|
||||
$phrases = array(
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'ampeln',
|
||||
'phrase' => 'newestAmpeln',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Neueste Ampeln',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Newest Ampeln',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'ampeln',
|
||||
'phrase' => 'allAmpeln',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Alle Ampeln',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'All Ampeln',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'ampeln',
|
||||
'phrase' => 'overdue',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Überfällig: {count}',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Overdue: {count}',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'ampeln',
|
||||
'phrase' => 'ampelnDeadline',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Stichtag: {value}',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Deadline: {value}',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'ampeln',
|
||||
'phrase' => 'noOpenAmpeln',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Keine offenen Ampeln.',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'No open Ampeln.',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'ampeln',
|
||||
'phrase' => 'allMyAmpeln',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Alle meine Ampeln',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'All my Ampeln',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'ampeln',
|
||||
'phrase' => 'mandatory',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Pflicht',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Mandatory',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'ampeln',
|
||||
'phrase' => 'ampelBestaetigt',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Ampel bestätigt',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Ampel confirmed',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'ampeln',
|
||||
'phrase' => 'super',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Super!',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Super!',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
$phrases = array(
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'betriebsmittel',
|
||||
'phrase' => 'btn_printUebernahmebestaetigung',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Übernahmebestätigung drucken',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Print acceptance confirmation',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'betriebsmittel',
|
||||
'phrase' => 'btn_editBetriebsmittel',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Betriebsmittel bearbeiten',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Edit Resource',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'betriebsmittel',
|
||||
'phrase' => 'btn_deleteBetriebsmittel',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Betriebsmittel löschen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Delete Resource',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
$phrases = array(
|
||||
|
||||
array (
|
||||
'app' => 'infocenter',
|
||||
'category' => 'bewerbung',
|
||||
'phrase' => 'erklaerungInvoices',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Ablauf und Zahlungsbedingungen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Procedure and terms of payment',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
@@ -0,0 +1,148 @@
|
||||
<?php
|
||||
|
||||
$phrases = array(
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'bismeldestichtag',
|
||||
'phrase' => 'stichtagHinzufuegen',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Meldestichtag hinzufügen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Add report target date',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'bismeldestichtag',
|
||||
'phrase' => 'stichtageVerwalten',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'BIS-Meldestichtage verwalten',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Manage report target dates',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'bismeldestichtag',
|
||||
'phrase' => 'stichtagLoeschen',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Meldestichtag löschen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Delete report target date',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'bismeldestichtag',
|
||||
'phrase' => 'meldestichtag_erreicht',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Meldestichtag erreicht - Bearbeiten nicht mehr möglich',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'report target date reached - editing no longer possible',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'bismeldestichtag',
|
||||
'phrase' => 'info_MeldestichtagStatusgrund',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Meldestichtag erreicht - ausschließlich Bearbeiten Statusgrund möglich',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Reporting deadline reached - only editing status reason possible',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'bismeldestichtag',
|
||||
'phrase' => 'info_MeldestichtagStatusgrundSemester',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Meldestichtag erreicht - Bearbeiten Ausbildungssemester und Statusgrund möglich',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Edit education semester and status reason possible',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
@@ -0,0 +1,507 @@
|
||||
<?php
|
||||
|
||||
$phrases = array(
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'bookmark',
|
||||
'phrase' => 'newLink',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Neuer Link',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'New Link',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'bookmark',
|
||||
'phrase' => 'saveLink',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Link speichern',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Save link',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'bookmark',
|
||||
'phrase' => 'editLink',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Link bearbeiten',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Edit link',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'bookmark',
|
||||
'phrase' => 'bookmarkDeleted',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Link gelöscht',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Link deleted',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'bookmark',
|
||||
'phrase' => 'bookmarkAdded',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Link hinzugefügt',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Link added',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'bookmark',
|
||||
'phrase' => 'bookmarkUpdated',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Link geändert',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Link updated',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'bookmark',
|
||||
'phrase' => 'myBookmarks',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Meine Urls',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'My Urls',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'bookmark',
|
||||
'phrase' => 'emptyBookmarks',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Du hast noch keine Bookmarks gesetzt',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'You have not set any bookmarks yet',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'bookmark',
|
||||
'phrase' => 'invalidUrl',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Ungültiger Link',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Invalid link',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'bookmark',
|
||||
'phrase' => 'invalidTitel',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Ungültiger Titel',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Invalid title',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'bookmark',
|
||||
'phrase' => 'editFilter',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Filter bearbeiten',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'edit Filter',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'bookmark',
|
||||
'phrase' => 'filterByTags',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Nach Tags Filtern',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'filter by Tags',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'bookmark',
|
||||
'phrase' => 'sortDownwards',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Nach unten verschieben',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'sort downwards',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'bookmark',
|
||||
'phrase' => 'sortToTop',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Nach oben verschieben',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'sort to top',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'bookmark',
|
||||
'phrase' => 'deleteBookmark',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Lesezeichen löschen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'delete Bookmark',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'bookmark',
|
||||
'phrase' => 'editBookmark',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Lesezeichen bearbeiten',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'edit Bookmark',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'bookmark',
|
||||
'phrase' => 'filterUpdated',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Filteraktion erfolgreich durchgeführt',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'filter updated successfully',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'bookmark',
|
||||
'phrase' => 'errorInputNecessary',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Eingabe eines Zeichens erforderlich',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'One character must be entered',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'bookmark',
|
||||
'phrase' => 'noFilter',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Kein Filter für Lesezeichen ausgewählt',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'No bookmark filter entered',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'bookmark',
|
||||
'phrase' => 'headerFilterBookmark',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Lesezeichen filtern',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Filter Bookmarks',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'bookmark',
|
||||
'phrase' => 'adminMode',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Inhalt kann nicht im Administrator Modus angezeigt werden.',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Content can not be displayed in administrator mode.',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
);
|
||||
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
$phrases = array(
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'calendar',
|
||||
'phrase' => 'kw',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'W',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'W',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'calendar',
|
||||
'phrase' => 'year_kw',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => '{year} KW {week}',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => '{year} W {week}',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'calendar',
|
||||
'phrase' => 'today',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Heute',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'today',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
/* Copyright (C) 2013 FH Technikum-Wien
|
||||
*
|
||||
* 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 2 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
$phrases = array(
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'captcha',
|
||||
'phrase' => 'label',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Tippen Sie die angezeigten<br>Zeichen in das untere Feld.',
|
||||
'description' => '',
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Enter the characters in<br>the field below.',
|
||||
'description' => '',
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'captcha',
|
||||
'phrase' => 'reload',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Ich kann das Bild nicht lesen - neu laden',
|
||||
'description' => '',
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Reload picture',
|
||||
'description' => '',
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
$phrases = array(
|
||||
|
||||
array (
|
||||
'app' => 'personalverwaltung',
|
||||
'category' => 'core',
|
||||
'phrase' => 'unternehmen',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Unternehmen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'company',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
@@ -0,0 +1,579 @@
|
||||
<?php
|
||||
|
||||
$phrases = array(
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dashboard',
|
||||
'phrase' => 'general',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Allgemein',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'General',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dashboard',
|
||||
'phrase' => 'addLine',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Weitere Zeile hinzufügen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Add another line',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dashboard',
|
||||
'phrase' => 'custom',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Benutzerdefiniert',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Custom',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dashboard',
|
||||
'phrase' => 'dashboardGeneralSectionDescription',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Hier befinden sich die vordefinierten Widgets',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Here are the predefined widgets',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dashboard',
|
||||
'phrase' => 'dashboardCustomSectionDescription',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Hier befinden sich die Widgets Ihrer persönlichen Anpassungen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Here are the widgets of your personal cutomizations',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dashboard',
|
||||
'phrase' => 'dashboardSectionDescription',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Hier befinden sich die Widgets der {0} Funktion',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Here are the widgets of the {0} function',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dashboard',
|
||||
'phrase' => 'success_savePreset',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Voreinstellung erfolgreich aktualisiert',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Preset successfully updated',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dashboard',
|
||||
'phrase' => 'alert_deleteWidget',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Sind Sie sicher, dass Sie dieses Widget löschen möchten?',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Are you sure you want to delete this widget?',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dashboard',
|
||||
'phrase' => 'edit',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Dashboard bearbeiten',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Edit dashboard',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dashboard',
|
||||
'phrase' => 'createWidget',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Neues Widget hinzufügen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Create new widget',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dashboard',
|
||||
'phrase' => 'noWidgetsAvailable',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Keine Widgets verfügbar',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'No Widgets available',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dashboard',
|
||||
'phrase' => 'widgetFromGeneralSection',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Dieses Widget ist für das Dashboard vordefiniert',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'This is a predefined widget of this dashboard',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dashboard',
|
||||
'phrase' => 'widgetFromCustomSection',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Dieses Widget wurde von Ihnen hinzugefügt',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'This widget has been added by you',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dashboard',
|
||||
'phrase' => 'widgetFromFunktionSection',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Dieses Widget wurde hinzugefügt weil Sie der "{0}" Funktion zugewiesen wurden',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'This widget has been added because you have been assigned to the "{0}" function',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dashboard',
|
||||
'phrase' => 'widget_pin',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Pin Widget',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Pin widget',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dashboard',
|
||||
'phrase' => 'widget_unpin',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Unpin Widget',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Unpin widget',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dashboard',
|
||||
'phrase' => 'widget_toggle_visiblity',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Sichtbarkeit des Widgets umschalten',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Toggle widget visibility',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dashboard',
|
||||
'phrase' => 'widget_move',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Widget verschieben',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Move widget',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dashboard',
|
||||
'phrase' => 'widget_resize',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Widgetgröße anpassen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Resize widget',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dashboard',
|
||||
'phrase' => 'widget_delete',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Widget löschen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Delete widget',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dashboard',
|
||||
'phrase' => 'widget_configure',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Widget konfigurieren',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Configure widget',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dashboard',
|
||||
'phrase' => 'widget_config_title',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => '"{name}" konfigurieren',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Configure "{name}"',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dashboard',
|
||||
'phrase' => 'widget_link',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Widget link',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Widget link',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
,
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dashboard',
|
||||
'phrase' => 'kurzbz',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Name',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Identifier',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
);
|
||||
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
/* Copyright (C) 2013 FH Technikum-Wien
|
||||
*
|
||||
* 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 2 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
$phrases = array(
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'dms',
|
||||
'phrase' => 'informationsblattExterneLehrende',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => '<a href="../../../cms/dms.php?id={DMS_ID_INFOBLATT_EXTERNE_LEHRENDE}" target="_blank">Informationsblatt für externe Lehrende</a>',
|
||||
'description' => '',
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => '<a href="../../../cms/dms.php?id={DMS_ID_INFOBLATT_EXTERNE_LEHRENDE}" target="_blank">Information sheet for external lecturers</a>',
|
||||
'description' => '',
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
@@ -0,0 +1,340 @@
|
||||
<?php
|
||||
|
||||
$phrases = array(
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'document_export',
|
||||
'phrase' => 'error_unoconv',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Unoconv nicht gefunden - Bitte installieren sie Unoconv',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Unoconv not found - Please install Unoconv',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'document_export',
|
||||
'phrase' => 'error_unoconv_version',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Unoconv Version konnte nicht ermittelt werden',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Could not get Unoconv Version',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'document_export',
|
||||
'phrase' => 'error_conv_timeout',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Dokumentenkonvertierung ist derzeit nicht möglich. Bitte versuchen Sie es in einer Minute erneut oder kontaktieren Sie einen Administrator',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Document conversion is currently not possible. Please try again in a minute or contact an administrator',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'document_export',
|
||||
'phrase' => 'error_sign_timeout',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Signaturserver ist derzeit nicht erreichbar',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Signature server is currently unavailable',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'document_export',
|
||||
'phrase' => 'error_sign_pdf',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Derzeit können nur PDFs signiert werden',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Currently only PDFs can be signed',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'document_export',
|
||||
'phrase' => 'error_outputformat_missing',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Ausgabeformat fehlt',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Outputformat is not defined',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'document_export',
|
||||
'phrase' => 'error_template_missing',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Keine Vorlage gefunden',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'No template found',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'document_export',
|
||||
'phrase' => 'error_headers',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Header wurden bereits gesendet -> Abbruch',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Header already sent -> Abort',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'document_export',
|
||||
'phrase' => 'error_file_copy',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Kopieren fehlgeschlagen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Copy failed',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'document_export',
|
||||
'phrase' => 'error_file_load',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Datei konnte nicht geladen werden',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Unable to load file',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'document_export',
|
||||
'phrase' => 'error_xml_load',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'XML konnte nicht geladen werden: {url} XML: {xml} PARAMETER: {params}',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Unable to load xml: {url} XML: {xml} PARAMS: {params}',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'document_export',
|
||||
'phrase' => 'error_xsl_load',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'XSL konnte nicht geladen werden',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Unable to load xsl',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'document_export',
|
||||
'phrase' => 'error_styles_load',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Styles XSL konnte nicht geladen werden',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Unable to load styles xsl',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'document_export',
|
||||
'phrase' => 'error_manifest',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Manifest ungültig',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Manifest file invalid',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
@@ -0,0 +1,603 @@
|
||||
<?php
|
||||
|
||||
$phrases = array(
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dokumente',
|
||||
'phrase' => 'title',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Titel',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'title',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dokumente',
|
||||
'phrase' => 'dokTyp',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Dokumententyp',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Document type',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dokumente',
|
||||
'phrase' => 'nachreichungAm',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Nachreichung am',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Submission on',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dokumente',
|
||||
'phrase' => 'dokDetails',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Dokumentendetails',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Document Details',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dokumente',
|
||||
'phrase' => 'anmerkung_person',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Anmerkung der Person',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Notes of the Person',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dokumente',
|
||||
'phrase' => 'dokumentAccept',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Akzeptieren',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Accept',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dokumente',
|
||||
'phrase' => 'dokumentUnaccept',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Entakzeptieren',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Unaccept',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dokumente',
|
||||
'phrase' => 'accepted',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Akzeptiert',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Accepted',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dokumente',
|
||||
'phrase' => 'unaccepted',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Nicht Akzeptiert',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Not Accepted',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dokumente',
|
||||
'phrase' => 'err_deleteDokHere',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Dieses Dokument darf hier nicht gelöscht werden',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'This document may not be deleted here',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dokumente',
|
||||
'phrase' => 'err_updateNotAllowed',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Es können nur Eintraege geändert werden zu denen Dokumente hochgeladen wurden',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Only entries to which documents have been uploaded can be changed',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dokumente',
|
||||
'phrase' => 'successAccepted',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Akzeptieren erfolgreich',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Successfully set to accepted',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dokumente',
|
||||
'phrase' => 'successUnaccepted',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Entakzeptieren erfolgreich',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Successfully set to unaccepted',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dokumente',
|
||||
'phrase' => 'successCountUnaccepted',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Entakzeptieren von {count} Dokument(en) erfolgreich',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => '{count} Document(s) successfully set to unaccepted',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dokumente',
|
||||
'phrase' => 'successCountAccepted',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Akzeptieren von {count} Dokument(en) erfolgreich',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => '{count} Document(s) successfully set to accepted',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dokumente',
|
||||
'phrase' => 'errorUnaccepted',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Fehler beim Entakzeptieren von Dokument {dokument_kurzbz}',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Error unaccepting document {dokument_kurzbz}',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dokumente',
|
||||
'phrase' => 'errorAccepted',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Fehler beim Akzeptieren von Dokument {dokument_kurzbz}',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Error Accepting document {dokument_kurzbz}',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dokumente',
|
||||
'phrase' => 'nachgereicht',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Nachgereicht',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Submitted later',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dokumente',
|
||||
'phrase' => 'vorhanden',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Vorhanden',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Available',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dokumente',
|
||||
'phrase' => 'datumAkzeptiert',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Akzeptiertdatum',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Accepted on',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dokumente',
|
||||
'phrase' => 'akzeptiertVon',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Akzeptiert von',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Accepted by',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dokumente',
|
||||
'phrase' => 'error_fileMissing',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Bitte eine Datei anhängen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Please attach a file',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dokumente',
|
||||
'phrase' => 'error_fileType',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Nur Dateitypen JPEG, PNG oder PDF sind erlaubt',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Only JPEG, PNG, or PDF files are allowed.',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dokumente',
|
||||
'phrase' => 'error_duplicateDokument_kurzbz',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Akzeptieren / Entakzeptieren von mehr als einem Dokument pro Dokumenttyp nicht zulässig',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Accepting / unaccepting more than one document per document type is not permitted',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'dokumente',
|
||||
'phrase' => 'dokument_erstellen',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Dokument erstellen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Create Document',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
)
|
||||
);
|
||||
@@ -0,0 +1,365 @@
|
||||
<?php
|
||||
/* Copyright (C) 2013 FH Technikum-Wien
|
||||
*
|
||||
* 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 2 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
$phrases = array(
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'eucovidqr',
|
||||
'phrase' => '3gNachweis',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "Zertifikat hochladen",
|
||||
'description' => '',
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "upload certificate",
|
||||
'description' => '',
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'eucovidqr',
|
||||
'phrase' => 'QrViaWebcam',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "QR-Code via Webcam scannen",
|
||||
'description' => '',
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "scan qr code via webcam",
|
||||
'description' => '',
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'eucovidqr',
|
||||
'phrase' => 'oder',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "oder",
|
||||
'description' => '',
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "or",
|
||||
'description' => '',
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'eucovidqr',
|
||||
'phrase' => 'ZertifikatAlsPdfHochladen',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "Zertifikat als PDF hochladen (nur mit QR-Code, kein gescanntes Zertifikat)",
|
||||
'description' => '',
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "upload certificate pdf (only with qrcode, no scanned certificate)",
|
||||
'description' => '',
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'eucovidqr',
|
||||
'phrase' => 'ValidierungsergebnisAktuellesGueltigkeitsdatum',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "Validierungsergebnis / gespeichertes Gültigkeitsdatum",
|
||||
'description' => '',
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "validation result / stored valid date",
|
||||
'description' => '',
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'eucovidqr',
|
||||
'phrase' => 'DateiZiehenUndAblegen',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "Datei hier hinziehen und ablegen",
|
||||
'description' => '',
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "drag & drop file here",
|
||||
'description' => '',
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'eucovidqr',
|
||||
'phrase' => 'KeinZugriffWebcam',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "Zugriff auf die Webcam nicht möglich!",
|
||||
'description' => '',
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "webcam access denied",
|
||||
'description' => '',
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'eucovidqr',
|
||||
'phrase' => 'gueltigBis',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "gültig bis",
|
||||
'description' => '',
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "valid to",
|
||||
'description' => '',
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'eucovidqr',
|
||||
'phrase' => 'ZertifikatUngueltig',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "Zertifikat ungültig",
|
||||
'description' => '',
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "certificate invalid",
|
||||
'description' => '',
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'eucovidqr',
|
||||
'phrase' => 'ZertifikatKonnteNichtGeprueftWerden',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "Das Zertifikat konnte nicht verifiziert werden. Stellen Sie bitte sicher, dass ein QR-Code enthalten ist.",
|
||||
'description' => '',
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "certificate could not be verified. Please make sure it contains a qr-code.",
|
||||
'description' => '',
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'eucovidqr',
|
||||
'phrase' => 'Laedt',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "Lädt",
|
||||
'description' => '',
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "loading",
|
||||
'description' => '',
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'eucovidqr',
|
||||
'phrase' => '3G',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "Covid19 Gültigkeitsdatum",
|
||||
'description' => '',
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "covid19 valid date",
|
||||
'description' => '',
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'eucovidqr',
|
||||
'phrase' => 'FehlerBeimSpeichernDesGueltigkeitsdatums',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "Fehler beim Speichern des Gültigkeitsdatum",
|
||||
'description' => '',
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "error saving valid date",
|
||||
'description' => '',
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'eucovidqr',
|
||||
'phrase' => 'PersondatenInFH-CompleteStimmenNichtMitDemZertifikatUeberein',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "Personendaten aus dem Zertifikat stimmen nicht dem angemeldeten Benutzer überein",
|
||||
'description' => '',
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "person data from certificate does not match the logged in user",
|
||||
'description' => '',
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'eucovidqr',
|
||||
'phrase' => 'UploadSuccessful',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "Das Gültigkeitsdatum wurde erfolgreich gespeichert.",
|
||||
'description' => '',
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "validity date has been successfully stored.",
|
||||
'description' => '',
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'eucovidqr',
|
||||
'phrase' => 'UploadFailed',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "Es wurde kein Gültigkeitsdatum gespeichert.",
|
||||
'description' => '',
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "validity date has not been stored.",
|
||||
'description' => '',
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'eucovidqr',
|
||||
'phrase' => 'uploadbeschreibung',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "Hier kann ein Digitales COVID-Zertifikat der EU mit QR-Code selbst erfasst werden.",
|
||||
'description' => '',
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "an EU Digital COVID Certificate with QR code can be self registered here.",
|
||||
'description' => '',
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'eucovidqr',
|
||||
'phrase' => 'manualbeschreibung',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "Falls das Zertifikat keinen QR-Code enthält oder die Selbst-Erfassung fehlschlägt, kann das Zertifkat beim Empfang manuell erfasst werden.",
|
||||
'description' => '',
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "if the certificate does not contain a QR code or self registration fails, the certificate can be manually registered at the front desk.",
|
||||
'description' => '',
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'eucovidqr',
|
||||
'phrase' => 'supportbeschreibung',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "Bei technischen Problemen kontaktieren Sie bitte: ",
|
||||
'description' => '',
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "in case of technical issues please contact: ",
|
||||
'description' => '',
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'eucovidqr',
|
||||
'phrase' => 'maxtagebeschreibung',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "ACHTUNG seit Februar 2022 werden Zutrittskarten für maximal 60 Tage freigeschalten.",
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "ATTENTION since February 2022 a maximum of 60 days validity is granted for accesscards",
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
@@ -0,0 +1,244 @@
|
||||
<?php
|
||||
|
||||
$phrases = array(
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'exam',
|
||||
'phrase' => 'add_pruefung',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Prüfung hinzufügen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Add exam',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'exam',
|
||||
'phrase' => 'edit_pruefung',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Prüfung bearbeiten',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Edit exam',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'exam',
|
||||
'phrase' => 'delete_pruefung',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Prüfung löschen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Delete exam',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'exam',
|
||||
'phrase' => 'newFromOld_pruefung',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Prüfungskopie für neue Prüfung erstellen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Copy exam',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'exam',
|
||||
'phrase' => 'hinweis_kommPrfg',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Bitte bei Neuanlage einer kommissionellen Prüfung das Datum der Noteneintragung (i. d. R. heute) eintragen, um den korrekten Fristenablauf der Wiederholung zu ermöglichen.',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'When creating a new examination before a committee, please enter the date of the grade entry (usually today) to ensure that the deadline for repeating the exam is met correctly.',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'exam',
|
||||
'phrase' => 'keineAuswahl',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'keine Auswahl',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'no selection',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'exam',
|
||||
'phrase' => 'hinweis_changeAfterExamDate',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'ACHTUNG! Diese Prüfungsnote wurde nicht ins Zeugnis übernommen da die Zeugnisnote nach dem Prüfungsdatum verändert wurde',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'ATTENTION! This exam grade was not included in the certificate because the certificate grade was changed after the exam date',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'exam',
|
||||
'phrase' => 'bitteLvteilWaehlen',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Bitte Lv_Teil wählen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Please select teaching unit',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'exam',
|
||||
'phrase' => 'punkte',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Punkte',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Points',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
array (
|
||||
'app' => 'core',
|
||||
'category' => 'exam',
|
||||
'phrase' => 'filter_currentSem',
|
||||
'insertvon' => 'system',
|
||||
'phrases' =>
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'sprache' => 'German',
|
||||
'text' => 'Nur aktuelles Studiensemester anzeigen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'sprache' => 'English',
|
||||
'text' => 'Display only current Semester',
|
||||
'description' => '',
|
||||
'insertvon' => 'system',
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user