mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-23 18:02:18 +00:00
Compare commits
431 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 03469edf3e | |||
| d89191b7f7 | |||
| dd9d712702 | |||
| 0764a597af | |||
| 8c36fe585a | |||
| d4b81da437 | |||
| b91efb6189 | |||
| 40757322e7 | |||
| f030465e50 | |||
| 6fb4461231 | |||
| 6cd4aebe8d | |||
| f20a9ec080 | |||
| d1461bfe54 | |||
| f274e26e91 | |||
| 2b527bccd2 | |||
| 41271711ec | |||
| 6287b6aef8 | |||
| 3e9d960781 | |||
| 5ce0232890 | |||
| cf4ec12c00 | |||
| d35eca919f | |||
| 61d133b2fd | |||
| 7cd438d188 | |||
| a733d9a861 | |||
| 33252de895 | |||
| fb388346bf | |||
| 32a2e7708f | |||
| c40fdb2c4f | |||
| 47b5eecb9b | |||
| b7fd7e4298 | |||
| 1af334989e | |||
| 4f541495ad | |||
| 9b75d8bb72 | |||
| edeb211247 | |||
| ddb702ae05 | |||
| 183ffdafd8 | |||
| 35d83942c0 | |||
| 26820d4891 | |||
| 776fd890ba | |||
| 1810bd40bd | |||
| b1c480286c | |||
| 258d7c474b | |||
| b094d7f3e1 | |||
| 5347cb1d63 | |||
| 77731ed559 | |||
| 0283c6ca43 | |||
| 8abb38123a | |||
| d1928d4151 | |||
| bcd8f11f35 | |||
| 5949527ee2 | |||
| ea19ba099e | |||
| 28f4a38752 | |||
| 8495c74a7d | |||
| 43a37021a5 | |||
| abeb411742 | |||
| aa2334afe7 | |||
| 667a00d64b | |||
| 4deed45f29 | |||
| 1ae072390e | |||
| 9eb2cb847d | |||
| 26fca87c75 | |||
| 859cb39a9d | |||
| 4e2c3f7741 | |||
| 325c84e6fe | |||
| 379880aef8 | |||
| 16186bbee8 | |||
| 50a5ce3dce | |||
| 941f336ac8 | |||
| 827b51045b | |||
| ee0fa9f7d4 | |||
| 7680a5c773 | |||
| 1e827fffee | |||
| 0468b2b523 | |||
| d6108d816e | |||
| f274b74ab1 | |||
| 029c51c2b2 | |||
| 356a5fb51b | |||
| 9b114c5fb1 | |||
| 00fae2fa15 | |||
| 6c8eb9ac38 | |||
| 2228b4d683 | |||
| 5558f6fc17 | |||
| 32fc029bd3 | |||
| f4e0516d89 | |||
| d98b7fd67a | |||
| 4b1a9fe892 | |||
| 118dcbd252 | |||
| d279f955a0 | |||
| 1e8ec83965 | |||
| f2d49e02a7 | |||
| 7169cb68a2 | |||
| f8da0b0915 | |||
| 4724008c2d | |||
| 34cd5d1a80 | |||
| 6f28696556 | |||
| 6ec4737b22 | |||
| 328affa35c | |||
| 4b875bf019 | |||
| 90c845899f | |||
| bb273d10bd | |||
| a6daa7bf0c | |||
| f0597e99e5 | |||
| 1d8c4b7159 | |||
| f860fd3dc7 | |||
| ee7254a964 | |||
| 5ffd22c1f7 | |||
| c58674d133 | |||
| 006393704c | |||
| 4825c75b5d | |||
| d82c186643 | |||
| 2f51f18447 | |||
| 5b34a226bd | |||
| 1c69f3f654 | |||
| f6fd5ab678 | |||
| 3d1aef617f | |||
| e12b7e1ed5 | |||
| d9d3b1a245 | |||
| ce27964df9 | |||
| 0496eb7cc9 | |||
| 556683574c | |||
| 962cbf4e78 | |||
| 5415180b2c | |||
| 9d789d9a97 | |||
| 3d061df1d7 | |||
| 827b6148a7 | |||
| 3831f3c1d7 | |||
| 60294dd8f2 | |||
| 9d5adc1ed2 | |||
| 632866c8c4 | |||
| 7f029ec8b5 | |||
| d9d15c1ed3 | |||
| a9b343646e | |||
| fd35d20955 | |||
| 34b00f8dd6 | |||
| 043b1bcf11 | |||
| 5c1e967d5e | |||
| 664b0a81bb | |||
| aec0e5227f | |||
| fa807f37ae | |||
| 8f62d0d351 | |||
| e016deb042 | |||
| ed170645df | |||
| 3a441228b8 | |||
| 0a97e5781e | |||
| 3465e299f7 | |||
| 136d6f9f28 | |||
| 67838eb630 | |||
| 609e226057 | |||
| ffaff361b7 | |||
| d17206fe40 | |||
| 34e8b2e36d | |||
| fbea5a9306 | |||
| 6da19585ff | |||
| e13a7069dc | |||
| f4ae8dd8e1 | |||
| 1cd332115b | |||
| 0bf9d8fa8a | |||
| 464f04b254 | |||
| 2a63b99816 | |||
| 2aca2cd6ab | |||
| ee619004bd | |||
| 1eda652fba | |||
| cc302ed5a1 | |||
| f2308a32c8 | |||
| c8cb484299 | |||
| fc0fdc7909 | |||
| 3053289146 | |||
| 7c67e65c9b | |||
| a4dcf9e935 | |||
| 6f99f493ea | |||
| 023c2a10be | |||
| f6b13c0bdf | |||
| a7cd6c35f1 | |||
| e0082db7c9 | |||
| 87ff7acef0 | |||
| 936858948b | |||
| 18c949eed4 | |||
| d192489c6f | |||
| 7028fe0ac8 | |||
| a3a03f6362 | |||
| 82f0f3f5e3 | |||
| 8b9601502a | |||
| 888bb1c7c0 | |||
| 372c932c47 | |||
| 6391bf5a45 | |||
| d774335bcf | |||
| 69749da331 | |||
| b4f28d5426 | |||
| 0442a3da0a | |||
| 2492a4fc06 | |||
| 9ae9feb9ea | |||
| a535fd85cd | |||
| 269860252e | |||
| d0faba03a2 | |||
| 88a06194d4 | |||
| 3e1b9865b1 | |||
| 3534118261 | |||
| 5d73f051ba | |||
| 85a10e27cc | |||
| 8c22a652fa | |||
| a70e25d0e8 | |||
| e689531224 | |||
| 3ab1a002f0 | |||
| b9eaac18b0 | |||
| b26df9ac21 | |||
| 0539281adf | |||
| 1b35569797 | |||
| e01d814ae9 | |||
| 77abcb6129 | |||
| 63f198098d | |||
| f7478ff05c | |||
| 99ea6ad333 | |||
| 366cb16b61 | |||
| 683626921b | |||
| 326d4b3923 | |||
| f2107a377f | |||
| fbe10cc2a1 | |||
| 783c4fc5f8 | |||
| f1aa5382cf | |||
| e3b630550a | |||
| 8903fa878c | |||
| 7fe36d59e3 | |||
| c724c6a20f | |||
| b9bfa5c3c5 | |||
| 101613ecdd | |||
| edd0c46186 | |||
| 07dd9e3a77 | |||
| 06139b14d6 | |||
| 3e46e94736 | |||
| fc468ca34a | |||
| 84db668566 | |||
| 3c82cd1282 | |||
| 709f64e292 | |||
| 5dcf8bb854 | |||
| 709aba5783 | |||
| afc4544304 | |||
| 0a2afadb0a | |||
| f867e60702 | |||
| 668f0a6618 | |||
| 48cd37058e | |||
| 4d97127539 | |||
| c9bcf9b9b0 | |||
| 2471d37dd3 | |||
| ad7808eb21 | |||
| 9a07e7c804 | |||
| 6c82741341 | |||
| c3f7f7223a | |||
| fbd0a4685e | |||
| eb15d6b841 | |||
| bbb90f6dc4 | |||
| e89fcbab31 | |||
| 7c1f239dcb | |||
| cc0f38b276 | |||
| a56335f4f9 | |||
| 954c55ba3e | |||
| c7250959d0 | |||
| 6c8318ead2 | |||
| 3095f7ea8b | |||
| 8f98d0c5a1 | |||
| 13232015c3 | |||
| db861e81b2 | |||
| 7eb147085f | |||
| 80175f46cb | |||
| 3d82d69bfc | |||
| f845809e6b | |||
| 1ce362b66b | |||
| 47d4b2e2d4 | |||
| 67b03dd29f | |||
| 47e3c83909 | |||
| 1b4158af2d | |||
| a7d6fbdc8b | |||
| 2a84999e56 | |||
| 756a51defa | |||
| 735a6654b9 | |||
| 635da9f8d9 | |||
| f40f554c6b | |||
| b4668aa6bc | |||
| eade9b7beb | |||
| 1176c8d6e4 | |||
| bb689a6d48 | |||
| 43497b186d | |||
| e1959b9e40 | |||
| e78482e947 | |||
| ca152dc1ea | |||
| ec7ebc8286 | |||
| 035e844fab | |||
| e7a737b7aa | |||
| e3c1287664 | |||
| 0c5af137db | |||
| 541d6d78cc | |||
| 7747857583 | |||
| 6359dc0fc9 | |||
| aee6ace42e | |||
| 095d5acbc5 | |||
| 96be1789b5 | |||
| 8888b6991f | |||
| 9ac7ff2a4c | |||
| f4ca34f247 | |||
| 3b7ed523b4 | |||
| c447fb9632 | |||
| 352638ed90 | |||
| 3730be991a | |||
| a4fee77301 | |||
| 96fdc357de | |||
| 6cd0e3a574 | |||
| 7a2d2f2826 | |||
| 707cb414a2 | |||
| c722008b17 | |||
| f4b9b9e3ae | |||
| 1120b823d2 | |||
| ff7878b68a | |||
| f89a53b156 | |||
| cff71ec829 | |||
| 8b851221b0 | |||
| 2920c68f05 | |||
| 74937db204 | |||
| 410f0c4b6a | |||
| 0b6dc34220 | |||
| cef0046acd | |||
| a61d5b1d62 | |||
| b1a1cdf235 | |||
| 3878fce625 | |||
| 3d51753419 | |||
| 4e02df8629 | |||
| ef19a065c5 | |||
| 18854de6fd | |||
| 6fc39e9ef5 | |||
| a4d3015367 | |||
| c78eef8af5 | |||
| eafe5da311 | |||
| ac1e0a8aa3 | |||
| 259c2aec14 | |||
| 6a7de7417b | |||
| c12678ca5a | |||
| 84bfea0be9 | |||
| f074503266 | |||
| 1e082792bb | |||
| 7c3b717542 | |||
| 7755dc12d0 | |||
| 0d2e41cf2f | |||
| 15a9379c6e | |||
| 40512edef0 | |||
| e9c039dad2 | |||
| 12fba4f2ca | |||
| c7f2b145bf | |||
| 14aad56d5e | |||
| 601c4367dc | |||
| 70c230edce | |||
| d294d17e37 | |||
| d88cc77a5c | |||
| 61600e78b6 | |||
| ea0b69d4c2 | |||
| 0309c04ae0 | |||
| 3c3e920573 | |||
| d389cf87b8 | |||
| 09864c5154 | |||
| f03411c668 | |||
| 204ae1a469 | |||
| d2f21ba4e6 | |||
| 842dabc1e7 | |||
| 67281c84ed | |||
| 3a6c8dfd2d | |||
| 450789ed72 | |||
| 3549fc1b1b | |||
| 06788bafc8 | |||
| 984d81edb6 | |||
| 1e23b6de61 | |||
| e79bb607d9 | |||
| dab34eff35 | |||
| 890b50c830 | |||
| c796536417 | |||
| 3664428467 | |||
| 845c75b775 | |||
| 5326f961c6 | |||
| 14f5a651a4 | |||
| ce9f0536d6 | |||
| 48f7a04d81 | |||
| 4e598a321d | |||
| 9067f0e00a | |||
| 4099d91a1b | |||
| 49ca538381 | |||
| 5f1c7537fb | |||
| 1bb10ddeb1 | |||
| 49e89f44be | |||
| e5cf417ac0 | |||
| a560c335b8 | |||
| ea85cce957 | |||
| 1f0fe08b69 | |||
| 63390b192c | |||
| e97c26022f | |||
| 483662726d | |||
| 703872adc9 | |||
| e2d6e5d9c8 | |||
| 4a8868a709 | |||
| 10399db372 | |||
| 179b50c798 | |||
| ec1960e839 | |||
| a942423e84 | |||
| 3ca49c5574 | |||
| d1e35b1851 | |||
| 46a10bd92e | |||
| b4d5e1c90a | |||
| 411b97fa14 | |||
| 56e8a34d68 | |||
| 8c69bc1682 | |||
| 2eef05e593 | |||
| a56a804692 | |||
| a8f47fad45 | |||
| 6f60d7c99e | |||
| 7d2da9e7f6 | |||
| 8925692dd4 | |||
| d4feee8914 | |||
| bb476bb257 | |||
| 7b74c36952 | |||
| 31af28a7c4 | |||
| f3527dc8ff | |||
| 660f9076ce | |||
| 24682fb559 | |||
| 295e2aa3e5 | |||
| 0d0071e8bf | |||
| 9c0baeacf2 | |||
| ffc99379ae | |||
| 35d8f0524d | |||
| 07e6146e50 | |||
| 5751441424 | |||
| 023fafde2c | |||
| 2d0285e31d | |||
| 9fd9c4e94d | |||
| 40baa7e08c | |||
| b1452698f8 | |||
| 6e9ee7cf81 |
@@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
$filterCmptArray = array(
|
||||||
|
"app" => 'core',
|
||||||
|
'datasetName' => 'vertragsverwaltung',
|
||||||
|
'query' => '
|
||||||
|
SELECT
|
||||||
|
uid,
|
||||||
|
person_id,
|
||||||
|
vorname,
|
||||||
|
nachname,
|
||||||
|
gebdatum,
|
||||||
|
vertragsarten,
|
||||||
|
unternehmen,
|
||||||
|
ids,
|
||||||
|
aktiv
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
b.uid , p.person_id,
|
||||||
|
p.vorname, p.nachname,
|
||||||
|
gebdatum,
|
||||||
|
STRING_AGG(DISTINCT va.bezeichnung, \', \') AS Vertragsarten,
|
||||||
|
STRING_AGG(DISTINCT u.bezeichnung, \', \') AS Unternehmen,
|
||||||
|
STRING_AGG(d.dienstverhaeltnis_id::TEXT, \', \') AS ids,
|
||||||
|
b.aktiv
|
||||||
|
FROM
|
||||||
|
hr.tbl_dienstverhaeltnis d
|
||||||
|
JOIN public.tbl_benutzer b ON d.mitarbeiter_uid = b.uid
|
||||||
|
JOIN public.tbl_person p ON p.person_id = b.person_id
|
||||||
|
JOIN public.tbl_organisationseinheit u ON d.oe_kurzbz = u.oe_kurzbz
|
||||||
|
JOIN hr.tbl_vertragsart va ON d.vertragsart_kurzbz = va.vertragsart_kurzbz
|
||||||
|
GROUP BY b.uid, p.person_id, p.vorname, p.nachname, b.aktiv
|
||||||
|
) as vertragsdaten
|
||||||
|
',
|
||||||
|
'requiredPermissions' => 'vertrag/mitarbeiter'
|
||||||
|
);
|
||||||
@@ -6,30 +6,30 @@ use CI3_Events as Events;
|
|||||||
Events::on('loadRenderers', function ($renderers) {
|
Events::on('loadRenderers', function ($renderers) {
|
||||||
$fhc_core_renderers =& $renderers();
|
$fhc_core_renderers =& $renderers();
|
||||||
$fhc_core_renderers["lehreinheit"] = array(
|
$fhc_core_renderers["lehreinheit"] = array(
|
||||||
'calendarEvent' => APP_ROOT.'public/js/components/Cis/Renderer/Lehreinheit/calendarEvent.js',
|
'calendarEvent' => absoluteJsImportUrl('public/js/components/Cis/Renderer/Lehreinheit/calendarEvent.js'),
|
||||||
'modalTitle' => APP_ROOT.'public/js/components/Cis/Renderer/Lehreinheit/modalTitle.js',
|
'modalTitle' => absoluteJsImportUrl('public/js/components/Cis/Renderer/Lehreinheit/modalTitle.js'),
|
||||||
'modalContent' => APP_ROOT.'public/js/components/Cis/Renderer/Lehreinheit/modalContent.js',
|
'modalContent' => absoluteJsImportUrl('public/js/components/Cis/Renderer/Lehreinheit/modalContent.js'),
|
||||||
'calendarEventStyles' => APP_ROOT.'public/css/Cis4/CoreCalendarEvents.css'
|
'calendarEventStyles' => APP_ROOT . 'public/css/Cis4/CoreCalendarEvents.css'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
Events::on('loadRenderers', function ($renderers) {
|
Events::on('loadRenderers', function ($renderers) {
|
||||||
$fhc_core_renderers =& $renderers();
|
$fhc_core_renderers =& $renderers();
|
||||||
$fhc_core_renderers["reservierung"] = array(
|
$fhc_core_renderers["reservierung"] = array(
|
||||||
'calendarEvent' => APP_ROOT.'public/js/components/Cis/Renderer/Reservierungen/calendarEvent.js',
|
'calendarEvent' => absoluteJsImportUrl('public/js/components/Cis/Renderer/Reservierungen/calendarEvent.js'),
|
||||||
'modalTitle' => APP_ROOT.'public/js/components/Cis/Renderer/Reservierungen/modalTitle.js',
|
'modalTitle' => absoluteJsImportUrl('public/js/components/Cis/Renderer/Reservierungen/modalTitle.js'),
|
||||||
'modalContent' => APP_ROOT.'public/js/components/Cis/Renderer/Reservierungen/modalContent.js',
|
'modalContent' => absoluteJsImportUrl('public/js/components/Cis/Renderer/Reservierungen/modalContent.js'),
|
||||||
'calendarEventStyles' => APP_ROOT.'public/css/Cis4/CoreCalendarEvents.css'
|
'calendarEventStyles' => APP_ROOT . 'public/css/Cis4/CoreCalendarEvents.css'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
Events::on('loadRenderers', function ($renderers) {
|
Events::on('loadRenderers', function ($renderers) {
|
||||||
$fhc_core_renderers =& $renderers();
|
$fhc_core_renderers =& $renderers();
|
||||||
$fhc_core_renderers["ferien"] = array(
|
$fhc_core_renderers["ferien"] = array(
|
||||||
'calendarEvent' => APP_ROOT.'public/js/components/Cis/Renderer/Feiertage/calendarEvent.js',
|
'calendarEvent' => absoluteJsImportUrl('public/js/components/Cis/Renderer/Feiertage/calendarEvent.js'),
|
||||||
'modalTitle' => APP_ROOT.'public/js/components/Cis/Renderer/Feiertage/modalTitle.js',
|
'modalTitle' => absoluteJsImportUrl('public/js/components/Cis/Renderer/Feiertage/modalTitle.js'),
|
||||||
'modalContent' => APP_ROOT.'public/js/components/Cis/Renderer/Feiertage/modalContent.js',
|
'modalContent' => absoluteJsImportUrl('public/js/components/Cis/Renderer/Feiertage/modalContent.js'),
|
||||||
'calendarEventStyles' => APP_ROOT.'public/css/Cis4/CoreCalendarEvents.css'
|
'calendarEventStyles' => APP_ROOT . 'public/css/Cis4/CoreCalendarEvents.css'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
$config['turnitin_link'] = 'https://technikum-wien.turnitin.com/sso/sp/redwood/saml/5IyfmBr2OcSIaWQTKlFCGj/start';
|
||||||
|
|
||||||
|
$config['old_abgabe_beurteilung_link'] = 'https://moodle.technikum-wien.at/mod/page/view.php?id=1005052';
|
||||||
|
|
||||||
|
$config['PAABGABE_EMAIL_JOB_INTERVAL'] = '1 day';
|
||||||
|
// used as APP_ROOT.URL_STUDENTS -> cis4
|
||||||
|
$config['URL_STUDENTS'] = 'cis.php/Cis/Abgabetool/Student';
|
||||||
|
// used as APP_ROOT.URL_MITARBEITER -> old cis
|
||||||
|
$config['URL_MITARBEITER'] = 'index.ci.php/Cis/Abgabetool/Mitarbeiter';
|
||||||
|
// used as APP_ROOT.URL_MITARBEITER -> old cis
|
||||||
|
$config['URL_ASSISTENZ'] = 'index.ci.php/Cis/Abgabetool/Assistenz';
|
||||||
|
|
||||||
|
// lehre.tbl_paabgabetyp bezeichnung
|
||||||
|
//$config['ALLOWED_ABGABETYPEN_BETREUER'] = ['Zwischenabgabe', 'Quality Gate 1', 'Quality Gate 2'];
|
||||||
|
$config['ALLOWED_ABGABETYPEN_BETREUER'] = ['abstract','zwischen', 'qualgate1', 'qualgate2']; // tbl_paabgabetyp pk
|
||||||
|
// paabgabetypen for which betreuer is benachrichtigt via sammelmail
|
||||||
|
$config['RELEVANT_PAABGABETYPEN_SAMMELMAIL_BETREUER'] = ['qualgate1', 'qualgate2', 'end'];
|
||||||
|
// paabgabetypen for which assistenz is benachrichtigt via sammelmail
|
||||||
|
$config['RELEVANT_PAABGABETYPEN_SAMMELMAIL_ASSISTENZ'] = ['end'];
|
||||||
|
// paabgabetypen for which student is benachrichtigt via sammelmail -> basically all of them but still defined for consistency
|
||||||
|
$config['RELEVANT_PAABGABETYPEN_SAMMELMAIL_STUDENT'] = ['qualgate1', 'qualgate2', 'zwischen', 'note', 'abstract', 'end', 'enda'];
|
||||||
|
//$config['ALLOWED_NOTEN_ABGABETOOL'] = ['Bestanden', 'Nicht bestanden'];
|
||||||
|
$config['ALLOWED_NOTEN_ABGABETOOL'] = [10, 14]; // tbl_note pk
|
||||||
|
// benotete projektarbeiten sperren weitere terminanlage & bearbeitung, diese noten sind ausnahmen dieser Regel
|
||||||
|
// wie zB "Nicht beurteilt" & "Noch nicht eingetragen"
|
||||||
|
$config['NONFINAL_NOTEN_ABGABETOOL'] = [9];
|
||||||
|
$config['beurteilung_link_fallback'] = 'addons/fhtw/content/projektbeurteilung/projektbeurteilungDocumentExport.php?projektarbeit_id=?&betreuerart_kurzbz=?&person_id=?';
|
||||||
|
|
||||||
|
$config['PROJEKTARBEITSBEURTEILUNG_MAIL_BASELINK_ERSTBEGUTACHTER'] = 'index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/ProjektarbeitsbeurteilungErstbegutachter';
|
||||||
|
$config['PROJEKTARBEITSBEURTEILUNG_MAIL_BASELINK_ZWEITBEGUTACHTER'] = 'index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/ProjektarbeitsbeurteilungErstbegutachter';
|
||||||
|
|
||||||
|
$config['SIGNATUR_CHECK_PAABGABETYPEN'] = ['end'];
|
||||||
|
|
||||||
|
// to be used as "https://moodle.technikum-wien.at/course/view.php?idnumber=dl{$stg_kz}" for stg specific moodle routing
|
||||||
|
$config['STG_MOODLE_LINK'] = 'https://moodle.technikum-wien.at/course/view.php?idnumber=dl';
|
||||||
|
|
||||||
|
$config['ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT'] = true;
|
||||||
|
$config['ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER'] = true;
|
||||||
|
|
||||||
|
$config['BETREUER_SAMMELMAIL_BUTTON_STUDENT'] = true;
|
||||||
@@ -4,7 +4,7 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
|
|||||||
|
|
||||||
|
|
||||||
// CMS Content Id for CIS4 Menu Root
|
// CMS Content Id for CIS4 Menu Root
|
||||||
$config['cis_menu_root_content_id'] = 11087;
|
$config['cis_menu_root_content_id'] = 11091;
|
||||||
// send Mails for ProfilUpdate
|
// send Mails for ProfilUpdate
|
||||||
$config['cis_send_profil_update_mails'] = true;
|
$config['cis_send_profil_update_mails'] = true;
|
||||||
// Vilesci CI BaseUrl
|
// Vilesci CI BaseUrl
|
||||||
|
|||||||
@@ -7,3 +7,6 @@ $config['use_vuejs_dev_version'] = false;
|
|||||||
$config['use_bundled_javascript'] = false;
|
$config['use_bundled_javascript'] = false;
|
||||||
// systemerror_mailto use in FHC-Alert Plugin - if empty Link will not be rendered
|
// systemerror_mailto use in FHC-Alert Plugin - if empty Link will not be rendered
|
||||||
$config['systemerror_mailto'] = '';
|
$config['systemerror_mailto'] = '';
|
||||||
|
// use fhcomplete_build_version as path element after public (requires apache mod_rewrite)
|
||||||
|
// see <fhc_base_dir>/public/.htaccess_sample for details
|
||||||
|
$config['use_fhcomplete_build_version_in_path'] = false;
|
||||||
|
|||||||
@@ -163,6 +163,13 @@ $config['navigation_header'] = array(
|
|||||||
'expand' => true,
|
'expand' => true,
|
||||||
'sort' => 50,
|
'sort' => 50,
|
||||||
'requiredPermissions' => 'lehre/gruppenmanager:r'
|
'requiredPermissions' => 'lehre/gruppenmanager:r'
|
||||||
|
),
|
||||||
|
'vertragsverwaltung' => array(
|
||||||
|
'link' => site_url('vertragsverwaltung'),
|
||||||
|
'description' => 'Vertragsverwaltung',
|
||||||
|
'expand' => true,
|
||||||
|
'sort' => 51,
|
||||||
|
'requiredPermissions' => 'vertrag/mitarbeiter:r'
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
@@ -335,6 +342,18 @@ $config['navigation_menu']['system/issues/Issues/*'] = array(
|
|||||||
'target' => '_blank',
|
'target' => '_blank',
|
||||||
'requiredPermissions' => array('admin:rw')
|
'requiredPermissions' => array('admin:rw')
|
||||||
),
|
),
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
$config['navigation_menu']['vertragsverwaltung/*'] = array(
|
||||||
|
'vertragsverwaltung' => array(
|
||||||
|
'link' => site_url('vertragsverwaltung'),
|
||||||
|
'description' => 'Vertragsverwaltung',
|
||||||
|
'icon' => 'home',
|
||||||
|
'sort' => 100,
|
||||||
|
'target' => '_blank',
|
||||||
|
'requiredPermissions' => array('vertrag/mitarbeiter:r')
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
$config['navigation_menu']['apps'] = [
|
$config['navigation_menu']['apps'] = [
|
||||||
|
|||||||
@@ -65,6 +65,13 @@ $route['Cis/LvPlan/.*'] = 'Cis/LvPlan/index/$1';
|
|||||||
$route['Cis/MyLvPlan/.*'] = 'Cis/MyLvPlan/index/$1';
|
$route['Cis/MyLvPlan/.*'] = 'Cis/MyLvPlan/index/$1';
|
||||||
$route['Cis/MyLv/.*'] = 'Cis/MyLv/index/$1';
|
$route['Cis/MyLv/.*'] = 'Cis/MyLv/index/$1';
|
||||||
|
|
||||||
|
$route['Abgabetool/Assistenz'] = 'Cis/Abgabetool/Assistenz';
|
||||||
|
$route['Abgabetool/Assistenz/(:any)'] = 'Cis/Abgabetool/Assistenz/$1';
|
||||||
|
$route['Abgabetool/Mitarbeiter'] = 'Cis/Abgabetool/Mitarbeiter';
|
||||||
|
$route['Abgabetool/Student'] = 'Cis/Abgabetool/Student';
|
||||||
|
$route['Abgabetool/Student/(:any)'] = 'Cis/Abgabetool/Student/$1';
|
||||||
|
$route['Abgabetool/Deadlines'] = 'Cis/Abgabetool/Deadlines';
|
||||||
|
|
||||||
// Studierendenverwaltung List Routes
|
// Studierendenverwaltung List Routes
|
||||||
$route['api/frontend/v1/stv/[sS]tudents/inout'] = 'api/frontend/v1/stv/Students/index';
|
$route['api/frontend/v1/stv/[sS]tudents/inout'] = 'api/frontend/v1/stv/Students/index';
|
||||||
$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})'] = 'api/frontend/v1/stv/Students/index';
|
$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})'] = 'api/frontend/v1/stv/Students/index';
|
||||||
|
|||||||
@@ -130,3 +130,16 @@ $config['students_tab_order'] = [
|
|||||||
'combinePeople',
|
'combinePeople',
|
||||||
'archive',
|
'archive',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
$config['stv_prestudent_tags'] = [
|
||||||
|
'prioone' => ['readonly' => false],
|
||||||
|
'priotwo' => ['readonly' => true],
|
||||||
|
'hinweis' => ['readonly' => false],
|
||||||
|
'hinweis_assistenz' => ['readonly' => true],
|
||||||
|
'hinweis_kf' => ['readonly' => true],
|
||||||
|
'hinweis_lehrende' => ['readonly' => false],
|
||||||
|
'hinweis_stg_kf' => ['readonly' => true],
|
||||||
|
'finished_stg' => ['readonly' => true],
|
||||||
|
'finished_kf' => ['readonly' => true],
|
||||||
|
'inwork_kf' => ['readonly' => true],
|
||||||
|
];
|
||||||
|
|||||||
@@ -14,10 +14,10 @@ class Abgabetool extends Auth_Controller
|
|||||||
{
|
{
|
||||||
parent::__construct([
|
parent::__construct([
|
||||||
'index' => self::PERM_LOGGED,
|
'index' => self::PERM_LOGGED,
|
||||||
'getStudentProjektarbeitAbgabeFile' => self::PERM_LOGGED,
|
'Mitarbeiter' => array('basis/abgabe_lektor:rw', 'basis/abgabe_assistenz:rw'),
|
||||||
'Mitarbeiter' => self::PERM_LOGGED,
|
'Assistenz' => array('basis/abgabe_assistenz:rw'),
|
||||||
'Student' => self::PERM_LOGGED,
|
'Student' => array('basis/abgabe_student:rw', 'basis/abgabe_lektor:rw', 'basis/abgabe_assistenz:rw'),
|
||||||
'Deadlines' => self::PERM_LOGGED
|
'Deadlines' => array('basis/abgabe_lektor:rw', 'basis/abgabe_assistenz:rw')
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -29,80 +29,69 @@ class Abgabetool extends Auth_Controller
|
|||||||
*/
|
*/
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
|
// TODO: routing from index based on berechtigung?
|
||||||
|
|
||||||
$viewData = array(
|
$viewData = array(
|
||||||
'uid'=>getAuthUID(),
|
'uid'=>getAuthUID(),
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'Abgabetool']);
|
if(defined('CIS4') && CIS4) {
|
||||||
|
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'Abgabetool']);
|
||||||
|
} else {
|
||||||
|
$this->load->view('Cis/Abgabetool.php', ['uid' => getAuthUID(), 'route' => 'Abgabetool']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function Student()
|
public function Student($student_uid_prop = '')
|
||||||
{
|
{
|
||||||
|
|
||||||
$viewData = array(
|
$viewData = array(
|
||||||
'uid'=>getAuthUID(),
|
'uid'=>getAuthUID(),
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'AbgabetoolStudent']);
|
if(defined('CIS4') && CIS4) {
|
||||||
|
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'AbgabetoolStudent']);
|
||||||
|
} else {
|
||||||
|
$this->load->view('Cis/Abgabetool.php', ['uid' => getAuthUID(), 'route' => 'AbgabetoolStudent', 'student_uid_prop' => $student_uid_prop]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function Mitarbeiter()
|
public function Mitarbeiter()
|
||||||
|
{
|
||||||
|
$viewData = array(
|
||||||
|
'uid'=>getAuthUID(),
|
||||||
|
);
|
||||||
|
|
||||||
|
if(defined('CIS4') && CIS4) {
|
||||||
|
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'AbgabetoolMitarbeiter']);
|
||||||
|
} else {
|
||||||
|
$this->load->view('Cis/Abgabetool.php', ['uid' => getAuthUID(), 'route' => 'AbgabetoolMitarbeiter']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function Assistenz($stg_kz_prop = '')
|
||||||
{
|
{
|
||||||
|
|
||||||
$viewData = array(
|
$viewData = array(
|
||||||
'uid'=>getAuthUID(),
|
'uid'=>getAuthUID(),
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'AbgabetoolMitarbeiter']);
|
if(defined('CIS4') && CIS4) {
|
||||||
|
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'AbgabetoolAssistenz']);
|
||||||
|
} else {
|
||||||
|
$this->load->view('Cis/Abgabetool.php', ['uid' => getAuthUID(), 'route' => 'AbgabetoolAssistenz', 'stg_kz_prop' => $stg_kz_prop]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function Deadlines()
|
public function Deadlines()
|
||||||
{
|
{
|
||||||
|
|
||||||
$viewData = array(
|
$viewData = array(
|
||||||
'uid'=>getAuthUID(),
|
'uid'=>getAuthUID(),
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'DeadlinesOverview']);
|
if(defined('CIS4') && CIS4) {
|
||||||
}
|
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'DeadlinesOverview']);
|
||||||
|
|
||||||
|
|
||||||
public function getStudentProjektarbeitAbgabeFile()
|
|
||||||
{
|
|
||||||
$this->_ci =& get_instance();
|
|
||||||
$this->_ci->load->helper('download');
|
|
||||||
|
|
||||||
$paabgabe_id = $this->_ci->input->get('paabgabe_id');
|
|
||||||
$student_uid = $this->_ci->input->get('student_uid');
|
|
||||||
|
|
||||||
if (!isset($paabgabe_id) || isEmptyString($paabgabe_id) || !isset($student_uid) || isEmptyString($student_uid))
|
|
||||||
$this->terminateWithJsonError($this->p->t('global', 'wrongParameters'), 'general');
|
|
||||||
|
|
||||||
$this->_ci->load->model('education/Projektarbeit_model', 'ProjektarbeitModel');
|
|
||||||
|
|
||||||
$isZugeteilterBetreuer = count($this->_ci->ProjektarbeitModel->checkZuordnung($student_uid, getAuthUID())->retval) > 0;
|
|
||||||
|
|
||||||
if(getAuthUID() == $student_uid || $isZugeteilterBetreuer) {
|
|
||||||
$file_path = PAABGABE_PATH.$paabgabe_id.'_'.$student_uid.'.pdf';
|
|
||||||
if(file_exists($file_path)) {
|
|
||||||
|
|
||||||
header('Content-Description: File Transfer');
|
|
||||||
header('Content-Type: application/octet-stream');
|
|
||||||
header('Expires: 0');
|
|
||||||
header('Cache-Control: must-revalidate');
|
|
||||||
header('Pragma: public');
|
|
||||||
header('Content-Disposition: attachment; filename="'.basename($file_path).'"');
|
|
||||||
header('Content-Length: ' . filesize($file_path));
|
|
||||||
|
|
||||||
flush(); // send headers first just in case
|
|
||||||
readfile($file_path); // read file content to output buffer
|
|
||||||
|
|
||||||
} else {
|
|
||||||
$this->terminateWithJsonError('File not found');
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
$this->terminateWithJsonError('Keine Zuordnung!');
|
$this->load->view('Cis/Abgabetool.php', ['uid' => getAuthUID(), 'route' => 'DeadlinesOverview']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,9 +33,4 @@ class MyLv extends Auth_Controller
|
|||||||
|
|
||||||
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'MyLv']);
|
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'MyLv']);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function Info($studien_semester,$lvid)
|
|
||||||
{
|
|
||||||
$this->load->view('Cis/LvInfo',['lvid'=> $lvid, 'studien_semester' => $studien_semester]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,13 +28,13 @@ class Studentenverwaltung extends Auth_Controller
|
|||||||
'basis/prestudentstatus' => $this->permissionlib->isBerechtigt('basis/prestudentstatus'),
|
'basis/prestudentstatus' => $this->permissionlib->isBerechtigt('basis/prestudentstatus'),
|
||||||
'assistenz_stgs' => $this->permissionlib->getSTG_isEntitledFor('assistenz'),
|
'assistenz_stgs' => $this->permissionlib->getSTG_isEntitledFor('assistenz'),
|
||||||
'admin' => $this->permissionlib->isBerechtigt('admin'),
|
'admin' => $this->permissionlib->isBerechtigt('admin'),
|
||||||
'assistenz_schreibrechte' => $this->permissionlib->isBerechtigt('assistenz','suid'),
|
'assistenz_schreibrechte' => $this->permissionlib->isBerechtigt('assistenz', 'suid'),
|
||||||
'student/keine_studstatuspruefung' => $this->permissionlib->isBerechtigt('student/keine_studstatuspruefung'),
|
'student/keine_studstatuspruefung' => $this->permissionlib->isBerechtigt('student/keine_studstatuspruefung'),
|
||||||
'lehre/reihungstestAufsicht' => $this->permissionlib->isBerechtigt('lehre/reihungstestAufsicht'),
|
'lehre/reihungstestAufsicht' => $this->permissionlib->isBerechtigt('lehre/reihungstestAufsicht'),
|
||||||
'system/change_outputformat' => $this->permissionlib->getOE_isEntitledFor('system/change_outputformat'),
|
'system/change_outputformat' => $this->permissionlib->getOE_isEntitledFor('system/change_outputformat'),
|
||||||
'student/editBakkZgv' => $this->permissionlib->isBerechtigt('student/editBakkZgv'),
|
'student/editBakkZgv' => $this->permissionlib->getSTG_isEntitledFor('student/editBakkZgv') ?: array(),
|
||||||
'student/editMakkZgv' => $this->permissionlib->isBerechtigt('student/editMakkZgv'),
|
'student/editMakkZgv' => $this->permissionlib->getSTG_isEntitledFor('student/editMakkZgv') ?: array(),
|
||||||
'student/editDokZgv' => $this->permissionlib->isBerechtigt('student/editDokZgv'),
|
'student/editDokZgv' => $this->permissionlib->getSTG_isEntitledFor('student/editDokZgv') ?: array(),
|
||||||
'student/editBismelden' => $this->permissionlib->isBerechtigt('student/editBismelden')
|
'student/editBismelden' => $this->permissionlib->isBerechtigt('student/editBismelden')
|
||||||
],
|
],
|
||||||
'variables' => [
|
'variables' => [
|
||||||
@@ -43,3 +43,5 @@ class Studentenverwaltung extends Auth_Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
class Vertragsverwaltung extends Auth_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$permissions = [];
|
||||||
|
$router = load_class('Router');
|
||||||
|
$permissions[$router->method] = ['vertrag/mitarbeiter:r'];
|
||||||
|
#$permissions[$router->method] = ['admin:rw'];
|
||||||
|
parent::__construct($permissions);
|
||||||
|
|
||||||
|
// Load Libraries
|
||||||
|
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function _remap()
|
||||||
|
{
|
||||||
|
$this->load->view('Vertragsverwaltung', [
|
||||||
|
'permissions' => [
|
||||||
|
'vertragsverwaltung_schreibrechte' => $this->permissionlib->isBerechtigt('vertrag/mitarbeiter', 'suid')
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -38,34 +38,9 @@ class Lehre extends FHCAPI_Controller
|
|||||||
parent::__construct([
|
parent::__construct([
|
||||||
'lvStudentenMail' => self::PERM_LOGGED,
|
'lvStudentenMail' => self::PERM_LOGGED,
|
||||||
'LV' => self::PERM_LOGGED,
|
'LV' => self::PERM_LOGGED,
|
||||||
'Pruefungen' => self::PERM_LOGGED,
|
'Pruefungen' => self::PERM_LOGGED
|
||||||
'getStudentProjektarbeiten' => self::PERM_LOGGED, // TODO: abgabetool berechtigung?
|
|
||||||
'getStudentProjektabgaben' => self::PERM_LOGGED,
|
|
||||||
'postStudentProjektarbeitZwischenabgabe' => self::PERM_LOGGED,
|
|
||||||
'postStudentProjektarbeitEndupload' => self::PERM_LOGGED,
|
|
||||||
'getMitarbeiterProjektarbeiten' => self::PERM_LOGGED,
|
|
||||||
'postProjektarbeitAbgabe' => self::PERM_LOGGED,
|
|
||||||
'deleteProjektarbeitAbgabe' => self::PERM_LOGGED,
|
|
||||||
'postSerientermin' => self::PERM_LOGGED,
|
|
||||||
'fetchDeadlines' => self::PERM_LOGGED // TODO: mitarbeiter recht prüfen
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->load->library('PhrasesLib');
|
|
||||||
|
|
||||||
$this->loadPhrases(
|
|
||||||
array(
|
|
||||||
'global',
|
|
||||||
'ui',
|
|
||||||
'abgabetool'
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->load->helper('hlp_sancho_helper');
|
|
||||||
|
|
||||||
require_once(FHCPATH . 'include/studiengang.class.php');
|
|
||||||
require_once(FHCPATH . 'include/student.class.php');
|
|
||||||
require_once(FHCPATH . 'include/projektarbeit.class.php');
|
|
||||||
require_once(FHCPATH . 'include/projektbetreuer.class.php');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
@@ -125,557 +100,5 @@ class Lehre extends FHCAPI_Controller
|
|||||||
|
|
||||||
$this->terminateWithSuccess($result);
|
$this->terminateWithSuccess($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* fetches all projektabgabetermine for a given projektarbeit_id used in cis4 student abgabetool
|
|
||||||
*/
|
|
||||||
public function getStudentProjektabgaben() {
|
|
||||||
$projektarbeit_id = $this->input->get("projektarbeit_id",TRUE);
|
|
||||||
|
|
||||||
// TODO: error messages
|
|
||||||
|
|
||||||
if (!isset($projektarbeit_id) || isEmptyString($projektarbeit_id))
|
|
||||||
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
|
||||||
|
|
||||||
$projektarbeit_obj = new projektarbeit();
|
|
||||||
if($projektarbeit_id==-1)
|
|
||||||
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
|
||||||
|
|
||||||
if(!$projektarbeit_obj->load($projektarbeit_id))
|
|
||||||
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
|
||||||
|
|
||||||
$paIsCurrent = $projektarbeit_obj->projektarbeitIsCurrent($projektarbeit_id);
|
|
||||||
|
|
||||||
$this->load->model('education/Projektarbeit_model', 'ProjektarbeitModel');
|
|
||||||
$ret = $this->ProjektarbeitModel->getProjektarbeitAbgabetermine($projektarbeit_id);
|
|
||||||
|
|
||||||
// TODO: fetch zweitbetreuer
|
|
||||||
|
|
||||||
$this->terminateWithSuccess(array($ret, $paIsCurrent));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* fetches all projektarbeiten and betreuer for a given student_uid used in cis4 student abgabetool
|
|
||||||
*/
|
|
||||||
public function getStudentProjektarbeiten($uid)
|
|
||||||
{
|
|
||||||
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
|
|
||||||
$this->load->model('education/Projektarbeit_model', 'ProjektarbeitModel');
|
|
||||||
|
|
||||||
if (!isset($uid) || isEmptyString($uid))
|
|
||||||
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
|
||||||
|
|
||||||
$isZugeteilterBetreuer = count($this->ProjektarbeitModel->checkZuordnung($uid, getAuthUID())->retval) > 0;
|
|
||||||
$this->addMeta('isZugeteilterBetreuer', $isZugeteilterBetreuer);
|
|
||||||
$isMitarbeiter = $this->MitarbeiterModel->isMitarbeiter(getAuthUID());
|
|
||||||
|
|
||||||
if ($isMitarbeiter && $isZugeteilterBetreuer){
|
|
||||||
$projektarbeiten = $this->ProjektarbeitModel->getStudentProjektarbeitenWithBetreuer($uid);
|
|
||||||
} else {
|
|
||||||
$projektarbeiten = $this->ProjektarbeitModel->getStudentProjektarbeitenWithBetreuer(getAuthUID());
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->terminateWithSuccess(array($projektarbeiten, DOMAIN, $uid));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* projektarbeit - upload for zwischenabgaben in cis4 student abgabetool
|
|
||||||
*/
|
|
||||||
public function postStudentProjektarbeitZwischenabgabe()
|
|
||||||
{
|
|
||||||
|
|
||||||
$projektarbeit_id = $_POST['projektarbeit_id'];
|
|
||||||
$paabgabe_id = $_POST['paabgabe_id'];
|
|
||||||
$student_uid = $_POST['student_uid'];
|
|
||||||
$bperson_id = $_POST['bperson_id'];
|
|
||||||
$paabgabetyp_kurzbz = $_POST['paabgabetyp_kurzbz'];
|
|
||||||
|
|
||||||
if (!isset($projektarbeit_id) || isEmptyString($projektarbeit_id)
|
|
||||||
|| !isset($paabgabe_id) || isEmptyString($paabgabe_id)
|
|
||||||
|| !isset($student_uid) || isEmptyString($student_uid)
|
|
||||||
|| !isset($paabgabetyp_kurzbz) || isEmptyString($paabgabetyp_kurzbz))
|
|
||||||
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
|
||||||
|
|
||||||
if ((isset($_FILES) and isset($_FILES['file']) and ! $_FILES['file']['error'])) {
|
|
||||||
move_uploaded_file($_FILES['file']['tmp_name'], PAABGABE_PATH.$paabgabe_id.'_'.$student_uid.'.pdf');
|
|
||||||
|
|
||||||
if(file_exists(PAABGABE_PATH.$paabgabe_id.'_'.$student_uid.'.pdf')) {
|
|
||||||
|
|
||||||
exec('chmod 640 "'.PAABGABE_PATH.$paabgabe_id.'_'.$student_uid.'.pdf'.'"');
|
|
||||||
|
|
||||||
$this->load->model('education/Paabgabe_model', 'PaabgabeModel');
|
|
||||||
$res = $this->PaabgabeModel->update($paabgabe_id, array(
|
|
||||||
'abgabedatum' => date('Y-m-d'),
|
|
||||||
'updatevon' => getAuthUID(),
|
|
||||||
'updateamum' => date('Y-m-d H:i:s')
|
|
||||||
));
|
|
||||||
|
|
||||||
$this->sendUploadEmail($bperson_id, $projektarbeit_id, $paabgabetyp_kurzbz, $student_uid);
|
|
||||||
$this->terminateWithSuccess($res);
|
|
||||||
} else {
|
|
||||||
$this->terminateWithError('Error moving File');
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
$this->terminateWithError('File missing');
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* upload für finale abgaben aka Endupload in cis4 student abgabetool
|
|
||||||
*/
|
|
||||||
public function postStudentProjektarbeitEndupload()
|
|
||||||
{
|
|
||||||
|
|
||||||
$projektarbeit_id = $_POST['projektarbeit_id'];
|
|
||||||
$paabgabe_id = $_POST['paabgabe_id'];
|
|
||||||
$student_uid = $_POST['student_uid'];
|
|
||||||
$sprache = $_POST['sprache'];
|
|
||||||
$abstract = $_POST['abstract'];
|
|
||||||
$abstract_en = $_POST['abstract_en'];
|
|
||||||
$schlagwoerter = $_POST['schlagwoerter'];
|
|
||||||
$schlagwoerter_en = $_POST['schlagwoerter_en'];
|
|
||||||
$seitenanzahl = $_POST['seitenanzahl'];
|
|
||||||
$bperson_id = $_POST['bperson_id'];
|
|
||||||
$paabgabetyp_kurzbz = $_POST['paabgabetyp_kurzbz'];
|
|
||||||
|
|
||||||
if (!isset($projektarbeit_id) || isEmptyString($projektarbeit_id)
|
|
||||||
|| !isset($paabgabe_id) || isEmptyString($paabgabe_id)
|
|
||||||
|| !isset($student_uid) || isEmptyString($student_uid)
|
|
||||||
|| !isset($paabgabetyp_kurzbz) || isEmptyString($paabgabetyp_kurzbz))
|
|
||||||
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
|
||||||
|
|
||||||
// TODO: maybe check for other params aswell?
|
|
||||||
|
|
||||||
if ((isset($_FILES) and isset($_FILES['file']) and ! $_FILES['file']['error'])) {
|
|
||||||
move_uploaded_file($_FILES['file']['tmp_name'], PAABGABE_PATH.$paabgabe_id.'_'.$student_uid.'.pdf');
|
|
||||||
|
|
||||||
if(file_exists(PAABGABE_PATH.$paabgabe_id.'_'.$student_uid.'.pdf')) {
|
|
||||||
|
|
||||||
// Loads Libraries
|
|
||||||
$this->load->library('SignatureLib');
|
|
||||||
|
|
||||||
// Check if the document is signed
|
|
||||||
$signaturVorhanden = true;
|
|
||||||
$signList = SignatureLib::list(PAABGABE_PATH.$paabgabe_id.'_'.$student_uid.'.pdf');
|
|
||||||
if (is_array($signList) && count($signList) > 0)
|
|
||||||
{
|
|
||||||
// The document is signed
|
|
||||||
$uploadedDocumentSigned = 'The document is signed';
|
|
||||||
}
|
|
||||||
elseif ($signList === null)
|
|
||||||
{
|
|
||||||
$uploadedDocumentSigned = 'WARNING: signature server error';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$signaturVorhanden = false;
|
|
||||||
$uploadedDocumentSigned = 'No document signature found';
|
|
||||||
}
|
|
||||||
$this->addMeta('signaturInfo', $uploadedDocumentSigned);
|
|
||||||
|
|
||||||
if ($signaturVorhanden === false)
|
|
||||||
{
|
|
||||||
$this->signaturFehltEmail($student_uid);
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO error handle get data has data the updates
|
|
||||||
// update projektarbeit cols
|
|
||||||
$this->load->model('education/Projektarbeit_model', 'ProjektarbeitModel');
|
|
||||||
$this->ProjektarbeitModel->updateProjektarbeit($projektarbeit_id,$sprache,$abstract,$abstract_en
|
|
||||||
,$schlagwoerter, $schlagwoerter_en, $seitenanzahl);
|
|
||||||
|
|
||||||
|
|
||||||
// update paabgabe datum
|
|
||||||
$this->load->model('education/Paabgabe_model', 'PaabgabeModel');
|
|
||||||
$res = $this->PaabgabeModel->update($paabgabe_id, array(
|
|
||||||
'abgabedatum' => date('Y-m-d'),
|
|
||||||
'updatevon' => getAuthUID(),
|
|
||||||
'updateamum' => date('Y-m-d H:i:s')
|
|
||||||
));
|
|
||||||
|
|
||||||
$this->sendUploadEmail($bperson_id, $projektarbeit_id, $paabgabetyp_kurzbz, $student_uid);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess($res);
|
|
||||||
} else {
|
|
||||||
$this->terminateWithError('Error moving File');
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
$this->terminateWithError('File missing');
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private function signaturFehltEmail($student_uid) {
|
|
||||||
|
|
||||||
|
|
||||||
// Mail an Studiengang wenn keine Signatur gefunden wurde
|
|
||||||
$student = new student();
|
|
||||||
if(!$student->load($student_uid))
|
|
||||||
$this->terminateWithError($this->p->t('global','userNichtGefunden'), 'general');
|
|
||||||
|
|
||||||
$stg_obj = new studiengang();
|
|
||||||
if(!$stg_obj->load($student->studiengang_kz))
|
|
||||||
$this->terminateWithError($this->p->t('global','fehlerBeimLesenAusDatenbank'), 'general');
|
|
||||||
|
|
||||||
$subject = 'Abgabe ohne Signatur';
|
|
||||||
$tomail = $stg_obj->email;
|
|
||||||
$data = array(
|
|
||||||
'vorname' => $student->vorname,
|
|
||||||
'nachname' => $student->nachname,
|
|
||||||
'studiengang' => $stg_obj->bezeichnung
|
|
||||||
);
|
|
||||||
|
|
||||||
$mailres = sendSanchoMail(
|
|
||||||
'ParbeitsbeurteilungSiganturFehlt',
|
|
||||||
$data,
|
|
||||||
$tomail,
|
|
||||||
$subject,
|
|
||||||
'sancho_header_min_bw.jpg',
|
|
||||||
'sancho_footer_min_bw.jpg'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function sendUploadEmail($bperson_id, $projektarbeit_id, $paabgabetyp_kurzbz, $student_uid) {
|
|
||||||
|
|
||||||
$this->load->model('education/Projektarbeit_model', 'ProjektarbeitModel');
|
|
||||||
|
|
||||||
$resBetr = $this->ProjektarbeitModel->getProjektbetreuerAnrede($bperson_id);
|
|
||||||
|
|
||||||
$projektarbeit_obj = new projektarbeit();
|
|
||||||
|
|
||||||
if(!$projektarbeit_obj->load($projektarbeit_id))
|
|
||||||
$this->terminateWithError('Ungueltiger Eintrag');
|
|
||||||
|
|
||||||
$num_rows_sem = $projektarbeit_obj->projektarbeitIsCurrent($projektarbeit_id);
|
|
||||||
|
|
||||||
if( null === $num_rows_sem || false === $num_rows_sem )
|
|
||||||
{
|
|
||||||
$this->terminateWithError($this->p->t('abgabetool','fehlerAktualitaetProjektarbeit'), 'general');
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach($resBetr->retval as $betreuerRow) {
|
|
||||||
|
|
||||||
// query student benutzer view for every betreuer row
|
|
||||||
$studentUser = $this->ProjektarbeitModel->getProjektarbeitBenutzer($student_uid)->retval[0];
|
|
||||||
|
|
||||||
// TODO: hasdata, getData etc
|
|
||||||
|
|
||||||
// 1. Begutachter mail ohne Token
|
|
||||||
$mail_baselink = APP_ROOT."index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/ProjektarbeitsbeurteilungErstbegutachter";
|
|
||||||
$mail_fulllink = "$mail_baselink?projektarbeit_id=".$projektarbeit_id."&uid=".$studentUser->uid;
|
|
||||||
$projekttyp_kurzbz = $projektarbeit_obj->projekttyp_kurzbz;
|
|
||||||
$subject = $projektarbeit_obj->projekttyp_kurzbz == 'Diplom' ? 'Masterarbeitsbetreuung' : 'Bachelorarbeitsbetreuung';
|
|
||||||
$abgabetyp = $paabgabetyp_kurzbz == 'end' ? 'Endabgabe' : 'Zwischenabgabe';
|
|
||||||
|
|
||||||
$maildata = array();
|
|
||||||
$maildata['geehrt'] = "geehrte".($betreuerRow->anrede=="Herr"?"r":"");
|
|
||||||
$maildata['anrede'] = $betreuerRow->anrede;
|
|
||||||
$maildata['betreuer_voller_name'] = $betreuerRow->first;
|
|
||||||
$maildata['student_anrede'] = $studentUser->anrede;
|
|
||||||
$maildata['student_voller_name'] = trim($studentUser->titelpre." ".$studentUser->vorname." ".$studentUser->nachname." ".$studentUser->titelpost);
|
|
||||||
$maildata['abgabetyp'] = $abgabetyp;
|
|
||||||
$maildata['parbeituebersichtlink'] = "<p><a href='".APP_ROOT."cis/private/lehre/abgabe_lektor_frameset.html'>Zur Projektarbeitsübersicht</a></p>";
|
|
||||||
$maildata['bewertunglink'] = $num_rows_sem >= 1 && $paabgabetyp_kurzbz == 'end' ? "<p><a href='$mail_fulllink'>Zur Beurteilung der Arbeit</a></p>" : "";
|
|
||||||
$maildata['token'] = "";
|
|
||||||
|
|
||||||
$mailres = sendSanchoMail(
|
|
||||||
'ParbeitsbeurteilungEndupload',
|
|
||||||
$maildata,
|
|
||||||
$betreuerRow->mitarbeiter_uid."@".DOMAIN,
|
|
||||||
$subject,
|
|
||||||
'sancho_header_min_bw.jpg',
|
|
||||||
'sancho_footer_min_bw.jpg',
|
|
||||||
get_uid()."@".DOMAIN);
|
|
||||||
|
|
||||||
if(!$mailres)
|
|
||||||
{
|
|
||||||
$this->terminateWithError($this->p->t('abgabetool', 'fehlerMailBegutachter'), 'general');
|
|
||||||
}
|
|
||||||
|
|
||||||
// 2. Begutachter mail, wenn Endabgabe, mit Token wenn extern
|
|
||||||
if ($paabgabetyp_kurzbz == 'end')
|
|
||||||
{
|
|
||||||
// Zweitbegutachter holen
|
|
||||||
$zweitbegutachter = new projektbetreuer();
|
|
||||||
$zweitbegutachterRes = $zweitbegutachter->getZweitbegutachterWithToken($bperson_id, $projektarbeit_id, $studentUser->uid);
|
|
||||||
|
|
||||||
if ($zweitbegutachterRes)
|
|
||||||
{
|
|
||||||
$zweitbegutachterResults = $zweitbegutachter->result;
|
|
||||||
|
|
||||||
foreach ($zweitbegutachterResults as $begutachter)
|
|
||||||
{
|
|
||||||
// token generieren, wenn noch nicht vorhanden und notwendig (wird in methode überprüft)
|
|
||||||
$tokenGenRes = $zweitbegutachter->generateZweitbegutachterToken($begutachter->person_id, $projektarbeit_id);
|
|
||||||
|
|
||||||
if (!$tokenGenRes)
|
|
||||||
{
|
|
||||||
$this->terminateWithError($this->p->t('abgabetool', 'fehlerMailZweitBegutachter'), 'general');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Zweitbegutachter (evtl. mit Token) holen
|
|
||||||
$zweitbegutachterMitToken = new projektbetreuer();
|
|
||||||
$begutachterMitTokenRes = $zweitbegutachterMitToken->getZweitbegutachterWithToken($bperson_id, $projektarbeit_id, $studentUser->uid, $begutachter->person_id);
|
|
||||||
|
|
||||||
if (!$begutachterMitTokenRes)
|
|
||||||
{
|
|
||||||
$this->terminateWithError($this->p->t('abgabetool', 'fehlerMailZweitBegutachter'), 'general');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Email an Zweitbegutachter senden
|
|
||||||
if (isset($zweitbegutachterMitToken->result[0]))
|
|
||||||
{
|
|
||||||
$begutachterMitToken = $zweitbegutachterMitToken->result[0];
|
|
||||||
|
|
||||||
$path = $begutachterMitToken->betreuerart_kurzbz == 'Zweitbegutachter' ? 'ProjektarbeitsbeurteilungZweitbegutachter' : 'ProjektarbeitsbeurteilungErstbegutachter';
|
|
||||||
$mail_baselink = APP_ROOT."index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/$path";
|
|
||||||
$mail_fulllink = "$mail_baselink?projektarbeit_id=".$projektarbeit_id."&uid=".$studentUser->uid;
|
|
||||||
$intern = isset($begutachterMitToken->uid);
|
|
||||||
$mail_link = $intern ? $mail_fulllink : $mail_baselink;
|
|
||||||
|
|
||||||
$zweitbetmaildata = array();
|
|
||||||
$zweitbetmaildata['geehrt'] = "geehrte" . ($begutachterMitToken->anrede == "Herr" ? "r" : "");
|
|
||||||
$zweitbetmaildata['anrede'] = $begutachterMitToken->anrede;
|
|
||||||
$zweitbetmaildata['betreuer_voller_name'] = $begutachterMitToken->voller_name;
|
|
||||||
$zweitbetmaildata['student_anrede'] = $maildata['student_anrede'];
|
|
||||||
$zweitbetmaildata['student_voller_name'] = $maildata['student_voller_name'];
|
|
||||||
$zweitbetmaildata['abgabetyp'] = $abgabetyp;
|
|
||||||
$zweitbetmaildata['parbeituebersichtlink'] = $intern ? $maildata['parbeituebersichtlink'] : "";
|
|
||||||
$zweitbetmaildata['bewertunglink'] = $num_rows_sem >= 1 ? "<p><a href='$mail_link'>Zur Beurteilung der Arbeit</a></p>" : "";
|
|
||||||
$zweitbetmaildata['token'] = $num_rows_sem >= 1 && isset($begutachterMitToken->zugangstoken) && !$intern ? "<p>Zugangstoken: " . $begutachterMitToken->zugangstoken . "</p>" : "";
|
|
||||||
|
|
||||||
$mailres = sendSanchoMail(
|
|
||||||
'ParbeitsbeurteilungEndupload',
|
|
||||||
$zweitbetmaildata,
|
|
||||||
$begutachterMitToken->email,
|
|
||||||
$subject,
|
|
||||||
'sancho_header_min_bw.jpg',
|
|
||||||
'sancho_footer_min_bw.jpg',
|
|
||||||
get_uid()."@".DOMAIN
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!$mailres)
|
|
||||||
{
|
|
||||||
$this->terminateWithError($this->p->t('abgabetool', 'fehlerMailBegutachter'), 'general');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getMitarbeiterProjektarbeiten() {
|
|
||||||
$this->load->model('education/Projektarbeit_model', 'ProjektarbeitModel');
|
|
||||||
|
|
||||||
$boolParamStr = $this->input->get('showall');
|
|
||||||
$trueStrings = ['true', '1'];
|
|
||||||
$falseStrings = ['false', '0'];
|
|
||||||
|
|
||||||
// Handle missing or invalid parameter
|
|
||||||
if ($boolParamStr === null) {
|
|
||||||
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
|
||||||
}
|
|
||||||
$boolParamStrLower = strtolower($boolParamStr);
|
|
||||||
|
|
||||||
if (in_array($boolParamStrLower, $trueStrings, true)) {
|
|
||||||
$showAllBool = true;
|
|
||||||
} elseif (in_array($boolParamStrLower, $falseStrings, true)) {
|
|
||||||
$showAllBool = false;
|
|
||||||
} else {
|
|
||||||
// $this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
|
||||||
}
|
|
||||||
|
|
||||||
$projektarbeiten = $this->ProjektarbeitModel->getMitarbeiterProjektarbeiten(getAuthUID(), $showAllBool);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess(array($projektarbeiten, DOMAIN));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function postProjektarbeitAbgabe() {
|
|
||||||
$projektarbeit_id = $_POST['projektarbeit_id'];
|
|
||||||
$paabgabe_id = $_POST['paabgabe_id'];
|
|
||||||
$paabgabetyp_kurzbz = $_POST['paabgabetyp_kurzbz'];
|
|
||||||
$datum = $_POST['datum'];
|
|
||||||
$fixtermin = $_POST['fixtermin'];
|
|
||||||
$kurzbz = $_POST['kurzbz'];
|
|
||||||
|
|
||||||
if (!isset($projektarbeit_id) || isEmptyString($projektarbeit_id)
|
|
||||||
|| !isset($paabgabe_id) || isEmptyString($paabgabe_id)
|
|
||||||
|| !isset($datum) || isEmptyString($datum)
|
|
||||||
|| !isset($datum) || isEmptyString($datum)
|
|
||||||
|| !isset($paabgabetyp_kurzbz) || isEmptyString($paabgabetyp_kurzbz))
|
|
||||||
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
|
||||||
|
|
||||||
$this->load->model('education/Paabgabe_model', 'PaabgabeModel');
|
|
||||||
|
|
||||||
if($paabgabe_id == -1) {
|
|
||||||
$result = $this->PaabgabeModel->insert(
|
|
||||||
array(
|
|
||||||
'projektarbeit_id' => $projektarbeit_id,
|
|
||||||
'paabgabetyp_kurzbz' => $paabgabetyp_kurzbz,
|
|
||||||
'fixtermin' => $fixtermin,
|
|
||||||
'datum' => $datum,
|
|
||||||
'kurzbz' => $kurzbz,
|
|
||||||
'insertvon' => getAuthUID(),
|
|
||||||
'insertamum' => date('Y-m-d H:i:s')
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess($result);
|
|
||||||
} else {
|
|
||||||
$result = $this->PaabgabeModel->update(
|
|
||||||
$paabgabe_id,
|
|
||||||
array(
|
|
||||||
'paabgabetyp_kurzbz' => $paabgabetyp_kurzbz,
|
|
||||||
'datum' => $datum,
|
|
||||||
'kurzbz' => $kurzbz,
|
|
||||||
'updatevon' => getAuthUID(),
|
|
||||||
'updateamum' => date('Y-m-d H:i:s')
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess($result);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function deleteProjektarbeitAbgabe() {
|
|
||||||
$paabgabe_id = $_POST['paabgabe_id'];
|
|
||||||
|
|
||||||
if (!isset($paabgabe_id) || isEmptyString($paabgabe_id))
|
|
||||||
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
|
||||||
|
|
||||||
$this->load->model('education/Paabgabe_model', 'PaabgabeModel');
|
|
||||||
|
|
||||||
$result = $this->PaabgabeModel->load($paabgabe_id);
|
|
||||||
$result = $this->getDataOrTerminateWithError($result);
|
|
||||||
|
|
||||||
if(count($result) == 0)
|
|
||||||
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
|
||||||
|
|
||||||
// TODO: berechtigung?
|
|
||||||
if($result[0]->insertvon === getAuthUID()) {
|
|
||||||
$result = $this->PaabgabeModel->delete($paabgabe_id);
|
|
||||||
$result = $this->getDataOrTerminateWithError($result);
|
|
||||||
$this->terminateWithSuccess($result);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* endpoint for adding the same paabgabe for multiple projektarbeiten
|
|
||||||
* can be slow for large n since it queries twice per projektarbeit_id
|
|
||||||
*/
|
|
||||||
public function postSerientermin() {
|
|
||||||
$projektarbeit_ids = $_POST['projektarbeit_ids'];
|
|
||||||
$datum = $_POST['datum'];
|
|
||||||
$paabgabetyp_kurzbz = $_POST['paabgabetyp_kurzbz'];
|
|
||||||
$bezeichnung = $_POST['bezeichnung'];
|
|
||||||
$kurzbz = $_POST['kurzbz'];
|
|
||||||
|
|
||||||
if (!isset($projektarbeit_ids) || !is_array($projektarbeit_ids) || empty($projektarbeit_ids)
|
|
||||||
|| !isset($datum) || isEmptyString($datum)
|
|
||||||
|| !isset($kurzbz) || isEmptyString($kurzbz)
|
|
||||||
|| !isset($bezeichnung) || isEmptyString($bezeichnung)
|
|
||||||
|| !isset($paabgabetyp_kurzbz) || isEmptyString($paabgabetyp_kurzbz))
|
|
||||||
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
|
||||||
|
|
||||||
// old script checks if there already are tbl_paabgabe entries with exact date, type & kurzbz
|
|
||||||
// for each termin - good to check that in principle but should not matter in this place. if necessary
|
|
||||||
// duplicate abgabetermine can be easily deleted manually, also via cronjob@night.
|
|
||||||
|
|
||||||
// since this entry includes the kurzbz string match, it should have only ever mattered when there were
|
|
||||||
// multiple users entering the exact same set of (date, type, kurzbz) - which is a much more narrow case than the
|
|
||||||
// general "saveMultiple" function should handle
|
|
||||||
|
|
||||||
// old script afterwards again queries if user is not the zweitbetreuer of any id - this is blocked in the ui
|
|
||||||
// and should never unintentionally happen
|
|
||||||
|
|
||||||
// TODO: check berechtigung &/|| zuordnung?
|
|
||||||
|
|
||||||
$this->load->model('education/Paabgabe_model', 'PaabgabeModel');
|
|
||||||
$this->load->model('education/Projektarbeit_model', 'ProjektarbeitModel');
|
|
||||||
|
|
||||||
$res = [];
|
|
||||||
foreach ($projektarbeit_ids as $projektarbeit_id) {
|
|
||||||
|
|
||||||
$result = $this->PaabgabeModel->insert(
|
|
||||||
array(
|
|
||||||
'projektarbeit_id' => $projektarbeit_id,
|
|
||||||
'paabgabetyp_kurzbz' => $paabgabetyp_kurzbz,
|
|
||||||
'fixtermin' => false,
|
|
||||||
'datum' => $datum,
|
|
||||||
'kurzbz' => $kurzbz,
|
|
||||||
'insertvon' => getAuthUID(),
|
|
||||||
'insertamum' => date('Y-m-d H:i:s')
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
|
||||||
|
|
||||||
// $res[] = $data;
|
|
||||||
|
|
||||||
// send mail to student
|
|
||||||
$result = $this->ProjektarbeitModel->getStudentInfoForProjektarbeitId($projektarbeit_id);
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
|
||||||
|
|
||||||
// $this->addMeta('emaildata'.$projektarbeit_id, $data);
|
|
||||||
|
|
||||||
$datetime = new DateTime($datum);
|
|
||||||
$dateEmailFormatted = $datetime->format('d.m.Y');
|
|
||||||
|
|
||||||
$anredeFillString = $data[0]->anrede=="Herr"?"r":"";
|
|
||||||
|
|
||||||
$fullFormattedNameString = trim($data[0]->titelpre." ".$data[0]->vorname." ".$data[0]->nachname." ".$data[0]->titelpost);
|
|
||||||
$res[] = $fullFormattedNameString;
|
|
||||||
|
|
||||||
// Prepare mail content
|
|
||||||
$body_fields = array(
|
|
||||||
'anrede' => $data[0]->anrede,
|
|
||||||
'anredeFillString' => $anredeFillString,
|
|
||||||
'datum' => $dateEmailFormatted,
|
|
||||||
'bezeichnung' => $bezeichnung,
|
|
||||||
'fullFormattedNameString' => $fullFormattedNameString,
|
|
||||||
'kurzbz' => $kurzbz
|
|
||||||
);
|
|
||||||
|
|
||||||
$email = $data[0]->uid."@".DOMAIN;
|
|
||||||
|
|
||||||
sendSanchoMail(
|
|
||||||
'neuerAbgabetermin',
|
|
||||||
$body_fields,
|
|
||||||
$email,
|
|
||||||
$this->p->t('abgabetool', 'neuerTerminBachelorMasterbetreuung')
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->terminateWithSuccess($res);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public function fetchDeadlines() {
|
|
||||||
$person_id = $_POST['person_id'];
|
|
||||||
|
|
||||||
if (!isset($person_id) || isEmptyString($person_id))
|
|
||||||
$person_id = getAuthPersonId();
|
|
||||||
|
|
||||||
|
|
||||||
if($person_id !== getAuthPersonId()) {
|
|
||||||
$this->load->library('PermissionLib');
|
|
||||||
$isAdmin = $this->permissionlib->isBerechtigt('admin');
|
|
||||||
if(!$isAdmin) $this->terminateWithError($this->p->t('ui', 'keineBerechtigung'), 'general');
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->load->model('education/Paabgabe_model', 'PaabgabeModel');
|
|
||||||
$result = $this->PaabgabeModel->getDeadlines($person_id);
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess($data);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ class Studium extends FHCAPI_Controller
|
|||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
parent::__construct([
|
parent::__construct([
|
||||||
'getAllStudienSemester'=> self::PERM_LOGGED,
|
'getStudienAllSemester'=> self::PERM_LOGGED,
|
||||||
'getStudiengaengeForStudienSemester'=> self::PERM_LOGGED,
|
'getStudiengaengeForStudienSemester'=> self::PERM_LOGGED,
|
||||||
'getStudienplaeneBySemester'=> self::PERM_LOGGED,
|
'getStudienplaeneBySemester'=> self::PERM_LOGGED,
|
||||||
'getLvEvaluierungInfo'=> self::PERM_LOGGED,
|
'getLvEvaluierungInfo'=> self::PERM_LOGGED,
|
||||||
@@ -51,7 +51,7 @@ class Studium extends FHCAPI_Controller
|
|||||||
//------------------------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
// Public methods
|
// Public methods
|
||||||
|
|
||||||
public function getAllStudienSemester(){
|
public function getStudienAllSemester(){
|
||||||
|
|
||||||
$parameter_studiensemester = $this->input->get('studiensemester',true);
|
$parameter_studiensemester = $this->input->get('studiensemester',true);
|
||||||
$parameter_studiengang = $this->input->get('studiengang',true);
|
$parameter_studiengang = $this->input->get('studiengang',true);
|
||||||
@@ -61,24 +61,22 @@ class Studium extends FHCAPI_Controller
|
|||||||
$aktuelles_studiensemester = current($this->getDataOrTerminateWithError($this->StudiensemesterModel->getAktOrNextSemester()));
|
$aktuelles_studiensemester = current($this->getDataOrTerminateWithError($this->StudiensemesterModel->getAktOrNextSemester()));
|
||||||
|
|
||||||
if($this->getDataOrTerminateWithError($this->StudentModel->isStudent(getAuthUID()))){
|
if($this->getDataOrTerminateWithError($this->StudentModel->isStudent(getAuthUID()))){
|
||||||
$lv_result =$this->StudentlehrverbandModel->loadWhere([
|
$studentLehrverband =$this->StudentlehrverbandModel->loadWhere(["student_uid" => getAuthUID(), "studiensemester_kurzbz" => $aktuelles_studiensemester->studiensemester_kurzbz]);
|
||||||
"student_uid" => getAuthUID(),
|
$studentLehrverband = current($this->getDataOrTerminateWithError($studentLehrverband));
|
||||||
"studiensemester_kurzbz" => $aktuelles_studiensemester->studiensemester_kurzbz
|
|
||||||
]);
|
|
||||||
$lv_data = $this->getDataOrTerminateWithError($lv_result);
|
|
||||||
|
|
||||||
if ($studentLehrverband = current($lv_data)) {
|
|
||||||
$student_studiensemester = $studentLehrverband->studiensemester_kurzbz;
|
|
||||||
$student_studiengang = $studentLehrverband->studiengang_kz;
|
|
||||||
$student_semester = $studentLehrverband->semester;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
$student_studiensemester = $studentLehrverband->studiensemester_kurzbz;
|
||||||
|
$student_studiengang = $studentLehrverband->studiengang_kz;
|
||||||
|
$student_semester = $studentLehrverband->semester;
|
||||||
$student_studienplan = $this->getStudienPlanFromPrestudentStatus(getAuthPersonId())->studienplan_id;
|
$student_studienplan = $this->getStudienPlanFromPrestudentStatus(getAuthPersonId())->studienplan_id;
|
||||||
|
|
||||||
$parameter_studiensemester = $parameter_studiensemester ?? $student_studiensemester;
|
if(!isset($parameter_studiensemester))
|
||||||
$parameter_studiengang = $parameter_studiengang ?? $student_studiengang;
|
$parameter_studiensemester = $student_studiensemester;
|
||||||
$parameter_semester = $parameter_semester ?? $student_semester;
|
if(!isset($parameter_studiengang))
|
||||||
$parameter_studienplan = $parameter_studienplan ?? $student_studienplan;
|
$parameter_studiengang = $student_studiengang;
|
||||||
|
if(!isset($parameter_semester))
|
||||||
|
$parameter_semester = $student_semester;
|
||||||
|
if(!isset($parameter_studienplan))
|
||||||
|
$parameter_studienplan = $student_studienplan;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isset($parameter_studiensemester)){
|
if(isset($parameter_studiensemester)){
|
||||||
|
|||||||
@@ -0,0 +1,53 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
|
||||||
|
class Detailheader extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'getHeader' => ['vertrag/mitarbeiter:r'],
|
||||||
|
'getPersonAbteilung' => ['vertrag/mitarbeiter:r'],
|
||||||
|
'getLeitungOrg' => ['vertrag/mitarbeiter:r'],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getHeader($person_id)
|
||||||
|
{
|
||||||
|
$this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel');
|
||||||
|
|
||||||
|
$result = $this->Mitarbeitermodel->getHeader($person_id);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess(current($data));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPersonAbteilung($mitarbeiter_uid)
|
||||||
|
{
|
||||||
|
$this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel');
|
||||||
|
|
||||||
|
$result = $this->Mitarbeitermodel->getPersonAbteilung($mitarbeiter_uid);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess(current($data));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLeitungOrg($oekurzbz)
|
||||||
|
{
|
||||||
|
$this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel');
|
||||||
|
|
||||||
|
$result = $this->Mitarbeitermodel->getLeitungOrg($oekurzbz);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess(current($data));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,237 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
|
||||||
|
class Foto extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'uploadFoto' => ['admin:r', 'assistenz:r'],
|
||||||
|
'deleteFoto' => ['admin:r', 'assistenz:r'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
//Load Models and Libraries
|
||||||
|
$this->load->model('person/Person_model', 'PersonModel');
|
||||||
|
$this->load->model("crm/Akte_model", "AkteModel");
|
||||||
|
$this->load->model('person/Fotostatusperson_model', 'FotostatusPersonModel');
|
||||||
|
|
||||||
|
$this->loadPhrases([
|
||||||
|
'ui',
|
||||||
|
'header'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function uploadFoto($person_id)
|
||||||
|
{
|
||||||
|
if(!$person_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person_id']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = json_decode(file_get_contents("php://input"), true);
|
||||||
|
|
||||||
|
if (!empty($data['image']))
|
||||||
|
{
|
||||||
|
$base64 = $data['image'];
|
||||||
|
$resizedImage1 = $this->_resize($base64, 827, 1063);
|
||||||
|
|
||||||
|
if (is_null($resizedImage1))
|
||||||
|
return $this->terminateWithError($this->p->t('header', 'error_fotoupload'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$akte = $this->AkteModel->loadWhere(array('person_id' => $person_id, 'dokument_kurzbz' => 'Lichtbil'));
|
||||||
|
|
||||||
|
$akteUpdateData = array(
|
||||||
|
'dokument_kurzbz' => 'Lichtbil',
|
||||||
|
'person_id' => $person_id,
|
||||||
|
'inhalt' => $resizedImage1,
|
||||||
|
'mimetype' => 'image/jpg',
|
||||||
|
'erstelltam' => date('c'),
|
||||||
|
'gedruckt' => false,
|
||||||
|
'titel' => 'Lichtbild_' . $person_id . '.jpg',
|
||||||
|
'bezeichnung' => 'Lichtbild gross',
|
||||||
|
'insertamum' => date('c'),
|
||||||
|
'insertvon' => getAuthUID(),
|
||||||
|
);
|
||||||
|
|
||||||
|
if (hasData($akte)) {
|
||||||
|
$akte_id = getData($akte)[0]->akte_id;
|
||||||
|
|
||||||
|
$akteUpdateData['updateamum'] = date('c');
|
||||||
|
$akteUpdateData['updatevon'] = getAuthUID();
|
||||||
|
$akteResult = $this->AkteModel->update(array('akte_id' => $akte_id), $akteUpdateData);
|
||||||
|
} else {
|
||||||
|
$akteResult = $this->AkteModel->insert($akteUpdateData);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isError($akteResult)) {
|
||||||
|
return $this->terminateWithError(getError($akteResult), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
$resizedImage2 = $this->_resize($base64, 101, 130);
|
||||||
|
|
||||||
|
if (is_null($resizedImage2))
|
||||||
|
return $this->terminateWithError($this->p->t('header', 'error_fotoupload'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$result = $this->_updateFoto($person_id, $resizedImage2);
|
||||||
|
|
||||||
|
if (!isError($result)) {
|
||||||
|
$this->FotostatusPersonModel->insert(array(
|
||||||
|
'person_id' => $person_id,
|
||||||
|
'fotostatus_kurzbz' => 'hochgeladen',
|
||||||
|
'datum' => date('Y-m-d'),
|
||||||
|
'updateamum' => date('c'),
|
||||||
|
'updatevon' => getAuthUID(),
|
||||||
|
'insertamum' => date('c'),
|
||||||
|
'insertvon' => getAuthUID(),
|
||||||
|
));
|
||||||
|
|
||||||
|
return $this->terminateWithSuccess($base64);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('header', 'error_noPhoto'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteFoto($person_id)
|
||||||
|
{
|
||||||
|
if(!$person_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person_id']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = $this->_deleteFoto($person_id);
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
{
|
||||||
|
return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
return $this->terminateWithSuccess($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _resize($imageData, $maxwidth, $maxheight, $quality = 90)
|
||||||
|
{
|
||||||
|
$meta = getimagesize($imageData);
|
||||||
|
if (!$meta)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$src_width = $meta[0];
|
||||||
|
$src_height = $meta[1];
|
||||||
|
$mime = $meta['mime'];
|
||||||
|
|
||||||
|
switch ($mime) {
|
||||||
|
case 'image/jpeg':
|
||||||
|
case 'image/jpg':
|
||||||
|
$imagecreated = imagecreatefromjpeg($imageData);
|
||||||
|
break;
|
||||||
|
case 'image/png':
|
||||||
|
$imagecreated = imagecreatefrompng($imageData);
|
||||||
|
break;
|
||||||
|
case 'image/gif':
|
||||||
|
$imagecreated = imagecreatefromgif($imageData);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (!$imagecreated)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$src_aspect_ratio = $src_width / $src_height;
|
||||||
|
$thu_aspect_ratio = $maxwidth / $maxheight;
|
||||||
|
|
||||||
|
if ($src_width <= $maxwidth && $src_height <= $maxheight)
|
||||||
|
{
|
||||||
|
$thu_width = $src_width;
|
||||||
|
$thu_height = $src_height;
|
||||||
|
}
|
||||||
|
elseif ($thu_aspect_ratio > $src_aspect_ratio)
|
||||||
|
{
|
||||||
|
$thu_width = (int) ($maxheight * $src_aspect_ratio);
|
||||||
|
$thu_height = $maxheight;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$thu_width = $maxwidth;
|
||||||
|
$thu_height = (int) ($maxwidth / $src_aspect_ratio);
|
||||||
|
}
|
||||||
|
|
||||||
|
$imageScaled = imagecreatetruecolor($thu_width, $thu_height);
|
||||||
|
|
||||||
|
if ($mime === 'image/png')
|
||||||
|
{
|
||||||
|
$background = imagecolorallocate($imageScaled , 0, 0, 0);
|
||||||
|
imagecolortransparent($imageScaled, $background);
|
||||||
|
imagealphablending($imageScaled, false);
|
||||||
|
imagesavealpha($imageScaled, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
imagecopyresampled($imageScaled, $imagecreated, 0, 0, 0, 0, $thu_width, $thu_height, $src_width, $src_height);
|
||||||
|
|
||||||
|
if ($mime === "image/gif")
|
||||||
|
{
|
||||||
|
$background = imagecolorallocate($imageScaled, 0, 0, 0);
|
||||||
|
imagecolortransparent($imageScaled, $background);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($imageScaled))
|
||||||
|
{
|
||||||
|
ob_start();
|
||||||
|
|
||||||
|
if ($mime == 'image/png')
|
||||||
|
imagepng($imageScaled, NULL);
|
||||||
|
else if ($mime === 'image/gif')
|
||||||
|
imagegif($imageScaled, NULL);
|
||||||
|
else
|
||||||
|
imagejpeg($imageScaled, NULL, $quality);
|
||||||
|
|
||||||
|
$resizedImageData = ob_get_contents();
|
||||||
|
ob_end_clean();
|
||||||
|
@imagedestroy($imagecreated);
|
||||||
|
@imagedestroy($imageScaled);
|
||||||
|
|
||||||
|
|
||||||
|
if (!empty($resizedImageData))
|
||||||
|
{
|
||||||
|
return base64_encode($resizedImageData);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _updateFoto($person_id, $foto)
|
||||||
|
{
|
||||||
|
$personJson['foto'] = $foto;
|
||||||
|
$result = $this->PersonModel->update($person_id, $personJson);
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
{
|
||||||
|
return error($result->msg, EXIT_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _deleteFoto($person_id)
|
||||||
|
{
|
||||||
|
$personJson['foto'] = null;
|
||||||
|
$result = $this->PersonModel->update($person_id, $personJson);
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
{
|
||||||
|
return error($result->msg, EXIT_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -47,22 +47,22 @@ class Setup extends FHCAPI_Controller
|
|||||||
{
|
{
|
||||||
$tabs['details'] = array (
|
$tabs['details'] = array (
|
||||||
'title' => 'Details',
|
'title' => 'Details',
|
||||||
'component' => APP_ROOT . 'public/js/components/LVVerwaltung/Tabs/Details.js',
|
'component' => absoluteJsImportUrl('public/js/components/LVVerwaltung/Tabs/Details.js'),
|
||||||
'config' => []
|
'config' => []
|
||||||
);
|
);
|
||||||
$tabs['gruppen'] = array (
|
$tabs['gruppen'] = array (
|
||||||
'title' => 'Gruppen',
|
'title' => 'Gruppen',
|
||||||
'component' => APP_ROOT . 'public/js/components/LVVerwaltung/Tabs/Gruppen.js',
|
'component' => absoluteJsImportUrl('public/js/components/LVVerwaltung/Tabs/Gruppen.js'),
|
||||||
'config' => []
|
'config' => []
|
||||||
);
|
);
|
||||||
$tabs['lektor'] = array (
|
$tabs['lektor'] = array (
|
||||||
'title' => 'LektorInnenzuteilung',
|
'title' => 'LektorInnenzuteilung',
|
||||||
'component' => APP_ROOT . 'public/js/components/LVVerwaltung/Tabs/Lektor.js',
|
'component' => absoluteJsImportUrl('public/js/components/LVVerwaltung/Tabs/Lektor.js'),
|
||||||
'config' => []
|
'config' => []
|
||||||
);
|
);
|
||||||
$tabs['notiz'] = array (
|
$tabs['notiz'] = array (
|
||||||
'title' => 'Notizen',
|
'title' => 'Notizen',
|
||||||
'component' => APP_ROOT . 'public/js/components/LVVerwaltung/Tabs/Notiz.js',
|
'component' => absoluteJsImportUrl('public/js/components/LVVerwaltung/Tabs/Notiz.js'),
|
||||||
'config' => []
|
'config' => []
|
||||||
);
|
);
|
||||||
$this->terminateWithSuccess($tabs);
|
$this->terminateWithSuccess($tabs);
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
|
||||||
|
class NotizAnrechnung extends Notiz_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
//Load Models
|
||||||
|
$this->load->model('person/Notiz_model', 'NotizModel');
|
||||||
|
$this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel');
|
||||||
|
|
||||||
|
// Load Libraries
|
||||||
|
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||||
|
|
||||||
|
// Load language phrases
|
||||||
|
$this->loadPhrases([
|
||||||
|
'ui'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isBerechtigt($id, $typeId)
|
||||||
|
{
|
||||||
|
if($typeId != "anrechnung_id")
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO define permission
|
||||||
|
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
||||||
|
{
|
||||||
|
$result = $this->p->t('lehre','error_keineSchreibrechte');
|
||||||
|
|
||||||
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
|
||||||
|
class NotizBestellung extends Notiz_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
//Load Models
|
||||||
|
$this->load->model('person/Notiz_model', 'NotizModel');
|
||||||
|
$this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel');
|
||||||
|
|
||||||
|
// Load Libraries
|
||||||
|
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||||
|
|
||||||
|
// Load language phrases
|
||||||
|
$this->loadPhrases([
|
||||||
|
'ui'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isBerechtigt($id, $typeId)
|
||||||
|
{
|
||||||
|
if($typeId != "bestellung_id")
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
//TODO define permission
|
||||||
|
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
||||||
|
{
|
||||||
|
$result = $this->p->t('lehre','error_keineSchreibrechte');
|
||||||
|
|
||||||
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -17,5 +17,106 @@ class NotizLehreinheit extends Notiz_Controller
|
|||||||
'getMitarbeiter' => ['admin:r', 'assistenz:r'],
|
'getMitarbeiter' => ['admin:r', 'assistenz:r'],
|
||||||
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
//Load Models
|
||||||
|
$this->load->model('person/Notiz_model', 'NotizModel');
|
||||||
|
$this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel');
|
||||||
|
$this->load->model('education/Lehreinheit_model', 'LehreinheitModel');
|
||||||
|
|
||||||
|
// Load Libraries
|
||||||
|
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||||
|
|
||||||
|
//Permission checks for allowed Oes
|
||||||
|
$allowedOes = $this->permissionlib->getOE_isEntitledFor('assistenz') ?: [];
|
||||||
|
|
||||||
|
if ($this->router->method == 'addNewNotiz')
|
||||||
|
{
|
||||||
|
$json = $this->input->post('data');
|
||||||
|
$post_data = json_decode($json, true);
|
||||||
|
$lehreinheit_id = $post_data['id'];
|
||||||
|
|
||||||
|
if(!$lehreinheit_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Lehreinheit ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->_checkAllowedOesFromLehreinheit($lehreinheit_id, $allowedOes);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->router->method == 'updateNotiz')
|
||||||
|
{
|
||||||
|
$json = $this->input->post('data');
|
||||||
|
$post_data = json_decode($json, true);
|
||||||
|
$notiz_id = $post_data['notiz_id'];
|
||||||
|
|
||||||
|
if(!$notiz_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//get lehreinheit_id
|
||||||
|
$result = $this->NotizzuordnungModel->loadWhere(['notiz_id' => $notiz_id]);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$lehreinheit_id = current($data)->lehreinheit_id;
|
||||||
|
|
||||||
|
if(!$lehreinheit_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Lehreinheit ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->_checkAllowedOesFromLehreinheit($lehreinheit_id, $allowedOes);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->router->method == 'deleteNotiz')
|
||||||
|
{
|
||||||
|
$notiz_id = $this->input->post('notiz_id');
|
||||||
|
$lehreinheit_id = $this->input->post('id');
|
||||||
|
|
||||||
|
if(!$notiz_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!$lehreinheit_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Lehreinheit ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->_checkAllowedOesFromLehreinheit($lehreinheit_id, $allowedOes);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load language phrases
|
||||||
|
$this->loadPhrases([
|
||||||
|
'ui'
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function _checkAllowedOesFromLehreinheit($lehreinheit_id, $allowedOes)
|
||||||
|
{
|
||||||
|
//get oe from lehreinheit
|
||||||
|
$result = $this->LehreinheitModel->getOes($lehreinheit_id);
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$oes = current($data);
|
||||||
|
|
||||||
|
if (!in_array($oes, $allowedOes))
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_keineBerechtigungStg') . " " . $oes, self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isBerechtigt($id, $typeId)
|
||||||
|
{
|
||||||
|
if($typeId != "lehreinheit_id")
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
||||||
|
{
|
||||||
|
$result = $this->p->t('lehre','error_keineSchreibrechte');
|
||||||
|
|
||||||
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
|
||||||
|
class NotizMitarbeiter extends Notiz_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
//Load Models
|
||||||
|
$this->load->model('person/Notiz_model', 'NotizModel');
|
||||||
|
$this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel');
|
||||||
|
|
||||||
|
// Load Libraries
|
||||||
|
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||||
|
|
||||||
|
// Load language phrases
|
||||||
|
$this->loadPhrases([
|
||||||
|
'ui'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isBerechtigt($id, $typeId)
|
||||||
|
{
|
||||||
|
if($typeId != "mitarbeiter_uid")
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO define permission
|
||||||
|
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
||||||
|
{
|
||||||
|
$result = $this->p->t('lehre','error_keineSchreibrechte');
|
||||||
|
|
||||||
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -20,33 +20,100 @@ class NotizPerson extends Notiz_Controller
|
|||||||
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
||||||
'getCountNotes' => ['admin:r', 'assistenz:r'],
|
'getCountNotes' => ['admin:r', 'assistenz:r'],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
//Load Models
|
||||||
|
$this->load->model('person/Benutzer_model', 'BenutzerModel');
|
||||||
|
$this->load->model('crm/Student_model', 'StudentModel');
|
||||||
|
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
||||||
|
|
||||||
|
//Permission checks for allowed Oes
|
||||||
|
if ($this->router->method == 'addNewNotiz')
|
||||||
|
{
|
||||||
|
$json = $this->input->post('data');
|
||||||
|
$post_data = json_decode($json, true);
|
||||||
|
$person_id = $post_data['id'];
|
||||||
|
|
||||||
|
$allowedStgs = $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: [];
|
||||||
|
|
||||||
|
if(!$person_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->_checkIfBerechtigungForOnePrestudentExists($person_id, $allowedStgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( $this->router->method == 'updateNotiz')
|
||||||
|
{
|
||||||
|
$json = $this->input->post('data');
|
||||||
|
$post_data = json_decode($json, true);
|
||||||
|
$notiz_id = $post_data['notiz_id'];
|
||||||
|
|
||||||
|
if(!$notiz_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//get person_id
|
||||||
|
$result = $this->NotizzuordnungModel->loadWhere(['notiz_id' => $notiz_id]);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$person_id = current($data)->person_id;
|
||||||
|
|
||||||
|
$allowedStgs = $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: [];
|
||||||
|
$this->_checkIfBerechtigungForOnePrestudentExists($person_id, $allowedStgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->router->method == 'deleteNotiz' )
|
||||||
|
{
|
||||||
|
$notiz_id = $this->input->post('notiz_id');
|
||||||
|
$person_id = $this->input->post('id');
|
||||||
|
|
||||||
|
if(!$notiz_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!$person_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'person ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
$allowedStgs = $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: [];
|
||||||
|
$this->_checkIfBerechtigungForOnePrestudentExists($person_id, $allowedStgs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isBerechtigt($id, $typeId)
|
public function isBerechtigt($id, $typeId)
|
||||||
{
|
{
|
||||||
if($typeId != "person_id")
|
if($typeId != "person_id")
|
||||||
{
|
{
|
||||||
return $this->terminateWithError($this->p->t('ui', 'error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError($this->p->t('ui', 'error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO define permission
|
|
||||||
if (!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
if (!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
||||||
{
|
{
|
||||||
$result = $this->p->t('lehre', 'error_keineSchreibrechte');
|
$result = $this->p->t('lehre', 'error_keineSchreibrechte');
|
||||||
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->outputJsonSuccess(true);
|
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
|
||||||
}
|
}
|
||||||
|
|
||||||
public function loadDokumente()
|
//stv: if person has permission of one studiengang of person -> permission to add/update/delete Note
|
||||||
|
private function _checkIfBerechtigungForOnePrestudentExists($person_id, $allowedStgs)
|
||||||
{
|
{
|
||||||
$notiz_id = $this->input->post('notiz_id');
|
$result = $this->PrestudentModel->loadWhere(['person_id' => $person_id]);
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
// TODO(chris): make CI variant of endpoint
|
$checkarray = [];
|
||||||
$this->NotizModel->addSelect($this->NotizModel->escape(base_url('content/notizdokdownload.php?id=')) . ' || campus.tbl_dms_version.dms_id AS preview');
|
foreach ($data as $item)
|
||||||
|
{
|
||||||
|
if(in_array($item->studiengang_kz, $allowedStgs))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return parent::loadDokumente();
|
$this->terminateWithError($this->p->t('ui', 'error_keineBerechtigungStg'), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,117 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
|
||||||
|
class NotizPrestudent extends Notiz_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
//Load Models
|
||||||
|
$this->load->model('person/Notiz_model', 'NotizModel');
|
||||||
|
$this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel');
|
||||||
|
$this->load->model('crm/Student_model', 'StudentModel');
|
||||||
|
|
||||||
|
// Load Libraries
|
||||||
|
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||||
|
|
||||||
|
// Load language phrases
|
||||||
|
$this->loadPhrases([
|
||||||
|
'ui'
|
||||||
|
]);
|
||||||
|
|
||||||
|
//Permission checks for Studiengangsarray
|
||||||
|
$allowedStgs = $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: [];
|
||||||
|
|
||||||
|
if ($this->router->method == 'addNewNotiz')
|
||||||
|
{
|
||||||
|
$json = $this->input->post('data');
|
||||||
|
$post_data = json_decode($json, true);
|
||||||
|
$prestudent_id = $post_data['id'];
|
||||||
|
|
||||||
|
if(!$prestudent_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Lehreinheit ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->_checkAllowedOesFromPrestudent($prestudent_id, $allowedStgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->router->method == 'updateNotiz')
|
||||||
|
{
|
||||||
|
$json = $this->input->post('data');
|
||||||
|
$post_data = json_decode($json, true);
|
||||||
|
$notiz_id = $post_data['notiz_id'];
|
||||||
|
|
||||||
|
if(!$notiz_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//get prestudent_id
|
||||||
|
$result = $this->NotizzuordnungModel->loadWhere(['notiz_id' => $notiz_id]);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$prestudent_id = current($data)->prestudent_id;
|
||||||
|
|
||||||
|
if(!$prestudent_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Prestudent ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->_checkAllowedOesFromPrestudent($prestudent_id, $allowedStgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->router->method == 'deleteNotiz')
|
||||||
|
{
|
||||||
|
$notiz_id = $this->input->post('notiz_id');
|
||||||
|
$prestudent_id = $this->input->post('id');
|
||||||
|
|
||||||
|
if(!$notiz_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!$prestudent_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Prestudent ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->_checkAllowedOesFromPrestudent($prestudent_id, $allowedStgs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isBerechtigt($id, $typeId)
|
||||||
|
{
|
||||||
|
if($typeId != "prestudent_id")
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
||||||
|
{
|
||||||
|
$result = $this->p->t('lehre','error_keineSchreibrechte');
|
||||||
|
|
||||||
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _checkAllowedOesFromPrestudent($prestudent_id, $allowedStgs)
|
||||||
|
{
|
||||||
|
$student_uid = $this->StudentModel->getUID($prestudent_id);
|
||||||
|
|
||||||
|
$result = $this->StudentModel->loadWhere(['student_uid' => $student_uid]);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$studiengang_kz = current($data)->studiengang_kz;
|
||||||
|
|
||||||
|
if (!in_array($studiengang_kz, $allowedStgs))
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_keineBerechtigungStg'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
|
||||||
|
class NotizProjekt extends Notiz_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isBerechtigt($id, $typeId)
|
||||||
|
{
|
||||||
|
if($typeId != "projekt_kurzbz")
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO define permission
|
||||||
|
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
||||||
|
{
|
||||||
|
$result = $this->p->t('lehre','error_keineSchreibrechte');
|
||||||
|
|
||||||
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
|
||||||
|
class NotizProjektphase extends Notiz_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isBerechtigt($id, $typeId)
|
||||||
|
{
|
||||||
|
if($typeId != "projektphase_id")
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO define permission
|
||||||
|
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
||||||
|
{
|
||||||
|
$result = $this->p->t('lehre','error_keineSchreibrechte');
|
||||||
|
|
||||||
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
|
||||||
|
class NotizProjekttask extends Notiz_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isBerechtigt($id, $typeId)
|
||||||
|
{
|
||||||
|
if($typeId != "projekttask_id")
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO define permission
|
||||||
|
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
||||||
|
{
|
||||||
|
$result = $this->p->t('lehre','error_keineSchreibrechte');
|
||||||
|
|
||||||
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -25,7 +25,8 @@ class Studiensemester extends FHCAPI_Controller
|
|||||||
array(
|
array(
|
||||||
'getAll' => self::PERM_LOGGED,
|
'getAll' => self::PERM_LOGGED,
|
||||||
'getAktNext' => self::PERM_LOGGED,
|
'getAktNext' => self::PERM_LOGGED,
|
||||||
'getStudienjahrByStudiensemester' => self::PERM_LOGGED
|
'getStudienjahrByStudiensemester' => self::PERM_LOGGED,
|
||||||
|
'getAllStudiensemesterAndAktOrNext' => self::PERM_LOGGED
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
// Load model StudiensemesterModel
|
// Load model StudiensemesterModel
|
||||||
@@ -152,4 +153,17 @@ class Studiensemester extends FHCAPI_Controller
|
|||||||
|
|
||||||
$this->terminateWithSuccess((getData(success($studienjahrObj))));
|
$this->terminateWithSuccess((getData(success($studienjahrObj))));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getAllStudiensemesterAndAktOrNext() {
|
||||||
|
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||||
|
|
||||||
|
$this->StudiensemesterModel->addOrder("start", "DESC");
|
||||||
|
$result = $this->StudiensemesterModel->getAktOrNextSemester();
|
||||||
|
$aktuell = getData($result)[0];
|
||||||
|
$this->StudiensemesterModel->addSelect('*');
|
||||||
|
$result = $this->StudiensemesterModel->load();
|
||||||
|
$studiensemester = getData($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess(array($studiensemester, $aktuell));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -127,9 +127,9 @@ class Unterbrechung extends FHCAPI_Controller
|
|||||||
$this->form_validation->set_rules(
|
$this->form_validation->set_rules(
|
||||||
'datum_wiedereinstieg',
|
'datum_wiedereinstieg',
|
||||||
'Datum Wiedereinstieg',
|
'Datum Wiedereinstieg',
|
||||||
'required|callback_isValidDate|callback_isDateInFuture',
|
'required|is_valid_date|callback_isDateInFuture',
|
||||||
[
|
[
|
||||||
'isValidDate' => $this->p->t('ui', 'error_invalid_date'),
|
'is_valid_date' => $this->p->t('ui', 'error_invalid_date'),
|
||||||
'isDateInFuture' => $this->p->t('ui', 'error_invalid_date')
|
'isDateInFuture' => $this->p->t('ui', 'error_invalid_date')
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
@@ -209,18 +209,9 @@ class Unterbrechung extends FHCAPI_Controller
|
|||||||
$this->terminateWithSuccess(getData($result));
|
$this->terminateWithSuccess(getData($result));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isValidDate($date)
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
new DateTime($date);
|
|
||||||
} catch (Exception $e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function isDateInFuture($date)
|
public function isDateInFuture($date)
|
||||||
{
|
{
|
||||||
return new DateTime() < new DateTime($date);
|
return new DateTime() < new DateTime($date);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,15 +36,44 @@ class Aufnahmetermine extends FHCAPI_Controller
|
|||||||
// Load models
|
// Load models
|
||||||
$this->load->model('crm/Reihungstest_model', 'ReihungstestModel');
|
$this->load->model('crm/Reihungstest_model', 'ReihungstestModel');
|
||||||
$this->load->model('crm/RtPerson_model', 'RtPersonModel');
|
$this->load->model('crm/RtPerson_model', 'RtPersonModel');
|
||||||
|
$this->load->model('organisation/Studienplan_model', 'StudienplanModel');
|
||||||
|
$this->load->model('organisation/Studienordnung_model', 'StudienordnungModel');
|
||||||
|
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAufnahmetermine($person_id)
|
public function getAufnahmetermine($person_id)
|
||||||
{
|
{
|
||||||
$result = $this->ReihungstestModel->getReihungstestPerson($person_id);
|
$result = $this->ReihungstestModel->getReihungstestPerson($person_id);
|
||||||
|
$arrayRt = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
foreach ($arrayRt as $item) {
|
||||||
|
//Studienplan
|
||||||
|
$result = $this->StudienplanModel->loadWhere([
|
||||||
|
'studienplan_id' => $item->studienplan_id
|
||||||
|
]);
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$studienordnung_id_ber = current($data)->studienordnung_id;
|
||||||
|
|
||||||
$this->terminateWithSuccess($data);
|
//Studienordnung
|
||||||
|
$result = $this->StudienordnungModel->loadWhere([
|
||||||
|
'studienordnung_id' => $studienordnung_id_ber
|
||||||
|
]);
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$studiengang_kz_ber = current($data)->studiengang_kz;
|
||||||
|
|
||||||
|
//Studiengang von studiengang_kz_ber
|
||||||
|
$result = $this->StudiengangModel->load($studiengang_kz_ber);
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$studiengangkurzbzlang_ber = current($data)->kurzbzlang;
|
||||||
|
$typ_ber = current($data)->typ;
|
||||||
|
|
||||||
|
//add to Array
|
||||||
|
$item->studiengang_kz_ber = $studiengang_kz_ber;
|
||||||
|
$item->studiengangkurzbzlang_ber = $studiengangkurzbzlang_ber;
|
||||||
|
$item->studiengangtyp_ber = $typ_ber;
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess($arrayRt);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function insertAufnahmetermin()
|
public function insertAufnahmetermin()
|
||||||
@@ -60,7 +89,6 @@ class Aufnahmetermine extends FHCAPI_Controller
|
|||||||
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person ID']), self::ERROR_TYPE_GENERAL);
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person ID']), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$rt_id = (isset($formData['rt_id']) && !empty($formData['rt_id'])) ? $formData['rt_id'] : null;
|
$rt_id = (isset($formData['rt_id']) && !empty($formData['rt_id'])) ? $formData['rt_id'] : null;
|
||||||
$anmeldedatum = (isset($formData['anmeldedatum']) && !empty($formData['anmeldedatum'])) ? $formData['anmeldedatum'] : null;
|
$anmeldedatum = (isset($formData['anmeldedatum']) && !empty($formData['anmeldedatum'])) ? $formData['anmeldedatum'] : null;
|
||||||
$teilgenommen = (isset($formData['teilgenommen']) && !empty($formData['teilgenommen'])) ? $formData['teilgenommen'] : false;
|
$teilgenommen = (isset($formData['teilgenommen']) && !empty($formData['teilgenommen'])) ? $formData['teilgenommen'] : false;
|
||||||
@@ -224,7 +252,11 @@ class Aufnahmetermine extends FHCAPI_Controller
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
//check if existing placementtest
|
||||||
|
if(!hasData($result))
|
||||||
|
$this->terminateWithSuccess([]);
|
||||||
|
else
|
||||||
|
$data = getData($result);
|
||||||
|
|
||||||
$studienplan_arr = [];
|
$studienplan_arr = [];
|
||||||
$include_ids = [];
|
$include_ids = [];
|
||||||
@@ -233,12 +265,18 @@ class Aufnahmetermine extends FHCAPI_Controller
|
|||||||
if($item->studienplan_id != null)
|
if($item->studienplan_id != null)
|
||||||
$studienplan_arr[] = $item->studienplan_id;
|
$studienplan_arr[] = $item->studienplan_id;
|
||||||
}
|
}
|
||||||
|
if(!hasData($studienplan_arr))
|
||||||
|
$this->terminateWithSuccess([]);
|
||||||
|
|
||||||
//get Placementtests Person
|
//get Placementtests Person
|
||||||
$person_id = $this->_getPersonId($prestudent_id);
|
$person_id = $this->_getPersonId($prestudent_id);
|
||||||
$resultRt = $this->ReihungstestModel->getReihungstestPerson($person_id);
|
$resultRt = $this->ReihungstestModel->getReihungstestPerson($person_id);
|
||||||
|
|
||||||
$dataRt = $this->getDataOrTerminateWithError($resultRt);
|
//check if existing placementtest
|
||||||
|
if(!hasData($result))
|
||||||
|
$this->terminateWithSuccess([]);
|
||||||
|
else
|
||||||
|
$dataRt = getData($resultRt);
|
||||||
|
|
||||||
foreach ($dataRt as $item)
|
foreach ($dataRt as $item)
|
||||||
{
|
{
|
||||||
@@ -354,6 +392,7 @@ class Aufnahmetermine extends FHCAPI_Controller
|
|||||||
$person_id = $this->input->get('person_id');
|
$person_id = $this->input->get('person_id');
|
||||||
$punkte = $this->input->get('punkte');
|
$punkte = $this->input->get('punkte');
|
||||||
$reihungstest_id = $this->input->get('reihungstest_id');
|
$reihungstest_id = $this->input->get('reihungstest_id');
|
||||||
|
$has_excluded_gebiete = $this->input->get('hasExcludedAreas');
|
||||||
|
|
||||||
if(!$reihungstest_id)
|
if(!$reihungstest_id)
|
||||||
{
|
{
|
||||||
@@ -364,22 +403,27 @@ class Aufnahmetermine extends FHCAPI_Controller
|
|||||||
$studiengang_kz = $this->input->get('studiengang_kz');
|
$studiengang_kz = $this->input->get('studiengang_kz');
|
||||||
|
|
||||||
$this->load->model('testtool/Ablauf_model', 'AblaufModel');
|
$this->load->model('testtool/Ablauf_model', 'AblaufModel');
|
||||||
$result = $this->AblaufModel->getAblaufGebieteAndGewichte($studiengang_kz);
|
$result = $this->AblaufModel->getAblaufGebieteAndGewichte($studiengang_kz, 1);
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
$weightedArray = [];
|
$weightedArray = [];
|
||||||
|
$basis_gebiet_id_arr = [];
|
||||||
|
$basis_gebiet_id_toString = '';
|
||||||
foreach ($data as $abl)
|
foreach ($data as $abl)
|
||||||
{
|
{
|
||||||
$weightedArray[$abl->gebiet_id] = $abl->gewicht;
|
$weightedArray[$abl->gebiet_id] = $abl->gewicht;
|
||||||
|
$basis_gebiet_id_arr[]= $abl->gebiet_id;
|
||||||
}
|
}
|
||||||
|
$basis_gebiet_id_toString = implode(', ', $basis_gebiet_id_arr);
|
||||||
|
|
||||||
$result = $this->ReihungstestModel->getReihungstestErgebnisPerson($person_id, $punkte, $reihungstest_id, $weightedArray);
|
$result = $this->ReihungstestModel->getReihungstestErgebnisPerson(
|
||||||
|
$person_id,
|
||||||
/* if (isError($result))
|
$punkte,
|
||||||
{
|
$reihungstest_id,
|
||||||
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
$weightedArray,
|
||||||
}*/
|
$has_excluded_gebiete,
|
||||||
|
$basis_gebiet_id_toString
|
||||||
|
);
|
||||||
$this->terminateWithSuccess($result);
|
$this->terminateWithSuccess($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -200,7 +200,8 @@ class Config extends FHCAPI_Controller
|
|||||||
'type' => 'select',
|
'type' => 'select',
|
||||||
'values' => $buchungstyp_kurzbz_plus_all,
|
'values' => $buchungstyp_kurzbz_plus_all,
|
||||||
'value_key' => 'buchungstyp_kurzbz',
|
'value_key' => 'buchungstyp_kurzbz',
|
||||||
'label_key' => 'beschreibung'
|
'label_key' => 'beschreibung',
|
||||||
|
'default' => 'all'
|
||||||
],
|
],
|
||||||
'samestg' => [
|
'samestg' => [
|
||||||
'type' => 'bool',
|
'type' => 'bool',
|
||||||
@@ -226,7 +227,8 @@ class Config extends FHCAPI_Controller
|
|||||||
'type' => 'select',
|
'type' => 'select',
|
||||||
'values' => $buchungstyp_kurzbz_plus_all,
|
'values' => $buchungstyp_kurzbz_plus_all,
|
||||||
'value_key' => 'buchungstyp_kurzbz',
|
'value_key' => 'buchungstyp_kurzbz',
|
||||||
'label_key' => 'beschreibung'
|
'label_key' => 'beschreibung',
|
||||||
|
'default' => 'all'
|
||||||
],
|
],
|
||||||
'samestg' => [
|
'samestg' => [
|
||||||
'type' => 'bool',
|
'type' => 'bool',
|
||||||
@@ -504,7 +506,7 @@ class Config extends FHCAPI_Controller
|
|||||||
{
|
{
|
||||||
$result['combinePeople'] = [
|
$result['combinePeople'] = [
|
||||||
'title' => $this->p->t('stv', 'tab_combine_people'),
|
'title' => $this->p->t('stv', 'tab_combine_people'),
|
||||||
'component' => './Stv/Studentenverwaltung/Details/CombinePeople.js',
|
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/CombinePeople.js'),
|
||||||
'config' => $config['combinePeople']
|
'config' => $config['combinePeople']
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -753,6 +753,10 @@ class Dokumente extends FHCAPI_Controller
|
|||||||
);
|
);
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
if(!(is_array($data) && count($data) > 0))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
$student = current($data);
|
$student = current($data);
|
||||||
|
|
||||||
return $student->student_uid;
|
return $student->student_uid;
|
||||||
|
|||||||
@@ -239,7 +239,7 @@ class Konto extends FHCAPI_Controller
|
|||||||
$data[$field] = $this->input->post($field);
|
$data[$field] = $this->input->post($field);
|
||||||
|
|
||||||
if (defined('FAS_BUCHUNGSTYP_FIXE_KOSTENSTELLE') && isset(unserialize(FAS_BUCHUNGSTYP_FIXE_KOSTENSTELLE)[$data['buchungstyp_kurzbz']])) {
|
if (defined('FAS_BUCHUNGSTYP_FIXE_KOSTENSTELLE') && isset(unserialize(FAS_BUCHUNGSTYP_FIXE_KOSTENSTELLE)[$data['buchungstyp_kurzbz']])) {
|
||||||
$data['kostenstelle'] = unserialize(FAS_BUCHUNGSTYP_FIXE_KOSTENSTELLE)[$data['buchungstyp_kurzbz']];
|
$data['studiengang_kz'] = unserialize(FAS_BUCHUNGSTYP_FIXE_KOSTENSTELLE)[$data['buchungstyp_kurzbz']];
|
||||||
}
|
}
|
||||||
|
|
||||||
$result = [];
|
$result = [];
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ class Prestudent extends FHCAPI_Controller
|
|||||||
|
|
||||||
// Load language phrases
|
// Load language phrases
|
||||||
$this->loadPhrases([
|
$this->loadPhrases([
|
||||||
'ui', 'studierendenantrag', 'lehre'
|
'ui', 'studierendenantrag', 'lehre', 'global'
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,11 +98,9 @@ class Prestudent extends FHCAPI_Controller
|
|||||||
'person_id',
|
'person_id',
|
||||||
'berufstaetigkeit_code',
|
'berufstaetigkeit_code',
|
||||||
'ausbildungcode',
|
'ausbildungcode',
|
||||||
'zgv_code',
|
|
||||||
'zgvort',
|
'zgvort',
|
||||||
'zgvdatum',
|
'zgvdatum',
|
||||||
'zgvnation',
|
'zgvnation',
|
||||||
'zgvmas_code',
|
|
||||||
'zgvmaort',
|
'zgvmaort',
|
||||||
'zgvmadatum',
|
'zgvmadatum',
|
||||||
'zgvmanation',
|
'zgvmanation',
|
||||||
@@ -110,7 +108,6 @@ class Prestudent extends FHCAPI_Controller
|
|||||||
'bismelden',
|
'bismelden',
|
||||||
'anmerkung',
|
'anmerkung',
|
||||||
'dual',
|
'dual',
|
||||||
'zgvdoktor_code',
|
|
||||||
'zgvdoktorort',
|
'zgvdoktorort',
|
||||||
'zgvdoktordatum',
|
'zgvdoktordatum',
|
||||||
'zgvdoktornation',
|
'zgvdoktornation',
|
||||||
@@ -125,6 +122,57 @@ class Prestudent extends FHCAPI_Controller
|
|||||||
'standort_code'
|
'standort_code'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
// add zgv code fields only if user has permission
|
||||||
|
$this->load->library('PermissionLib');
|
||||||
|
$prestudentres = $this->PrestudentModel->load($prestudent_id);
|
||||||
|
if(!hasData($prestudentres))
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'error_fieldNotFound', ['field' => 'Prestudent ' . $prestudent_id]));
|
||||||
|
}
|
||||||
|
$prestudent = (getData($prestudentres))[0];
|
||||||
|
$bakkZgvStg = $this->permissionlib->getSTG_isEntitledFor('student/editBakkZgv') ?: array();
|
||||||
|
$makkZgvStg = $this->permissionlib->getSTG_isEntitledFor('student/editMakkZgv') ?: array();
|
||||||
|
$dokZgvStg = $this->permissionlib->getSTG_isEntitledFor('student/editDokZgv') ?: array();
|
||||||
|
|
||||||
|
if(in_array($prestudent->studiengang_kz, $bakkZgvStg))
|
||||||
|
{
|
||||||
|
$array_allowed_props_prestudent[] = 'zgv_code';
|
||||||
|
}
|
||||||
|
else if(!is_null($this->input->post('zgv_code')))
|
||||||
|
{
|
||||||
|
$this->terminateWithError(
|
||||||
|
$this->p->t('global', 'zgv')
|
||||||
|
. ' - ' .
|
||||||
|
$this->p->t('ui', 'error_keineBerechtigungStg')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(in_array($prestudent->studiengang_kz, $makkZgvStg))
|
||||||
|
{
|
||||||
|
$array_allowed_props_prestudent[] = 'zgvmas_code';
|
||||||
|
}
|
||||||
|
else if(!is_null($this->input->post('zgvmas_code')))
|
||||||
|
{
|
||||||
|
$this->terminateWithError(
|
||||||
|
$this->p->t('lehre', 'zgvMaster')
|
||||||
|
. ' - ' .
|
||||||
|
$this->p->t('ui', 'error_keineBerechtigungStg')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(in_array($prestudent->studiengang_kz, $dokZgvStg))
|
||||||
|
{
|
||||||
|
$array_allowed_props_prestudent[] = 'zgvdoktor_code';
|
||||||
|
}
|
||||||
|
else if(!is_null($this->input->post('zgvdoktor_code')))
|
||||||
|
{
|
||||||
|
$this->terminateWithError(
|
||||||
|
$this->p->t('lehre', 'zgvDoktor')
|
||||||
|
. ' - ' .
|
||||||
|
$this->p->t('ui', 'error_keineBerechtigungStg')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// add UDFs
|
// add UDFs
|
||||||
$result = $this->udflib->getDefinitionForModel($this->PrestudentModel);
|
$result = $this->udflib->getDefinitionForModel($this->PrestudentModel);
|
||||||
|
|
||||||
|
|||||||
@@ -636,7 +636,7 @@ class Status extends FHCAPI_Controller
|
|||||||
|
|
||||||
$this->load->library('PrestudentLib');
|
$this->load->library('PrestudentLib');
|
||||||
|
|
||||||
$this->prestudentlib->setFirstStudent(
|
$resFirstStudent = $this->prestudentlib->setFirstStudent(
|
||||||
$prestudent_id,
|
$prestudent_id,
|
||||||
$lastAufgenommener->studiensemester_kurzbz,
|
$lastAufgenommener->studiensemester_kurzbz,
|
||||||
$lastAufgenommener->ausbildungssemester,
|
$lastAufgenommener->ausbildungssemester,
|
||||||
@@ -645,9 +645,8 @@ class Status extends FHCAPI_Controller
|
|||||||
$this->input->post('statusgrund_id')
|
$this->input->post('statusgrund_id')
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->getDataOrTerminateWithError($result);
|
$this->db->trans_complete();
|
||||||
|
$this->getDataOrTerminateWithError($resFirstStudent);
|
||||||
$this->db->trans_commit();
|
|
||||||
|
|
||||||
return $this->outputJsonSuccess(true);
|
return $this->outputJsonSuccess(true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -108,6 +108,10 @@ class Student extends FHCAPI_Controller
|
|||||||
$this->PrestudentModel->addSelect('p.matr_nr');
|
$this->PrestudentModel->addSelect('p.matr_nr');
|
||||||
$this->PrestudentModel->addSelect('p.anrede');
|
$this->PrestudentModel->addSelect('p.anrede');
|
||||||
$this->PrestudentModel->addSelect('p.zugangscode');
|
$this->PrestudentModel->addSelect('p.zugangscode');
|
||||||
|
if($this->permissionlib->isBerechtigt('student/bpk'))
|
||||||
|
{
|
||||||
|
$this->PrestudentModel->addSelect('p.bpk');
|
||||||
|
}
|
||||||
|
|
||||||
if (defined('ACTIVE_ADDONS') && strpos(ACTIVE_ADDONS, 'bewerbung') !== false) {
|
if (defined('ACTIVE_ADDONS') && strpos(ACTIVE_ADDONS, 'bewerbung') !== false) {
|
||||||
$this->PrestudentModel->addSelect(
|
$this->PrestudentModel->addSelect(
|
||||||
@@ -136,14 +140,9 @@ class Student extends FHCAPI_Controller
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
$this->PrestudentModel->addSelect(
|
$this->PrestudentModel->addSelect(
|
||||||
"(
|
"public.get_rolle_prestudent(public.tbl_prestudent.prestudent_id, "
|
||||||
SELECT status_kurzbz
|
. $this->PrestudentModel->escape($studiensemester_kurzbz)
|
||||||
FROM public.tbl_prestudentstatus pss
|
. ") AS statusofsemester"
|
||||||
WHERE pss.prestudent_id = public.tbl_prestudent.prestudent_id
|
|
||||||
AND pss.studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
|
||||||
ORDER BY GREATEST(pss.datum, '0001-01-01') DESC
|
|
||||||
LIMIT 1
|
|
||||||
) AS statusofsemester"
|
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->PrestudentModel->addJoin('public.tbl_student s', 'prestudent_id', 'LEFT');
|
$this->PrestudentModel->addJoin('public.tbl_student s', 'prestudent_id', 'LEFT');
|
||||||
@@ -547,6 +546,7 @@ class Student extends FHCAPI_Controller
|
|||||||
|
|
||||||
$this->_validate();
|
$this->_validate();
|
||||||
|
|
||||||
|
// TODO(chris): This should be in a library
|
||||||
$this->load->model('crm/Student_model', 'StudentModel');
|
$this->load->model('crm/Student_model', 'StudentModel');
|
||||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
||||||
$this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
|
$this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
|
||||||
@@ -798,8 +798,8 @@ class Student extends FHCAPI_Controller
|
|||||||
$this->form_validation->set_rules('geschlecht', 'Geschlecht', 'callback_requiredIfNotPersonId', [
|
$this->form_validation->set_rules('geschlecht', 'Geschlecht', 'callback_requiredIfNotPersonId', [
|
||||||
'requiredIfNotPersonId' => $this->p->t('ui', 'error_fieldRequired', ['field' => $this->p->t('person', 'geschlecht')])
|
'requiredIfNotPersonId' => $this->p->t('ui', 'error_fieldRequired', ['field' => $this->p->t('person', 'geschlecht')])
|
||||||
]);
|
]);
|
||||||
$this->form_validation->set_rules('gebdatum', 'Geburtsdatum', ['isValidDate', function($value) { return isValidDate($value); }], [
|
$this->form_validation->set_rules('gebdatum', 'Geburtsdatum', 'is_valid_date', [
|
||||||
'isValidDate' => $this->p->t('ui', 'error_invalid_date')
|
'is_valid_date' => $this->p->t('ui', 'error_invalid_date')
|
||||||
]);
|
]);
|
||||||
//$this->form_validation->set_rules('address[checked]', 'Address', 'required');
|
//$this->form_validation->set_rules('address[checked]', 'Address', 'required');
|
||||||
$this->form_validation->set_rules('address[plz]', 'PLZ', 'callback_requiredIfAddressFunc', [
|
$this->form_validation->set_rules('address[plz]', 'PLZ', 'callback_requiredIfAddressFunc', [
|
||||||
|
|||||||
@@ -801,14 +801,9 @@ class Students extends FHCAPI_Controller
|
|||||||
|
|
||||||
//add status per semester
|
//add status per semester
|
||||||
$this->PrestudentModel->addSelect(
|
$this->PrestudentModel->addSelect(
|
||||||
"(
|
"public.get_rolle_prestudent(public.tbl_prestudent.prestudent_id, "
|
||||||
SELECT status_kurzbz
|
. $this->PrestudentModel->escape($studiensemester_kurzbz)
|
||||||
FROM public.tbl_prestudentstatus pss
|
. ") AS statusofsemester"
|
||||||
WHERE pss.prestudent_id = public.tbl_prestudent.prestudent_id
|
|
||||||
AND pss.studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
|
||||||
ORDER BY GREATEST(pss.datum, '0001-01-01') DESC
|
|
||||||
LIMIT 1
|
|
||||||
) AS statusofsemester"
|
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->addSelectPrioRel();
|
$this->addSelectPrioRel();
|
||||||
@@ -855,6 +850,41 @@ class Students extends FHCAPI_Controller
|
|||||||
{
|
{
|
||||||
$stdsemEsc = $studiensemester_kurzbz ? $this->PrestudentModel->escape($studiensemester_kurzbz) : 'NULL';
|
$stdsemEsc = $studiensemester_kurzbz ? $this->PrestudentModel->escape($studiensemester_kurzbz) : 'NULL';
|
||||||
|
|
||||||
|
$this->load->config('stv');
|
||||||
|
$tags = $this->config->item('stv_prestudent_tags');
|
||||||
|
|
||||||
|
$whereTags = '';
|
||||||
|
if (is_array($tags) && !isEmptyArray($tags)) {
|
||||||
|
$tags = array_keys($tags);
|
||||||
|
|
||||||
|
foreach ($tags as $key => $tag) {
|
||||||
|
$tags[$key] = $this->db->escape($tag);
|
||||||
|
}
|
||||||
|
$whereTags = " AND nt.typ_kurzbz IN (" . implode(",", $tags) . ")";
|
||||||
|
}
|
||||||
|
$subQueryTag = "
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
tag.prestudent_id,
|
||||||
|
COALESCE(json_agg(tag ORDER BY tag.done), '[]'::json) AS tags
|
||||||
|
FROM (
|
||||||
|
SELECT DISTINCT ON (n.notiz_id)
|
||||||
|
n.notiz_id AS id,
|
||||||
|
nt.typ_kurzbz,
|
||||||
|
array_to_json(nt.bezeichnung_mehrsprachig)->>0 AS beschreibung,
|
||||||
|
n.text AS notiz,
|
||||||
|
nt.style,
|
||||||
|
n.erledigt AS done,
|
||||||
|
nz.prestudent_id
|
||||||
|
FROM public.tbl_notizzuordnung AS nz
|
||||||
|
JOIN public.tbl_notiz AS n ON nz.notiz_id = n.notiz_id
|
||||||
|
JOIN public.tbl_notiz_typ AS nt ON n.typ = nt.typ_kurzbz "
|
||||||
|
. $whereTags .
|
||||||
|
"
|
||||||
|
) AS tag
|
||||||
|
GROUP BY tag.prestudent_id
|
||||||
|
) AS tag_data_agg
|
||||||
|
";
|
||||||
|
|
||||||
$this->PrestudentModel->addJoin('public.tbl_studiengang stg', 'studiengang_kz', 'LEFT');
|
$this->PrestudentModel->addJoin('public.tbl_studiengang stg', 'studiengang_kz', 'LEFT');
|
||||||
$this->PrestudentModel->addJoin('public.tbl_person p', 'person_id');
|
$this->PrestudentModel->addJoin('public.tbl_person p', 'person_id');
|
||||||
@@ -877,8 +907,11 @@ class Students extends FHCAPI_Controller
|
|||||||
AND ps.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')
|
AND ps.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')
|
||||||
AND ps.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')', 'LEFT');
|
AND ps.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')', 'LEFT');
|
||||||
|
|
||||||
|
$this->PrestudentModel->addJoin($subQueryTag, 'tag_data_agg.prestudent_id = tbl_prestudent.prestudent_id', 'LEFT');
|
||||||
|
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect("b.uid");
|
$this->PrestudentModel->addSelect("b.uid");
|
||||||
|
$this->PrestudentModel->addSelect('tag_data_agg.tags');
|
||||||
$this->PrestudentModel->addSelect('titelpre');
|
$this->PrestudentModel->addSelect('titelpre');
|
||||||
$this->PrestudentModel->addSelect('nachname');
|
$this->PrestudentModel->addSelect('nachname');
|
||||||
$this->PrestudentModel->addSelect('vorname');
|
$this->PrestudentModel->addSelect('vorname');
|
||||||
@@ -897,14 +930,9 @@ class Students extends FHCAPI_Controller
|
|||||||
|
|
||||||
//add status per semester
|
//add status per semester
|
||||||
$this->PrestudentModel->addSelect(
|
$this->PrestudentModel->addSelect(
|
||||||
"(
|
"public.get_rolle_prestudent(public.tbl_prestudent.prestudent_id, "
|
||||||
SELECT status_kurzbz
|
. $this->PrestudentModel->escape($studiensemester_kurzbz)
|
||||||
FROM public.tbl_prestudentstatus pss
|
. ") AS statusofsemester"
|
||||||
WHERE pss.prestudent_id = public.tbl_prestudent.prestudent_id
|
|
||||||
AND pss.studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
|
||||||
ORDER BY GREATEST(pss.datum, '0001-01-01') DESC
|
|
||||||
LIMIT 1
|
|
||||||
) AS statusofsemester"
|
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect('UPPER(stg.typ || stg.kurzbz) AS studiengang');
|
$this->PrestudentModel->addSelect('UPPER(stg.typ || stg.kurzbz) AS studiengang');
|
||||||
@@ -941,6 +969,7 @@ class Students extends FHCAPI_Controller
|
|||||||
|
|
||||||
$this->PrestudentModel->addSelect('mentor');
|
$this->PrestudentModel->addSelect('mentor');
|
||||||
$this->PrestudentModel->addSelect('b.aktiv AS bnaktiv');
|
$this->PrestudentModel->addSelect('b.aktiv AS bnaktiv');
|
||||||
|
$this->PrestudentModel->addSelect('unruly');
|
||||||
|
|
||||||
$this->PrestudentModel->db->where_in('tbl_prestudent.studiengang_kz', $this->allowedStgs);
|
$this->PrestudentModel->db->where_in('tbl_prestudent.studiengang_kz', $this->allowedStgs);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (!defined('BASEPATH'))
|
||||||
|
exit('No direct script access allowed');
|
||||||
|
|
||||||
|
class Tags extends Tag_Controller
|
||||||
|
{
|
||||||
|
const BERECHTIGUNG_KURZBZ = ['admin:rw', 'assistenz:rw'];
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'getTag' => self::BERECHTIGUNG_KURZBZ,
|
||||||
|
'getTags' => self::BERECHTIGUNG_KURZBZ,
|
||||||
|
'addTag' => self::BERECHTIGUNG_KURZBZ,
|
||||||
|
'updateTag' => self::BERECHTIGUNG_KURZBZ,
|
||||||
|
'doneTag' => self::BERECHTIGUNG_KURZBZ,
|
||||||
|
'deleteTag' => self::BERECHTIGUNG_KURZBZ
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->config->load('stv');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTag($readonly_tags = null)
|
||||||
|
{
|
||||||
|
parent::getTag($this->config->item('stv_prestudent_tags'));
|
||||||
|
}
|
||||||
|
public function getTags($tags = null)
|
||||||
|
{
|
||||||
|
parent::getTags($this->config->item('stv_prestudent_tags'));
|
||||||
|
}
|
||||||
|
public function addTag($withZuordnung = true, $updatable_tags = null)
|
||||||
|
{
|
||||||
|
parent::addTag(true, $this->config->item('stv_prestudent_tags'));
|
||||||
|
}
|
||||||
|
public function updateTag($updatable_tags = null)
|
||||||
|
{
|
||||||
|
parent::updateTag($this->config->item('stv_prestudent_tags'));
|
||||||
|
}
|
||||||
|
public function deleteTag($withZuordnung = true, $updatable_tags = null)
|
||||||
|
{
|
||||||
|
parent::deleteTag(true, $this->config->item('stv_prestudent_tags'));
|
||||||
|
}
|
||||||
|
public function doneTag($updatable_tags = null)
|
||||||
|
{
|
||||||
|
parent::doneTag($this->config->item('stv_prestudent_tags'));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -76,9 +76,7 @@ class Vertrag extends FHCAPI_Controller
|
|||||||
|
|
||||||
if (isError($allOe)) $this->terminateWithError(getError($allOe), self::ERROR_TYPE_GENERAL);
|
if (isError($allOe)) $this->terminateWithError(getError($allOe), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
$allOe = hasData($allOe) ? getData($allOe) : [];
|
$allOe = hasData($allOe) ? array_column(getData($allOe), 'oe_kurzbz') : [];
|
||||||
|
|
||||||
$this->addMeta('oe', $allOe);
|
|
||||||
|
|
||||||
// * then check if the user has permissions to cancel the corresponding lv-organisational units
|
// * then check if the user has permissions to cancel the corresponding lv-organisational units
|
||||||
if (!$this->permissionlib->isBerechtigtMultipleOe('admin', $allOe, 'suid') &&
|
if (!$this->permissionlib->isBerechtigtMultipleOe('admin', $allOe, 'suid') &&
|
||||||
|
|||||||
@@ -0,0 +1,62 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2024 fhcomplete.org
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use CI3_Events as Events;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This controller operates between (interface) the JS (GUI) and the back-end
|
||||||
|
* Provides data to the ajax get calls about the VV Config
|
||||||
|
* This controller works with JSON calls on the HTTP GET or POST and the output is always JSON
|
||||||
|
*/
|
||||||
|
class Config extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'printDocument' => ['vertrag/mitarbeiter:r'],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function printDocument()
|
||||||
|
{
|
||||||
|
$params = [];
|
||||||
|
$menu = [];
|
||||||
|
|
||||||
|
Events::trigger(
|
||||||
|
'multiActionPrintHonorarvertrag',
|
||||||
|
// passing $menu per reference
|
||||||
|
function & () use (&$menu) {
|
||||||
|
return $menu;
|
||||||
|
},
|
||||||
|
$params
|
||||||
|
);
|
||||||
|
|
||||||
|
if (is_array($menu) && isset($menu[0]))
|
||||||
|
{
|
||||||
|
$this->terminateWithSuccess($menu[0]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// $this->terminateWithError('Error with Event 'multiActionPrintHonorarvertrag');
|
||||||
|
$this->terminateWithSuccess();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -26,9 +26,6 @@ class Vertraege extends FHCAPI_Controller
|
|||||||
'deleteLehrauftrag' =>['vertrag/mitarbeiter:w'],
|
'deleteLehrauftrag' =>['vertrag/mitarbeiter:w'],
|
||||||
'deleteBetreuung' =>['vertrag/mitarbeiter:w'],
|
'deleteBetreuung' =>['vertrag/mitarbeiter:w'],
|
||||||
'getMitarbeiter' => ['vertrag/mitarbeiter:r'],
|
'getMitarbeiter' => ['vertrag/mitarbeiter:r'],
|
||||||
'getHeader' => ['vertrag/mitarbeiter:r'],
|
|
||||||
'getPersonAbteilung' => ['vertrag/mitarbeiter:r'],
|
|
||||||
'getLeitungOrg' => ['vertrag/mitarbeiter:r'],
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
//Load Models and Libraries
|
//Load Models and Libraries
|
||||||
@@ -241,7 +238,7 @@ class Vertraege extends FHCAPI_Controller
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->db->trans_complete();
|
$this->db->trans_complete();
|
||||||
$this->terminateWithSuccess(true);
|
$this->terminateWithSuccess($vertrag_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function updateContract()
|
public function updateContract()
|
||||||
@@ -358,7 +355,7 @@ class Vertraege extends FHCAPI_Controller
|
|||||||
}
|
}
|
||||||
$this->db->trans_complete();
|
$this->db->trans_complete();
|
||||||
|
|
||||||
$this->terminateWithSuccess(true);
|
$this->terminateWithSuccess($vertrag_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function loadContract($vertrag_id)
|
public function loadContract($vertrag_id)
|
||||||
@@ -684,37 +681,4 @@ class Vertraege extends FHCAPI_Controller
|
|||||||
}
|
}
|
||||||
return $this->terminateWithSuccess(getData($result));
|
return $this->terminateWithSuccess(getData($result));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getPersonAbteilung($mitarbeiter_uid)
|
|
||||||
{
|
|
||||||
$this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel');
|
|
||||||
|
|
||||||
$result = $this->Mitarbeitermodel->getPersonAbteilung($mitarbeiter_uid);
|
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess(current($data));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getLeitungOrg($oekurzbz)
|
|
||||||
{
|
|
||||||
$this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel');
|
|
||||||
|
|
||||||
$result = $this->Mitarbeitermodel->getLeitungOrg($oekurzbz);
|
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess(current($data));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getHeader($person_id)
|
|
||||||
{
|
|
||||||
$this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel');
|
|
||||||
|
|
||||||
$result = $this->Mitarbeitermodel->getHeader($person_id);
|
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess(current($data));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,19 +33,26 @@ class Widget extends Auth_Controller
|
|||||||
return $this->outputJsonSuccess([
|
return $this->outputJsonSuccess([
|
||||||
"widget_id" => 0,
|
"widget_id" => 0,
|
||||||
"widget_kurzbz" => "notfound",
|
"widget_kurzbz" => "notfound",
|
||||||
"arguments" => json_encode([
|
"arguments" => [
|
||||||
"className" => 'alert-danger',
|
"className" => 'alert-danger',
|
||||||
"title" => 'Widget Not Found',
|
"title" => 'Widget Not Found',
|
||||||
"msg" => 'The widget with the id ' . $widget_id . ' could not be found'
|
"msg" => 'The widget with the id ' . $widget_id . ' could not be found'
|
||||||
]),
|
],
|
||||||
"setup" => json_encode([
|
"setup" => [
|
||||||
"name" => 'Widget Not Found',
|
"name" => 'Widget Not Found',
|
||||||
"file" => 'DashboardWidget/Default.js',
|
"file" => absoluteJsImportUrl('public/js/components/DashboardWidget/Default.js'),
|
||||||
"width" => 1,
|
"width" => 1,
|
||||||
"height" => 1
|
"height" => 1
|
||||||
])
|
]
|
||||||
]);
|
]);
|
||||||
return $this->outputJsonSuccess(current(getData($widget)));
|
|
||||||
|
$widget = current(getData($widget));
|
||||||
|
$widget->arguments = json_decode($widget->arguments);
|
||||||
|
$tmpsetup = json_decode($widget->setup);
|
||||||
|
$tmpsetup->file = absoluteJsImportUrl($tmpsetup->file);
|
||||||
|
$widget->setup = $tmpsetup;
|
||||||
|
|
||||||
|
return $this->outputJsonSuccess($widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAll()
|
public function getAll()
|
||||||
@@ -56,7 +63,16 @@ class Widget extends Auth_Controller
|
|||||||
if (isError($result))
|
if (isError($result))
|
||||||
return $this->outputJsonError(getError($result));
|
return $this->outputJsonError(getError($result));
|
||||||
|
|
||||||
$this->outputJsonSuccess(getData($result) ?: []);
|
$tmpwidgets = getData($result) ?: [];
|
||||||
|
$widgets = array_map(function($widget) {
|
||||||
|
$widget->arguments = json_decode($widget->arguments);
|
||||||
|
$tmpsetup = json_decode($widget->setup);
|
||||||
|
$tmpsetup->file = absoluteJsImportUrl($tmpsetup->file);
|
||||||
|
$widget->setup = $tmpsetup;
|
||||||
|
return $widget;
|
||||||
|
}, $tmpwidgets);
|
||||||
|
|
||||||
|
$this->outputJsonSuccess($widgets);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getWidgetsForDashboard()
|
public function getWidgetsForDashboard()
|
||||||
@@ -71,7 +87,16 @@ class Widget extends Auth_Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->outputJsonSuccess(getData($result) ?: []);
|
$tmpwidgets = getData($result) ?: [];
|
||||||
|
$widgets = array_map(function($widget) {
|
||||||
|
$widget->arguments = json_decode($widget->arguments);
|
||||||
|
$tmpsetup = json_decode($widget->setup);
|
||||||
|
$tmpsetup->file = absoluteJsImportUrl($tmpsetup->file);
|
||||||
|
$widget->setup = $tmpsetup;
|
||||||
|
return $widget;
|
||||||
|
}, $tmpwidgets);
|
||||||
|
|
||||||
|
$this->outputJsonSuccess($widgets);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setAllowed()
|
public function setAllowed()
|
||||||
|
|||||||
@@ -0,0 +1,900 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
class AbgabetoolJob extends JOB_Controller
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
|
||||||
|
$this->_ci =& get_instance();
|
||||||
|
|
||||||
|
$this->_ci->load->helper('hlp_sancho_helper');
|
||||||
|
|
||||||
|
$this->_ci->load->model('education/Projektarbeit_model', 'ProjektarbeitModel');
|
||||||
|
$this->_ci->load->model('education/Projektbetreuer_model', 'ProjektbetreuerModel');
|
||||||
|
$this->_ci->load->model('education/Paabgabe_model', 'PaabgabeModel');
|
||||||
|
$this->_ci->load->model('crm/Student_model', 'StudentModel');
|
||||||
|
$this->_ci->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||||
|
$this->_ci->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel');
|
||||||
|
|
||||||
|
$this->_ci->load->library('SignatureLib');
|
||||||
|
|
||||||
|
$this->_ci->load->config('abgabe');
|
||||||
|
$this->loadPhrases([
|
||||||
|
'abgabetool'
|
||||||
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// basically the notifyBetreuerMail function but email goes to assistenz
|
||||||
|
// and new abgaben are further evaluated for missing signature status
|
||||||
|
public function notifyAssistenzAboutMissingSignatureUploads() {
|
||||||
|
$this->_ci->logInfo('Start job FHC-Core->notifyAssistenzAboutMissingSignatureUploads');
|
||||||
|
|
||||||
|
$interval = $this->_ci->config->item('PAABGABE_EMAIL_JOB_INTERVAL');
|
||||||
|
$relevantTypes = $this->_ci->config->item('RELEVANT_PAABGABETYPEN_SAMMELMAIL_ASSISTENZ');
|
||||||
|
|
||||||
|
$result = $this->_ci->PaabgabeModel->findAbgabenNewOrUpdatedSinceByAbgabedatum($interval, $relevantTypes);
|
||||||
|
$retval = getData($result);
|
||||||
|
|
||||||
|
// retval are paabgaben joined with projektarbeit and betreuer
|
||||||
|
if(count($retval) == 0) {
|
||||||
|
$this->logInfo("Keine Emails über neue Paabgaben an Assistenzen versandt");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// group changed/new abgaben for projektarbeiten
|
||||||
|
$projektarbeiten = [];
|
||||||
|
foreach($retval as $abgabeWithNewUpload) {
|
||||||
|
// Check if the current item has a 'projektarbeit_id' field.
|
||||||
|
// Replace 'projektarbeit_id' with the actual key name if it's different.
|
||||||
|
if (isset($abgabeWithNewUpload->projektarbeit_id)) {
|
||||||
|
$projektarbeitId = $abgabeWithNewUpload->projektarbeit_id;
|
||||||
|
|
||||||
|
// If the 'projektarbeit_id' is not yet a key in $projektarbeiten,
|
||||||
|
// initialize it as an empty array.
|
||||||
|
if (!isset($projektarbeiten[$projektarbeitId])) {
|
||||||
|
$projektarbeiten[$projektarbeitId] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
// check signature for that abgabe, main point of this job
|
||||||
|
$this->checkAbgabeSignatur($abgabeWithNewUpload, $abgabeWithNewUpload->student_uid);
|
||||||
|
|
||||||
|
// Add the current row to the array associated with its 'projektarbeit_id'.
|
||||||
|
$projektarbeiten[$projektarbeitId][] = $abgabeWithNewUpload;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// for each projektarbeit fetch their assistenz and same them in their own dictionary to avoid too many mails
|
||||||
|
$assistenzMap = [];
|
||||||
|
// for each projektarbeit fetch their betreuer and save them in their own dictionary to avoid too many mails
|
||||||
|
$projektarbeitBetreuerMap = [];
|
||||||
|
forEach($projektarbeiten as $projektarbeit_id => $abgaben) {
|
||||||
|
|
||||||
|
$assistenzResult = $this->_ci->OrganisationseinheitModel->getAssistenzForOE($abgaben[0]->stg_oe_kurzbz);
|
||||||
|
|
||||||
|
forEach($assistenzResult->retval as $assistenzRow) {
|
||||||
|
if (!isset($assistenzMap[$assistenzRow->person_id])) {
|
||||||
|
$assistenzMap[$assistenzRow->person_id] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the current $assistenzRow to the $assistenzMap as an array associated with its projektarbeit_id.
|
||||||
|
$assistenzMap[$assistenzRow->person_id][] = [$projektarbeit_id, $assistenzRow];
|
||||||
|
}
|
||||||
|
|
||||||
|
$betreuerResult = $this->_ci->ProjektbetreuerModel->getAllBetreuerOfProjektarbeit($projektarbeit_id);
|
||||||
|
|
||||||
|
forEach($betreuerResult->retval as $betreuerRow) {
|
||||||
|
if (!isset($projektarbeitBetreuerMap[$projektarbeit_id])) {
|
||||||
|
$projektarbeitBetreuerMap[$projektarbeit_id] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the current betreuerRow to the betreuerMap as an array associated with its projektarbeit_id.
|
||||||
|
$projektarbeitBetreuerMap[$projektarbeit_id][] = $betreuerRow;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$count = 0;
|
||||||
|
foreach($assistenzMap as $assistenz_person_id => $tupelArr) {
|
||||||
|
|
||||||
|
$abgabenString = '<div style="font-family: Arial, sans-serif; color: #333;">';
|
||||||
|
$hasIssues = false; // Track if this assistant actually needs an email
|
||||||
|
|
||||||
|
foreach($tupelArr as $tupel) {
|
||||||
|
$projektarbeit_id = $tupel[0];
|
||||||
|
$assistenzRow = $tupel[1];
|
||||||
|
|
||||||
|
$betreuerArray = $projektarbeitBetreuerMap[$projektarbeit_id] ?? [];
|
||||||
|
$allAbgaben = $projektarbeiten[$projektarbeit_id];
|
||||||
|
|
||||||
|
// only keep abgaben that are not correctly signed
|
||||||
|
$issueAbgaben = array_filter($allAbgaben, function($abgabe) {
|
||||||
|
// We only care about cases where it's explicitly NOT true (false, error, or null)
|
||||||
|
return $abgabe->signatur !== true;
|
||||||
|
});
|
||||||
|
|
||||||
|
// if this specific project has no signature issues, skip to the next project
|
||||||
|
if(empty($issueAbgaben)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we reached here, we have at least one issue to report
|
||||||
|
$hasIssues = true;
|
||||||
|
|
||||||
|
// Format the Student Name (using the first available abgabe object)
|
||||||
|
$s = reset($issueAbgaben);
|
||||||
|
$nameParts = array_filter([$s->titelpre, $s->vorname, $s->nachname, $s->titelpost]);
|
||||||
|
$studentFullName = implode(' ', $nameParts);
|
||||||
|
|
||||||
|
// Format the Supervisors string
|
||||||
|
$betreuerStrings = [];
|
||||||
|
foreach($betreuerArray as $b) {
|
||||||
|
$bNameParts = array_filter([$b->titelpre, $b->vorname, $b->nachname, $b->titelpost]);
|
||||||
|
$bFullName = implode(' ', $bNameParts);
|
||||||
|
$betreuerStrings[] = "{$bFullName} ({$b->betreuerart_kurzbz})";
|
||||||
|
}
|
||||||
|
$allBetreuerFormatted = implode(', ', $betreuerStrings);
|
||||||
|
|
||||||
|
$projektarbeit_titel = $s->titel ?? 'Kein Titel vergeben';
|
||||||
|
|
||||||
|
// Project Header Section
|
||||||
|
$abgabenString .= "
|
||||||
|
<div style='margin-top: 25px; padding: 12px; background-color: #fff5f5; border-left: 4px solid #dc3545; border-bottom: 1px solid #fee;'>
|
||||||
|
<strong style='font-size: 16px; color: #b02a37;'>Projekt: {$projektarbeit_titel}</strong><br/>
|
||||||
|
<div style='margin-top: 5px; font-size: 14px;'>
|
||||||
|
<strong>Studierende/r:</strong> {$studentFullName}
|
||||||
|
</div>
|
||||||
|
<div style='margin-top: 3px; font-size: 14px;'>
|
||||||
|
<strong>Betreuer:</strong> {$allBetreuerFormatted}
|
||||||
|
</div>
|
||||||
|
<span style='color: #666; font-size: 12px;'>
|
||||||
|
ID: {$projektarbeit_id} | Stg: {$s->stgtyp}{$s->stgkz} ({$s->studiensemester_kurzbz})
|
||||||
|
</span>
|
||||||
|
</div>";
|
||||||
|
|
||||||
|
// Start Table
|
||||||
|
$abgabenString .= '
|
||||||
|
<table style="width: 100%; border-collapse: collapse; margin-bottom: 25px;">
|
||||||
|
<thead>
|
||||||
|
<tr style="background-color: #f8f9fa; text-align: left;">
|
||||||
|
<th style="padding: 10px; border: 1px solid #ddd; font-size: 13px; width: 20%;">Datum</th>
|
||||||
|
<th style="padding: 10px; border: 1px solid #ddd; font-size: 13px; width: 45%;">Abgabe/Bezeichnung</th>
|
||||||
|
<th style="padding: 10px; border: 1px solid #ddd; font-size: 13px; width: 35%;">Status</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>';
|
||||||
|
|
||||||
|
$printed = []; // lazy hack to avoid duplicate rows
|
||||||
|
foreach ($issueAbgaben as $abgabe) {
|
||||||
|
// if we had this paabgabe already (erstbetreuer/zweitbetreuer fetch achieves duplicates
|
||||||
|
if(in_array($abgabe->paabgabe_id, $printed)) {
|
||||||
|
continue; // skip this forEach iteration
|
||||||
|
}
|
||||||
|
|
||||||
|
$printed[] = $abgabe->paabgabe_id;
|
||||||
|
|
||||||
|
$abgabedatumFormatted = (new DateTime($abgabe->abgabedatum))->format('d.m.Y');
|
||||||
|
|
||||||
|
// label and color
|
||||||
|
if ($abgabe->signatur === false) {
|
||||||
|
$sigLabel = "FEHLENDE SIGNATUR";
|
||||||
|
$sigBg = "#dc3545";
|
||||||
|
} elseif ($abgabe->signatur === 'error') {
|
||||||
|
$sigLabel = "PRÜFUNG FEHLGESCHLAGEN";
|
||||||
|
$sigBg = "#fd7e14";
|
||||||
|
} else {
|
||||||
|
$sigLabel = "DATEI NICHT GEFUNDEN";
|
||||||
|
$sigBg = "#6c757d";
|
||||||
|
}
|
||||||
|
|
||||||
|
$abgabenString .= "
|
||||||
|
<tr>
|
||||||
|
<td style='padding: 10px; border: 1px solid #ddd; font-size: 13px; vertical-align: top;'>{$abgabedatumFormatted}</td>
|
||||||
|
<td style='padding: 10px; border: 1px solid #ddd; font-size: 13px;'>
|
||||||
|
<strong>{$abgabe->bezeichnung}</strong>
|
||||||
|
</td>
|
||||||
|
<td style='padding: 10px; border: 1px solid #ddd; font-size: 13px; text-align: center;'>
|
||||||
|
<span style='color: #fff; background-color: {$sigBg}; padding: 3px 8px; border-radius: 3px; font-weight: bold; font-size: 11px;'>
|
||||||
|
{$sigLabel}
|
||||||
|
</span>
|
||||||
|
</td>
|
||||||
|
</tr>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$abgabenString .= '</tbody></table>';
|
||||||
|
}
|
||||||
|
|
||||||
|
$abgabenString .= '</div>';
|
||||||
|
|
||||||
|
// only send the email if at least one project had an issue
|
||||||
|
if ($hasIssues) {
|
||||||
|
$assistenzRow = $tupelArr[0][1];
|
||||||
|
$anrede = $assistenzRow->anrede;
|
||||||
|
$anredeFillString = $assistenzRow->anrede == "Herr" ? "r" : "";
|
||||||
|
$fullFormattedNameString = $assistenzRow->first;
|
||||||
|
|
||||||
|
$path = $this->_ci->config->item('URL_ASSISTENZ');
|
||||||
|
$url = CIS_ROOT . $path;
|
||||||
|
|
||||||
|
$body_fields = array(
|
||||||
|
'anrede' => $anrede,
|
||||||
|
'anredeFillString' => $anredeFillString,
|
||||||
|
'fullFormattedNameString' => $fullFormattedNameString,
|
||||||
|
'abgabenString' => $abgabenString,
|
||||||
|
'linkAbgabetool' => $url
|
||||||
|
);
|
||||||
|
|
||||||
|
$email = $assistenzRow->uid . "@" . DOMAIN;
|
||||||
|
|
||||||
|
sendSanchoMail(
|
||||||
|
'PAANoSigAssSM',
|
||||||
|
$body_fields,
|
||||||
|
$email,
|
||||||
|
$this->p->t('abgabetool', 'c4missingSignatureNotification')
|
||||||
|
);
|
||||||
|
|
||||||
|
$count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_ci->logInfo($count . " Emails bezüglich fehlender Signaturen erfolgreich versandt");
|
||||||
|
$this->_ci->logInfo('End job FHC-Core->notifyAssistenzAboutMissingSignatureUploads');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* helper function to check the signature status of uploaded files for zwischenabgabe & endupload
|
||||||
|
*/
|
||||||
|
private function checkAbgabeSignatur($abgabe, $student_uid) {
|
||||||
|
$paabgabetypenToCheck = $this->config->item('SIGNATUR_CHECK_PAABGABETYPEN');
|
||||||
|
|
||||||
|
if(!in_array($abgabe->paabgabetyp_kurzbz, $paabgabetypenToCheck)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!defined('SIGNATUR_URL')) {
|
||||||
|
$abgabe->signatur = 'error';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$path = PAABGABE_PATH.$abgabe->paabgabe_id.'_'.$student_uid.'.pdf';
|
||||||
|
|
||||||
|
$signaturVorhanden = null; // if frontend receives null -> indicates no file found at path
|
||||||
|
if(file_exists($path)) {
|
||||||
|
|
||||||
|
// Check if the document is signed
|
||||||
|
$signList = SignatureLib::list($path);
|
||||||
|
if (is_array($signList) && count($signList) > 0)
|
||||||
|
{
|
||||||
|
// The document is signed
|
||||||
|
$signaturVorhanden = true;
|
||||||
|
}
|
||||||
|
elseif ($signList === null)
|
||||||
|
{
|
||||||
|
// frontend knows to handle it this way for signatures
|
||||||
|
$signaturVorhanden = 'error';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$signaturVorhanden = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$abgabe->signatur = $signaturVorhanden;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function notifyAssistenzAboutChangedAbgaben() {
|
||||||
|
|
||||||
|
$this->_ci->logInfo('Start job FHC-Core->notifyAssistenzAboutChangedAbgaben');
|
||||||
|
|
||||||
|
$interval = $this->_ci->config->item('PAABGABE_EMAIL_JOB_INTERVAL');
|
||||||
|
$relevantTypes = $this->_ci->config->item('RELEVANT_PAABGABETYPEN_SAMMELMAIL_ASSISTENZ');
|
||||||
|
// get all new or changed termine in interval
|
||||||
|
$result = $this->_ci->PaabgabeModel->findAbgabenNewOrUpdatedSince($interval, $relevantTypes);
|
||||||
|
|
||||||
|
$retval = getData($result);
|
||||||
|
|
||||||
|
if(count($retval) == 0) {
|
||||||
|
$this->_ci->logInfo("Keine Emails an Assistenzen über neue oder veränderte Termine versandt");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// group changed/new abgaben for projektarbeiten
|
||||||
|
$projektarbeiten = [];
|
||||||
|
foreach($retval as $newOrChangedAbgabe) {
|
||||||
|
// Check if the current item has a 'projektarbeit_id' field.
|
||||||
|
// Replace 'projektarbeit_id' with the actual key name if it's different.
|
||||||
|
if (isset($newOrChangedAbgabe->projektarbeit_id)) {
|
||||||
|
$projektarbeitId = $newOrChangedAbgabe->projektarbeit_id;
|
||||||
|
|
||||||
|
// If the 'projektarbeit_id' is not yet a key in $projektarbeiten,
|
||||||
|
// initialize it as an empty array.
|
||||||
|
if (!isset($projektarbeiten[$projektarbeitId])) {
|
||||||
|
$projektarbeiten[$projektarbeitId] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the current row to the array associated with its 'projektarbeit_id'.
|
||||||
|
$projektarbeiten[$projektarbeitId][] = $newOrChangedAbgabe;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// for each projektarbeit fetch their assistenz and same them in their own dictionary to avoid too many mails
|
||||||
|
$assistenzMap = [];
|
||||||
|
// for each projektarbeit fetch their betreuer and save them in their own dictionary to avoid too many mails
|
||||||
|
$projektarbeitBetreuerMap = [];
|
||||||
|
forEach($projektarbeiten as $projektarbeit_id => $abgaben) {
|
||||||
|
|
||||||
|
$assistenzResult = $this->_ci->OrganisationseinheitModel->getAssistenzForOE($abgaben[0]->stg_oe_kurzbz);
|
||||||
|
|
||||||
|
forEach($assistenzResult->retval as $assistenzRow) {
|
||||||
|
if (!isset($assistenzMap[$assistenzRow->person_id])) {
|
||||||
|
$assistenzMap[$assistenzRow->person_id] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the current $assistenzRow to the $assistenzMap as an array associated with its projektarbeit_id.
|
||||||
|
$assistenzMap[$assistenzRow->person_id][] = [$projektarbeit_id, $assistenzRow];
|
||||||
|
}
|
||||||
|
|
||||||
|
$betreuerResult = $this->_ci->ProjektbetreuerModel->getAllBetreuerOfProjektarbeit($projektarbeit_id);
|
||||||
|
|
||||||
|
forEach($betreuerResult->retval as $betreuerRow) {
|
||||||
|
if (!isset($projektarbeitBetreuerMap[$projektarbeit_id])) {
|
||||||
|
$projektarbeitBetreuerMap[$projektarbeit_id] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the current betreuerRow to the betreuerMap as an array associated with its projektarbeit_id.
|
||||||
|
$projektarbeitBetreuerMap[$projektarbeit_id][] = $betreuerRow;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$count = 0;
|
||||||
|
foreach($assistenzMap as $assistenz_person_id => $tupelArr) {
|
||||||
|
|
||||||
|
$abgabenString = '<div style="font-family: Arial, sans-serif; color: #333;">';
|
||||||
|
|
||||||
|
foreach($tupelArr as $tupel) {
|
||||||
|
$projektarbeit_id = $tupel[0];
|
||||||
|
$assistenzRow = $tupel[1];
|
||||||
|
|
||||||
|
$betreuerArray = $projektarbeitBetreuerMap[$projektarbeit_id] ?? [];
|
||||||
|
$changedAbgaben = $projektarbeiten[$projektarbeit_id];
|
||||||
|
|
||||||
|
$relevantAbgaben = array_values(array_filter($changedAbgaben, function($abgabetermin) use ($assistenzRow) {
|
||||||
|
if($abgabetermin->updatevon == null && $abgabetermin->insertvon != $assistenzRow->uid) {
|
||||||
|
return $abgabetermin;
|
||||||
|
} else if($abgabetermin->updatevon != null && $abgabetermin->updatevon != $assistenzRow->uid) {
|
||||||
|
return $abgabetermin;
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
if(count($relevantAbgaben) == 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Format the Student Name
|
||||||
|
$s = $relevantAbgaben[0];
|
||||||
|
$nameParts = [];
|
||||||
|
if (!empty($s->titelpre)) $nameParts[] = $s->titelpre;
|
||||||
|
$nameParts[] = $s->vorname;
|
||||||
|
$nameParts[] = $s->nachname;
|
||||||
|
if (!empty($s->titelpost)) $nameParts[] = $s->titelpost;
|
||||||
|
$studentFullName = implode(' ', $nameParts);
|
||||||
|
|
||||||
|
// Format the Supervisors string
|
||||||
|
$betreuerStrings = [];
|
||||||
|
foreach($betreuerArray as $b) {
|
||||||
|
$bNameParts = [];
|
||||||
|
if (!empty($b->titelpre)) $bNameParts[] = $b->titelpre;
|
||||||
|
$bNameParts[] = $b->vorname;
|
||||||
|
$bNameParts[] = $b->nachname;
|
||||||
|
if (!empty($b->titelpost)) $bNameParts[] = $b->titelpost;
|
||||||
|
|
||||||
|
$bFullName = implode(' ', $bNameParts);
|
||||||
|
$betreuerStrings[] = "{$bFullName} ({$b->betreuerart_kurzbz})";
|
||||||
|
}
|
||||||
|
$allBetreuerFormatted = implode(', ', $betreuerStrings);
|
||||||
|
|
||||||
|
$projektarbeit_titel = $s->titel ?? 'Kein Titel vergeben';
|
||||||
|
|
||||||
|
// Project Header Section
|
||||||
|
$abgabenString .= "
|
||||||
|
<div style='margin-top: 25px; padding: 12px; background-color: #f8f9fa; border-left: 4px solid #007bff; border-bottom: 1px solid #eee;'>
|
||||||
|
<strong style='font-size: 16px; color: #0056b3;'>Projekt: {$projektarbeit_titel}</strong><br/>
|
||||||
|
<div style='margin-top: 5px; font-size: 14px;'>
|
||||||
|
<strong>Studierende/r:</strong> {$studentFullName}
|
||||||
|
</div>
|
||||||
|
<div style='margin-top: 3px; font-size: 14px;'>
|
||||||
|
<strong>Betreuer:</strong> {$allBetreuerFormatted}
|
||||||
|
</div>
|
||||||
|
<span style='color: #666; font-size: 12px;'>
|
||||||
|
ID: {$projektarbeit_id} | Stg: {$s->stgtyp}{$s->stgkz} ({$s->studiensemester_kurzbz})
|
||||||
|
</span>
|
||||||
|
</div>";
|
||||||
|
|
||||||
|
// Start Table
|
||||||
|
$abgabenString .= '
|
||||||
|
<table style="width: 100%; border-collapse: collapse; margin-bottom: 25px;">
|
||||||
|
<thead>
|
||||||
|
<tr style="background-color: #eee; text-align: left;">
|
||||||
|
<th style="padding: 10px; border: 1px solid #ddd; font-size: 13px; width: 20%;">Zieldatum</th>
|
||||||
|
<th style="padding: 10px; border: 1px solid #ddd; font-size: 13px;">Bezeichnung</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>';
|
||||||
|
|
||||||
|
foreach ($relevantAbgaben as $abgabe) {
|
||||||
|
$dateEmailFormatted = (new DateTime($abgabe->datum))->format('d.m.Y');
|
||||||
|
$abgabedatumFormatted = (new DateTime($abgabe->abgabedatum))->format('d.m.Y');
|
||||||
|
$kurzbzLine = !empty($abgabe->kurzbz) ? "<br/><small style='color: #777; font-style: italic;'>{$abgabe->kurzbz}</small>" : "";
|
||||||
|
|
||||||
|
$abgabenString .= "
|
||||||
|
<tr>
|
||||||
|
<td style='padding: 10px; border: 1px solid #ddd; font-size: 13px; vertical-align: top;'>{$dateEmailFormatted}</td>
|
||||||
|
<td style='padding: 10px; border: 1px solid #ddd; font-size: 13px;'>
|
||||||
|
<strong>{$abgabe->bezeichnung}</strong>{$kurzbzLine}
|
||||||
|
</td>
|
||||||
|
</tr>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$abgabenString .= '</tbody></table>';
|
||||||
|
}
|
||||||
|
|
||||||
|
$abgabenString .= '</div>';
|
||||||
|
|
||||||
|
// done with building the change list, now send it
|
||||||
|
$assistenzRow = $tupelArr[0][1];
|
||||||
|
$anrede = $assistenzRow->anrede;
|
||||||
|
$anredeFillString = $assistenzRow->anrede == "Herr" ? "r" : "";
|
||||||
|
$fullFormattedNameString = $assistenzRow->first;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$path = $this->_ci->config->item('URL_ASSISTENZ');
|
||||||
|
$url = CIS_ROOT.$path;
|
||||||
|
|
||||||
|
$body_fields = array(
|
||||||
|
'anrede' => $anrede,
|
||||||
|
'anredeFillString' => $anredeFillString,
|
||||||
|
'fullFormattedNameString' => $fullFormattedNameString,
|
||||||
|
'abgabenString' => $abgabenString,
|
||||||
|
'linkAbgabetool' => $url
|
||||||
|
);
|
||||||
|
|
||||||
|
$email = $assistenzRow->uid."@".DOMAIN;
|
||||||
|
|
||||||
|
// send email with bundled info
|
||||||
|
sendSanchoMail(
|
||||||
|
'PAAChangesAssSM',
|
||||||
|
$body_fields,
|
||||||
|
$email,
|
||||||
|
$this->p->t('abgabetool', 'changedAbgabeterminev2')
|
||||||
|
);
|
||||||
|
|
||||||
|
$count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_ci->logInfo($count . " Emails erfolgreich versandt");
|
||||||
|
$this->_ci->logInfo('End job FHC-Core->notifyAssistenzAboutChangedAbgaben');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function notifyBetreuerAboutChangedAbgaben() {
|
||||||
|
|
||||||
|
$this->_ci->logInfo('Start job FHC-Core->notifyBetreuerAboutChangedAbgaben');
|
||||||
|
|
||||||
|
$interval = $this->_ci->config->item('PAABGABE_EMAIL_JOB_INTERVAL');
|
||||||
|
|
||||||
|
$relevantTypes = $this->_ci->config->item('RELEVANT_PAABGABETYPEN_SAMMELMAIL_BETREUER');
|
||||||
|
|
||||||
|
// get all new or changed termine in interval
|
||||||
|
$result = $this->_ci->PaabgabeModel->findAbgabenNewOrUpdatedSince($interval, $relevantTypes);
|
||||||
|
$retval = getData($result);
|
||||||
|
|
||||||
|
// group changed/new abgaben for projektarbeiten
|
||||||
|
$projektarbeiten = [];
|
||||||
|
foreach($retval as $newOrChangedAbgabe) {
|
||||||
|
// Check if the current item has a 'projektarbeit_id' field.
|
||||||
|
// Replace 'projektarbeit_id' with the actual key name if it's different.
|
||||||
|
if (isset($newOrChangedAbgabe->projektarbeit_id)) {
|
||||||
|
$projektarbeitId = $newOrChangedAbgabe->projektarbeit_id;
|
||||||
|
|
||||||
|
// check if the updatevon field is NOT the same as the student the projektarbeit is assigned to
|
||||||
|
// since uploading a file to a paabgabe is also putting updateamum & updatevon
|
||||||
|
// we have our own "student has uploaded a file" emailjob anyways
|
||||||
|
if($newOrChangedAbgabe->student_uid === $newOrChangedAbgabe->updatevon) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the 'projektarbeit_id' is not yet a key in $projektarbeiten,
|
||||||
|
// initialize it as an empty array.
|
||||||
|
if (!isset($projektarbeiten[$projektarbeitId])) {
|
||||||
|
$projektarbeiten[$projektarbeitId] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the current row to the array associated with its 'projektarbeit_id'.
|
||||||
|
$projektarbeiten[$projektarbeitId][] = $newOrChangedAbgabe;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(count($projektarbeiten) == 0) {
|
||||||
|
$this->_ci->logInfo("Keine Emails an Betreuer über neue oder veränderte Termine versandt");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// for each projektarbeit fetch their betreuer and save them in their own dictionary to avoid too many mails
|
||||||
|
$betreuerMap = [];
|
||||||
|
forEach($projektarbeiten as $projektarbeit_id => $abgaben) {
|
||||||
|
$betreuerResult = $this->_ci->ProjektbetreuerModel->getAllBetreuerOfProjektarbeit($projektarbeit_id);
|
||||||
|
|
||||||
|
forEach($betreuerResult->retval as $betreuerRow) {
|
||||||
|
if (!isset($betreuerMap[$betreuerRow->person_id])) {
|
||||||
|
$betreuerMap[$betreuerRow->person_id] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the current betreuerRow to the betreuerMap as an array associated with its projektarbeit_id.
|
||||||
|
$betreuerMap[$betreuerRow->person_id][] = [$projektarbeit_id, $betreuerRow];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$count = 0;
|
||||||
|
// now iterate over the betreuerMap and build 1 email about all projektarbeiten and their new/changed termine
|
||||||
|
// $tupel = [$projektarbeit_id, $betreuerRow], each betreuer has 0..n [projektarbeit_id, changedAbgaben] tupel
|
||||||
|
forEach($betreuerMap as $betreuer_person_id => $tupelArr) {
|
||||||
|
|
||||||
|
// start the container
|
||||||
|
$abgabenString = '<div style="font-family: Arial, sans-serif; color: #333;">';
|
||||||
|
|
||||||
|
$result = $this->_ci->ProjektarbeitModel->getProjektbetreuerAnrede($betreuer_person_id);
|
||||||
|
$data = getData($result)[0];
|
||||||
|
|
||||||
|
$anrede = $data->anrede;
|
||||||
|
$anredeFillString = $data->anrede == "Herr" ? "r" : "";
|
||||||
|
$fullFormattedNameString = $data->first;
|
||||||
|
|
||||||
|
forEach($tupelArr as $tupel) {
|
||||||
|
$projektarbeit_id = $tupel[0];
|
||||||
|
$betreuerRow = $tupel[1];
|
||||||
|
|
||||||
|
$changedAbgaben = $projektarbeiten[$projektarbeit_id];
|
||||||
|
|
||||||
|
$relevantAbgaben = array_values(array_filter($changedAbgaben, function($abgabetermin) use ($betreuerRow) {
|
||||||
|
if($abgabetermin->updatevon == null && $abgabetermin->insertvon != $betreuerRow->uid) {
|
||||||
|
return $abgabetermin;
|
||||||
|
} else if($abgabetermin->updatevon != null && $abgabetermin->updatevon != $betreuerRow->uid) {
|
||||||
|
return $abgabetermin;
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
if(count($relevantAbgaben) == 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// format the Student Name
|
||||||
|
$s = $relevantAbgaben[0];
|
||||||
|
$nameParts = [];
|
||||||
|
if (!empty($s->titelpre)) $nameParts[] = $s->titelpre;
|
||||||
|
$nameParts[] = $s->vorname;
|
||||||
|
$nameParts[] = $s->nachname;
|
||||||
|
if (!empty($s->titelpost)) $nameParts[] = $s->titelpost;
|
||||||
|
$studentFullName = implode(' ', $nameParts);
|
||||||
|
|
||||||
|
$projektarbeit_titel = $s->titel ?? 'Kein Titel vergeben';
|
||||||
|
|
||||||
|
// project header section
|
||||||
|
$abgabenString .= "
|
||||||
|
<div style='margin-top: 25px; padding: 12px; background-color: #f8f9fa; border-left: 4px solid #007bff; border-bottom: 1px solid #eee;'>
|
||||||
|
<strong style='font-size: 16px; color: #0056b3;'>Projekt: {$projektarbeit_titel}</strong><br/>
|
||||||
|
<div style='margin-top: 5px; font-size: 14px;'>
|
||||||
|
<strong>Studierende/r:</strong> {$studentFullName}
|
||||||
|
</div>
|
||||||
|
<span style='color: #666; font-size: 12px;'>
|
||||||
|
ID: {$projektarbeit_id} | Rolle: {$betreuerRow->betreuerart_kurzbz} |
|
||||||
|
Stg: {$s->stgtyp}{$s->stgkz} ({$s->studiensemester_kurzbz})
|
||||||
|
</span>
|
||||||
|
</div>";
|
||||||
|
|
||||||
|
// start table
|
||||||
|
$abgabenString .= '
|
||||||
|
<table style="width: 100%; border-collapse: collapse; margin-bottom: 25px;">
|
||||||
|
<thead>
|
||||||
|
<tr style="background-color: #eee; text-align: left;">
|
||||||
|
<th style="padding: 10px; border: 1px solid #ddd; font-size: 13px; width: 20%;">Zieldatum</th>
|
||||||
|
<th style="padding: 10px; border: 1px solid #ddd; font-size: 13px;">Bezeichnung</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>';
|
||||||
|
|
||||||
|
foreach ($relevantAbgaben as $abgabe) {
|
||||||
|
$dateEmailFormatted = (new DateTime($abgabe->datum))->format('d.m.Y');
|
||||||
|
$abgabedatumFormatted = (new DateTime($abgabe->abgabedatum))->format('d.m.Y');
|
||||||
|
$kurzbzLine = !empty($abgabe->kurzbz) ? "<br/><small style='color: #777; font-style: italic;'>{$abgabe->kurzbz}</small>" : "";
|
||||||
|
|
||||||
|
$abgabenString .= "
|
||||||
|
<tr>
|
||||||
|
<td style='padding: 10px; border: 1px solid #ddd; font-size: 13px; vertical-align: top;'>{$dateEmailFormatted}</td>
|
||||||
|
<td style='padding: 10px; border: 1px solid #ddd; font-size: 13px;'>
|
||||||
|
<strong>{$abgabe->bezeichnung}</strong>{$kurzbzLine}
|
||||||
|
</td>
|
||||||
|
</tr>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$abgabenString .= '</tbody></table>';
|
||||||
|
}
|
||||||
|
|
||||||
|
// close container
|
||||||
|
$abgabenString .= '</div>';
|
||||||
|
|
||||||
|
// done with building the change list, now send it
|
||||||
|
$betreuerRow = $tupelArr[0][1];
|
||||||
|
|
||||||
|
$path = $this->_ci->config->item('URL_MITARBEITER');
|
||||||
|
$url = CIS_ROOT.$path;
|
||||||
|
|
||||||
|
$body_fields = array(
|
||||||
|
'anrede' => $anrede,
|
||||||
|
'anredeFillString' => $anredeFillString,
|
||||||
|
'fullFormattedNameString' => $fullFormattedNameString,
|
||||||
|
'abgabenString' => $abgabenString,
|
||||||
|
'linkAbgabetool' => $url
|
||||||
|
);
|
||||||
|
|
||||||
|
$email = $betreuerRow->uid ? $betreuerRow->uid."@".DOMAIN : $betreuerRow->private_email;
|
||||||
|
|
||||||
|
if(!$email) {
|
||||||
|
$this->_ci->logInfo('Could not send Email for Betreuer PersonID: "'.$data->person_id.'".');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// send email with bundled info
|
||||||
|
sendSanchoMail(
|
||||||
|
'PAAChangesBetSM',
|
||||||
|
$body_fields,
|
||||||
|
$email,
|
||||||
|
$this->p->t('abgabetool', 'changedAbgabeterminev2')
|
||||||
|
);
|
||||||
|
|
||||||
|
$count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_ci->logInfo($count . " Emails erfolgreich versandt");
|
||||||
|
$this->_ci->logInfo('End job FHC-Core->notifyBetreuerAboutChangedAbgaben');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function notifyBetreuerMail() {
|
||||||
|
// send all new projektarbeit abgabe UPLOADS since the last job run to the related betreuer
|
||||||
|
// this job gathers all new or changed file uploads via field 'abgabedatum', enduploads still
|
||||||
|
// send an email directly after happening since they are kind of important
|
||||||
|
|
||||||
|
$this->_ci->logInfo('Start job FHC-Core->notifyBetreuerMail');
|
||||||
|
|
||||||
|
// dont filter for relevant types since this mail should gather all UPLOAD info
|
||||||
|
|
||||||
|
$interval = $this->_ci->config->item('PAABGABE_EMAIL_JOB_INTERVAL');
|
||||||
|
|
||||||
|
$result = $this->_ci->PaabgabeModel->findAbgabenNewOrUpdatedSinceByAbgabedatum($interval);
|
||||||
|
$retval = getData($result);
|
||||||
|
|
||||||
|
// retval are paabgaben joined with projektarbeit and betreuer
|
||||||
|
if(count($retval) == 0) {
|
||||||
|
$this->logInfo("Keine Emails über neue Paabgaben an Betreuer versandt");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// group contents per betreuer person_id
|
||||||
|
$betreuer_uids = [];
|
||||||
|
forEach($retval as $paabgabe) {
|
||||||
|
if(!isset($betreuer_uids[$paabgabe->person_id])) {
|
||||||
|
$betreuer_uids[$paabgabe->person_id] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
$betreuer_uids[$paabgabe->person_id][] = $paabgabe;
|
||||||
|
}
|
||||||
|
|
||||||
|
$count = 0;
|
||||||
|
forEach ($betreuer_uids as $person_id => $abgaben) {
|
||||||
|
// $person_id is from betreuer
|
||||||
|
|
||||||
|
$result = $this->_ci->ProjektarbeitModel->getProjektbetreuerAnrede($person_id);
|
||||||
|
$data = getData($result)[0];
|
||||||
|
|
||||||
|
$anrede = $data->anrede;
|
||||||
|
$anredeFillString = $data->anrede == "Herr" ? "r" : "";
|
||||||
|
$fullFormattedNameString = $data->first;
|
||||||
|
|
||||||
|
// sorting $abgaben array by datum
|
||||||
|
usort($abgaben, function ($a, $b) {
|
||||||
|
return strtotime($a->datum) <=> strtotime($b->datum);
|
||||||
|
});
|
||||||
|
|
||||||
|
$projektarbeit_titel = $abgaben[0]->titel;
|
||||||
|
|
||||||
|
// initialize the table and headers
|
||||||
|
$abgabenString = '
|
||||||
|
<table style="width: 100%; border-collapse: collapse; font-family: Arial, sans-serif; color: #333; margin-top: 15px; margin-bottom: 15px;">
|
||||||
|
<thead>
|
||||||
|
<tr style="background-color: #f2f2f2; text-align: left;">
|
||||||
|
<th style="padding: 10px; border: 1px solid #ddd; font-size: 13px; width: 15%;">Zieldatum</th>
|
||||||
|
<th style="padding: 10px; border: 1px solid #ddd; font-size: 13px; width: 25%;">Studierende/r</th>
|
||||||
|
<th style="padding: 10px; border: 1px solid #ddd; font-size: 13px;">Bezeichnung</th>
|
||||||
|
<th style="padding: 10px; border: 1px solid #ddd; font-size: 13px; width: 15%;">Abgabedatum</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>';
|
||||||
|
|
||||||
|
foreach ($abgaben as $abgabe) {
|
||||||
|
// format the student name
|
||||||
|
$nameParts = [];
|
||||||
|
if (!empty($abgabe->titelpre)) $nameParts[] = $abgabe->titelpre;
|
||||||
|
$nameParts[] = $abgabe->vorname;
|
||||||
|
$nameParts[] = $abgabe->nachname;
|
||||||
|
if (!empty($abgabe->titelpost)) $nameParts[] = $abgabe->titelpost;
|
||||||
|
$studentFullName = implode(' ', $nameParts);
|
||||||
|
|
||||||
|
// format dates inline
|
||||||
|
$dateEmailFormatted = (new DateTime($abgabe->datum))->format('d.m.Y');
|
||||||
|
$abgabedatumFormatted = (new DateTime($abgabe->abgabedatum))->format('d.m.Y');
|
||||||
|
|
||||||
|
// handle the optional Kurzbezeichnung
|
||||||
|
$kurzbzLine = !empty($abgabe->kurzbz) ? "<br/><small style='color: #666; font-style: italic;'>{$abgabe->kurzbz}</small>" : "";
|
||||||
|
|
||||||
|
$abgabenString .= "
|
||||||
|
<tr>
|
||||||
|
<td style='padding: 10px; border: 1px solid #ddd; font-size: 13px; vertical-align: top;'>{$dateEmailFormatted}</td>
|
||||||
|
<td style='padding: 10px; border: 1px solid #ddd; font-size: 13px; vertical-align: top;'>{$studentFullName}</td>
|
||||||
|
<td style='padding: 10px; border: 1px solid #ddd; font-size: 13px;'>
|
||||||
|
<strong>{$abgabe->bezeichnung}</strong>{$kurzbzLine}
|
||||||
|
</td>
|
||||||
|
<td style='padding: 10px; border: 1px solid #ddd; font-size: 13px; vertical-align: top;'>{$abgabedatumFormatted}</td>
|
||||||
|
</tr>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$abgabenString .= '</tbody></table>';
|
||||||
|
|
||||||
|
$path = $this->_ci->config->item('URL_MITARBEITER');
|
||||||
|
$url = CIS_ROOT.$path;
|
||||||
|
|
||||||
|
$body_fields = array(
|
||||||
|
'anrede' => $anrede,
|
||||||
|
'anredeFillString' => $anredeFillString,
|
||||||
|
'fullFormattedNameString' => $fullFormattedNameString,
|
||||||
|
'paTitel' => $projektarbeit_titel,
|
||||||
|
'abgabenString' => $abgabenString,
|
||||||
|
'linkAbgabetool' => $url
|
||||||
|
);
|
||||||
|
|
||||||
|
$result = $this->_ci->ProjektbetreuerModel->getBetreuerOfProjektarbeit($abgaben[0]->projektarbeit_id, $abgaben[0]->betreuerart_kurzbz);
|
||||||
|
$data = getData($result)[0];
|
||||||
|
|
||||||
|
$email = $data->uid ? $data->uid."@".DOMAIN : $data->private_email;
|
||||||
|
|
||||||
|
// in rare cases there are betreuer (often zweitbetreuer) without uid and without private email
|
||||||
|
if(!$email) {
|
||||||
|
$this->_ci->logInfo('Could not send Email for Betreuer PersonID: "'.$data->person_id.'".');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// send email with bundled info
|
||||||
|
sendSanchoMail(
|
||||||
|
'PaabgabeUpdatesBetSM',
|
||||||
|
$body_fields,
|
||||||
|
$email,
|
||||||
|
$this->p->t('abgabetool', 'changedAbgabeterminev2')
|
||||||
|
);
|
||||||
|
|
||||||
|
$count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_ci->logInfo($count . " Emails erfolgreich versandt");
|
||||||
|
$this->_ci->logInfo('End job FHC-Core->notifyBetreuerMail');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function notifyStudentMail()
|
||||||
|
{
|
||||||
|
// send all new projektarbeit abgabe since the last job run to the related student
|
||||||
|
|
||||||
|
$this->_ci->logInfo('Start job FHC-Core->notifyStudentMail');
|
||||||
|
|
||||||
|
$interval = $this->_ci->config->item('PAABGABE_EMAIL_JOB_INTERVAL');
|
||||||
|
|
||||||
|
$relevantTypes = $this->_ci->config->item('RELEVANT_PAABGABETYPEN_SAMMELMAIL_STUDENT');
|
||||||
|
|
||||||
|
$result = $this->_ci->PaabgabeModel->findAbgabenNewOrUpdatedSince($interval, $relevantTypes);
|
||||||
|
$retval = getData($result);
|
||||||
|
|
||||||
|
if(count($retval) == 0) {
|
||||||
|
$this->_ci->logInfo("Keine Emails an Studenten versandt");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// group results per projektarbeit/student_uid
|
||||||
|
$student_uids = [];
|
||||||
|
forEach($retval as $paabgabe) {
|
||||||
|
if(!isset($student_uids[$paabgabe->student_uid])) {
|
||||||
|
$student_uids[$paabgabe->student_uid] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
$student_uids[$paabgabe->student_uid][] = $paabgabe;
|
||||||
|
}
|
||||||
|
|
||||||
|
$count = 0;
|
||||||
|
foreach ($student_uids as $uid => $abgaben) {
|
||||||
|
// $uid is the student's UID
|
||||||
|
$result = $this->_ci->StudentModel->getEmailAnredeForStudentUID($uid);
|
||||||
|
$data = getData($result)[0];
|
||||||
|
|
||||||
|
// $abgabe is the array of paabgabe objects
|
||||||
|
$anredeFillString = $data->anrede=="Herr"?"r":"";
|
||||||
|
$fullFormattedNameString = trim($data->titelpre." ".$data->vorname." ".$data->vornamen." ".$data->nachname." ".$data->titelpost);
|
||||||
|
|
||||||
|
// https://www.php.net/manual/en/migration70.new-features.php#migration70.new-features.spaceship-op
|
||||||
|
// php has spaceships 🚀🚀🚀🚀🚀
|
||||||
|
usort($abgaben, function($a, $b) {
|
||||||
|
return strtotime($a->datum) <=> strtotime($b->datum);
|
||||||
|
});
|
||||||
|
|
||||||
|
$projektarbeit_titel = $abgaben[0]->titel;
|
||||||
|
|
||||||
|
// initialize the table and headers
|
||||||
|
$abgabenString = '
|
||||||
|
<table style="width: 100%; border-collapse: collapse; font-family: Arial, sans-serif; color: #333; margin-top: 15px; margin-bottom: 15px;">
|
||||||
|
<thead>
|
||||||
|
<tr style="background-color: #f2f2f2; text-align: left;">
|
||||||
|
<th style="padding: 10px; border: 1px solid #ddd; font-size: 13px; width: 25%;">Zieldatum</th>
|
||||||
|
<th style="padding: 10px; border: 1px solid #ddd; font-size: 13px;">Bezeichnung / Hinweis</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>';
|
||||||
|
|
||||||
|
foreach ($abgaben as $abgabe) {
|
||||||
|
$dateEmailFormatted = (new DateTime($abgabe->datum))->format('d.m.Y');
|
||||||
|
|
||||||
|
// handle the optional Kurzbezeichnung
|
||||||
|
$kurzbzLine = !empty($abgabe->kurzbz) ? "<br/><small style='color: #666; font-style: italic;'>{$abgabe->kurzbz}</small>" : "";
|
||||||
|
|
||||||
|
$abgabenString .= "
|
||||||
|
<tr>
|
||||||
|
<td style='padding: 10px; border: 1px solid #ddd; font-size: 13px; vertical-align: top;'>
|
||||||
|
{$dateEmailFormatted}
|
||||||
|
</td>
|
||||||
|
<td style='padding: 10px; border: 1px solid #ddd; font-size: 13px;'>
|
||||||
|
<strong>{$abgabe->bezeichnung}</strong>{$kurzbzLine}
|
||||||
|
</td>
|
||||||
|
</tr>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$abgabenString .= '</tbody></table>';
|
||||||
|
|
||||||
|
$route = $this->_ci->config->item('URL_STUDENTS');
|
||||||
|
$url = CIS_ROOT.$route;
|
||||||
|
|
||||||
|
$body_fields = array(
|
||||||
|
'anrede' => $data->anrede,
|
||||||
|
'anredeFillString' => $anredeFillString,
|
||||||
|
'fullFormattedNameString' => $fullFormattedNameString,
|
||||||
|
'paTitel' => $projektarbeit_titel,
|
||||||
|
'abgabenString' => $abgabenString,
|
||||||
|
'linkAbgabetool' => $url
|
||||||
|
);
|
||||||
|
|
||||||
|
// send email with bundled info
|
||||||
|
sendSanchoMail(
|
||||||
|
'PaabgabeUpdatesSammelmail',
|
||||||
|
$body_fields,
|
||||||
|
$uid.'@'.DOMAIN,
|
||||||
|
$this->p->t('abgabetool', 'changedAbgabeterminev2')
|
||||||
|
);
|
||||||
|
|
||||||
|
$count++;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_ci->logInfo($count . " Emails erfolgreich versandt");
|
||||||
|
$this->_ci->logInfo('End job FHC-Core->notifyStudentMail');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -266,7 +266,7 @@ class FHCAPI_Controller extends Auth_Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------
|
// ---------------------------------------------------------------
|
||||||
// Security
|
// Security Begin
|
||||||
// ---------------------------------------------------------------
|
// ---------------------------------------------------------------
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -287,4 +287,31 @@ class FHCAPI_Controller extends Auth_Controller
|
|||||||
'required_permissions' => $this->_rpsToString($requiredPermissions, $this->router->method)
|
'required_permissions' => $this->_rpsToString($requiredPermissions, $this->router->method)
|
||||||
], self::ERROR_TYPE_AUTH);
|
], self::ERROR_TYPE_AUTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------
|
||||||
|
// Security End
|
||||||
|
// ---------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks the client's total request size (Content-Length) against the minimum
|
||||||
|
* effective PHP limit (min of upload_max_filesize, post_max_size, memory_limit).
|
||||||
|
* This preempts failures that result in vague "missing parameters" errors on large files.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
protected function checkUploadSize() {
|
||||||
|
// this number represents bytes
|
||||||
|
$content_length_bytes = (int)$this->input->server('CONTENT_LENGTH');
|
||||||
|
$content_length = $content_length_bytes / 1000000;
|
||||||
|
|
||||||
|
//get max serverside size upload -> this comes in megabytes
|
||||||
|
$max_upload = (int)(ini_get('upload_max_filesize'));
|
||||||
|
$max_post = (int)(ini_get('post_max_size'));
|
||||||
|
$memory_limit = (int)(ini_get('memory_limit'));
|
||||||
|
$max_upload_mb = min($max_upload, $max_post, $memory_limit); // smallest of 3 config values
|
||||||
|
|
||||||
|
if($content_length >= $max_upload_mb) {
|
||||||
|
$this->terminateWithError($this->p->t('global', 'filesizeExceeded'), 'general');
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
{
|
{
|
||||||
const DEFAULT_PERMISSION_R = 'admin:r';
|
const DEFAULT_PERMISSION_R = 'admin:r';
|
||||||
const DEFAULT_PERMISSION_RW = 'admin:rw';
|
const DEFAULT_PERMISSION_RW = 'admin:rw';
|
||||||
//public function __construct($zuordnung = 'person/Notizzuordnung_model')
|
|
||||||
public function __construct($permissions)
|
public function __construct($permissions)
|
||||||
{
|
{
|
||||||
$default_permissions = [
|
$default_permissions = [
|
||||||
@@ -97,13 +97,13 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
if (isError($result)) {
|
if (isError($result)) {
|
||||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
return $this->terminateWithSuccess(getData($result) ?: []);
|
$this->terminateWithSuccess(getData($result) ?: []);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//Override function
|
//Override function
|
||||||
protected function isBerechtigt($id, $typeId){
|
protected function isBerechtigt($id, $typeId){
|
||||||
return $this->terminateWithError("in abstract function: define right in extension", self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError("in abstract function: define right in extension", self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function loadNotiz()
|
public function loadNotiz()
|
||||||
@@ -112,7 +112,6 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
|
|
||||||
$notiz_id = $this->input->post('notiz_id');
|
$notiz_id = $this->input->post('notiz_id');
|
||||||
|
|
||||||
//$this->load->model('person/Notiz_model', 'NotizModel');
|
|
||||||
$this->NotizModel->addJoin('public.tbl_notiz_dokument', 'notiz_id', 'LEFT');
|
$this->NotizModel->addJoin('public.tbl_notiz_dokument', 'notiz_id', 'LEFT');
|
||||||
$this->NotizModel->addSelect('*');
|
$this->NotizModel->addSelect('*');
|
||||||
$this->NotizModel->addSelect("TO_CHAR(CASE WHEN public.tbl_notiz.updateamum >= public.tbl_notiz.insertamum
|
$this->NotizModel->addSelect("TO_CHAR(CASE WHEN public.tbl_notiz.updateamum >= public.tbl_notiz.insertamum
|
||||||
@@ -143,14 +142,9 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
|
|
||||||
$uid = getAuthUID();
|
$uid = getAuthUID();
|
||||||
|
|
||||||
if (isset($_POST['data']))
|
$json = $this->input->post('data');
|
||||||
{
|
$post_data = json_decode($json, true);
|
||||||
$data = json_decode($_POST['data']);
|
$this->form_validation->set_data($post_data);
|
||||||
unset($_POST['data']);
|
|
||||||
foreach ($data as $k => $v) {
|
|
||||||
$_POST[$k] = $v;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//Form Validation
|
//Form Validation
|
||||||
$this->form_validation->set_rules('titel', 'Titel', 'required', [
|
$this->form_validation->set_rules('titel', 'Titel', 'required', [
|
||||||
@@ -166,26 +160,25 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
}
|
}
|
||||||
|
|
||||||
$titel = $this->input->post('titel');
|
$titel = $post_data['titel'];
|
||||||
$text = $this->input->post('text');
|
$text = $post_data['text'];
|
||||||
$erledigt = $this->input->post('erledigt');
|
$erledigt = $post_data['erledigt'];
|
||||||
$verfasser_uid = isset($_POST['verfasser']) ? $_POST['verfasser'] : $uid;
|
$bearbeiter_uid = isset($post_data['bearbeiter']) ? $post_data['bearbeiter'] : null;
|
||||||
$bearbeiter_uid = isset($_POST['bearbeiter']) ? $_POST['bearbeiter'] : null;
|
$type = $post_data['typeId'];
|
||||||
$type = $this->input->post('typeId');
|
$start = isset($post_data['start']) ? $post_data['start'] : null;
|
||||||
$start = $this->input->post('start');
|
$ende = isset($post_data['ende']) ? $post_data['ende'] : null;
|
||||||
$ende = $this->input->post('ende');
|
|
||||||
|
|
||||||
// Start DB transaction
|
// Start DB transaction
|
||||||
$this->db->trans_start();
|
$this->db->trans_start();
|
||||||
|
|
||||||
//Save note
|
//Save note
|
||||||
$result = $this->NotizModel->insert(array('titel' => $titel, 'text' => $text, 'erledigt' => $erledigt, 'verfasser_uid' => $verfasser_uid,
|
$result = $this->NotizModel->insert(array('titel' => $titel, 'text' => $text, 'erledigt' => $erledigt, 'verfasser_uid' => $uid,
|
||||||
"insertvon" => $verfasser_uid, 'start' => $start, 'ende' => $ende, 'bearbeiter_uid' => $bearbeiter_uid));
|
"insertvon" => $uid, 'start' => $start, 'ende' => $ende, 'bearbeiter_uid' => $bearbeiter_uid));
|
||||||
|
|
||||||
if (isError($result))
|
if (isError($result))
|
||||||
{
|
{
|
||||||
$this->db->trans_rollback();
|
$this->db->trans_rollback();
|
||||||
return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
$notiz_id = $result->retval;
|
$notiz_id = $result->retval;
|
||||||
@@ -220,7 +213,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
if (isError($result))
|
if (isError($result))
|
||||||
{
|
{
|
||||||
$this->db->trans_rollback();
|
$this->db->trans_rollback();
|
||||||
return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
$dms_id_arr[] = $result->retval['dms_id'];
|
$dms_id_arr[] = $result->retval['dms_id'];
|
||||||
}
|
}
|
||||||
@@ -235,34 +228,28 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
if (isError($result))
|
if (isError($result))
|
||||||
{
|
{
|
||||||
$this->db->trans_rollback();
|
$this->db->trans_rollback();
|
||||||
return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->db->trans_commit();
|
$this->db->trans_commit();
|
||||||
return $this->terminateWithSuccess($result);
|
$this->terminateWithSuccess($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function updateNotiz()
|
public function updateNotiz()
|
||||||
{
|
{
|
||||||
|
|
||||||
$this->load->library('form_validation');
|
$this->load->library('form_validation');
|
||||||
$this->load->library('DmsLib');
|
$this->load->library('DmsLib');
|
||||||
|
|
||||||
if (isset($_POST['data']))
|
$json = $this->input->post('data');
|
||||||
{
|
$post_data = json_decode($json, true);
|
||||||
$data = json_decode($_POST['data']);
|
|
||||||
unset($_POST['data']);
|
|
||||||
foreach ($data as $k => $v) {
|
|
||||||
$_POST[$k] = $v;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$notiz_id = $this->input->post('notiz_id');
|
$this->form_validation->set_data($post_data);
|
||||||
|
|
||||||
if(!$notiz_id)
|
$this->form_validation->set_rules('notiz_id', 'Notiz ID', 'required', [
|
||||||
{
|
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'notiz_id'])
|
||||||
$this->terminateWithError($this->p->t('ui','error_missingId',['id'=>'Notiz_id']), self::ERROR_TYPE_GENERAL);
|
]);
|
||||||
}
|
|
||||||
|
|
||||||
//Form Validation
|
//Form Validation
|
||||||
$this->form_validation->set_rules('titel', 'Titel', 'required', [
|
$this->form_validation->set_rules('titel', 'Titel', 'required', [
|
||||||
@@ -280,25 +267,23 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
|
|
||||||
//update Notiz
|
//update Notiz
|
||||||
$uid = getAuthUID();
|
$uid = getAuthUID();
|
||||||
$titel = $this->input->post('titel');
|
$titel = $post_data['titel'];
|
||||||
$text = $this->input->post('text');
|
$text = $post_data['text'];
|
||||||
$verfasser_uid = isset($_POST['verfasser']) ? $_POST['verfasser'] : $uid;
|
$bearbeiter_uid = isset($post_data['bearbeiter']) ? $post_data['bearbeiter'] : $post_data['bearbeiter_uid'];
|
||||||
$bearbeiter_uid = isset($_POST['bearbeiter']) ? $_POST['bearbeiter'] : $uid;
|
$erledigt = $post_data['erledigt'];
|
||||||
$erledigt = $this->input->post('erledigt');
|
$start = $post_data['start'];
|
||||||
$start = $this->input->post('start');
|
$ende = $post_data['ende'];
|
||||||
$ende = $this->input->post('ende');
|
|
||||||
|
|
||||||
$result = $this->NotizModel->update(
|
$result = $this->NotizModel->update(
|
||||||
[
|
[
|
||||||
'notiz_id' => $notiz_id
|
'notiz_id' => $post_data['notiz_id'],
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'titel' => $titel,
|
'titel' => $titel,
|
||||||
'updatevon' => $uid,
|
'updatevon' => $uid,
|
||||||
'updateamum' => date('c'),
|
'updateamum' => date('c'),
|
||||||
'text' => $text,
|
'text' => $text,
|
||||||
'verfasser_uid' => $verfasser_uid,
|
'bearbeiter_uid' => isEmptyString($bearbeiter_uid) ? null : $bearbeiter_uid,
|
||||||
'bearbeiter_uid' => $bearbeiter_uid,
|
|
||||||
'start' => $start,
|
'start' => $start,
|
||||||
'ende' => $ende,
|
'ende' => $ende,
|
||||||
'erledigt' => $erledigt
|
'erledigt' => $erledigt
|
||||||
@@ -306,7 +291,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
);
|
);
|
||||||
if (isError($result))
|
if (isError($result))
|
||||||
{
|
{
|
||||||
return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
//update(1) loading all dms-entries with this notiz_id
|
//update(1) loading all dms-entries with this notiz_id
|
||||||
@@ -314,7 +299,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
$this->load->model('person/Notizdokument_model', 'NotizdokumentModel');
|
$this->load->model('person/Notizdokument_model', 'NotizdokumentModel');
|
||||||
$this->NotizdokumentModel->addJoin('campus.tbl_dms_version', 'dms_id');
|
$this->NotizdokumentModel->addJoin('campus.tbl_dms_version', 'dms_id');
|
||||||
|
|
||||||
$result = $this->NotizdokumentModel->loadWhere(array('notiz_id' => $notiz_id));
|
$result = $this->NotizdokumentModel->loadWhere(array('notiz_id' => $post_data['notiz_id']));
|
||||||
$result = $this->getDataOrTerminateWithError($result);
|
$result = $this->getDataOrTerminateWithError($result);
|
||||||
foreach ($result as $doc) {
|
foreach ($result as $doc) {
|
||||||
$dms_id_arr[$doc->dms_id] = array(
|
$dms_id_arr[$doc->dms_id] = array(
|
||||||
@@ -351,7 +336,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
$result = $this->getDataOrTerminateWithError($result);
|
$result = $this->getDataOrTerminateWithError($result);
|
||||||
$dms_id = $result['dms_id'];
|
$dms_id = $result['dms_id'];
|
||||||
|
|
||||||
$result = $this->NotizdokumentModel->insert(array('notiz_id' => $notiz_id, 'dms_id' => $dms_id));
|
$result = $this->NotizdokumentModel->insert(array('notiz_id' => $post_data['notiz_id'], 'dms_id' => $dms_id));
|
||||||
|
|
||||||
$this->getDataOrTerminateWithError($result);
|
$this->getDataOrTerminateWithError($result);
|
||||||
}
|
}
|
||||||
@@ -365,7 +350,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
$this->getDataOrTerminateWithError($result);
|
$this->getDataOrTerminateWithError($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->terminateWithSuccess($result);
|
$this->terminateWithSuccess($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function deleteNotiz()
|
public function deleteNotiz()
|
||||||
@@ -416,15 +401,15 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
if (isError($result))
|
if (isError($result))
|
||||||
{
|
{
|
||||||
$this->db->trans_rollback();
|
$this->db->trans_rollback();
|
||||||
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
if(!hasData($result))
|
if(!hasData($result))
|
||||||
{
|
{
|
||||||
return $this->terminateWithError($this->p->t('ui','error_missingId', ['id'=> 'Notiz_id']), self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError($this->p->t('ui','error_missingId', ['id'=> 'Notiz_id']), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->db->trans_complete();
|
$this->db->trans_complete();
|
||||||
return $this->terminateWithSuccess(getData($result));
|
$this->terminateWithSuccess(getData($result));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function loadDokumente()
|
public function loadDokumente()
|
||||||
@@ -440,14 +425,14 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
array('public.tbl_notiz.notiz_id' => $notiz_id)
|
array('public.tbl_notiz.notiz_id' => $notiz_id)
|
||||||
);
|
);
|
||||||
if (isError($result)) {
|
if (isError($result)) {
|
||||||
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!hasData($result))
|
if(!hasData($result))
|
||||||
{
|
{
|
||||||
return $this->terminateWithError($this->p->t('ui','error_missingId', ['id'=> 'Notiz_id']), self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError($this->p->t('ui','error_missingId', ['id'=> 'Notiz_id']), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
return $this->terminateWithSuccess(getData($result));
|
$this->terminateWithSuccess(getData($result));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getMitarbeiter($searchString)
|
public function getMitarbeiter($searchString)
|
||||||
@@ -457,7 +442,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
if (isError($result)) {
|
if (isError($result)) {
|
||||||
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
return $this->terminateWithSuccess($result);
|
$this->terminateWithSuccess($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getCountNotes($person_id)
|
public function getCountNotes($person_id)
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ function var_dump_to_error_log($parameter)
|
|||||||
var_dump($parameter); // KEEP IT!!!
|
var_dump($parameter); // KEEP IT!!!
|
||||||
$ob_get_contents = ob_get_contents();
|
$ob_get_contents = ob_get_contents();
|
||||||
ob_end_clean();
|
ob_end_clean();
|
||||||
error_log(str_replace("\n", '', $ob_get_contents)); // KEEP IT!!!
|
error_log(str_replace("\n", '', $ob_get_contents) . ', referer: ' . "http".(!empty($_SERVER['HTTPS'])?"s":"")."://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']); // KEEP IT!!!
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -408,22 +408,6 @@ function findResource($path, $resource, $subdir = false, $extraDir = null)
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* check if String can be converted to a date
|
|
||||||
*/
|
|
||||||
function isValidDate($dateString)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
return (new DateTime($dateString)) !== false;
|
|
||||||
}
|
|
||||||
catch(Exception $e)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
// PHP functions that don't exist in older versions
|
// PHP functions that don't exist in older versions
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
@@ -446,7 +430,8 @@ if (!function_exists('array_is_list')) {
|
|||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* check if string can be converted to a date
|
* Check if the provided parameter is a string containing a valid date
|
||||||
|
* NOTE: the name is in the "snake case" format because othewise the CI form validation _cannot_ use it
|
||||||
*/
|
*/
|
||||||
function is_valid_date($dateString)
|
function is_valid_date($dateString)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -111,7 +111,9 @@ function generateJSDataStorageObject($indexPage, $calledPath, $calledMethod)
|
|||||||
'theme' => [
|
'theme' => [
|
||||||
'name'=>$ci->config->item('theme_name'),
|
'name'=>$ci->config->item('theme_name'),
|
||||||
'modes'=>$ci->config->item('theme_modes'),
|
'modes'=>$ci->config->item('theme_modes'),
|
||||||
]
|
],
|
||||||
|
'fhcomplete_build_version' => $ci->config->item('fhcomplete_build_version'),
|
||||||
|
'use_fhcomplete_build_version_in_path' => $ci->config->item('use_fhcomplete_build_version_in_path'),
|
||||||
);
|
);
|
||||||
|
|
||||||
$toPrint = "\n";
|
$toPrint = "\n";
|
||||||
@@ -178,6 +180,8 @@ function generateJSModulesInclude($JSModules)
|
|||||||
|
|
||||||
$ci =& get_instance();
|
$ci =& get_instance();
|
||||||
$cachetoken = '?'.$ci->config->item('fhcomplete_build_version');
|
$cachetoken = '?'.$ci->config->item('fhcomplete_build_version');
|
||||||
|
$ci->load->config('javascript');
|
||||||
|
$use_bundled_javascript = $ci->config->item('use_bundled_javascript');
|
||||||
|
|
||||||
if (isset($JSModules))
|
if (isset($JSModules))
|
||||||
{
|
{
|
||||||
@@ -185,7 +189,21 @@ function generateJSModulesInclude($JSModules)
|
|||||||
|
|
||||||
for ($tmpJSsCounter = 0; $tmpJSsCounter < count($tmpJSs); $tmpJSsCounter++)
|
for ($tmpJSsCounter = 0; $tmpJSsCounter < count($tmpJSs); $tmpJSsCounter++)
|
||||||
{
|
{
|
||||||
$toPrint = sprintf($jsInclude, base_url($tmpJSs[$tmpJSsCounter].$cachetoken)).PHP_EOL;
|
$item = $tmpJSs[$tmpJSsCounter];
|
||||||
|
if($use_bundled_javascript && preg_match('#/js/apps/#', $item))
|
||||||
|
{
|
||||||
|
$item = preg_replace('#^public/#', 'public/dist/', $item);
|
||||||
|
}
|
||||||
|
echo "<!--{$item}-->".PHP_EOL;
|
||||||
|
if($ci->config->item('use_fhcomplete_build_version_in_path'))
|
||||||
|
{
|
||||||
|
$relurl = preg_replace('#public/#', 'public/' . $ci->config->item('fhcomplete_build_version') . '/', $item);
|
||||||
|
$toPrint = sprintf($jsInclude, base_url($relurl)).PHP_EOL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$toPrint = sprintf($jsInclude, base_url($item.$cachetoken)).PHP_EOL;
|
||||||
|
}
|
||||||
|
|
||||||
if ($tmpJSsCounter > 0) $toPrint = "\t\t".$toPrint;
|
if ($tmpJSsCounter > 0) $toPrint = "\t\t".$toPrint;
|
||||||
|
|
||||||
@@ -250,6 +268,210 @@ function generateSkipLink($skipID)
|
|||||||
function absoluteJsImportUrl($relurl)
|
function absoluteJsImportUrl($relurl)
|
||||||
{
|
{
|
||||||
$ci =& get_instance();
|
$ci =& get_instance();
|
||||||
$url = base_url($relurl) . '?'. $ci->config->item('fhcomplete_build_version');
|
$ci->load->config('javascript');
|
||||||
|
if($ci->config->item('use_fhcomplete_build_version_in_path'))
|
||||||
|
{
|
||||||
|
$url = base_url(preg_replace('#^public/#', 'public/' . $ci->config->item('fhcomplete_build_version') . '/', $relurl));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$url = base_url($relurl) . '?'. $ci->config->item('fhcomplete_build_version');
|
||||||
|
}
|
||||||
return $url;
|
return $url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Manipulate CI views includes Array to load
|
||||||
|
* - public/js/FhcApps.js via customJSs and
|
||||||
|
* - app customisation js and/or css from extensions via customJSModules
|
||||||
|
* if customJSModules contains at least one vuejs app and customisation files
|
||||||
|
* exist in extensions
|
||||||
|
*/
|
||||||
|
class ExtendableAppsHelper
|
||||||
|
{
|
||||||
|
private static $instance = null;
|
||||||
|
|
||||||
|
protected $extensions;
|
||||||
|
|
||||||
|
protected $customCSSs;
|
||||||
|
protected $customJSs;
|
||||||
|
protected $customJSModules;
|
||||||
|
|
||||||
|
protected $initialised;
|
||||||
|
protected $appscount;
|
||||||
|
|
||||||
|
protected $extCustomCSSs;
|
||||||
|
protected $extCustomJSs;
|
||||||
|
protected $extCustomJSModules;
|
||||||
|
|
||||||
|
private function __construct()
|
||||||
|
{
|
||||||
|
$this->extensions = array();
|
||||||
|
$this->customCSSs = null;
|
||||||
|
$this->customJSs = null;
|
||||||
|
$this->customJSModules = null;
|
||||||
|
|
||||||
|
$this->initialised = false;
|
||||||
|
$this->appscount = 0;
|
||||||
|
|
||||||
|
$this->extCustomCSSs = null;
|
||||||
|
$this->extCustomJSs = null;
|
||||||
|
$this->extCustomJSModules = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getInstance()
|
||||||
|
{
|
||||||
|
if(self::$instance === null)
|
||||||
|
{
|
||||||
|
self::$instance = new ExtendableAppsHelper();
|
||||||
|
}
|
||||||
|
return self::$instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function init($customCSSs, $customJSs, $customJSModules)
|
||||||
|
{
|
||||||
|
if($this->initialised)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->customCSSs = $customCSSs;
|
||||||
|
$this->customJSs = $customJSs;
|
||||||
|
$this->customJSModules = $customJSModules;
|
||||||
|
$this->initialised = true;
|
||||||
|
|
||||||
|
if(!isset($this->customJSModules))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!is_array($this->customJSModules))
|
||||||
|
{
|
||||||
|
$this->customJSModules = array($this->customJSModules);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(count($this->customJSModules) < 1)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->buildExtensionsList();
|
||||||
|
$this->prepareExtendedArrays();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCustomCSSs()
|
||||||
|
{
|
||||||
|
if(is_null($this->extCustomCSSs))
|
||||||
|
{
|
||||||
|
return $this->customCSSs;
|
||||||
|
}
|
||||||
|
return $this->extCustomCSSs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCustomJSs()
|
||||||
|
{
|
||||||
|
if(is_null($this->extCustomJSs))
|
||||||
|
{
|
||||||
|
return $this->customJSs;
|
||||||
|
}
|
||||||
|
return $this->extCustomJSs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCustomJSModules()
|
||||||
|
{
|
||||||
|
if(is_null($this->extCustomJSModules))
|
||||||
|
{
|
||||||
|
return $this->customJSModules;
|
||||||
|
}
|
||||||
|
return $this->extCustomJSModules;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function buildExtensionsList()
|
||||||
|
{
|
||||||
|
$this->extensions = array();
|
||||||
|
$fsiterator = new FilesystemIterator(FHCPATH . 'application/extensions');
|
||||||
|
foreach ($fsiterator as $fsitem)
|
||||||
|
{
|
||||||
|
if(preg_match('/^FHC-Core-/', $fsitem->getBasename()))
|
||||||
|
{
|
||||||
|
$this->extensions[] = $fsitem->getBasename();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function prepareExtendedArrays()
|
||||||
|
{
|
||||||
|
$this->appscount = 0;
|
||||||
|
$this->initExtCustomCSSs();
|
||||||
|
$this->extCustomJSModules = array();
|
||||||
|
foreach($this->customJSModules as $item)
|
||||||
|
{
|
||||||
|
$matches = array();
|
||||||
|
if(preg_match('#^public/(extensions/FHC-Core-.+)?js/apps/(.*)\.js$#', $item, $matches))
|
||||||
|
{
|
||||||
|
$this->appscount++;
|
||||||
|
|
||||||
|
$fhcextension = $matches[1];
|
||||||
|
$app = $matches[2];
|
||||||
|
|
||||||
|
$extend_js_suffix = 'js/extend_app/' . $fhcextension . $app . '.js';
|
||||||
|
$extend_css_suffix = 'css/extend_app/' . $fhcextension . $app . '.css';
|
||||||
|
|
||||||
|
foreach($this->extensions as $extension)
|
||||||
|
{
|
||||||
|
$extend_js = 'public/extensions/' . $extension . '/' . $extend_js_suffix;
|
||||||
|
$extend_css = 'public/extensions/' . $extension . '/' . $extend_css_suffix;
|
||||||
|
|
||||||
|
if(is_readable(FHCPATH . $extend_js))
|
||||||
|
{
|
||||||
|
array_push($this->extCustomJSModules, $extend_js);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(is_readable(FHCPATH . $extend_css))
|
||||||
|
{
|
||||||
|
array_push($this->extCustomCSSs, $extend_css);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
array_push($this->extCustomJSModules, $item);
|
||||||
|
}
|
||||||
|
|
||||||
|
if($this->appscount > 0)
|
||||||
|
{
|
||||||
|
$this->addFhcAppsJs();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function initExtCustomCSSs()
|
||||||
|
{
|
||||||
|
if(!isset($this->customCSSs))
|
||||||
|
{
|
||||||
|
$this->extCustomCSSs = array();
|
||||||
|
}
|
||||||
|
elseif(!is_array($this->customCSSs))
|
||||||
|
{
|
||||||
|
$this->extCustomCSSs = array($this->customCSSs);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->extCustomCSSs = $this->customCSSs;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function addFhcAppsJs()
|
||||||
|
{
|
||||||
|
if(!isset($this->customJSs))
|
||||||
|
{
|
||||||
|
$this->extCustomJSs = array();
|
||||||
|
}
|
||||||
|
elseif(!is_array($this->customJSs))
|
||||||
|
{
|
||||||
|
$this->extCustomJSs = array($this->customJSs);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->extCustomJSs = $this->customJSs;
|
||||||
|
}
|
||||||
|
array_push($this->extCustomJSs, 'public/js/FhcApps.js');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -180,7 +180,8 @@ class DocsboxLib
|
|||||||
}
|
}
|
||||||
// Just started or still working on it
|
// Just started or still working on it
|
||||||
elseif ($getStatusResponse->body->status == self::STATUS_WORKING
|
elseif ($getStatusResponse->body->status == self::STATUS_WORKING
|
||||||
|| $getStatusResponse->body->status == self::STATUS_STARTED)
|
|| $getStatusResponse->body->status == self::STATUS_STARTED
|
||||||
|
|| $getStatusResponse->body->status == self::STATUS_QUEUED)
|
||||||
{
|
{
|
||||||
// go on!
|
// go on!
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ class ExtensionsLib
|
|||||||
// Directories that are part of the extension archive
|
// Directories that are part of the extension archive
|
||||||
private $SOFTLINK_TARGET_DIRECTORIES = array(
|
private $SOFTLINK_TARGET_DIRECTORIES = array(
|
||||||
APPPATH => array('config', 'components', 'controllers', 'helpers', 'hooks', 'libraries', 'models', 'views', 'widgets'),
|
APPPATH => array('config', 'components', 'controllers', 'helpers', 'hooks', 'libraries', 'models', 'views', 'widgets'),
|
||||||
DOC_ROOT => array('public')
|
DOC_ROOT => array('public', 'public/dist')
|
||||||
);
|
);
|
||||||
|
|
||||||
private $_errorOccurred; // boolean, true if an error occurred while installing an extension
|
private $_errorOccurred; // boolean, true if an error occurred while installing an extension
|
||||||
|
|||||||
@@ -723,7 +723,7 @@ class PrestudentLib
|
|||||||
|
|
||||||
|
|
||||||
// Generate Alias
|
// Generate Alias
|
||||||
$alias = '';
|
$alias = null;
|
||||||
if (!defined('GENERATE_ALIAS_STUDENT')
|
if (!defined('GENERATE_ALIAS_STUDENT')
|
||||||
|| GENERATE_ALIAS_STUDENT === true
|
|| GENERATE_ALIAS_STUDENT === true
|
||||||
) {
|
) {
|
||||||
|
|||||||
@@ -490,6 +490,175 @@ class Vertrag_model extends DB_Model
|
|||||||
return $bezeichnung;
|
return $bezeichnung;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads all Contracts of a Person
|
||||||
|
* @param $person_id
|
||||||
|
* @return array of objects
|
||||||
|
*/
|
||||||
|
public function loadContractsOfPerson($person_id)
|
||||||
|
{
|
||||||
|
$query = "
|
||||||
|
SELECT
|
||||||
|
*,
|
||||||
|
tbl_vertrag.bezeichnung as bezeichnung,
|
||||||
|
tbl_vertragstyp.bezeichnung as vertragstyp_bezeichnung,
|
||||||
|
tbl_vertrag.vertragsdatum,
|
||||||
|
(SELECT bezeichnung FROM lehre.tbl_vertragsstatus
|
||||||
|
JOIN lehre.tbl_vertrag_vertragsstatus USING(vertragsstatus_kurzbz)
|
||||||
|
WHERE vertrag_id=tbl_vertrag.vertrag_id ORDER BY datum desc limit 1) as status, anmerkung,
|
||||||
|
CASE
|
||||||
|
WHEN EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM lehre.tbl_vertrag_vertragsstatus
|
||||||
|
WHERE vertrag_id = tbl_vertrag.vertrag_id
|
||||||
|
AND vertragsstatus_kurzbz = 'abgerechnet'
|
||||||
|
) THEN true
|
||||||
|
ELSE false
|
||||||
|
END AS isAbgerechnet
|
||||||
|
FROM
|
||||||
|
lehre.tbl_vertrag
|
||||||
|
LEFT JOIN lehre.tbl_vertragstyp USING(vertragstyp_kurzbz)
|
||||||
|
WHERE person_id= ?";
|
||||||
|
|
||||||
|
|
||||||
|
return $this->execQuery($query, array($person_id));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads all Contracts of a Person that are not assigned yet
|
||||||
|
* @param $person_id
|
||||||
|
* @return array of objects
|
||||||
|
*/
|
||||||
|
public function loadContractsOfPersonNotAssigned($person_id)
|
||||||
|
{
|
||||||
|
$query = "
|
||||||
|
SELECT
|
||||||
|
'Lehrauftrag' as type,
|
||||||
|
lehreinheit_id,
|
||||||
|
mitarbeiter_uid,
|
||||||
|
null as pruefung_id,
|
||||||
|
null as projektarbeit_id,
|
||||||
|
(tbl_lehreinheitmitarbeiter.semesterstunden*tbl_lehreinheitmitarbeiter.stundensatz) as betrag1,
|
||||||
|
tbl_lehreinheit.studiensemester_kurzbz,
|
||||||
|
null as betreuerart_kurzbz,
|
||||||
|
( SELECT
|
||||||
|
upper(tbl_studiengang.typ || tbl_studiengang.kurzbz) || tbl_lehrveranstaltung.semester || '-' || tbl_lehrveranstaltung.kurzbz || '-' || tbl_lehreinheit.lehrform_kurzbz
|
||||||
|
FROM
|
||||||
|
lehre.tbl_lehrveranstaltung
|
||||||
|
JOIN public.tbl_studiengang USING(studiengang_kz)
|
||||||
|
WHERE
|
||||||
|
lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id)
|
||||||
|
as bezeichnung
|
||||||
|
FROM
|
||||||
|
lehre.tbl_lehreinheitmitarbeiter
|
||||||
|
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
|
||||||
|
WHERE
|
||||||
|
mitarbeiter_uid IN (SELECT uid FROM public.tbl_benutzer WHERE person_id=?)
|
||||||
|
AND vertrag_id IS NULL
|
||||||
|
UNION
|
||||||
|
SELECT
|
||||||
|
'Betreuung' as type,
|
||||||
|
tbl_projektarbeit.lehreinheit_id as lehreinheit_id,
|
||||||
|
null as mitarbeiter_uid,
|
||||||
|
null::integer as pruefung_id,
|
||||||
|
projektarbeit_id,
|
||||||
|
(tbl_projektbetreuer.stunden*tbl_projektbetreuer.stundensatz) as betrag1,
|
||||||
|
tbl_lehreinheit.studiensemester_kurzbz,
|
||||||
|
tbl_projektbetreuer.betreuerart_kurzbz,
|
||||||
|
(SELECT nachname || ' ' || vorname FROM public.tbl_person JOIN public.tbl_benutzer USING(person_id) WHERE uid=tbl_projektarbeit.student_uid)
|
||||||
|
as bezeichnung
|
||||||
|
FROM
|
||||||
|
lehre.tbl_projektbetreuer
|
||||||
|
JOIN lehre.tbl_projektarbeit USING(projektarbeit_id)
|
||||||
|
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
|
||||||
|
WHERE
|
||||||
|
tbl_projektbetreuer.person_id=?
|
||||||
|
AND vertrag_id IS NULL
|
||||||
|
";
|
||||||
|
|
||||||
|
return $this->execQuery($query, array($person_id, $person_id));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads all Contracts of a Person that are assigned yet
|
||||||
|
* @param $person_id, $vertrag_id
|
||||||
|
* @return array of objects
|
||||||
|
*/
|
||||||
|
|
||||||
|
public function loadContractsOfPersonAssigned($person_id, $vertrag_id)
|
||||||
|
{
|
||||||
|
$query = "
|
||||||
|
SELECT
|
||||||
|
'Lehrauftrag' as type,
|
||||||
|
lehreinheit_id,
|
||||||
|
mitarbeiter_uid,
|
||||||
|
null as pruefung_id,
|
||||||
|
null as projektarbeit_id,
|
||||||
|
(tbl_lehreinheitmitarbeiter.semesterstunden * tbl_lehreinheitmitarbeiter.stundensatz) as betrag,
|
||||||
|
tbl_lehreinheit.studiensemester_kurzbz,
|
||||||
|
null as betreuerart_kurzbz,
|
||||||
|
( SELECT
|
||||||
|
upper(tbl_studiengang.typ || tbl_studiengang.kurzbz) || tbl_lehrveranstaltung.semester || '-' || tbl_lehrveranstaltung.kurzbz || '-' || tbl_lehreinheit.lehrform_kurzbz
|
||||||
|
FROM
|
||||||
|
lehre.tbl_lehrveranstaltung
|
||||||
|
JOIN public.tbl_studiengang USING(studiengang_kz)
|
||||||
|
WHERE
|
||||||
|
lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id)
|
||||||
|
as bezeichnung, vertrag_id
|
||||||
|
FROM
|
||||||
|
lehre.tbl_lehreinheitmitarbeiter
|
||||||
|
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
|
||||||
|
WHERE
|
||||||
|
mitarbeiter_uid IN (SELECT uid FROM public.tbl_benutzer WHERE person_id=?)
|
||||||
|
AND vertrag_id = ?
|
||||||
|
UNION
|
||||||
|
SELECT
|
||||||
|
'Betreuung' as type,
|
||||||
|
tbl_projektarbeit.lehreinheit_id as lehreinheit_id,
|
||||||
|
null as mitarbeiter_uid,
|
||||||
|
null::integer as pruefung_id,
|
||||||
|
projektarbeit_id,
|
||||||
|
(tbl_projektbetreuer.stunden * tbl_projektbetreuer.stundensatz) as betrag,
|
||||||
|
tbl_lehreinheit.studiensemester_kurzbz,
|
||||||
|
tbl_projektbetreuer.betreuerart_kurzbz,
|
||||||
|
(SELECT nachname || ' ' || vorname FROM public.tbl_person JOIN public.tbl_benutzer USING(person_id) WHERE uid=tbl_projektarbeit.student_uid)
|
||||||
|
as bezeichnung, vertrag_id
|
||||||
|
FROM
|
||||||
|
lehre.tbl_projektbetreuer
|
||||||
|
JOIN lehre.tbl_projektarbeit USING(projektarbeit_id)
|
||||||
|
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
|
||||||
|
WHERE
|
||||||
|
tbl_projektbetreuer.person_id=?
|
||||||
|
AND vertrag_id = ?
|
||||||
|
";
|
||||||
|
|
||||||
|
return $this->execQuery($query, array($person_id, $vertrag_id, $person_id, $vertrag_id));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns all stati of a contract
|
||||||
|
*
|
||||||
|
* @param $vertrag_id
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getStatiOfContract($vertrag_id)
|
||||||
|
{
|
||||||
|
$query = "
|
||||||
|
SELECT
|
||||||
|
*,
|
||||||
|
tbl_vertrag_vertragsstatus.datum,
|
||||||
|
tbl_vertrag_vertragsstatus.insertamum,
|
||||||
|
tbl_vertrag_vertragsstatus.updateamum
|
||||||
|
FROM
|
||||||
|
lehre.tbl_vertrag_vertragsstatus
|
||||||
|
JOIN lehre.tbl_vertragsstatus USING(vertragsstatus_kurzbz)
|
||||||
|
WHERE
|
||||||
|
tbl_vertrag_vertragsstatus.vertrag_id = ?
|
||||||
|
ORDER BY tbl_vertrag_vertragsstatus.datum DESC";
|
||||||
|
|
||||||
|
return $this->execQuery($query, array($vertrag_id));
|
||||||
|
}
|
||||||
|
|
||||||
private function _updateVertragRelevant($vertrag_id)
|
private function _updateVertragRelevant($vertrag_id)
|
||||||
{
|
{
|
||||||
$this->LehreinheitmitarbeiterModel->update(
|
$this->LehreinheitmitarbeiterModel->update(
|
||||||
|
|||||||
@@ -11,4 +11,5 @@ class Vertragstyp_model extends DB_Model
|
|||||||
$this->dbTable = 'lehre.tbl_vertragstyp';
|
$this->dbTable = 'lehre.tbl_vertragstyp';
|
||||||
$this->pk = 'vertragstyp_kurzbz';
|
$this->pk = 'vertragstyp_kurzbz';
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -190,4 +190,6 @@ class Vertragvertragsstatus_model extends DB_Model
|
|||||||
|
|
||||||
return $this->loadWhere($condition);
|
return $this->loadWhere($condition);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -432,10 +432,10 @@ class Reihungstest_model extends DB_Model
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads all applicants of a placement test
|
* Loads all applicants of a placement test
|
||||||
* @param integer $reihungstest_id ID of placement test
|
* @param integer $reihungstest_id ID of placement test
|
||||||
* @return array Returns object array with data of applicants.
|
* @return array Returns object array with data of applicants.
|
||||||
*/
|
*/
|
||||||
public function getApplicantsOfPlacementTest($reihungstest_id)
|
public function getApplicantsOfPlacementTest($reihungstest_id)
|
||||||
{
|
{
|
||||||
$query = '
|
$query = '
|
||||||
@@ -556,13 +556,22 @@ class Reihungstest_model extends DB_Model
|
|||||||
* Calculates Result of Placement Test for a given Person and given placementtest
|
* Calculates Result of Placement Test for a given Person and given placementtest
|
||||||
* and with taking account of weighting per area
|
* and with taking account of weighting per area
|
||||||
*
|
*
|
||||||
* @param $person_id ID of Person
|
* @param Number $person_id ID of Person
|
||||||
* @param $punkte if true result is points else result is percentage of sum
|
* @param Boolean $punkte if true result is points else result is percentage of sum
|
||||||
* @param $reihungstest_id ID of Placementtest
|
* @param Number $reihungstest_id ID of Placementtest
|
||||||
* @param $weightedArray array of weighting per area (gewicht per gebiet_id)
|
* @param Array $weightedArray array of weighting per area (gewicht per gebiet_id)
|
||||||
* @return float result
|
* @param Boolean $has_excluded_gebiete if true, areas in the configArray will be excluded
|
||||||
|
* @param Array $basis_gebiet_id_toString areas to exclude
|
||||||
|
* @return float result points of RT
|
||||||
*/
|
*/
|
||||||
public function getReihungstestErgebnisPerson($person_id, $punkte, $reihungstest_id, $weightedArray = null)
|
public function getReihungstestErgebnisPerson(
|
||||||
|
$person_id,
|
||||||
|
$punkte,
|
||||||
|
$reihungstest_id,
|
||||||
|
$weightedArray = null,
|
||||||
|
$has_excluded_gebiete = false,
|
||||||
|
$basis_gebiet_id_toString = null
|
||||||
|
)
|
||||||
{
|
{
|
||||||
$parametersArray = array($reihungstest_id);
|
$parametersArray = array($reihungstest_id);
|
||||||
|
|
||||||
@@ -577,6 +586,35 @@ class Reihungstest_model extends DB_Model
|
|||||||
WHERE
|
WHERE
|
||||||
reihungstest_id = ? ";
|
reihungstest_id = ? ";
|
||||||
|
|
||||||
|
//areas of Studiengang
|
||||||
|
if (!empty($basis_gebiet_id_toString))
|
||||||
|
{
|
||||||
|
$qry .= "
|
||||||
|
AND
|
||||||
|
gebiet_id IN (". $basis_gebiet_id_toString. ")
|
||||||
|
";
|
||||||
|
}
|
||||||
|
|
||||||
|
//areas to exclude
|
||||||
|
if($has_excluded_gebiete)
|
||||||
|
{
|
||||||
|
if (defined('FAS_REIHUNGSTEST_EXCLUDE_GEBIETE') && !empty(FAS_REIHUNGSTEST_EXCLUDE_GEBIETE))
|
||||||
|
{
|
||||||
|
$excluded_gebiete = unserialize(FAS_REIHUNGSTEST_EXCLUDE_GEBIETE);
|
||||||
|
$exclude_gebiet_id_arr = $excluded_gebiete;
|
||||||
|
if (is_array($exclude_gebiet_id_arr) && count($exclude_gebiet_id_arr) > 0)
|
||||||
|
{
|
||||||
|
$exclude_gebiet_id_toString = implode(', ', $exclude_gebiet_id_arr);
|
||||||
|
$qry .= "
|
||||||
|
AND
|
||||||
|
gebiet_id NOT IN (". $exclude_gebiet_id_toString. ")
|
||||||
|
-- AND
|
||||||
|
-- typ = 'b'
|
||||||
|
";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//using prestudent Status to avoid to get the sum of more than 1 placement tests
|
//using prestudent Status to avoid to get the sum of more than 1 placement tests
|
||||||
$qry .= "
|
$qry .= "
|
||||||
AND prestudent_id = (
|
AND prestudent_id = (
|
||||||
|
|||||||
@@ -279,4 +279,12 @@ class Student_model extends DB_Model
|
|||||||
{
|
{
|
||||||
return $student_uid . '@' . DOMAIN;
|
return $student_uid . '@' . DOMAIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getEmailAnredeForStudentUID($student_uid) {
|
||||||
|
$qry = "SELECT anrede, titelpre, vorname, vornamen, nachname, titelpost
|
||||||
|
FROM campus.vw_student
|
||||||
|
WHERE uid = ?";
|
||||||
|
|
||||||
|
return $this->execReadOnlyQuery($qry, array($student_uid));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,4 +11,12 @@ class Note_model extends DB_Model
|
|||||||
$this->dbTable = 'lehre.tbl_note';
|
$this->dbTable = 'lehre.tbl_note';
|
||||||
$this->pk = 'note';
|
$this->pk = 'note';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getAllActive() {
|
||||||
|
$qry ="SELECT *
|
||||||
|
FROM lehre.tbl_note
|
||||||
|
WHERE aktiv = true";
|
||||||
|
|
||||||
|
return $this->execReadOnlyQuery($qry);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -61,4 +61,68 @@ class Paabgabe_model extends DB_Model
|
|||||||
return $this->execReadOnlyQuery($qry, array($person_id));
|
return $this->execReadOnlyQuery($qry, array($person_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function findAbgabenNewOrUpdatedSince($interval, $relevantTypes)
|
||||||
|
{
|
||||||
|
|
||||||
|
$query = "SELECT projektarbeit_id, paabgabe_id, paabgabetyp_kurzbz, fixtermin, datum, campus.tbl_paabgabe.kurzbz, campus.tbl_paabgabetyp.bezeichnung, campus.tbl_paabgabe.abgabedatum,
|
||||||
|
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_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 public.tbl_benutzer ON (public.tbl_benutzer.uid = student_uid)
|
||||||
|
JOIN public.tbl_person USING (person_id)
|
||||||
|
|
||||||
|
WHERE (campus.tbl_paabgabe.insertamum >= NOW() - INTERVAL ?
|
||||||
|
OR campus.tbl_paabgabe.updateamum >= NOW() - INTERVAL ?)
|
||||||
|
AND campus.tbl_paabgabe.paabgabetyp_kurzbz IN ?";
|
||||||
|
|
||||||
|
return $this->execQuery($query, [$interval, $interval, $relevantTypes]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function findAbgabenNewOrUpdatedSinceByAbgabedatum($interval, $relevantTypes = null) {
|
||||||
|
|
||||||
|
$queryParams = [$interval];
|
||||||
|
$query = "SELECT projektarbeit_id, paabgabe_id, paabgabetyp_kurzbz, fixtermin, datum, campus.tbl_paabgabe.kurzbz, campus.tbl_paabgabetyp.bezeichnung, campus.tbl_paabgabe.abgabedatum,
|
||||||
|
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,
|
||||||
|
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
|
||||||
|
|
||||||
|
FROM campus.tbl_paabgabe
|
||||||
|
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 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)
|
||||||
|
|
||||||
|
WHERE campus.tbl_paabgabe.abgabedatum IS NOT NULL
|
||||||
|
AND campus.tbl_paabgabe.abgabedatum >= NOW() - INTERVAL ?";
|
||||||
|
|
||||||
|
if($relevantTypes !== null) {
|
||||||
|
$query .= " AND campus.tbl_paabgabe.paabgabetyp_kurzbz IN ?";
|
||||||
|
$queryParams[]= $relevantTypes;
|
||||||
|
}
|
||||||
|
|
||||||
|
$query .= " ORDER BY abgabedatum DESC";
|
||||||
|
|
||||||
|
return $this->execQuery($query, $queryParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function loadByIDs($paabgabe_ids) {
|
||||||
|
$qry = "SELECT * FROM campus.tbl_paabgabe WHERE paabgabe_id IN ?";
|
||||||
|
|
||||||
|
return $this->execReadOnlyQuery($qry, [$paabgabe_ids]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,4 +11,10 @@ class Paabgabetyp_model extends DB_Model
|
|||||||
$this->dbTable = 'campus.tbl_paabgabetyp';
|
$this->dbTable = 'campus.tbl_paabgabetyp';
|
||||||
$this->pk = 'paabgabetyp_kurzbz';
|
$this->pk = 'paabgabetyp_kurzbz';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getAll() {
|
||||||
|
$qry = "SELECT * FROM campus.tbl_paabgabetyp ORDER BY bezeichnung";
|
||||||
|
|
||||||
|
return $this->execReadOnlyQuery($qry);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -109,36 +109,36 @@ class Projektarbeit_model extends DB_Model
|
|||||||
*/
|
*/
|
||||||
public function getStudentProjektarbeitenWithBetreuer($studentUID)
|
public function getStudentProjektarbeitenWithBetreuer($studentUID)
|
||||||
{
|
{
|
||||||
$betreuerQuery = "
|
$betreuerQuery = "SELECT * FROM (SELECT DISTINCT ON(projektarbeit_id)
|
||||||
SELECT
|
|
||||||
vorname as bvorname,
|
vorname as bvorname,
|
||||||
nachname as bnachname,
|
nachname as bnachname,
|
||||||
titelpre as btitelpre,
|
titelpre as btitelpre,
|
||||||
titelpost AS btitelpost,
|
titelpost AS btitelpost,
|
||||||
titelpost AS btitelpost,
|
|
||||||
tbl_betreuerart.beschreibung AS betreuerart_beschreibung,
|
tbl_betreuerart.beschreibung AS betreuerart_beschreibung,
|
||||||
|
|
||||||
(SELECT person_id
|
(SELECT person_id
|
||||||
FROM lehre.tbl_projektbetreuer
|
FROM lehre.tbl_projektbetreuer
|
||||||
WHERE projektarbeit_id=tbl_projektarbeit.projektarbeit_id
|
WHERE projektarbeit_id=tbl_projektarbeit.projektarbeit_id
|
||||||
AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_person_id,
|
AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_person_id,
|
||||||
(SELECT betreuerart_kurzbz
|
(SELECT betreuerart_kurzbz
|
||||||
FROM lehre.tbl_projektbetreuer
|
FROM lehre.tbl_projektbetreuer
|
||||||
WHERE projektarbeit_id=tbl_projektarbeit.projektarbeit_id
|
WHERE projektarbeit_id=tbl_projektarbeit.projektarbeit_id
|
||||||
AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_betreuerart_kurzbz,
|
AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_betreuerart_kurzbz,
|
||||||
(SELECT tbl_betreuerart.beschreibung
|
(SELECT tbl_betreuerart.beschreibung
|
||||||
FROM lehre.tbl_projektbetreuer JOIN lehre.tbl_betreuerart USING(betreuerart_kurzbz)
|
FROM lehre.tbl_projektbetreuer JOIN lehre.tbl_betreuerart USING(betreuerart_kurzbz)
|
||||||
WHERE projektarbeit_id=tbl_projektarbeit.projektarbeit_id
|
WHERE projektarbeit_id=tbl_projektarbeit.projektarbeit_id
|
||||||
AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter', 'Senatsmitglied') LIMIT 1) AS zweitbetreuer_betreuerart_beschreibung,
|
AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter', 'Senatsmitglied') LIMIT 1) AS zweitbetreuer_betreuerart_beschreibung,
|
||||||
|
|
||||||
tbl_betreuerart.betreuerart_kurzbz,
|
tbl_betreuerart.betreuerart_kurzbz,
|
||||||
person_id as bperson_id,
|
person_id as bperson_id,
|
||||||
projektarbeit_id,
|
projektarbeit_id,
|
||||||
lehre.tbl_projekttyp.bezeichnung as projekttypbezeichnung,
|
lehre.tbl_projekttyp.bezeichnung as projekttypbezeichnung,
|
||||||
|
lehre.tbl_projekttyp.projekttyp_kurzbz as projekttypkurzbz,
|
||||||
lehre.tbl_lehreinheit.studiensemester_kurzbz,
|
lehre.tbl_lehreinheit.studiensemester_kurzbz,
|
||||||
lehre.tbl_lehrveranstaltung.studiengang_kz,
|
lehre.tbl_lehrveranstaltung.studiengang_kz,
|
||||||
public.tbl_studiengang.kurzbzlang,
|
public.tbl_studiengang.kurzbzlang,
|
||||||
lehre.tbl_projektbetreuer.note as note,
|
lehre.tbl_projektarbeit.note as note,
|
||||||
|
lehre.tbl_note.bezeichnung as note_bezeichnung,
|
||||||
public.tbl_mitarbeiter.mitarbeiter_uid,
|
public.tbl_mitarbeiter.mitarbeiter_uid,
|
||||||
lehre.tbl_projektarbeit.titel as titel,
|
lehre.tbl_projektarbeit.titel as titel,
|
||||||
lehre.tbl_projektarbeit.sprache as sprache,
|
lehre.tbl_projektarbeit.sprache as sprache,
|
||||||
@@ -148,8 +148,7 @@ class Projektarbeit_model extends DB_Model
|
|||||||
lehre.tbl_projektarbeit.schlagwoerter_en as schlagwoerter_en,
|
lehre.tbl_projektarbeit.schlagwoerter_en as schlagwoerter_en,
|
||||||
lehre.tbl_projektarbeit.abstract as abstract,
|
lehre.tbl_projektarbeit.abstract as abstract,
|
||||||
lehre.tbl_projektarbeit.abstract_en as abstract_en,
|
lehre.tbl_projektarbeit.abstract_en as abstract_en,
|
||||||
(SELECT abgeschicktvon FROM extension.tbl_projektarbeitsbeurteilung WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id AND betreuer_person_id = tbl_projektbetreuer.person_id) AS babgeschickt,
|
lehre.tbl_projektarbeit.insertamum as insertamum,
|
||||||
(SELECT abgeschicktvon FROM extension.tbl_projektarbeitsbeurteilung WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_abgeschickt,
|
|
||||||
(SELECT datum FROM campus.tbl_paabgabe WHERE paabgabetyp_kurzbz = 'end' AND abgabedatum IS NOT NULL AND projektarbeit_id = tbl_projektarbeit.projektarbeit_id LIMIT 1) AS abgegeben
|
(SELECT datum FROM campus.tbl_paabgabe WHERE paabgabetyp_kurzbz = 'end' AND abgabedatum IS NOT NULL AND projektarbeit_id = tbl_projektarbeit.projektarbeit_id LIMIT 1) AS abgegeben
|
||||||
|
|
||||||
FROM lehre.tbl_projektarbeit
|
FROM lehre.tbl_projektarbeit
|
||||||
@@ -158,14 +157,16 @@ class Projektarbeit_model extends DB_Model
|
|||||||
LEFT JOIN public.tbl_benutzer USING(person_id)
|
LEFT JOIN public.tbl_benutzer USING(person_id)
|
||||||
LEFT JOIN lehre.tbl_projekttyp USING (projekttyp_kurzbz)
|
LEFT JOIN lehre.tbl_projekttyp USING (projekttyp_kurzbz)
|
||||||
LEFT JOIN lehre.tbl_betreuerart USING(betreuerart_kurzbz)
|
LEFT JOIN lehre.tbl_betreuerart USING(betreuerart_kurzbz)
|
||||||
LEFT JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
|
LEFT JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
|
||||||
LEFT JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_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_mitarbeiter ON(public.tbl_mitarbeiter.mitarbeiter_uid = public.tbl_benutzer.uid)
|
||||||
LEFT JOIN public.tbl_studiengang USING(studiengang_kz)
|
LEFT JOIN public.tbl_studiengang USING(studiengang_kz)
|
||||||
|
LEFT JOIN lehre.tbl_note ON(lehre.tbl_projektarbeit.note = lehre.tbl_note.note)
|
||||||
WHERE
|
WHERE
|
||||||
tbl_projektarbeit.student_uid = ? AND
|
tbl_projektarbeit.student_uid = ? AND mitarbeiter_uid IS NOT NULL AND
|
||||||
(projekttyp_kurzbz='Bachelor' OR projekttyp_kurzbz='Diplom')
|
(projekttyp_kurzbz='Bachelor' OR projekttyp_kurzbz='Diplom')
|
||||||
AND betreuerart_kurzbz IN ('Betreuer', 'Begutachter', 'Erstbegutachter', 'Senatsvorsitz')";
|
AND betreuerart_kurzbz IN ('Betreuer', 'Begutachter', 'Erstbegutachter', 'Senatsvorsitz')) as base
|
||||||
|
ORDER BY insertamum DESC";
|
||||||
|
|
||||||
return $this->execReadOnlyQuery($betreuerQuery, array($studentUID));
|
return $this->execReadOnlyQuery($betreuerQuery, array($studentUID));
|
||||||
}
|
}
|
||||||
@@ -179,8 +180,12 @@ class Projektarbeit_model extends DB_Model
|
|||||||
campus.tbl_paabgabe.fixtermin,
|
campus.tbl_paabgabe.fixtermin,
|
||||||
campus.tbl_paabgabe.kurzbz,
|
campus.tbl_paabgabe.kurzbz,
|
||||||
campus.tbl_paabgabe.datum,
|
campus.tbl_paabgabe.datum,
|
||||||
|
campus.tbl_paabgabe.note,
|
||||||
|
campus.tbl_paabgabe.upload_allowed,
|
||||||
|
campus.tbl_paabgabe.beurteilungsnotiz,
|
||||||
campus.tbl_paabgabetyp.paabgabetyp_kurzbz,
|
campus.tbl_paabgabetyp.paabgabetyp_kurzbz,
|
||||||
campus.tbl_paabgabetyp.bezeichnung,
|
campus.tbl_paabgabetyp.bezeichnung,
|
||||||
|
campus.tbl_paabgabetyp.benotbar,
|
||||||
campus.tbl_paabgabe.abgabedatum,
|
campus.tbl_paabgabe.abgabedatum,
|
||||||
campus.tbl_paabgabe.insertvon
|
campus.tbl_paabgabe.insertvon
|
||||||
FROM campus.tbl_paabgabe JOIN campus.tbl_paabgabetyp USING(paabgabetyp_kurzbz)
|
FROM campus.tbl_paabgabe JOIN campus.tbl_paabgabetyp USING(paabgabetyp_kurzbz)
|
||||||
@@ -190,16 +195,76 @@ class Projektarbeit_model extends DB_Model
|
|||||||
return $this->execReadOnlyQuery($qry, array($projektarbeit_id));
|
return $this->execReadOnlyQuery($qry, array($projektarbeit_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getProjektarbeitenAbgabetermine($projektarbeiten_ids) {
|
||||||
|
$qry ="SELECT campus.tbl_paabgabe.paabgabe_id,
|
||||||
|
campus.tbl_paabgabe.projektarbeit_id,
|
||||||
|
campus.tbl_paabgabe.fixtermin,
|
||||||
|
campus.tbl_paabgabe.kurzbz,
|
||||||
|
campus.tbl_paabgabe.datum,
|
||||||
|
campus.tbl_paabgabe.note,
|
||||||
|
campus.tbl_paabgabe.upload_allowed,
|
||||||
|
campus.tbl_paabgabe.beurteilungsnotiz,
|
||||||
|
campus.tbl_paabgabetyp.paabgabetyp_kurzbz,
|
||||||
|
campus.tbl_paabgabetyp.bezeichnung,
|
||||||
|
campus.tbl_paabgabe.abgabedatum,
|
||||||
|
campus.tbl_paabgabe.insertvon
|
||||||
|
FROM campus.tbl_paabgabe JOIN campus.tbl_paabgabetyp USING(paabgabetyp_kurzbz)
|
||||||
|
WHERE campus.tbl_paabgabe.projektarbeit_id IN ?
|
||||||
|
ORDER BY campus.tbl_paabgabe.datum";
|
||||||
|
|
||||||
|
return $this->execReadOnlyQuery($qry, array($projektarbeiten_ids));
|
||||||
|
}
|
||||||
|
|
||||||
public function getProjektbetreuerAnrede($bperson_id) {
|
public function getProjektbetreuerAnrede($bperson_id) {
|
||||||
$qry_betr="SELECT distinct trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as first,
|
$qry_betr="SELECT DISTINCT ON(public.tbl_person.person_id) trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as first, anrede
|
||||||
public.tbl_mitarbeiter.mitarbeiter_uid, anrede
|
FROM public.tbl_person JOIN lehre.tbl_projektbetreuer ON(lehre.tbl_projektbetreuer.person_id=public.tbl_person.person_id)
|
||||||
FROM public.tbl_person JOIN lehre.tbl_projektbetreuer ON(lehre.tbl_projektbetreuer.person_id=public.tbl_person.person_id)
|
WHERE public.tbl_person.person_id= ?";
|
||||||
JOIN public.tbl_benutzer ON(public.tbl_benutzer.person_id=public.tbl_person.person_id)
|
|
||||||
JOIN public.tbl_mitarbeiter ON(public.tbl_benutzer.uid=public.tbl_mitarbeiter.mitarbeiter_uid)
|
|
||||||
WHERE public.tbl_person.person_id= ?";
|
|
||||||
|
|
||||||
return $this->execReadOnlyQuery($qry_betr, [$bperson_id]);
|
return $this->execReadOnlyQuery($qry_betr, [$bperson_id]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getProjektbetreuerEmail($projektarbeit_id) {
|
||||||
|
$qry = "SELECT (
|
||||||
|
SELECT kontakt
|
||||||
|
FROM public.tbl_kontakt
|
||||||
|
WHERE kontakttyp = 'email'
|
||||||
|
AND person_id = pers.person_id
|
||||||
|
ORDER BY
|
||||||
|
CASE WHEN zustellung THEN 0 ELSE 1 END,
|
||||||
|
insertamum DESC NULLS LAST
|
||||||
|
LIMIT 1
|
||||||
|
) AS private_email, mitarbeiter_uid as uid
|
||||||
|
FROM lehre.tbl_projektarbeit pa
|
||||||
|
JOIN lehre.tbl_projektbetreuer USING (projektarbeit_id)
|
||||||
|
JOIN public.tbl_person pers USING (person_id)
|
||||||
|
LEFT JOIN public.tbl_benutzer ben USING (person_id)
|
||||||
|
LEFT JOIN public.tbl_mitarbeiter ma ON ben.uid = ma.mitarbeiter_uid
|
||||||
|
WHERE (ben.aktiv OR ben.aktiv IS NULL)
|
||||||
|
AND projektarbeit_id = ?";
|
||||||
|
|
||||||
|
return $this->execReadOnlyQuery($qry, [$projektarbeit_id]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getProjektbetreuerEmailByPersonID($person_id) {
|
||||||
|
$qry = "SELECT (
|
||||||
|
SELECT kontakt
|
||||||
|
FROM public.tbl_kontakt
|
||||||
|
WHERE kontakttyp = 'email'
|
||||||
|
AND person_id = pers.person_id
|
||||||
|
ORDER BY
|
||||||
|
CASE WHEN zustellung THEN 0 ELSE 1 END,
|
||||||
|
insertamum DESC NULLS LAST
|
||||||
|
LIMIT 1
|
||||||
|
) AS private_email, mitarbeiter_uid as uid
|
||||||
|
FROM lehre.tbl_projektarbeit pa
|
||||||
|
JOIN lehre.tbl_projektbetreuer USING (projektarbeit_id)
|
||||||
|
JOIN public.tbl_person pers USING (person_id)
|
||||||
|
LEFT JOIN public.tbl_benutzer ben USING (person_id)
|
||||||
|
LEFT JOIN public.tbl_mitarbeiter ma ON ben.uid = ma.mitarbeiter_uid
|
||||||
|
WHERE (ben.aktiv OR ben.aktiv IS NULL)
|
||||||
|
AND person_id = ?";
|
||||||
|
|
||||||
|
return $this->execReadOnlyQuery($qry, [$person_id]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getProjektarbeitBenutzer($uid) {
|
public function getProjektarbeitBenutzer($uid) {
|
||||||
@@ -234,9 +299,9 @@ class Projektarbeit_model extends DB_Model
|
|||||||
*
|
*
|
||||||
FROM
|
FROM
|
||||||
(SELECT tbl_person.vorname, tbl_person.nachname, tbl_studiengang.typ, tbl_studiengang.kurzbz,
|
(SELECT tbl_person.vorname, tbl_person.nachname, tbl_studiengang.typ, tbl_studiengang.kurzbz,
|
||||||
tbl_projektarbeit.projekttyp_kurzbz, tbl_projekttyp.bezeichnung, tbl_projektarbeit.titel, tbl_projektarbeit.projektarbeit_id,
|
tbl_projektarbeit.projekttyp_kurzbz, tbl_projekttyp.bezeichnung, tbl_projektarbeit.titel, tbl_projektarbeit.projektarbeit_id, tbl_projektarbeit.note,
|
||||||
tbl_projektbetreuer.betreuerart_kurzbz, tbl_betreuerart.beschreibung AS betreuerart_beschreibung,
|
tbl_projektbetreuer.person_id as betreuer_person_id, tbl_projektbetreuer.betreuerart_kurzbz, tbl_betreuerart.beschreibung AS betreuerart_beschreibung,
|
||||||
tbl_benutzer.uid, tbl_student.matrikelnr, tbl_lehreinheit.studiensemester_kurzbz
|
tbl_benutzer.uid, tbl_student.matrikelnr, tbl_lehreinheit.studiensemester_kurzbz, public.tbl_student.student_uid
|
||||||
FROM lehre.tbl_projektarbeit
|
FROM lehre.tbl_projektarbeit
|
||||||
LEFT JOIN lehre.tbl_projektbetreuer using(projektarbeit_id)
|
LEFT JOIN lehre.tbl_projektbetreuer using(projektarbeit_id)
|
||||||
LEFT JOIN lehre.tbl_betreuerart using(betreuerart_kurzbz)
|
LEFT JOIN lehre.tbl_betreuerart using(betreuerart_kurzbz)
|
||||||
@@ -274,6 +339,179 @@ class Projektarbeit_model extends DB_Model
|
|||||||
return $this->execReadOnlyQuery($qry, array($projektarbeit_id));
|
return $this->execReadOnlyQuery($qry, array($projektarbeit_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function getProjektarbeitenForStudiengang($studiengang_kz, $benotet) {
|
||||||
|
$new_qry = "SELECT DISTINCT ON(tmp.projektarbeit_id) *, campus.get_betreuer_details(tmp.zweitbetreuer_person_id) as zweitbetreuer_full_name, campus.get_betreuer_details(tmp.betreuer_person_id) as erstbetreuer_full_name
|
||||||
|
FROM(
|
||||||
|
SELECT
|
||||||
|
DISTINCT ON(tbl_projektarbeit.projektarbeit_id)
|
||||||
|
tbl_projektarbeit.projekttyp_kurzbz,
|
||||||
|
tbl_projektarbeit.titel,
|
||||||
|
tbl_projektarbeit.projektarbeit_id,
|
||||||
|
tbl_studiengang.typ, tbl_studiengang.kurzbz,
|
||||||
|
student_benutzer.uid as student_uid,
|
||||||
|
student_person.vorname as student_vorname,
|
||||||
|
student_person.nachname as student_nachname,
|
||||||
|
tbl_student.matrikelnr, tbl_lehreinheit.studiensemester_kurzbz,
|
||||||
|
betreuer_benutzer.uid as betreuer_benutzer_uid,
|
||||||
|
betreuer_person.titelpre as betreuer_titelpre,
|
||||||
|
betreuer_person.vorname as betreuer_vorname,
|
||||||
|
betreuer_person.nachname as betreuer_nachname,
|
||||||
|
betreuer_person.titelpost as betreuer_titelpost,
|
||||||
|
lehre.tbl_projektbetreuer.betreuerart_kurzbz as betreuerart,
|
||||||
|
lehre.tbl_projektbetreuer.person_id as betreuer_person_id,
|
||||||
|
lehre.tbl_projektarbeit.sprache as sprache,
|
||||||
|
lehre.tbl_projektarbeit.seitenanzahl as seitenanzahl,
|
||||||
|
lehre.tbl_projektarbeit.kontrollschlagwoerter as kontrollschlagwoerter,
|
||||||
|
lehre.tbl_projektarbeit.schlagwoerter as schlagwoerter,
|
||||||
|
lehre.tbl_projektarbeit.schlagwoerter_en as schlagwoerter_en,
|
||||||
|
lehre.tbl_projektarbeit.abstract as abstract,
|
||||||
|
lehre.tbl_projektarbeit.abstract_en as abstract_en,
|
||||||
|
lehre.tbl_projektarbeit.insertamum as insertamum,
|
||||||
|
lehre.tbl_projektarbeit.note as note,
|
||||||
|
(
|
||||||
|
SELECT orgform_kurzbz
|
||||||
|
FROM tbl_prestudentstatus
|
||||||
|
WHERE prestudent_id = (SELECT prestudent_id
|
||||||
|
FROM tbl_student
|
||||||
|
WHERE student_uid = student_benutzer.uid
|
||||||
|
LIMIT 1)
|
||||||
|
ORDER BY datum DESC, insertamum DESC, ext_id DESC
|
||||||
|
LIMIT 1
|
||||||
|
)
|
||||||
|
as organisationsform,
|
||||||
|
(
|
||||||
|
SELECT person_id
|
||||||
|
FROM lehre.tbl_projektbetreuer
|
||||||
|
WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id
|
||||||
|
AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter', 'Senatsmitglied')
|
||||||
|
LIMIT 1
|
||||||
|
)
|
||||||
|
AS zweitbetreuer_person_id,
|
||||||
|
(
|
||||||
|
SELECT betreuerart_kurzbz
|
||||||
|
FROM lehre.tbl_projektbetreuer
|
||||||
|
WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id
|
||||||
|
AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter', 'Senatsmitglied')
|
||||||
|
LIMIT 1
|
||||||
|
)
|
||||||
|
AS zweitbetreuer_betreuerart_kurzbz,
|
||||||
|
(
|
||||||
|
SELECT tbl_betreuerart.beschreibung
|
||||||
|
FROM lehre.tbl_projektbetreuer
|
||||||
|
JOIN lehre.tbl_betreuerart USING (betreuerart_kurzbz)
|
||||||
|
WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id
|
||||||
|
AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter', 'Senatsmitglied')
|
||||||
|
LIMIT 1
|
||||||
|
)
|
||||||
|
AS zweitbetreuer_betreuerart_beschreibung,
|
||||||
|
(
|
||||||
|
SELECT trim(COALESCE(titelpre, '') || ' ' || COALESCE(vorname, '') || ' ' || COALESCE(nachname, '') || ' ' ||
|
||||||
|
COALESCE(titelpost, ''))
|
||||||
|
FROM public.tbl_person
|
||||||
|
JOIN lehre.tbl_projektbetreuer ON (lehre.tbl_projektbetreuer.person_id = public.tbl_person.person_id)
|
||||||
|
LEFT JOIN public.tbl_benutzer ON (public.tbl_benutzer.person_id = public.tbl_person.person_id)
|
||||||
|
LEFT JOIN public.tbl_mitarbeiter ON (public.tbl_benutzer.uid = public.tbl_mitarbeiter.mitarbeiter_uid)
|
||||||
|
WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id
|
||||||
|
AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter', 'Senatsmitglied')
|
||||||
|
LIMIT 1
|
||||||
|
)
|
||||||
|
as zweitbetreuer_full_name,
|
||||||
|
(
|
||||||
|
SELECT titelpre
|
||||||
|
FROM public.tbl_person
|
||||||
|
JOIN lehre.tbl_projektbetreuer ON (lehre.tbl_projektbetreuer.person_id = public.tbl_person.person_id)
|
||||||
|
LEFT JOIN public.tbl_benutzer ON (public.tbl_benutzer.person_id = public.tbl_person.person_id)
|
||||||
|
LEFT JOIN public.tbl_mitarbeiter ON (public.tbl_benutzer.uid = public.tbl_mitarbeiter.mitarbeiter_uid)
|
||||||
|
WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id
|
||||||
|
AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter', 'Senatsmitglied')
|
||||||
|
LIMIT 1
|
||||||
|
)
|
||||||
|
as zweitbetreuer_titelpre,
|
||||||
|
(
|
||||||
|
SELECT vorname
|
||||||
|
FROM public.tbl_person
|
||||||
|
JOIN lehre.tbl_projektbetreuer ON (lehre.tbl_projektbetreuer.person_id = public.tbl_person.person_id)
|
||||||
|
LEFT JOIN public.tbl_benutzer ON (public.tbl_benutzer.person_id = public.tbl_person.person_id)
|
||||||
|
LEFT JOIN public.tbl_mitarbeiter ON (public.tbl_benutzer.uid = public.tbl_mitarbeiter.mitarbeiter_uid)
|
||||||
|
WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id
|
||||||
|
AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter', 'Senatsmitglied')
|
||||||
|
LIMIT 1
|
||||||
|
)
|
||||||
|
as zweitbetreuer_vorname,
|
||||||
|
(
|
||||||
|
SELECT nachname
|
||||||
|
FROM public.tbl_person
|
||||||
|
JOIN lehre.tbl_projektbetreuer ON (lehre.tbl_projektbetreuer.person_id = public.tbl_person.person_id)
|
||||||
|
LEFT JOIN public.tbl_benutzer ON (public.tbl_benutzer.person_id = public.tbl_person.person_id)
|
||||||
|
LEFT JOIN public.tbl_mitarbeiter ON (public.tbl_benutzer.uid = public.tbl_mitarbeiter.mitarbeiter_uid)
|
||||||
|
WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id
|
||||||
|
AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter', 'Senatsmitglied')
|
||||||
|
LIMIT 1
|
||||||
|
)
|
||||||
|
as zweitbetreuer_nachname,
|
||||||
|
(
|
||||||
|
SELECT titelpost
|
||||||
|
FROM public.tbl_person
|
||||||
|
JOIN lehre.tbl_projektbetreuer ON (lehre.tbl_projektbetreuer.person_id = public.tbl_person.person_id)
|
||||||
|
LEFT JOIN public.tbl_benutzer ON (public.tbl_benutzer.person_id = public.tbl_person.person_id)
|
||||||
|
LEFT JOIN public.tbl_mitarbeiter ON (public.tbl_benutzer.uid = public.tbl_mitarbeiter.mitarbeiter_uid)
|
||||||
|
WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id
|
||||||
|
AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter', 'Senatsmitglied')
|
||||||
|
LIMIT 1
|
||||||
|
)
|
||||||
|
as zweitbetreuer_titelpost,
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
COALESCE(tbl_studienplan.orgform_kurzbz,
|
||||||
|
tbl_prestudentstatus.orgform_kurzbz, tbl_studiengang.orgform_kurzbz) as
|
||||||
|
orgform
|
||||||
|
FROM
|
||||||
|
public.tbl_prestudent
|
||||||
|
JOIN public.tbl_prestudentstatus USING(prestudent_id)
|
||||||
|
JOIN public.tbl_studiensemester USING(studiensemester_kurzbz)
|
||||||
|
JOIN public.tbl_studiengang USING(studiengang_kz)
|
||||||
|
LEFT JOIN lehre.tbl_studienplan USING(studienplan_id)
|
||||||
|
WHERE
|
||||||
|
prestudent_id=tbl_student.prestudent_id
|
||||||
|
ORDER BY tbl_prestudentstatus.datum DESC LIMIT 1
|
||||||
|
) as orgform,
|
||||||
|
(SELECT status_kurzbz FROM public.tbl_prestudentstatus
|
||||||
|
WHERE prestudent_id=tbl_student.prestudent_id
|
||||||
|
ORDER BY datum DESC, insertamum DESC, ext_id DESC LIMIT 1) as studienstatus
|
||||||
|
FROM lehre.tbl_projektarbeit
|
||||||
|
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)
|
||||||
|
LEFT JOIN lehre.tbl_projektbetreuer USING (projektarbeit_id)
|
||||||
|
LEFT JOIN public.tbl_person betreuer_person ON (betreuer_person.person_id = lehre.tbl_projektbetreuer.person_id)
|
||||||
|
LEFT JOIN public.tbl_benutzer betreuer_benutzer ON (betreuer_person.person_id = betreuer_benutzer.person_id)
|
||||||
|
WHERE (projekttyp_kurzbz = 'Bachelor' OR projekttyp_kurzbz = 'Diplom')
|
||||||
|
AND student_benutzer.aktiv AND (
|
||||||
|
lehre.tbl_projektbetreuer.betreuerart_kurzbz = 'Erstbegutachter'
|
||||||
|
OR lehre.tbl_projektbetreuer.betreuerart_kurzbz = 'Begutachter'
|
||||||
|
OR lehre.tbl_projektbetreuer.betreuerart_kurzbz = 'Betreuer'
|
||||||
|
OR lehre.tbl_projektbetreuer.betreuerart_kurzbz = 'Erstbetreuer'
|
||||||
|
OR lehre.tbl_projektbetreuer.betreuerart_kurzbz = 'Senatsvorsitz'
|
||||||
|
)
|
||||||
|
AND public.tbl_studiengang.studiengang_kz = ?";
|
||||||
|
|
||||||
|
if($benotet == 0) {
|
||||||
|
$new_qry .= " AND lehre.tbl_projektarbeit.note IS NULL ";
|
||||||
|
} else if ($benotet == 1) {
|
||||||
|
$new_qry .= " AND lehre.tbl_projektarbeit.note IS NOT NULL ";
|
||||||
|
}
|
||||||
|
|
||||||
|
$new_qry .= " ORDER BY tbl_projektarbeit.projektarbeit_id DESC, student_person.nachname ASC
|
||||||
|
) as tmp";
|
||||||
|
|
||||||
|
return $this->execReadOnlyQuery($new_qry, array($studiengang_kz));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param
|
* @param
|
||||||
@@ -299,4 +537,17 @@ class Projektarbeit_model extends DB_Model
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getProjektarbeitByPaabgabeID($paabgabe_id) {
|
||||||
|
$qry = "SELECT
|
||||||
|
projektarbeit_id
|
||||||
|
FROM
|
||||||
|
campus.tbl_paabgabe
|
||||||
|
JOIN lehre.tbl_projektarbeit USING(projektarbeit_id)
|
||||||
|
WHERE
|
||||||
|
campus.tbl_paabgabe.paabgabe_id = ?;
|
||||||
|
";
|
||||||
|
|
||||||
|
return $this->execReadOnlyQuery($qry, [$paabgabe_id]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -232,4 +232,41 @@ class Projektbetreuer_model extends DB_Model
|
|||||||
|
|
||||||
return $this->execQuery($qry, array($projektarbeit_id, $betreuer_person_id));
|
return $this->execQuery($qry, array($projektarbeit_id, $betreuer_person_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets all Betreuer of a Projektarbeit.
|
||||||
|
* Returns one row for each person.
|
||||||
|
* @param int $projektarbeit_id
|
||||||
|
* @return array success with number of Betreuer or error
|
||||||
|
*/
|
||||||
|
public function getAllBetreuerOfProjektarbeit($projektarbeit_id)
|
||||||
|
{
|
||||||
|
$qry = "SELECT DISTINCT ON (pers.person_id) pers.person_id, betreuerart_kurzbz, vorname, nachname,
|
||||||
|
trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as voller_name,
|
||||||
|
anrede, titelpre, titelpost, gebdatum, geschlecht, pa.projekttyp_kurzbz,
|
||||||
|
ben.uid, ben.alias, ma.personalnummer, mitarbeiter_uid, student_uid,
|
||||||
|
(
|
||||||
|
SELECT kontakt
|
||||||
|
FROM public.tbl_kontakt
|
||||||
|
WHERE kontakttyp = 'email'
|
||||||
|
AND person_id = pers.person_id
|
||||||
|
ORDER BY
|
||||||
|
CASE WHEN zustellung THEN 0 ELSE 1 END,
|
||||||
|
insertamum DESC NULLS LAST
|
||||||
|
LIMIT 1
|
||||||
|
) AS private_email
|
||||||
|
FROM lehre.tbl_projektarbeit pa
|
||||||
|
JOIN lehre.tbl_projektbetreuer USING (projektarbeit_id)
|
||||||
|
JOIN public.tbl_person pers USING (person_id)
|
||||||
|
LEFT JOIN public.tbl_benutzer ben USING (person_id)
|
||||||
|
LEFT JOIN public.tbl_mitarbeiter ma ON ben.uid = ma.mitarbeiter_uid
|
||||||
|
WHERE (ben.aktiv OR ben.aktiv IS NULL)
|
||||||
|
AND projektarbeit_id = ?
|
||||||
|
ORDER BY pers.person_id, CASE WHEN ma.mitarbeiter_uid IS NULL THEN 1 ELSE 0 END, /*Mitarbeiter account first*/
|
||||||
|
CASE WHEN ben.uid IS NULL THEN 1 ELSE 0 END, /*user with account first*/
|
||||||
|
ben.insertamum";
|
||||||
|
|
||||||
|
return $this->execQuery($qry, array($projektarbeit_id));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -243,4 +243,20 @@ class Organisationseinheit_model extends DB_Model
|
|||||||
|
|
||||||
return $this->execReadOnlyQuery($qry, array($oe_kurzbz));
|
return $this->execReadOnlyQuery($qry, array($oe_kurzbz));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getAssistenzForOE($oe_kurzbz) {
|
||||||
|
$qry = "
|
||||||
|
SELECT person_id, uid, benutzerfunktion_id, funktion_kurzbz, oe_kurzbz, alias,
|
||||||
|
anrede, trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as first
|
||||||
|
FROM tbl_benutzerfunktion
|
||||||
|
JOIN public.tbl_benutzer USING(uid)
|
||||||
|
JOIN public.tbl_person USING(person_id)
|
||||||
|
WHERE funktion_kurzbz = 'ass'
|
||||||
|
AND oe_kurzbz = ?
|
||||||
|
AND (datum_bis IS NULL OR NOW() <= datum_bis)
|
||||||
|
AND public.tbl_benutzer.aktiv = true
|
||||||
|
";
|
||||||
|
|
||||||
|
return $this->execReadOnlyQuery($qry, array($oe_kurzbz));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -658,36 +658,6 @@ class Studiengang_model extends DB_Model
|
|||||||
$this->load->model('person/Person_model', 'PersonModel');
|
$this->load->model('person/Person_model', 'PersonModel');
|
||||||
$this->load->model('crm/Student_model', 'StudentModel');
|
$this->load->model('crm/Student_model', 'StudentModel');
|
||||||
|
|
||||||
$addEmailProperty= function(&$benutzerfunktionen){
|
|
||||||
if(count($benutzerfunktionen) && defined('DOMAIN'))
|
|
||||||
{
|
|
||||||
$benutzerfunktionen = array_map(function($benutzer)
|
|
||||||
{
|
|
||||||
$benutzer->email = $benutzer->alias."@".DOMAIN;
|
|
||||||
return $benutzer;
|
|
||||||
},$benutzerfunktionen) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
$addFotoProperty= function(&$collection){
|
|
||||||
$collection = array_map(function($item){
|
|
||||||
$person_id = $this->PersonModel->getByUid($item->uid);
|
|
||||||
if(isError($person_id))
|
|
||||||
return error($person_id);
|
|
||||||
$person_id = current(getData($person_id))->person_id;
|
|
||||||
$this->PersonModel->addSelect('foto');
|
|
||||||
$foto = $this->PersonModel->loadWhere(array('person_id'=>$person_id));
|
|
||||||
if(isError($foto))
|
|
||||||
return error($foto);
|
|
||||||
$foto = current(getData($foto))->foto;
|
|
||||||
$item->foto = $foto;
|
|
||||||
return $item;
|
|
||||||
},$collection);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
$this->load->model('crm/Student_model', 'StudentModel');
|
|
||||||
|
|
||||||
$student = $this->StudentModel->loadWhere(['student_uid' => getAuthUID()]);
|
$student = $this->StudentModel->loadWhere(['student_uid' => getAuthUID()]);
|
||||||
if (isError($student))
|
if (isError($student))
|
||||||
return error($student);
|
return error($student);
|
||||||
@@ -712,7 +682,7 @@ class Studiengang_model extends DB_Model
|
|||||||
$stg_ltg = array_values(array_filter($stg_ltg, function($stg_leitung){
|
$stg_ltg = array_values(array_filter($stg_ltg, function($stg_leitung){
|
||||||
return $stg_leitung->aktiv;
|
return $stg_leitung->aktiv;
|
||||||
}));
|
}));
|
||||||
$addFotoProperty($stg_ltg);
|
$this->addFotoProperty($stg_ltg);
|
||||||
|
|
||||||
$gf_ltg = $this->BenutzerfunktionModel->getBenutzerFunktionenDetailed('gLtg', $stg_obj->oe_kurzbz);
|
$gf_ltg = $this->BenutzerfunktionModel->getBenutzerFunktionenDetailed('gLtg', $stg_obj->oe_kurzbz);
|
||||||
if (isError($gf_ltg))
|
if (isError($gf_ltg))
|
||||||
@@ -721,8 +691,8 @@ class Studiengang_model extends DB_Model
|
|||||||
$gf_ltg = array_values(array_filter($gf_ltg, function($gf_leitung){
|
$gf_ltg = array_values(array_filter($gf_ltg, function($gf_leitung){
|
||||||
return $gf_leitung->aktiv;
|
return $gf_leitung->aktiv;
|
||||||
}));
|
}));
|
||||||
$addEmailProperty($gf_ltg);
|
$this->addEmailProperty($gf_ltg);
|
||||||
$addFotoProperty($gf_ltg);
|
$this->addFotoProperty($gf_ltg);
|
||||||
|
|
||||||
$stv_ltg = $this->BenutzerfunktionModel->getBenutzerFunktionenDetailed('stvLtg', $stg_obj->oe_kurzbz);
|
$stv_ltg = $this->BenutzerfunktionModel->getBenutzerFunktionenDetailed('stvLtg', $stg_obj->oe_kurzbz);
|
||||||
if (isError($stv_ltg))
|
if (isError($stv_ltg))
|
||||||
@@ -731,8 +701,8 @@ class Studiengang_model extends DB_Model
|
|||||||
$stv_ltg = array_values(array_filter($stv_ltg, function($stv_leitung){
|
$stv_ltg = array_values(array_filter($stv_ltg, function($stv_leitung){
|
||||||
return $stv_leitung->aktiv;
|
return $stv_leitung->aktiv;
|
||||||
}));
|
}));
|
||||||
$addEmailProperty($stv_ltg);
|
$this->addEmailProperty($stv_ltg);
|
||||||
$addFotoProperty($stv_ltg);
|
$this->addFotoProperty($stv_ltg);
|
||||||
|
|
||||||
$ass = $this->BenutzerfunktionModel->getBenutzerFunktionenDetailed('ass', $stg_obj->oe_kurzbz);
|
$ass = $this->BenutzerfunktionModel->getBenutzerFunktionenDetailed('ass', $stg_obj->oe_kurzbz);
|
||||||
if (isError($ass))
|
if (isError($ass))
|
||||||
@@ -741,8 +711,8 @@ class Studiengang_model extends DB_Model
|
|||||||
$ass = array_values(array_filter($ass, function($assistenz){
|
$ass = array_values(array_filter($ass, function($assistenz){
|
||||||
return $assistenz->aktiv;
|
return $assistenz->aktiv;
|
||||||
}));
|
}));
|
||||||
$addEmailProperty($ass);
|
$this->addEmailProperty($ass);
|
||||||
$addFotoProperty($ass);
|
$this->addFotoProperty($ass);
|
||||||
|
|
||||||
$hochschulvertr = $this->BenutzerfunktionModel->getBenutzerFunktionenDetailed('hsv');
|
$hochschulvertr = $this->BenutzerfunktionModel->getBenutzerFunktionenDetailed('hsv');
|
||||||
if (isError($hochschulvertr))
|
if (isError($hochschulvertr))
|
||||||
@@ -751,7 +721,7 @@ class Studiengang_model extends DB_Model
|
|||||||
$hochschulvertr = array_values(array_filter($hochschulvertr, function($hochschul_vertreter){
|
$hochschulvertr = array_values(array_filter($hochschulvertr, function($hochschul_vertreter){
|
||||||
return $hochschul_vertreter->aktiv;
|
return $hochschul_vertreter->aktiv;
|
||||||
}));
|
}));
|
||||||
$addEmailProperty($hochschulvertr);
|
$this->addEmailProperty($hochschulvertr);
|
||||||
|
|
||||||
|
|
||||||
$stdv = $this->BenutzerfunktionModel->getBenutzerFunktionenDetailed('stdv', $stg_obj->oe_kurzbz);
|
$stdv = $this->BenutzerfunktionModel->getBenutzerFunktionenDetailed('stdv', $stg_obj->oe_kurzbz);
|
||||||
@@ -761,7 +731,7 @@ class Studiengang_model extends DB_Model
|
|||||||
$stdv = array_values(array_filter($stdv, function($std_vertreter){
|
$stdv = array_values(array_filter($stdv, function($std_vertreter){
|
||||||
return $std_vertreter->aktiv;
|
return $std_vertreter->aktiv;
|
||||||
}));
|
}));
|
||||||
$addEmailProperty($stdv);
|
$this->addEmailProperty($stdv);
|
||||||
|
|
||||||
|
|
||||||
$jahrgangsvertr = $this->BenutzerfunktionModel->getBenutzerFunktionenDetailed('jgv', $stg_obj->oe_kurzbz, $semester);
|
$jahrgangsvertr = $this->BenutzerfunktionModel->getBenutzerFunktionenDetailed('jgv', $stg_obj->oe_kurzbz, $semester);
|
||||||
@@ -771,7 +741,7 @@ class Studiengang_model extends DB_Model
|
|||||||
$jahrgangsvertr = array_values(array_filter($jahrgangsvertr, function($jahrgang_vertreter){
|
$jahrgangsvertr = array_values(array_filter($jahrgangsvertr, function($jahrgang_vertreter){
|
||||||
return $jahrgang_vertreter->aktiv;
|
return $jahrgang_vertreter->aktiv;
|
||||||
}));
|
}));
|
||||||
$addEmailProperty($jahrgangsvertr);
|
$this->addEmailProperty($jahrgangsvertr);
|
||||||
|
|
||||||
|
|
||||||
$result_object = new stdClass();
|
$result_object = new stdClass();
|
||||||
@@ -870,4 +840,72 @@ class Studiengang_model extends DB_Model
|
|||||||
|
|
||||||
return $this->execQuery($qry, [$studiengang_kz, $studiensemester_kurzbz]);
|
return $this->execQuery($qry, [$studiengang_kz, $studiensemester_kurzbz]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getStudiengaengeFiltered($allowed_stg) {
|
||||||
|
$query ="SELECT DISTINCT
|
||||||
|
public.tbl_studiengang.studiengang_kz,
|
||||||
|
public.tbl_studiengang.bezeichnung,
|
||||||
|
public.tbl_studiengang.kurzbzlang,
|
||||||
|
public.tbl_studiengang.orgform_kurzbz
|
||||||
|
FROM public.tbl_studiengang JOIN lehre.tbl_studienordnung USING(studiengang_kz)
|
||||||
|
JOIN lehre.tbl_studienplan USING(studienordnung_id)
|
||||||
|
JOIN lehre.tbl_studienplan_semester USING(studienplan_id)
|
||||||
|
WHERE public.tbl_studiengang.aktiv = true
|
||||||
|
|
||||||
|
AND public.tbl_studiengang.studiengang_kz IN ?
|
||||||
|
ORDER BY public.tbl_studiengang.kurzbzlang";
|
||||||
|
|
||||||
|
return $this->execReadOnlyQuery($query, [$allowed_stg]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAssistenzForStudiengangKZ($stg_kz) {
|
||||||
|
$this->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel');
|
||||||
|
|
||||||
|
$stg_obj = $this->load($stg_kz);
|
||||||
|
if(isError($stg_obj))
|
||||||
|
return error($stg_obj);
|
||||||
|
if(getData($stg_obj))
|
||||||
|
{
|
||||||
|
$stg_obj = current(getData($stg_obj));
|
||||||
|
}
|
||||||
|
|
||||||
|
$ass = $this->BenutzerfunktionModel->getBenutzerFunktionenDetailed('ass', $stg_obj->oe_kurzbz);
|
||||||
|
if (isError($ass))
|
||||||
|
return $ass;
|
||||||
|
$ass = getData($ass) ?: [];
|
||||||
|
$ass = array_values(array_filter($ass, function($assistenz){
|
||||||
|
return $assistenz->aktiv;
|
||||||
|
}));
|
||||||
|
|
||||||
|
$this->addEmailProperty($ass);
|
||||||
|
|
||||||
|
return success($ass);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function addEmailProperty(&$benutzerfunktionen) {
|
||||||
|
if(count($benutzerfunktionen) && defined('DOMAIN'))
|
||||||
|
{
|
||||||
|
$benutzerfunktionen = array_map(function($benutzer)
|
||||||
|
{
|
||||||
|
$benutzer->email = $benutzer->alias."@".DOMAIN;
|
||||||
|
return $benutzer;
|
||||||
|
},$benutzerfunktionen) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function addFotoProperty (&$collection) {
|
||||||
|
$collection = array_map(function($item){
|
||||||
|
$person_id = $this->PersonModel->getByUid($item->uid);
|
||||||
|
if(isError($person_id))
|
||||||
|
return error($person_id);
|
||||||
|
$person_id = current(getData($person_id))->person_id;
|
||||||
|
$this->PersonModel->addSelect('foto');
|
||||||
|
$foto = $this->PersonModel->loadWhere(array('person_id'=>$person_id));
|
||||||
|
if(isError($foto))
|
||||||
|
return error($foto);
|
||||||
|
$foto = current(getData($foto))->foto;
|
||||||
|
$item->foto = $foto;
|
||||||
|
return $item;
|
||||||
|
},$collection);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -420,4 +420,17 @@ class Person_model extends DB_Model
|
|||||||
return success($result);
|
return success($result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function loadAllStudentUIDSForPersonID($person_id) {
|
||||||
|
$qry = "SELECT
|
||||||
|
CONCAT(tp.vorname, ' ', tp.nachname) AS name,
|
||||||
|
ARRAY_AGG(DISTINCT b.uid ORDER BY b.uid) AS uids
|
||||||
|
FROM public.tbl_student s
|
||||||
|
JOIN public.tbl_benutzer b ON s.student_uid = b.uid
|
||||||
|
JOIN public.tbl_person tp ON b.person_id = tp.person_id
|
||||||
|
GROUP BY tp.vorname, tp.nachname, b.aktiv, b.person_id
|
||||||
|
HAVING b.person_id = ? AND b.aktiv IS TRUE;";
|
||||||
|
|
||||||
|
return $this->execReadOnlyQuery($qry, [$person_id]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -209,7 +209,7 @@ class Mitarbeiter_model extends DB_Model
|
|||||||
{
|
{
|
||||||
$qry = "
|
$qry = "
|
||||||
SELECT
|
SELECT
|
||||||
titelpre, vorname, nachname, titelpost, foto, foto_sperre, person_id, alias, telefonklappe
|
titelpre, vorname, nachname, titelpost, foto, foto_sperre, person_id, alias, telefonklappe, personalnummer, mitarbeiter_uid
|
||||||
FROM
|
FROM
|
||||||
public.tbl_person
|
public.tbl_person
|
||||||
JOIN public.tbl_benutzer b USING(person_id)
|
JOIN public.tbl_benutzer b USING(person_id)
|
||||||
|
|||||||
@@ -470,12 +470,12 @@ class Stundenplan_model extends DB_Model
|
|||||||
}
|
}
|
||||||
foreach($studentlehrverbaende[$sem_date] as $key=>$lehrverband)
|
foreach($studentlehrverbaende[$sem_date] as $key=>$lehrverband)
|
||||||
{
|
{
|
||||||
$query .= "((sp.studiengang_kz = ".$this->escape($lehrverband->studiengang_kz)." AND sp.semester = ".$this->escape($lehrverband->semester)." AND sp.verband = ".$this->escape($lehrverband->verband)." AND sp.gruppe = ".$this->escape($lehrverband->gruppe)." AND sp.datum BETWEEN ".$this->escape($sem_date_range->start)." AND ".$this->escape($sem_date_range->ende).")";
|
$query .= "(((sp.studiengang_kz = ".$this->escape($lehrverband->studiengang_kz)." AND sp.semester = ".$this->escape($lehrverband->semester)." AND sp.verband = ".$this->escape($lehrverband->verband)." AND sp.gruppe = ".$this->escape($lehrverband->gruppe)." AND sp.datum BETWEEN ".$this->escape($sem_date_range->start)." AND ".$this->escape($sem_date_range->ende).")";
|
||||||
// Eintraege fuer den ganzen Verband
|
// Eintraege fuer den ganzen Verband
|
||||||
$query .= "OR (sp.studiengang_kz = ".$this->escape($lehrverband->studiengang_kz)." AND sp.semester = ".$this->escape($lehrverband->semester)." AND sp.verband = ".$this->escape($lehrverband->verband)." AND (sp.gruppe is null OR sp.gruppe='') AND sp.datum BETWEEN ".$this->escape($sem_date_range->start)." AND ".$this->escape($sem_date_range->ende).")";
|
$query .= "OR (sp.studiengang_kz = ".$this->escape($lehrverband->studiengang_kz)." AND sp.semester = ".$this->escape($lehrverband->semester)." AND sp.verband = ".$this->escape($lehrverband->verband)." AND (sp.gruppe is null OR sp.gruppe='') AND sp.datum BETWEEN ".$this->escape($sem_date_range->start)." AND ".$this->escape($sem_date_range->ende).")";
|
||||||
// Eintraege fuer das ganze Semester
|
// Eintraege fuer das ganze Semester
|
||||||
$query .= "OR (sp.studiengang_kz = ".$this->escape($lehrverband->studiengang_kz)." AND sp.semester = ".$this->escape($lehrverband->semester)." AND (sp.verband is null OR sp.verband='') AND sp.datum BETWEEN ".$this->escape($sem_date_range->start)
|
$query .= "OR (sp.studiengang_kz = ".$this->escape($lehrverband->studiengang_kz)." AND sp.semester = ".$this->escape($lehrverband->semester)." AND (sp.verband is null OR sp.verband='') AND sp.datum BETWEEN ".$this->escape($sem_date_range->start)
|
||||||
." AND ".$this->escape($sem_date_range->ende).")". $stringGroupLv. ")";
|
." AND ".$this->escape($sem_date_range->ende).")) AND gruppe_kurzbz is null)";
|
||||||
|
|
||||||
$query .="OR";
|
$query .="OR";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -242,74 +242,91 @@ class Message_model extends DB_Model
|
|||||||
*/
|
*/
|
||||||
public function getMessagesForTable($person_id, $offset, $limit)
|
public function getMessagesForTable($person_id, $offset, $limit)
|
||||||
{
|
{
|
||||||
$sql_base = "
|
$sql = <<<EOSQL
|
||||||
SELECT
|
with filtered_messages as (
|
||||||
|
select
|
||||||
|
m.message_id, m.person_id as sender_id, mr.person_id as recipient_id
|
||||||
|
from
|
||||||
|
public.tbl_msg_message m
|
||||||
|
join
|
||||||
|
public.tbl_msg_recipient mr on mr.message_id = m.message_id
|
||||||
|
where
|
||||||
|
m.person_id = ?
|
||||||
|
group by
|
||||||
|
m.message_id, m.person_id, mr.person_id
|
||||||
|
|
||||||
|
union all
|
||||||
|
|
||||||
|
select
|
||||||
|
m.message_id, m.person_id as sender_id, mr.person_id as recipient_id
|
||||||
|
from
|
||||||
|
public.tbl_msg_message m
|
||||||
|
join
|
||||||
|
public.tbl_msg_recipient mr on mr.message_id = m.message_id
|
||||||
|
where
|
||||||
|
mr.person_id = ?
|
||||||
|
group by
|
||||||
|
m.message_id, m.person_id, mr.person_id
|
||||||
|
|
||||||
|
), lastmsgstatus as (
|
||||||
|
select
|
||||||
|
ms.*
|
||||||
|
from (
|
||||||
|
select
|
||||||
|
s.message_id, s.person_id, MAX(s.insertamum) as lastinserted
|
||||||
|
from
|
||||||
|
public.tbl_msg_status s
|
||||||
|
join
|
||||||
|
filtered_messages fm on fm.message_id = s.message_id and fm.recipient_id = s.person_id
|
||||||
|
group by
|
||||||
|
s.message_id, s.person_id
|
||||||
|
) ls
|
||||||
|
join
|
||||||
|
public.tbl_msg_status ms on ms.message_id = ls.message_id and ms.person_id = ls.person_id and ms.insertamum = ls.lastinserted
|
||||||
|
)
|
||||||
|
|
||||||
|
select
|
||||||
|
(select count(*) from filtered_messages) as total_msgs,
|
||||||
m.message_id AS message_id,
|
m.message_id AS message_id,
|
||||||
m.subject AS subject,
|
m.subject AS subject,
|
||||||
m.body AS body,
|
m.body AS body,
|
||||||
m.insertamum AS insertamum,
|
m.insertamum AS insertamum,
|
||||||
m.relationmessage_id AS relationmessage_id,
|
m.relationmessage_id AS relationmessage_id,
|
||||||
(SELECT COALESCE(titelpre,'') || ' ' || COALESCE(vorname,'') || ' ' || COALESCE(nachname,'') || ' ' || COALESCE(titelpost,'') FROM public.tbl_person WHERE person_id = m.person_id) as sender,
|
(COALESCE(ps.titelpre,'') || ' ' || COALESCE(ps.vorname,'') || ' ' || COALESCE(ps.nachname,'') || ' ' || COALESCE(ps.titelpost,'')) as sender,
|
||||||
(SELECT COALESCE(titelpre,'') || ' ' || COALESCE(vorname,'') || ' ' || COALESCE(nachname,'') || ' ' || COALESCE(titelpost,'') FROM public.tbl_person WHERE person_id = r.person_id) as recipient,
|
(COALESCE(pr.titelpre,'') || ' ' || COALESCE(pr.vorname,'') || ' ' || COALESCE(pr.nachname,'') || ' ' || COALESCE(pr.titelpost,'')) as recipient,
|
||||||
m.person_id as sender_id,
|
fm.sender_id,
|
||||||
r.person_id as recipient_id,
|
fm.recipient_id,
|
||||||
MAX(ss.status) as status,
|
ms.status,
|
||||||
MAX(ss.insertamum) as statusdatum
|
ms.insertamum as statusdatum
|
||||||
FROM public.tbl_msg_message m
|
from
|
||||||
JOIN public.tbl_msg_recipient r USING(message_id)
|
filtered_messages fm
|
||||||
JOIN public.tbl_msg_status ss ON(r.message_id = ss.message_id AND ss.person_id = r.person_id)
|
join
|
||||||
WHERE m.person_id = ?
|
public.tbl_msg_message m on fm.message_id = m.message_id
|
||||||
GROUP BY m.message_id, m.subject, m.body, m.insertamum, m.relationmessage_id, sender, recipient, sender_id, recipient_id
|
join
|
||||||
UNION ALL
|
lastmsgstatus ms on fm.message_id = ms.message_id and fm.recipient_id = ms.person_id
|
||||||
SELECT
|
left join
|
||||||
m.message_id AS message_id,
|
public.tbl_person ps on ps.person_id = fm.sender_id
|
||||||
m.subject AS subject,
|
left join
|
||||||
m.body AS body,
|
public.tbl_person pr on pr.person_id = fm.recipient_id
|
||||||
m.insertamum AS insertamum,
|
order by
|
||||||
m.relationmessage_id AS relationmessage_id,
|
m.insertamum DESC
|
||||||
(SELECT COALESCE(titelpre,'') || ' ' || COALESCE(vorname,'') || ' ' || COALESCE(nachname,'') || ' ' || COALESCE(titelpost,'') FROM public.tbl_person WHERE person_id = m.person_id) as sender,
|
limit ?
|
||||||
(SELECT COALESCE(titelpre,'') || ' ' || COALESCE(vorname,'') || ' ' || COALESCE(nachname,'') || ' ' || COALESCE(titelpost,'') FROM public.tbl_person WHERE person_id = r.person_id) as recipient,
|
offset ?;
|
||||||
m.person_id as sender_id,
|
EOSQL;
|
||||||
r.person_id as recipient_id,
|
|
||||||
MAX(ss.status) as status,
|
|
||||||
MAX(ss.insertamum) as statusdatum
|
|
||||||
FROM public.tbl_msg_recipient r
|
|
||||||
JOIN public.tbl_msg_status ss USING(message_id, person_id)
|
|
||||||
JOIN public.tbl_msg_message m USING(message_id)
|
|
||||||
WHERE r.person_id = ?
|
|
||||||
GROUP BY m.message_id, m.subject, m.body, m.insertamum, m.relationmessage_id, sender, recipient, sender_id, recipient_id
|
|
||||||
";
|
|
||||||
$sql = "
|
|
||||||
SELECT COUNT(*) AS count FROM (
|
|
||||||
" . $sql_base . "
|
|
||||||
) a
|
|
||||||
";
|
|
||||||
|
|
||||||
$parametersArray = array($person_id, $person_id);
|
|
||||||
|
|
||||||
$count = $this->execQuery($sql, $parametersArray);
|
|
||||||
|
|
||||||
if (isError($count))
|
|
||||||
return $count;
|
|
||||||
|
|
||||||
$count = ceil(current(getData($count))->count/$limit);
|
|
||||||
$sql = "
|
|
||||||
SELECT * FROM (
|
|
||||||
" . $sql_base . "
|
|
||||||
) a
|
|
||||||
ORDER BY insertamum DESC
|
|
||||||
LIMIT ?
|
|
||||||
OFFSET ?
|
|
||||||
";
|
|
||||||
|
|
||||||
$parametersArray = array($person_id, $person_id, $limit, $offset);
|
$parametersArray = array($person_id, $person_id, $limit, $offset);
|
||||||
|
|
||||||
|
$count = 0;
|
||||||
$data = $this->execQuery($sql, $parametersArray);
|
$data = $this->execQuery($sql, $parametersArray);
|
||||||
|
|
||||||
if (isError($data))
|
if (isError($data))
|
||||||
return $data;
|
return $data;
|
||||||
|
|
||||||
$data = getData($data);
|
$data = getData($data);
|
||||||
|
if($data)
|
||||||
|
{
|
||||||
|
$count = ceil($data[0]->total_msgs / $limit);
|
||||||
|
}
|
||||||
|
|
||||||
return success(['data' => $data, 'count' => $count]);
|
return success(['data' => $data, 'count' => $count]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -287,6 +287,12 @@ EOSQL;
|
|||||||
$tmpgb = new Gehaltsbestandteil();
|
$tmpgb = new Gehaltsbestandteil();
|
||||||
$tmpgb->hydrateByStdClass($row, true);
|
$tmpgb->hydrateByStdClass($row, true);
|
||||||
|
|
||||||
|
if ($row->betrag_valorisiert != null && $row->valorisierungsdatum != null
|
||||||
|
&& $row->valorisierungsdatum == $row->von) {
|
||||||
|
// neuer Gehaltsbestandteil mit Valorisierungsdatum aber auch valorisiert
|
||||||
|
$tmpgb->setGrundbetrag($row->betrag_valorisiert);
|
||||||
|
}
|
||||||
|
|
||||||
// prevent duplication (caused by the join with historic values)
|
// prevent duplication (caused by the join with historic values)
|
||||||
if (!isset($lastRecords[(string)$row->gehaltsbestandteil_id])) {
|
if (!isset($lastRecords[(string)$row->gehaltsbestandteil_id])) {
|
||||||
$gehaltsbestandteile[] = $tmpgb;
|
$gehaltsbestandteile[] = $tmpgb;
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
$includesArray = array(
|
||||||
|
'title' => 'Cis4',
|
||||||
|
'axios027' => true,
|
||||||
|
'bootstrap5' => true,
|
||||||
|
'fontawesome6' => true,
|
||||||
|
'tabulator5' => true, // TODO: upgrade to 6 when available
|
||||||
|
'vue3' => true,
|
||||||
|
'primevue3' => true,
|
||||||
|
'skipID' => '#fhccontent',
|
||||||
|
'vuedatepicker11' => true,
|
||||||
|
'customCSSs' => array(
|
||||||
|
'public/css/components/verticalsplit.css',
|
||||||
|
'public/css/components/FilterComponent.css',
|
||||||
|
'public/css/components/FormUnderline.css',
|
||||||
|
'public/css/theme/default.css',
|
||||||
|
'public/css/components/abgabetool/abgabe.css'
|
||||||
|
),
|
||||||
|
'customJSs' => array(
|
||||||
|
'vendor/npm-asset/primevue/accordion/accordion.min.js',
|
||||||
|
'vendor/npm-asset/primevue/accordiontab/accordiontab.min.js',
|
||||||
|
'vendor/npm-asset/primevue/checkbox/checkbox.min.js',
|
||||||
|
'vendor/npm-asset/primevue/inputnumber/inputnumber.min.js',
|
||||||
|
'vendor/npm-asset/primevue/speeddial/speeddial.min.js',
|
||||||
|
'vendor/npm-asset/primevue/textarea/textarea.min.js',
|
||||||
|
'vendor/npm-asset/primevue/timeline/timeline.min.js',
|
||||||
|
'vendor/npm-asset/primevue/inplace/inplace.min.js',
|
||||||
|
'vendor/npm-asset/primevue/message/message.min.js',
|
||||||
|
'vendor/npm-asset/primevue/tieredmenu/tieredmenu.js',
|
||||||
|
'vendor/moment/luxonjs/luxon.min.js'
|
||||||
|
),
|
||||||
|
'customJSModules' => array(
|
||||||
|
'public/js/apps/Abgabetool/Abgabetool.js',
|
||||||
|
),
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->load->view('templates/FHC-Header', $includesArray);
|
||||||
|
?>
|
||||||
|
<div id="abgabetoolroot" class="h-100" style="max-width: 95%;" route=<?php echo json_encode($route) ?>
|
||||||
|
uid=<?php echo $uid ?>
|
||||||
|
student_uid_prop="<?php echo $student_uid_prop ?? '' ?>"
|
||||||
|
stg_kz_prop="<?php echo $stg_kz_prop ?? '' ?>"
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
<?php $this->load->view('templates/FHC-Footer', $includesArray); ?>
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
<?php
|
|
||||||
$includesArray = array(
|
|
||||||
'title' => 'LvInfo',
|
|
||||||
'customJSModules' => ['public/js/apps/Cis/LvInfo.js']
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->load->view('templates/CISVUE-Header', $includesArray);
|
|
||||||
?>
|
|
||||||
|
|
||||||
<div id="content">
|
|
||||||
<Info studien_semester="<?= $studien_semester ?>" lehrveranstaltung_id="<?= $lvid ?>"></Info>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<?php $this->load->view('templates/CISVUE-Footer', $includesArray); ?>
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
<?php
|
|
||||||
$includesArray = array(
|
|
||||||
'title' => 'Profil',
|
|
||||||
'customJSModules' => ['public/js/apps/Cis/Profil.js'],
|
|
||||||
'tabulator5' => true,
|
|
||||||
'primevue3' => true,
|
|
||||||
'customCSSs' => ['public/css/components/calendar.css', 'public/css/components/FilterComponent.css','public/css/components/Profil.css','public/css/components/FormUnderline.css'],
|
|
||||||
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->load->view('templates/CISVUE-Header', $includesArray);
|
|
||||||
?>
|
|
||||||
|
|
||||||
<div id="content" >
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<?php $this->load->view('templates/CISVUE-Footer', $includesArray); ?>
|
|
||||||
@@ -21,19 +21,25 @@ $includesArray = array(
|
|||||||
'public/css/components/FilterComponent.css',
|
'public/css/components/FilterComponent.css',
|
||||||
'public/css/components/Profil.css',
|
'public/css/components/Profil.css',
|
||||||
'public/css/components/FormUnderline.css',
|
'public/css/components/FormUnderline.css',
|
||||||
|
'public/css/components/abgabetool/abgabe.css',
|
||||||
'public/css/Cis4/Cms.css',
|
'public/css/Cis4/Cms.css',
|
||||||
'public/css/Cis4/Studium.css',
|
'public/css/Cis4/Studium.css',
|
||||||
),
|
),
|
||||||
'customJSs' => array(
|
'customJSs' => array(
|
||||||
'vendor/npm-asset/primevue/accordion/accordion.min.js',
|
'vendor/npm-asset/primevue/accordion/accordion.min.js',
|
||||||
'vendor/npm-asset/primevue/accordiontab/accordiontab.min.js',
|
'vendor/npm-asset/primevue/accordiontab/accordiontab.min.js',
|
||||||
'vendor/npm-asset/primevue/inputnumber/inputnumber.min.js',
|
|
||||||
'vendor/npm-asset/primevue/textarea/textarea.min.js',
|
|
||||||
'vendor/npm-asset/primevue/checkbox/checkbox.min.js',
|
'vendor/npm-asset/primevue/checkbox/checkbox.min.js',
|
||||||
|
'vendor/npm-asset/primevue/inputnumber/inputnumber.min.js',
|
||||||
|
'vendor/npm-asset/primevue/speeddial/speeddial.min.js',
|
||||||
|
'vendor/npm-asset/primevue/textarea/textarea.min.js',
|
||||||
|
'vendor/npm-asset/primevue/timeline/timeline.min.js',
|
||||||
|
'vendor/npm-asset/primevue/inplace/inplace.min.js',
|
||||||
|
'vendor/npm-asset/primevue/message/message.min.js',
|
||||||
|
'vendor/npm-asset/primevue/tieredmenu/tieredmenu.js',
|
||||||
'vendor/moment/luxonjs/luxon.min.js'
|
'vendor/moment/luxonjs/luxon.min.js'
|
||||||
),
|
),
|
||||||
'customJSModules' => array(
|
'customJSModules' => array(
|
||||||
'public/js/apps/Dashboard/Fhc.js'
|
'public/js/apps/Dashboard/Fhc.js',
|
||||||
),
|
),
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -7,19 +7,21 @@
|
|||||||
'vue3' => true,
|
'vue3' => true,
|
||||||
'primevue3' => true,
|
'primevue3' => true,
|
||||||
#'filtercomponent' => true,
|
#'filtercomponent' => true,
|
||||||
'tabulator5' => true,
|
'tabulator6' => true,
|
||||||
'tinymce5' => true,
|
'tinymce5' => true,
|
||||||
'phrases' => array(
|
'phrases' => array(
|
||||||
'global',
|
'global',
|
||||||
'ui',
|
'ui',
|
||||||
'notiz',
|
'notiz',
|
||||||
),
|
),
|
||||||
|
'tags' => true,
|
||||||
'customCSSs' => [
|
'customCSSs' => [
|
||||||
#datepicker fuer component functions
|
#datepicker fuer component functions
|
||||||
'public/css/components/vue-datepicker.css',
|
'public/css/components/vue-datepicker.css',
|
||||||
'public/css/components/primevue.css',
|
'public/css/components/primevue.css',
|
||||||
'public/css/Studentenverwaltung.css',
|
'public/css/Studentenverwaltung.css',
|
||||||
'public/css/components/function.css'
|
'public/css/components/function.css',
|
||||||
|
'public/css/components/Detailheader.css'
|
||||||
],
|
],
|
||||||
'customJSs' => [
|
'customJSs' => [
|
||||||
'vendor/vuejs/vuedatepicker_js/vue-datepicker.iife.js',
|
'vendor/vuejs/vuedatepicker_js/vue-datepicker.iife.js',
|
||||||
@@ -45,6 +47,8 @@ $configArray = [
|
|||||||
'showAufnahmegruppen' => !defined('FAS_REIHUNGSTEST_AUFNAHMEGRUPPEN') ? false : FAS_REIHUNGSTEST_AUFNAHMEGRUPPEN,
|
'showAufnahmegruppen' => !defined('FAS_REIHUNGSTEST_AUFNAHMEGRUPPEN') ? false : FAS_REIHUNGSTEST_AUFNAHMEGRUPPEN,
|
||||||
'allowUebernahmePunkte' => !defined('FAS_REIHUNGSTEST_PUNKTEUEBERNAHME') ? true : FAS_REIHUNGSTEST_PUNKTEUEBERNAHME,
|
'allowUebernahmePunkte' => !defined('FAS_REIHUNGSTEST_PUNKTEUEBERNAHME') ? true : FAS_REIHUNGSTEST_PUNKTEUEBERNAHME,
|
||||||
'useReihungstestPunkte' => !defined('FAS_REIHUNGSTEST_PUNKTE') ? true : FAS_REIHUNGSTEST_PUNKTE,
|
'useReihungstestPunkte' => !defined('FAS_REIHUNGSTEST_PUNKTE') ? true : FAS_REIHUNGSTEST_PUNKTE,
|
||||||
|
'hasExcludedAreas' => defined('FAS_REIHUNGSTEST_EXCLUDE_GEBIETE') && !empty(FAS_REIHUNGSTEST_EXCLUDE_GEBIETE),
|
||||||
|
'stvTagsEnabled' => defined('STV_TAGS_ENABLED') ? STV_TAGS_ENABLED : false,
|
||||||
];
|
];
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
<?php
|
||||||
|
$includesArray = array(
|
||||||
|
'title' => 'Vertragsverwaltung',
|
||||||
|
'axios027' => true,
|
||||||
|
'bootstrap5' => true,
|
||||||
|
'fontawesome6' => true,
|
||||||
|
'vue3' => true,
|
||||||
|
'primevue3' => true,
|
||||||
|
'filtercomponent' => true,
|
||||||
|
'navigationcomponent' => true,
|
||||||
|
'tabulator6' => true,
|
||||||
|
'tinymce5' => true,
|
||||||
|
'phrases' => array(
|
||||||
|
'global',
|
||||||
|
'ui',
|
||||||
|
),
|
||||||
|
'customCSSs' => [
|
||||||
|
'public/css/components/vue-datepicker.css',
|
||||||
|
'public/css/components/primevue.css',
|
||||||
|
'public/css/Vertragsverwaltung.css',
|
||||||
|
'public/css/components/Detailheader.css'
|
||||||
|
],
|
||||||
|
'customJSs' => [
|
||||||
|
#'vendor/npm-asset/primevue/tree/tree.min.js',
|
||||||
|
#'vendor/npm-asset/primevue/toast/toast.min.js'
|
||||||
|
],
|
||||||
|
'customJSModules' => [
|
||||||
|
'public/js/apps/Vertragsverwaltung.js'
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->load->view('templates/FHC-Header', $includesArray);
|
||||||
|
?>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
$configArray = [
|
||||||
|
'domain' => !defined('DOMAIN') ? 'notDefined' : DOMAIN,
|
||||||
|
];
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div id="main">
|
||||||
|
<router-view
|
||||||
|
:permissions="<?= htmlspecialchars(json_encode($permissions)); ?>"
|
||||||
|
:config="<?= htmlspecialchars(json_encode($configArray)); ?>"
|
||||||
|
>
|
||||||
|
</router-view>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php $this->load->view('templates/FHC-Footer', $includesArray); ?>
|
||||||
|
|
||||||
@@ -36,4 +36,4 @@ $this->load->view('templates/FHC-Header', $includesArray);
|
|||||||
></cis-menu>
|
></cis-menu>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<main id="cis-main" class="flex-grow-1 p-4 pt-2">
|
<main id="cis-main" class="flex-grow-1 p-4 pt-2" style="min-width: 0;">
|
||||||
@@ -17,6 +17,7 @@
|
|||||||
$use_vuejs_dev_version = $this->config->item('use_vuejs_dev_version');
|
$use_vuejs_dev_version = $this->config->item('use_vuejs_dev_version');
|
||||||
|
|
||||||
// By default set the parameters to null
|
// By default set the parameters to null
|
||||||
|
$customCSSs = isset($customCSSs) ? $customCSSs : null;
|
||||||
$customJSs = isset($customJSs) ? $customJSs : null;
|
$customJSs = isset($customJSs) ? $customJSs : null;
|
||||||
$customJSModules = isset($customJSModules) ? $customJSModules : null;
|
$customJSModules = isset($customJSModules) ? $customJSModules : null;
|
||||||
|
|
||||||
@@ -191,12 +192,13 @@
|
|||||||
// NOTE: keep it as the last but one
|
// NOTE: keep it as the last but one
|
||||||
if ($addons === true) generateAddonsJSsInclude($calledPath.'/'.$calledMethod);
|
if ($addons === true) generateAddonsJSsInclude($calledPath.'/'.$calledMethod);
|
||||||
|
|
||||||
|
$extapphelper = ExtendableAppsHelper::getInstance();
|
||||||
|
$extapphelper->init($customCSSs, $customJSs, $customJSModules);
|
||||||
|
|
||||||
// Eventually required JS
|
// Eventually required JS
|
||||||
// NOTE: keep it as the latest
|
// NOTE: keep it as the latest
|
||||||
generateJSsInclude($customJSs);
|
generateJSsInclude($extapphelper->getCustomJSs());
|
||||||
generateJSModulesInclude($customJSModules);
|
generateJSModulesInclude($extapphelper->getCustomJSModules());
|
||||||
?>
|
?>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -9,6 +9,8 @@
|
|||||||
$title = isset($title) ? $title : null;
|
$title = isset($title) ? $title : null;
|
||||||
$refresh = isset($refresh) ? $refresh : null;
|
$refresh = isset($refresh) ? $refresh : null;
|
||||||
$customCSSs = isset($customCSSs) ? $customCSSs : null;
|
$customCSSs = isset($customCSSs) ? $customCSSs : null;
|
||||||
|
$customJSs = isset($customJSs) ? $customJSs : null;
|
||||||
|
$customJSModules = isset($customJSModules) ? $customJSModules : null;
|
||||||
$skipID = isset($skipID) ? $skipID : null;
|
$skipID = isset($skipID) ? $skipID : null;
|
||||||
?>
|
?>
|
||||||
<!-- Header start -->
|
<!-- Header start -->
|
||||||
@@ -132,8 +134,11 @@
|
|||||||
//Tags
|
//Tags
|
||||||
if ($tags === true) generateCSSsInclude('public/css/tags.css');
|
if ($tags === true) generateCSSsInclude('public/css/tags.css');
|
||||||
|
|
||||||
|
$extapphelper = ExtendableAppsHelper::getInstance();
|
||||||
|
$extapphelper->init($customCSSs, $customJSs, $customJSModules);
|
||||||
|
|
||||||
// Eventually required CSS
|
// Eventually required CSS
|
||||||
generateCSSsInclude($customCSSs); // Eventually required CSS
|
generateCSSsInclude($extapphelper->getCustomCSSs()); // Eventually required CSS
|
||||||
?>
|
?>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
@@ -264,7 +264,7 @@ else
|
|||||||
tbl_bisio.bisio_id, tbl_bisio.bis, tbl_bisio.von,
|
tbl_bisio.bisio_id, tbl_bisio.bis, tbl_bisio.von,
|
||||||
tbl_zeugnisnote.note,tbl_mobilitaet.mobilitaetstyp_kurzbz,
|
tbl_zeugnisnote.note,tbl_mobilitaet.mobilitaetstyp_kurzbz,
|
||||||
(CASE WHEN bis.tbl_mobilitaet.studiensemester_kurzbz = vw_student_lehrveranstaltung.studiensemester_kurzbz THEN '1' ELSE '' END) as doubledegree,
|
(CASE WHEN bis.tbl_mobilitaet.studiensemester_kurzbz = vw_student_lehrveranstaltung.studiensemester_kurzbz THEN '1' ELSE '' END) as doubledegree,
|
||||||
tbl_note.lkt_ueberschreibbar, tbl_note.anmerkung
|
tbl_note.lkt_ueberschreibbar, tbl_note.anmerkung, tbl_zeugnisnote.punkte
|
||||||
FROM
|
FROM
|
||||||
campus.vw_student_lehrveranstaltung JOIN public.tbl_benutzer USING(uid)
|
campus.vw_student_lehrveranstaltung JOIN public.tbl_benutzer USING(uid)
|
||||||
JOIN public.tbl_person USING(person_id) JOIN public.tbl_student ON(uid=student_uid)
|
JOIN public.tbl_person USING(person_id) JOIN public.tbl_student ON(uid=student_uid)
|
||||||
@@ -306,7 +306,14 @@ else
|
|||||||
&& $elem->von < $stsemdatumbis && (anzahlTage($elem->von, $elem->bis) >= 30))
|
&& $elem->von < $stsemdatumbis && (anzahlTage($elem->von, $elem->bis) >= 30))
|
||||||
$inc.=' (o)';
|
$inc.=' (o)';
|
||||||
|
|
||||||
$note = $elem->note;
|
if(defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE==true)
|
||||||
|
{
|
||||||
|
$note = $elem->punkte;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$note = $elem->note;
|
||||||
|
}
|
||||||
|
|
||||||
if($elem->lkt_ueberschreibbar == 'f') // angerechnet / intern angerechnet / nicht zugelassen
|
if($elem->lkt_ueberschreibbar == 'f') // angerechnet / intern angerechnet / nicht zugelassen
|
||||||
{
|
{
|
||||||
@@ -339,20 +346,23 @@ else
|
|||||||
{
|
{
|
||||||
$worksheet->write($lines,8, trim($elem->matrikelnr), $format_highlight);
|
$worksheet->write($lines,8, trim($elem->matrikelnr), $format_highlight);
|
||||||
$pr = new Pruefung();
|
$pr = new Pruefung();
|
||||||
$pr->getPruefungen($elem->uid, "Termin2", $lvid, $sem);
|
$pr->getPruefungen($elem->uid, "Termin2", $lvid, $stsem);
|
||||||
$output2 = $pr->result;
|
$output2 = $pr->result;
|
||||||
|
|
||||||
if ($output2)
|
if ($output2)
|
||||||
{
|
{
|
||||||
$resultPr = $output2[0];
|
$resultPr = $output2[0];
|
||||||
$worksheet->write($lines,9, date('d.m.Y', strtotime($resultPr->datum)), $format_highlightright_date);
|
$worksheet->write($lines,9, date('d.m.Y', strtotime($resultPr->datum)), $format_highlightright_date);
|
||||||
$worksheet->write($lines,10, $resultPr->note, $format_highlightright);
|
if(defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE==true)
|
||||||
|
$worksheet->write($lines,10, $resultPr->punkte, $format_highlightright);
|
||||||
|
else
|
||||||
|
$worksheet->write($lines,10, $resultPr->note, $format_highlightright);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$worksheet->write($lines,9, '', $format_highlightright_date);
|
||||||
|
$worksheet->write($lines,10, '', $format_highlightright);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
$worksheet->write($lines,9, '', $format_highlightright_date);
|
|
||||||
$worksheet->write($lines,10, '', $format_highlightright);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Nachprüfung
|
// Nachprüfung
|
||||||
@@ -360,20 +370,23 @@ else
|
|||||||
{
|
{
|
||||||
$worksheet->write($lines,12, trim($elem->matrikelnr), $format_highlight);
|
$worksheet->write($lines,12, trim($elem->matrikelnr), $format_highlight);
|
||||||
$pr = new Pruefung();
|
$pr = new Pruefung();
|
||||||
$pr->getPruefungen($elem->uid, "Termin3", $lvid, $sem);
|
$pr->getPruefungen($elem->uid, "Termin3", $lvid, $stsem);
|
||||||
$output3 = $pr->result;
|
$output3 = $pr->result;
|
||||||
|
|
||||||
if ($output3)
|
if ($output3)
|
||||||
{
|
{
|
||||||
$resultPr = $output3[0];
|
$resultPr = $output3[0];
|
||||||
$worksheet->write($lines,13, date('d.m.Y', strtotime($resultPr->datum)), $format_highlightright_date);
|
$worksheet->write($lines,13, date('d.m.Y', strtotime($resultPr->datum)), $format_highlightright_date);
|
||||||
$worksheet->write($lines,14, $resultPr->note, $format_highlightright);
|
if(defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE==true)
|
||||||
|
$worksheet->write($lines,14, $resultPr->punkte, $format_highlightright);
|
||||||
|
else
|
||||||
|
$worksheet->write($lines,14, $resultPr->note, $format_highlightright);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$worksheet->write($lines,13, '', $format_highlightright_date);
|
||||||
|
$worksheet->write($lines,14, '', $format_highlightright);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
$worksheet->write($lines,13, '', $format_highlightright_date);
|
|
||||||
$worksheet->write($lines,14, '', $format_highlightright);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$i++;
|
$i++;
|
||||||
|
|||||||
@@ -1041,7 +1041,7 @@ function sendEmail($coodle_id)
|
|||||||
."END:STANDARD\r\n"
|
."END:STANDARD\r\n"
|
||||||
."END:VTIMEZONE\r\n"
|
."END:VTIMEZONE\r\n"
|
||||||
."BEGIN:VEVENT\r\n"
|
."BEGIN:VEVENT\r\n"
|
||||||
.$coodle->foldContentLine("ORGANIZER:MAILTO:".$erstellername." <".$coodle->ersteller_uid."@".DOMAIN)."\r\n"
|
.$coodle->foldContentLine("ORGANIZER:MAILTO:".$erstellername." <".$coodle->ersteller_uid."@".DOMAIN).">\r\n"
|
||||||
.rtrim($teilnehmer)."\r\n"
|
.rtrim($teilnehmer)."\r\n"
|
||||||
."DTSTART;TZID=Europe/Vienna:".$dtstart."\r\n"
|
."DTSTART;TZID=Europe/Vienna:".$dtstart."\r\n"
|
||||||
."DTEND;TZID=Europe/Vienna:".$dtend."\r\n"
|
."DTEND;TZID=Europe/Vienna:".$dtend."\r\n"
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 4.8 KiB |
@@ -86,67 +86,88 @@ echo '<?xml version="1.0" encoding="ISO-8859-1" ?>';
|
|||||||
<h3>Formel / Formula</h3>
|
<h3>Formel / Formula</h3>
|
||||||
<div style="font-size: large; padding-top: 15px">
|
<div style="font-size: large; padding-top: 15px">
|
||||||
<math xmlns="http://www.w3.org/1998/Math/MathML">
|
<math xmlns="http://www.w3.org/1998/Math/MathML">
|
||||||
<mfrac>
|
<mrow>
|
||||||
<mn> 5 </mn>
|
<mfrac>
|
||||||
<mn> 3 </mn>
|
<mn>5</mn>
|
||||||
</mfrac>
|
<mn>3</mn>
|
||||||
|
</mfrac>
|
||||||
<mo> + </mo>
|
<mo>+</mo>
|
||||||
<mfrac>
|
<mfrac>
|
||||||
<mn> 7 </mn>
|
<mn>7</mn>
|
||||||
<mn> 6 </mn>
|
<mn>6</mn>
|
||||||
</mfrac>
|
</mfrac>
|
||||||
<mo> = </mo>
|
<mo>=</mo>
|
||||||
|
<mfrac>
|
||||||
<mfrac>
|
<mn>10</mn>
|
||||||
<mn> 10 </mn>
|
<mn>6</mn>
|
||||||
<mn> 6 </mn>
|
</mfrac>
|
||||||
</mfrac>
|
<mo>+</mo>
|
||||||
<mo> + </mo>
|
<mfrac>
|
||||||
<mfrac>
|
<mn>7</mn>
|
||||||
|
<mn>6</mn>
|
||||||
<mn> 7 </mn>
|
</mfrac>
|
||||||
<mn> 6 </mn>
|
<mo>=</mo>
|
||||||
</mfrac>
|
<mfrac>
|
||||||
<mo> = </mo>
|
<mn>17</mn>
|
||||||
<mfrac>
|
<mn>6</mn>
|
||||||
<mn> 17 </mn>
|
</mfrac>
|
||||||
|
</mrow>
|
||||||
<mn> 6 </mn>
|
|
||||||
</mfrac>
|
|
||||||
</math><br/><br/>
|
</math><br/><br/>
|
||||||
<math xmlns="http://www.w3.org/1998/Math/MathML">
|
<math xmlns="http://www.w3.org/1998/Math/MathML">
|
||||||
<mrow>
|
<mrow>
|
||||||
<munderover>
|
<munderover>
|
||||||
<mo movablelimits="false">∑</mo>
|
<mo>∑</mo>
|
||||||
<mn><mi>k</mi>=1</mn>
|
<mrow>
|
||||||
<mn>5</mn>
|
<mi>k</mi>
|
||||||
</munderover>
|
<mo>=</mo>
|
||||||
<mrow>
|
<mn>1</mn>
|
||||||
<msup>
|
</mrow>
|
||||||
<mo>(-1)</mo>
|
<mn>5</mn>
|
||||||
<mn><mi>k</mi>+1</mn>
|
</munderover>
|
||||||
</msup>
|
<mrow>
|
||||||
</mrow>
|
<msup>
|
||||||
<mfrac>
|
<mrow>
|
||||||
<mrow>
|
<mo>(</mo>
|
||||||
<msup>
|
<mo>-</mo>
|
||||||
<mi>x</mi>
|
<mn>1</mn>
|
||||||
<mn>2<mi>k</mi> + 1</mn>
|
<mo>)</mo>
|
||||||
</msup>
|
</mrow>
|
||||||
</mrow>
|
<mrow>
|
||||||
<mrow>
|
<mi>k</mi>
|
||||||
<mo>(2<mi>k</mi>+1)!</mo>
|
<mo>+</mo>
|
||||||
</mrow>
|
<mn>1</mn>
|
||||||
</mfrac>
|
</mrow>
|
||||||
</mrow>
|
</msup>
|
||||||
|
<mfrac>
|
||||||
|
<mrow>
|
||||||
|
<msup>
|
||||||
|
<mi>x</mi>
|
||||||
|
<mrow>
|
||||||
|
<mn>2</mn>
|
||||||
|
<mi>k</mi>
|
||||||
|
<mo>+</mo>
|
||||||
|
<mn>1</mn>
|
||||||
|
</mrow>
|
||||||
|
</msup>
|
||||||
|
</mrow>
|
||||||
|
<mrow>
|
||||||
|
<mo>(</mo>
|
||||||
|
<mn>2</mn>
|
||||||
|
<mi>k</mi>
|
||||||
|
<mo>+</mo>
|
||||||
|
<mn>1</mn>
|
||||||
|
<mo>)</mo>
|
||||||
|
<mo>!</mo>
|
||||||
|
</mrow>
|
||||||
|
</mfrac>
|
||||||
|
</mrow>
|
||||||
|
</mrow>
|
||||||
</math>
|
</math>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
<h3>Bild / Picture</h3>
|
<h3>Bild / Picture</h3>
|
||||||
<img alt="Beispielbild" src="MathML_Beispiel.jpg" border="1" height="154" width="233"></img>
|
<img alt="Beispielbild" src="MathML_Beispiel.png" height="140" style="border: 1px solid black">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1172,8 +1172,8 @@ if ($frage_id != '')
|
|||||||
echo "</td></tr>";
|
echo "</td></tr>";
|
||||||
//Vorschau fuer das Text-Feld
|
//Vorschau fuer das Text-Feld
|
||||||
echo "<tr><td style='width: 50%'>Vorschau:<br />
|
echo "<tr><td style='width: 50%'>Vorschau:<br />
|
||||||
<div id='vorschau_frage' style='border: 1px solid black' align='center'>$frage->text</div></td>
|
<div id='vorschau_frage' style='border: 1px solid black; padding: 5px' align='center'>$frage->text</div></td>
|
||||||
<td style='width: 50%'>Derzeit:<br /><div id='aktuell' style='border: 1px solid black' align='center'>$frage->text</div>
|
<td style='width: 50%'>Derzeit:<br /><div id='aktuell' style='border: 1px solid black; padding: 5px' align='center'>$frage->text</div>
|
||||||
</td></tr>";
|
</td></tr>";
|
||||||
echo "</table>";
|
echo "</table>";
|
||||||
echo '</td><td style="border-left: 1px solid black" valign="top">';
|
echo '</td><td style="border-left: 1px solid black" valign="top">';
|
||||||
@@ -1280,8 +1280,8 @@ if ($frage_id != '')
|
|||||||
echo "/></td></tr>";
|
echo "/></td></tr>";
|
||||||
echo "<tr><td colspan='2' align='right'><input type='submit' name='submitvorschlag' value='Speichern' />".($vorschlag_id != ''?"<input type='button' value='Abbrechen' onclick=\"document.location.href='$PHP_SELF?gebiet_id=$gebiet_id&stg_kz=$stg_kz&nummer=$nummer&frage_id=$frage->frage_id'\" />":'')."</td></tr>";
|
echo "<tr><td colspan='2' align='right'><input type='submit' name='submitvorschlag' value='Speichern' />".($vorschlag_id != ''?"<input type='button' value='Abbrechen' onclick=\"document.location.href='$PHP_SELF?gebiet_id=$gebiet_id&stg_kz=$stg_kz&nummer=$nummer&frage_id=$frage->frage_id'\" />":'')."</td></tr>";
|
||||||
//Vorschau fuer das Text-Feld
|
//Vorschau fuer das Text-Feld
|
||||||
echo "<tr><td colspan='2'>Vorschau:<br /><div id='vorschau_vorschlag' style='border: 1px solid black' align='center'>$vorschlag->text</div>
|
echo "<tr><td colspan='2'>Vorschau:<br /><div id='vorschau_vorschlag' style='border: 1px solid black; padding: 5px' align='center'>$vorschlag->text</div>
|
||||||
Derzeit:<br /><div id='aktuellvorschlag' style='border: 1px solid black' align='center'>$vorschlag->text</div></td></tr>";
|
Derzeit:<br /><div id='aktuellvorschlag' style='border: 1px solid black; padding: 5px' align='center'>$vorschlag->text</div></td></tr>";
|
||||||
echo "</table>";
|
echo "</table>";
|
||||||
echo "</form>";
|
echo "</form>";
|
||||||
echo '</td></tr></table>';
|
echo '</td></tr></table>';
|
||||||
|
|||||||
@@ -581,14 +581,14 @@ if($frage->frage_id!='')
|
|||||||
else
|
else
|
||||||
$value=$p->t('testtool/blaettern').' >>';
|
$value=$p->t('testtool/blaettern').' >>';
|
||||||
|
|
||||||
echo " <a href='$PHP_SELF?gebiet_id=$gebiet_id&frage_id=$nextfrage' class='Item'>$value</a>";
|
echo "<a href='$PHP_SELF?gebiet_id=$gebiet_id&frage_id=$nextfrage' class='Item' style='padding-left: 5px'>$value</a>";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(!$demo)
|
if(!$demo)
|
||||||
{
|
{
|
||||||
//Wenns der letzte Eintrag ist, wieder zum ersten springen
|
//Wenns der letzte Eintrag ist, wieder zum ersten springen
|
||||||
echo " <a href='$PHP_SELF?gebiet_id=$gebiet_id' class='Item'>".$p->t('testtool/blaettern')." >></a>";
|
echo "<a href='$PHP_SELF?gebiet_id=$gebiet_id' class='Item' style='padding-left: 5px'>".$p->t('testtool/blaettern')." >></a>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+22
-8
@@ -340,13 +340,26 @@ else
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((isset($_SESSION['prestudent_id']) && !isset($_SESSION['pruefling_id']) &&
|
if (
|
||||||
!isset($_SESSION['confirmation_needed']) && !isset($_SESSION['confirmed_code'])) ||
|
(
|
||||||
(isset($_SESSION['confirmation_needed']) && $_SESSION['confirmation_needed'] === true &&
|
isset($_SESSION['prestudent_id']) && !isset($_SESSION['pruefling_id']) &&
|
||||||
isset($_SESSION['confirmed_code']) && $_SESSION['confirmed_code'] === true &&
|
!isset($_SESSION['confirmation_needed']) && !isset($_SESSION['confirmed_code']) &&
|
||||||
isset($_SESSION['externe_ueberwachung']) && $_SESSION['externe_ueberwachung'] === true &&
|
!isset($_SESSION['externe_ueberwachung']) && !isset($_SESSION['externe_ueberwachung_verified'])
|
||||||
isset($_SESSION['externe_ueberwachung_verified']) && $_SESSION['externe_ueberwachung_verified'] === true &&
|
)
|
||||||
isset($_SESSION['prestudent_id']) && !isset($_SESSION['pruefling_id'])))
|
||
|
||||||
|
(
|
||||||
|
isset($_SESSION['confirmation_needed']) && $_SESSION['confirmation_needed'] === true &&
|
||||||
|
isset($_SESSION['confirmed_code']) && $_SESSION['confirmed_code'] === true &&
|
||||||
|
isset($_SESSION['prestudent_id']) && !isset($_SESSION['pruefling_id'])
|
||||||
|
)
|
||||||
|
||
|
||||||
|
(
|
||||||
|
isset($_SESSION['externe_ueberwachung']) && $_SESSION['externe_ueberwachung'] === true &&
|
||||||
|
isset($_SESSION['externe_ueberwachung_verified']) && $_SESSION['externe_ueberwachung_verified'] === true &&
|
||||||
|
isset($_SESSION['prestudent_id']) && !isset($_SESSION['pruefling_id'])
|
||||||
|
)
|
||||||
|
|
||||||
|
)
|
||||||
{
|
{
|
||||||
$pruefling = new pruefling();
|
$pruefling = new pruefling();
|
||||||
|
|
||||||
@@ -665,10 +678,11 @@ elseif (isset($prestudent_id))
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Letzten Status für des Prestudenten einholen
|
// Letzten Status für des Prestudenten einholen
|
||||||
$ps_master = new Prestudent();
|
$ps_master = new Prestudent($prestudent_id);
|
||||||
$ps_master->getLastStatus($prestudent_id);
|
$ps_master->getLastStatus($prestudent_id);
|
||||||
$sto = new Studienordnung();
|
$sto = new Studienordnung();
|
||||||
$sto->getStudienordnungFromStudienplan($ps_master->studienplan_id);
|
$sto->getStudienordnungFromStudienplan($ps_master->studienplan_id);
|
||||||
|
$stg = new Studiengang($ps_master->studiengang_kz);
|
||||||
// Name des Studiengangs aus Studienordnung laden, ansonsten Fallback auf Studiengang
|
// Name des Studiengangs aus Studienordnung laden, ansonsten Fallback auf Studiengang
|
||||||
$stg_name = $sto->studiengangbezeichnung;
|
$stg_name = $sto->studiengangbezeichnung;
|
||||||
$stg_name_eng = $sto->studiengangbezeichnung_englisch;
|
$stg_name_eng = $sto->studiengangbezeichnung_englisch;
|
||||||
|
|||||||
@@ -311,6 +311,7 @@ define('EXTERNE_UEBERWACHUNG_TRIAL_TEST', false);
|
|||||||
define('EXTERNE_UEBERWACHUNG_EXAM_PARAMS', []);
|
define('EXTERNE_UEBERWACHUNG_EXAM_PARAMS', []);
|
||||||
define('EXTERNE_UEBERWACHUNG_EXAM_RULES', []);
|
define('EXTERNE_UEBERWACHUNG_EXAM_RULES', []);
|
||||||
define('EXTERNE_UEBERWACHUNG_EXAM_SCORE', []);
|
define('EXTERNE_UEBERWACHUNG_EXAM_SCORE', []);
|
||||||
|
define('EXTERNE_UEBERWACHUNG_EXAM_WARNINGS', []);
|
||||||
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -371,4 +371,6 @@ define('STATUS_VORRUECKEN_ANZEIGEN', true);
|
|||||||
//externe Ueberwachung im Testtool erlauben
|
//externe Ueberwachung im Testtool erlauben
|
||||||
define('TESTTOOL_EXTERNE_UEBERWACHUNG_ALLOWED', false);
|
define('TESTTOOL_EXTERNE_UEBERWACHUNG_ALLOWED', false);
|
||||||
|
|
||||||
|
//enable tags in StudVW
|
||||||
|
define('STV_TAGS_ENABLED', false);
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -798,6 +798,10 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
|
|||||||
class="sortDirectionIndicator"
|
class="sortDirectionIndicator"
|
||||||
sort="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#updatevon" />
|
sort="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#updatevon" />
|
||||||
<splitter class="tree-splitter"/>
|
<splitter class="tree-splitter"/>
|
||||||
|
<treecol id="student-prestudent-tree-rolle-fgm" label="FGM" flex="1" hidden="true" persist="hidden, width, ordinal"
|
||||||
|
class="sortDirectionIndicator"
|
||||||
|
sort="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#fgm" />
|
||||||
|
<splitter class="tree-splitter"/>
|
||||||
</treecols>
|
</treecols>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -823,6 +827,7 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
|
|||||||
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#insertvon"/>
|
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#insertvon"/>
|
||||||
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#updateamum"/>
|
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#updateamum"/>
|
||||||
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#updatevon"/>
|
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#updatevon"/>
|
||||||
|
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#fgm"/>
|
||||||
</treerow>
|
</treerow>
|
||||||
</treeitem>
|
</treeitem>
|
||||||
</treechildren>
|
</treechildren>
|
||||||
|
|||||||
+159
-61
@@ -480,90 +480,181 @@ class anwesenheit extends basis_db
|
|||||||
public function loadAnwesenheitStudiensemester($studiensemester_kurzbz, $student_uid=null, $lehrveranstaltung_id=null)
|
public function loadAnwesenheitStudiensemester($studiensemester_kurzbz, $student_uid=null, $lehrveranstaltung_id=null)
|
||||||
{
|
{
|
||||||
$qry = "SELECT
|
$qry = "SELECT
|
||||||
lehrveranstaltung_id, vorname, nachname, wahlname, student_uid as uid, bezeichnung,
|
lehrveranstaltung_id,
|
||||||
gesamt as gesamtstunden, anwesend, nichtanwesend, trunc(100-(nichtanwesend/gesamt)*100,2) as prozent
|
vorname,
|
||||||
FROM
|
nachname,
|
||||||
(
|
wahlname,
|
||||||
|
student_uid AS uid,
|
||||||
|
bezeichnung,
|
||||||
|
gesamt AS gesamtstunden,
|
||||||
|
anwesend,
|
||||||
|
nichtanwesend,
|
||||||
|
CASE WHEN gesamt = 0 THEN 100.00 ELSE trunc(100-(nichtanwesend/(gesamt))*100,2) END AS prozent
|
||||||
|
|
||||||
|
FROM(
|
||||||
SELECT
|
SELECT
|
||||||
vorname, nachname, wahlname, lehrveranstaltung_id, bezeichnung, gruppe, student_uid,
|
vorname,
|
||||||
count(stundenplan_id) as gesamt,
|
nachname,
|
||||||
case when anwesend.summe is null then 0 else anwesend.summe end as anwesend,
|
wahlname,
|
||||||
case when nichtanwesend.summe is null then 0 else nichtanwesend.summe end as nichtanwesend
|
lehrveranstaltung_id,
|
||||||
|
bezeichnung,
|
||||||
|
student_uid,
|
||||||
|
--COUNT(stundenplan_id) AS gesamts,
|
||||||
|
COALESCE(anwesend.summe, 0) + COALESCE(nichtanwesend.summe, 0) AS gesamt,
|
||||||
|
COALESCE(anwesend.summe, 0) AS anwesend,
|
||||||
|
COALESCE(nichtanwesend.summe, 0) AS nichtanwesend
|
||||||
|
|
||||||
FROM
|
FROM
|
||||||
(
|
(
|
||||||
SELECT
|
SELECT
|
||||||
sum(stundenplan_id) as stundenplan_id, datum, stunde, lehrveranstaltung_id,
|
SUM(stundenplan_id) AS stundenplan_id,
|
||||||
bezeichnung, studiensemester_kurzbz, studiengang_kz,
|
datum,
|
||||||
TRIM(
|
stunde,
|
||||||
CASE WHEN stp.gruppe_kurzbz is not null then stp.gruppe_kurzbz
|
lehrveranstaltung_id,
|
||||||
else stp.semester||(case when verband is null then '' else stp.verband end)||(case when stp.gruppe is null then '' else stp.gruppe end) end) as gruppe
|
bezeichnung,
|
||||||
|
studiensemester_kurzbz,
|
||||||
|
studiengang_kz
|
||||||
|
|
||||||
FROM
|
FROM
|
||||||
lehre.tbl_lehrveranstaltung lv
|
lehre.tbl_lehrveranstaltung lv
|
||||||
JOIN lehre.tbl_lehreinheit le using (lehrveranstaltung_id)
|
JOIN
|
||||||
JOIN lehre.tbl_stundenplan stp using (lehreinheit_id,studiengang_kz)
|
lehre.tbl_lehreinheit le USING (lehrveranstaltung_id)
|
||||||
|
JOIN
|
||||||
|
lehre.tbl_stundenplan stp USING (lehreinheit_id,studiengang_kz)
|
||||||
|
|
||||||
WHERE
|
WHERE
|
||||||
studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)."
|
studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)."
|
||||||
AND (titel not like '%Nebenprüfung%' OR titel is null)
|
AND (titel NOT LIKE '%Nebenprüfung%' OR titel IS NULL)
|
||||||
|
|
||||||
group by datum, stunde, lehrveranstaltung_id, bezeichnung, studiensemester_kurzbz, studiengang_kz, stp.gruppe_kurzbz, stp.semester, stp.verband, stp.gruppe
|
GROUP BY
|
||||||
|
datum,
|
||||||
|
stunde,
|
||||||
|
lehrveranstaltung_id,
|
||||||
|
bezeichnung,
|
||||||
|
studiensemester_kurzbz,
|
||||||
|
studiengang_kz,
|
||||||
|
stp.gruppe_kurzbz,
|
||||||
|
stp.semester,
|
||||||
|
stp.verband,
|
||||||
|
stp.gruppe
|
||||||
)x
|
)x
|
||||||
JOIN (
|
JOIN (
|
||||||
SELECT semester::text as gruppe, public.tbl_studentlehrverband.studiensemester_kurzbz, student_uid, studiengang_kz
|
SELECT
|
||||||
|
le.lehrveranstaltung_id,
|
||||||
|
slv.student_uid,
|
||||||
|
le.studiensemester_kurzbz,
|
||||||
|
st.prestudent_id
|
||||||
|
|
||||||
FROM
|
FROM
|
||||||
public.tbl_studentlehrverband
|
public.tbl_studentlehrverband slv
|
||||||
WHERE studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)."
|
|
||||||
|
|
||||||
UNION
|
|
||||||
|
|
||||||
SELECT semester||verband as gruppe, public.tbl_studentlehrverband.studiensemester_kurzbz, student_uid, studiengang_kz
|
|
||||||
FROM
|
|
||||||
public.tbl_studentlehrverband
|
|
||||||
WHERE
|
|
||||||
studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)."
|
|
||||||
|
|
||||||
UNION
|
|
||||||
|
|
||||||
SELECT semester||verband||gruppe as gruppe, public.tbl_studentlehrverband.studiensemester_kurzbz, student_uid, studiengang_kz
|
|
||||||
FROM
|
|
||||||
public.tbl_studentlehrverband
|
|
||||||
WHERE
|
|
||||||
studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)."
|
|
||||||
|
|
||||||
UNION
|
|
||||||
|
|
||||||
SELECT gruppe_kurzbz as gruppe, public.tbl_benutzergruppe.studiensemester_kurzbz, uid as student_uid, studiengang_kz
|
|
||||||
FROM
|
|
||||||
public.tbl_benutzergruppe
|
|
||||||
JOIN
|
JOIN
|
||||||
public.tbl_gruppe using (gruppe_kurzbz)
|
lehre.tbl_lehreinheitgruppe leg
|
||||||
WHERE studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)."
|
ON slv.studiengang_kz = leg.studiengang_kz
|
||||||
|
AND slv.semester = leg.semester
|
||||||
|
AND (
|
||||||
|
NULLIF(btrim(leg.verband::text), '') IS NULL
|
||||||
|
OR NULLIF(btrim(slv.verband::text), '') = NULLIF(btrim(leg.verband::text), '')
|
||||||
|
)
|
||||||
|
AND (
|
||||||
|
NULLIF(btrim(leg.gruppe::text), '') IS NULL
|
||||||
|
OR NULLIF(btrim(slv.gruppe::text), '') = NULLIF(btrim(leg.gruppe::text), '')
|
||||||
|
)
|
||||||
|
JOIN
|
||||||
|
lehre.tbl_lehreinheit le USING (lehreinheit_id, studiensemester_kurzbz)
|
||||||
|
JOIN
|
||||||
|
public.tbl_student st USING(student_uid)
|
||||||
|
|
||||||
)a using (gruppe, studiensemester_kurzbz, studiengang_kz)
|
WHERE
|
||||||
JOIN public.tbl_benutzer b on b.uid = student_uid
|
leg.gruppe_kurzbz IS NULL
|
||||||
JOIN public.tbl_person p using(person_id)
|
AND le.studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)."
|
||||||
|
|
||||||
|
GROUP BY
|
||||||
|
le.lehrveranstaltung_id,
|
||||||
|
slv.student_uid,
|
||||||
|
le.studiensemester_kurzbz,
|
||||||
|
st.prestudent_id
|
||||||
|
|
||||||
|
UNION
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
le.lehrveranstaltung_id,
|
||||||
|
bg.uid AS student_uid,
|
||||||
|
bg.studiensemester_kurzbz,
|
||||||
|
st.prestudent_id
|
||||||
|
|
||||||
|
FROM
|
||||||
|
public.tbl_benutzergruppe bg
|
||||||
|
JOIN
|
||||||
|
lehre.tbl_lehreinheitgruppe leg USING (gruppe_kurzbz)
|
||||||
|
JOIN
|
||||||
|
lehre.tbl_lehreinheit le USING(lehreinheit_id, studiensemester_kurzbz)
|
||||||
|
JOIN
|
||||||
|
public.tbl_student st ON bg.uid = st.student_uid
|
||||||
|
|
||||||
|
WHERE
|
||||||
|
bg.studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)."
|
||||||
|
|
||||||
|
GROUP BY
|
||||||
|
le.lehrveranstaltung_id,
|
||||||
|
bg.uid,
|
||||||
|
bg.studiensemester_kurzbz,
|
||||||
|
st.prestudent_id
|
||||||
|
|
||||||
|
)a USING (lehrveranstaltung_id, studiensemester_kurzbz)
|
||||||
|
JOIN
|
||||||
|
public.tbl_benutzer b on b.uid = student_uid
|
||||||
|
JOIN
|
||||||
|
public.tbl_person p using(person_id)
|
||||||
LEFT JOIN(
|
LEFT JOIN(
|
||||||
SELECT
|
SELECT
|
||||||
lehrveranstaltung_id, studiensemester_kurzbz, uid as student_uid, sum(einheiten) as summe
|
lehrveranstaltung_id,
|
||||||
|
studiensemester_kurzbz,
|
||||||
|
uid AS student_uid,
|
||||||
|
SUM(einheiten) AS summe
|
||||||
|
|
||||||
FROM
|
FROM
|
||||||
campus.tbl_anwesenheit a
|
campus.tbl_anwesenheit a
|
||||||
JOIN lehre.tbl_lehreinheit le using (lehreinheit_id)
|
JOIN
|
||||||
JOIN lehre.tbl_lehrveranstaltung lv using (lehrveranstaltung_id)
|
lehre.tbl_lehreinheit le USING(lehreinheit_id)
|
||||||
|
JOIN
|
||||||
|
lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id)
|
||||||
|
|
||||||
WHERE
|
WHERE
|
||||||
anwesend = true AND studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)."
|
anwesend = true
|
||||||
|
AND studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)."
|
||||||
|
|
||||||
GROUP BY
|
GROUP BY
|
||||||
lehrveranstaltung_id, bezeichnung, uid, studiensemester_kurzbz
|
lehrveranstaltung_id,
|
||||||
)anwesend using(lehrveranstaltung_id, student_uid, studiensemester_kurzbz)
|
bezeichnung,
|
||||||
|
uid,
|
||||||
|
studiensemester_kurzbz
|
||||||
|
|
||||||
|
)anwesend USING(lehrveranstaltung_id, student_uid, studiensemester_kurzbz)
|
||||||
LEFT JOIN(
|
LEFT JOIN(
|
||||||
SELECT lehrveranstaltung_id, studiensemester_kurzbz, uid as student_uid, sum(einheiten) as summe
|
SELECT
|
||||||
|
lehrveranstaltung_id,
|
||||||
|
studiensemester_kurzbz,
|
||||||
|
uid AS student_uid,
|
||||||
|
SUM(einheiten) AS summe
|
||||||
|
|
||||||
FROM
|
FROM
|
||||||
campus.tbl_anwesenheit a
|
campus.tbl_anwesenheit a
|
||||||
JOIN lehre.tbl_lehreinheit le using (lehreinheit_id)
|
JOIN
|
||||||
JOIN lehre.tbl_lehrveranstaltung lv using (lehrveranstaltung_id)
|
lehre.tbl_lehreinheit le USING (lehreinheit_id)
|
||||||
|
JOIN
|
||||||
|
lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id)
|
||||||
|
|
||||||
WHERE
|
WHERE
|
||||||
anwesend = false AND studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)."
|
anwesend = false
|
||||||
|
AND studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)."
|
||||||
|
|
||||||
GROUP BY
|
GROUP BY
|
||||||
lehrveranstaltung_id, bezeichnung, uid, studiensemester_kurzbz
|
lehrveranstaltung_id,
|
||||||
)nichtanwesend using(lehrveranstaltung_id, student_uid, studiensemester_kurzbz)
|
bezeichnung,
|
||||||
|
uid,
|
||||||
|
studiensemester_kurzbz
|
||||||
|
)nichtanwesend USING(lehrveranstaltung_id, student_uid, studiensemester_kurzbz)
|
||||||
|
|
||||||
WHERE
|
WHERE
|
||||||
lehrveranstaltung_id > 0
|
lehrveranstaltung_id > 0
|
||||||
";
|
";
|
||||||
@@ -573,8 +664,15 @@ class anwesenheit extends basis_db
|
|||||||
if(!is_null($lehrveranstaltung_id))
|
if(!is_null($lehrveranstaltung_id))
|
||||||
$qry.=" AND lehrveranstaltung_id=".$this->db_add_param($lehrveranstaltung_id);
|
$qry.=" AND lehrveranstaltung_id=".$this->db_add_param($lehrveranstaltung_id);
|
||||||
|
|
||||||
$qry.="group by
|
$qry.=" GROUP BY
|
||||||
vorname, nachname, wahlname, lehrveranstaltung_id, bezeichnung, gruppe, student_uid, anwesend.summe, nichtanwesend.summe
|
vorname,
|
||||||
|
nachname,
|
||||||
|
wahlname,
|
||||||
|
lehrveranstaltung_id,
|
||||||
|
bezeichnung,
|
||||||
|
student_uid,
|
||||||
|
anwesend.summe,
|
||||||
|
nichtanwesend.summe
|
||||||
)m";
|
)m";
|
||||||
|
|
||||||
if($lehrveranstaltung_id != '')
|
if($lehrveranstaltung_id != '')
|
||||||
|
|||||||
@@ -168,6 +168,11 @@ class externeUeberwachung extends basis_db
|
|||||||
$payload = array_merge($payload, EXTERNE_UEBERWACHUNG_EXAM_PARAMS);
|
$payload = array_merge($payload, EXTERNE_UEBERWACHUNG_EXAM_PARAMS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (defined('EXTERNE_UEBERWACHUNG_EXAM_WARNINGS'))
|
||||||
|
{
|
||||||
|
$payload['visibleWarnings'] = EXTERNE_UEBERWACHUNG_EXAM_WARNINGS;
|
||||||
|
}
|
||||||
|
|
||||||
if (defined('EXTERNE_UEBERWACHUNG_EXAM_RULES'))
|
if (defined('EXTERNE_UEBERWACHUNG_EXAM_RULES'))
|
||||||
{
|
{
|
||||||
$payload['rules'] = EXTERNE_UEBERWACHUNG_EXAM_RULES;
|
$payload['rules'] = EXTERNE_UEBERWACHUNG_EXAM_RULES;
|
||||||
|
|||||||
@@ -345,6 +345,7 @@ class gebiet extends basis_db
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Pruefen ob jede Fragen mindestens 2 Vorschlaege hat
|
//Pruefen ob jede Fragen mindestens 2 Vorschlaege hat
|
||||||
|
//Angepasst am 28.01.2026 auf ein Warning.
|
||||||
$qry = "SELECT frage_id, nummer FROM testtool.tbl_frage
|
$qry = "SELECT frage_id, nummer FROM testtool.tbl_frage
|
||||||
WHERE (SELECT count(*) as anzahl FROM testtool.tbl_vorschlag WHERE frage_id=tbl_frage.frage_id)<2
|
WHERE (SELECT count(*) as anzahl FROM testtool.tbl_vorschlag WHERE frage_id=tbl_frage.frage_id)<2
|
||||||
AND gebiet_id=".$this->db_add_param($gebiet_id, FHC_INTEGER)." AND NOT demo;";
|
AND gebiet_id=".$this->db_add_param($gebiet_id, FHC_INTEGER)." AND NOT demo;";
|
||||||
@@ -352,7 +353,7 @@ class gebiet extends basis_db
|
|||||||
{
|
{
|
||||||
while($row = $this->db_fetch_object())
|
while($row = $this->db_fetch_object())
|
||||||
{
|
{
|
||||||
$this->errormsg .= "Frage Nummer $row->nummer (ID: $row->frage_id) hat weniger als 2 Vorschlaege.\n";
|
$this->warningmsg .= "Frage Nummer $row->nummer (ID: $row->frage_id) hat weniger als 2 Vorschlaege.\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -448,6 +449,52 @@ class gebiet extends basis_db
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Pruefen ob es leere Fragen (ohne Text, Bild oder Audio) gibt
|
||||||
|
$qry = "SELECT
|
||||||
|
fr.frage_id,
|
||||||
|
fr.nummer,
|
||||||
|
fs.sprache
|
||||||
|
FROM
|
||||||
|
testtool.tbl_frage fr
|
||||||
|
JOIN testtool.tbl_frage_sprache fs
|
||||||
|
USING (frage_id)
|
||||||
|
WHERE
|
||||||
|
(fs.text IS NULL
|
||||||
|
OR fs.text = '')
|
||||||
|
AND fs.bild IS NULL
|
||||||
|
AND fs.audio IS NULL
|
||||||
|
AND demo = false
|
||||||
|
AND gebiet_id=".$this->db_add_param($gebiet_id, FHC_INTEGER)."
|
||||||
|
AND EXISTS (
|
||||||
|
SELECT
|
||||||
|
1
|
||||||
|
FROM
|
||||||
|
testtool.tbl_frage fr2
|
||||||
|
JOIN testtool.tbl_frage_sprache fs2
|
||||||
|
USING (frage_id)
|
||||||
|
WHERE
|
||||||
|
fs2.sprache = fs.sprache
|
||||||
|
AND fr2.gebiet_id = fr.gebiet_id
|
||||||
|
AND fr2.frage_id != fr.frage_id
|
||||||
|
AND (
|
||||||
|
(fs2.text IS NOT NULL
|
||||||
|
AND fs2.text != '')
|
||||||
|
OR fs2.bild IS NOT NULL
|
||||||
|
OR fs2.audio IS NOT NULL
|
||||||
|
)
|
||||||
|
AND demo = false
|
||||||
|
)
|
||||||
|
ORDER BY
|
||||||
|
fs.sprache,
|
||||||
|
fr.nummer;";
|
||||||
|
if($this->db_query($qry))
|
||||||
|
{
|
||||||
|
while($row = $this->db_fetch_object())
|
||||||
|
{
|
||||||
|
$this->warningmsg .= "Frage Nummer $row->nummer (ID: $row->frage_id), Sprache $row->sprache hat keinen Text, Bild oder Audio.\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if($this->errormsg=='')
|
if($this->errormsg=='')
|
||||||
return true;
|
return true;
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -705,6 +705,7 @@ class prestudent extends person
|
|||||||
$rolle->studienplan_bezeichnung = $row->studienplan_bezeichnung;
|
$rolle->studienplan_bezeichnung = $row->studienplan_bezeichnung;
|
||||||
$rolle->bestaetigtam = $row->bestaetigtam;
|
$rolle->bestaetigtam = $row->bestaetigtam;
|
||||||
$rolle->bestaetigtvon = $row->bestaetigtvon;
|
$rolle->bestaetigtvon = $row->bestaetigtvon;
|
||||||
|
$rolle->fgm = $row->fgm;
|
||||||
$rolle->anmerkung_status = $row->anmerkung;
|
$rolle->anmerkung_status = $row->anmerkung;
|
||||||
$rolle->bewerbung_abgeschicktamum = $row->bewerbung_abgeschicktamum;
|
$rolle->bewerbung_abgeschicktamum = $row->bewerbung_abgeschicktamum;
|
||||||
$rolle->rt_stufe = $row->rt_stufe;
|
$rolle->rt_stufe = $row->rt_stufe;
|
||||||
|
|||||||
@@ -513,6 +513,7 @@ class statistik extends basis_db
|
|||||||
$this->json=array();
|
$this->json=array();
|
||||||
$this->countRows=0;
|
$this->countRows=0;
|
||||||
set_time_limit(600);
|
set_time_limit(600);
|
||||||
|
$parseHtml = (strpos($this->preferences, 'parseHTML: true') !== false);
|
||||||
|
|
||||||
// In case a decryption function is used then perform password substitution
|
// In case a decryption function is used then perform password substitution
|
||||||
$this->sql = $this->replaceSQLDecryptionPassword($this->sql);
|
$this->sql = $this->replaceSQLDecryptionPassword($this->sql);
|
||||||
@@ -565,7 +566,13 @@ class statistik extends basis_db
|
|||||||
for($spalte=0;$spalte<$anzahl_spalten;$spalte++)
|
for($spalte=0;$spalte<$anzahl_spalten;$spalte++)
|
||||||
{
|
{
|
||||||
$name = $this->db_field_name($this->data,$spalte);
|
$name = $this->db_field_name($this->data,$spalte);
|
||||||
$this->html.= '<td>'.$this->convert_html_chars($row->$name).'</td>';
|
if ($parseHtml) {
|
||||||
|
// HTML direkt rendern
|
||||||
|
$this->html .= '<td>'.($row->$name).'</td>';
|
||||||
|
} else {
|
||||||
|
// wie bisher escapen
|
||||||
|
$this->html .= '<td>'.$this->convert_html_chars($row->$name).'</td>';
|
||||||
|
}
|
||||||
// Umwandeln von Punkt in Komma bei Float-Werten
|
// Umwandeln von Punkt in Komma bei Float-Werten
|
||||||
if (is_numeric($row->$name))
|
if (is_numeric($row->$name))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -53,8 +53,10 @@ $this->phrasen['testtool/fuerFolgendeStgAngemeldet']='Für folgende Studiengäng
|
|||||||
$this->phrasen['testtool/invalideGebiete']='Ein oder mehrere Fragengebiet/e inkorrekt!<br>Bitte melden Sie dies der Betreuungsperson.';
|
$this->phrasen['testtool/invalideGebiete']='Ein oder mehrere Fragengebiet/e inkorrekt!<br>Bitte melden Sie dies der Betreuungsperson.';
|
||||||
$this->phrasen['testtool/confirmationText']='<b>Ich bestätige, den Online-Reihungstest persönlich, selbständig, ohne Hilfe einer zusätzlichen Person und ohne Hilfsmittel zu absolvieren.<br>
|
$this->phrasen['testtool/confirmationText']='<b>Ich bestätige, den Online-Reihungstest persönlich, selbständig, ohne Hilfe einer zusätzlichen Person und ohne Hilfsmittel zu absolvieren.<br>
|
||||||
I confirm that I will complete the online placement test personally, independently, without the help of an additional person and without any aids.</b>';
|
I confirm that I will complete the online placement test personally, independently, without the help of an additional person and without any aids.</b>';
|
||||||
$this->phrasen['testtool/dsgvoConfirmText']='<b>Ich habe die <a href ="'. APP_ROOT. 'cms/dms.php?id=373121" target="_blank">Datenschutzerklärung</a> gelesen.</b>';
|
$this->phrasen['testtool/dsgvoConfirmText']='<b>Ich habe die <a href ="'. APP_ROOT. 'cms/dms.php?id=373121" target="_blank">Datenschutzerklärung</a> gelesen. <br />
|
||||||
$this->phrasen['testtool/procotoringConfirmText']='<b>Ich stimme der digitalen Beaufsichtigung beim Online-Reihungstest (Proctoring) zu.</b>';
|
I have read the <a href ="'. APP_ROOT. 'cms/dms.php?id=374814" target="_blank">privacy policy</a>.</b>';
|
||||||
|
$this->phrasen['testtool/procotoringConfirmText']='<b>Ich stimme der digitalen Beaufsichtigung beim Online-Reihungstest (Proctoring) zu. <br />
|
||||||
|
I agree to the digital supervision of the online placement test (proctoring).</b>';
|
||||||
$this->phrasen['testtool/loginNoetig']='Bitte beachten Sie, dass der Reihungstest erst <b>unmittelbar</b> vor Ihrem <b>Reihungstesttermin</b> von uns aktiviert wird.<br>
|
$this->phrasen['testtool/loginNoetig']='Bitte beachten Sie, dass der Reihungstest erst <b>unmittelbar</b> vor Ihrem <b>Reihungstesttermin</b> von uns aktiviert wird.<br>
|
||||||
Please note that the test will be activated by us <b>immediately</b> before your <b>placement test date</b>.';
|
Please note that the test will be activated by us <b>immediately</b> before your <b>placement test date</b>.';
|
||||||
$this->phrasen['testtool/start']='Reihungstest jetzt starten';
|
$this->phrasen['testtool/start']='Reihungstest jetzt starten';
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
"name": "fhc-core",
|
||||||
|
"private": true,
|
||||||
|
"version": "0.0.0",
|
||||||
|
"type": "module",
|
||||||
|
"scripts": {
|
||||||
|
"build": "rollup -c",
|
||||||
|
"watch": "rollup --watch -c"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@rollup/plugin-alias": "^5.1.0",
|
||||||
|
"@rollup/plugin-babel": "^6.0.4",
|
||||||
|
"@rollup/plugin-commonjs": "^25.0.7",
|
||||||
|
"@rollup/plugin-json": "^6.1.0",
|
||||||
|
"@rollup/plugin-node-resolve": "^15.2.3",
|
||||||
|
"@rollup/plugin-replace": "^5.0.5",
|
||||||
|
"@rollup/plugin-terser": "^0.4.4",
|
||||||
|
"babel-plugin-transform-class-properties": "^6.24.1",
|
||||||
|
"glob": "^13.0.6",
|
||||||
|
"node-sass": "^9.0.0",
|
||||||
|
"rollup": "^4.52.4",
|
||||||
|
"rollup-plugin-postcss": "^4.0.2",
|
||||||
|
"rollup-plugin-vue": "^6.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<IfModule mod_rewrite.c>
|
||||||
|
RewriteEngine On
|
||||||
|
RewriteCond %{REQUEST_FILENAME} !-f
|
||||||
|
RewriteCond %{REQUEST_FILENAME} !-d
|
||||||
|
RewriteRule ^[0-9]{10}/(.*)$ $1 [L]
|
||||||
|
RewriteCond %{REQUEST_URI} ^(.*?)/public/index.ci.php/
|
||||||
|
RewriteRule ^index.ci.php/(.*)$ %1/index.ci.php/$1 [R=303]
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
@@ -407,7 +407,6 @@ html {
|
|||||||
background-color: var(--fhc-background);
|
background-color: var(--fhc-background);
|
||||||
border-color: var(--fhc-border);
|
border-color: var(--fhc-border);
|
||||||
padding: var(--fhc-cis-main-py) var(--fhc-cis-main-px);
|
padding: var(--fhc-cis-main-py) var(--fhc-cis-main-px);
|
||||||
min-width: 0; /* fix flex-grow with tabulator exceeding width */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#cis-main .fa-arrow-up-right-from-square {
|
#cis-main .fa-arrow-up-right-from-square {
|
||||||
@@ -856,3 +855,9 @@ html {
|
|||||||
background-color: var(--fhc-secondary);
|
background-color: var(--fhc-secondary);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.bordered-modal {
|
||||||
|
border: 1px solid rgba(0, 0, 0, 0.15);
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.25);
|
||||||
|
}
|
||||||
@@ -12,22 +12,22 @@ html {
|
|||||||
font-size: .875em;
|
font-size: .875em;
|
||||||
}
|
}
|
||||||
html.fs_xx-small {
|
html.fs_xx-small {
|
||||||
font-size: .5em;
|
font-size: .625em;
|
||||||
}
|
}
|
||||||
html.fs_x-small {
|
html.fs_x-small {
|
||||||
font-size: .625em;
|
font-size: .6875em;
|
||||||
}
|
}
|
||||||
html.fs_small {
|
html.fs_small {
|
||||||
font-size: .75em;
|
font-size: .75em;
|
||||||
}
|
}
|
||||||
html.fs_normal {
|
html.fs_normal {
|
||||||
font-size: .875em;
|
font-size: .8125em;
|
||||||
}
|
}
|
||||||
html.fs_big {
|
html.fs_big {
|
||||||
font-size: 1em;
|
font-size: .875em;
|
||||||
}
|
}
|
||||||
html.fs_huge {
|
html.fs_huge {
|
||||||
font-size: 1.125em;
|
font-size: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
#appMenu {
|
#appMenu {
|
||||||
@@ -74,6 +74,12 @@ html.fs_huge {
|
|||||||
color: var(--gray-500);
|
color: var(--gray-500);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Aufnahme Termine: background color green*/
|
||||||
|
.stv-details-admission-table .row-green{
|
||||||
|
background-color: lightgreen !important;
|
||||||
|
//color: var(--green-200);
|
||||||
|
}
|
||||||
|
|
||||||
/* Dropdown Toolbar Interessent, submenu */
|
/* Dropdown Toolbar Interessent, submenu */
|
||||||
.dropend .dropdown-toggle.d-flex::after {
|
.dropend .dropdown-toggle.d-flex::after {
|
||||||
height: 0;
|
height: 0;
|
||||||
@@ -116,6 +122,15 @@ html.fs_huge {
|
|||||||
position: inherit;
|
position: inherit;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.sidebar-collapsed #sidebarMenu {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-collapsed .container-fluid > .row > main {
|
||||||
|
flex: 0 0 100%;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -168,7 +183,7 @@ html.fs_huge {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.has-filter .fa-filter {
|
.has-filter .fa-filter {
|
||||||
color: var(--bs-success);
|
color: var(--bs-danger);
|
||||||
}
|
}
|
||||||
.override_filtercmpt_actions_style div.d-flex.align-items-baseline {
|
.override_filtercmpt_actions_style div.d-flex.align-items-baseline {
|
||||||
align-items: end !important;
|
align-items: end !important;
|
||||||
@@ -185,3 +200,84 @@ html.fs_huge {
|
|||||||
.tiny-90 div.tox.tox-tinymce {
|
.tiny-90 div.tox.tox-tinymce {
|
||||||
height: 90% !important;
|
height: 90% !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* slim begin */
|
||||||
|
.stv .form-label {
|
||||||
|
margin-bottom: .15rem;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stv .form-control,
|
||||||
|
.stv .form-select,
|
||||||
|
.stv .input-group-text {
|
||||||
|
padding-top: .15rem;
|
||||||
|
padding-bottom: .15rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--bs-body-line-height: 1.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stv .tabulator-row .tabulator-cell,
|
||||||
|
.stv .tabulator-header-filter input {
|
||||||
|
padding-top: 1px !important;
|
||||||
|
padding-bottom: 1px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stv .tabulator-row {
|
||||||
|
min-height: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stv .btn {
|
||||||
|
--bs-btn-padding-y: 0.25rem;
|
||||||
|
--bs-btn-line-height: 1.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stv .p-button.p-button-icon-only {
|
||||||
|
padding-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stv .p-tabview .p-tabview-nav li .p-tabview-nav-link {
|
||||||
|
padding: 0.25rem .5rem;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
.stv .p-tabview .p-tabview-panels {
|
||||||
|
background-color: #e5eff5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stv .p-tabview .p-tabview-nav li.p-highlight .p-tabview-nav-link {
|
||||||
|
background: #e5eff5;
|
||||||
|
border-color: #dee2e6 #dee2e6 #e5eff5 #dee2e6;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
.stv-details-details-foto img {
|
||||||
|
max-height: 120px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stv .tabulator-row .tabulator-frozen,
|
||||||
|
.stv .tabulator-row .tabulator-cell {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
.stv .p-treetable .p-treetable-thead > tr > th,
|
||||||
|
.stv .p-treetable .p-treetable-tbody > tr {
|
||||||
|
background-color: #e5eff5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stv .p-treetable .p-treetable-tbody > tr.p-highlight {
|
||||||
|
background: #007bff;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stv .p-treetable.p-treetable-hoverable-rows .p-treetable-tbody > tr:not(.p-highlight):hover {
|
||||||
|
background: #fff;
|
||||||
|
color: #212529;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tabulator-row.tabulator-row-even .tabulator-cell {
|
||||||
|
background-color: #e5eff5;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
/* slim ende */
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
@import './components/verticalsplit.css';
|
||||||
|
|
||||||
|
html {
|
||||||
|
font-size: .875em;
|
||||||
|
}
|
||||||
|
.vv{
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
.vv> header {
|
||||||
|
flex: 0 0 auto;
|
||||||
|
}
|
||||||
|
.vv> div {
|
||||||
|
flex: 1 1 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vv {
|
||||||
|
margin-left: 0 !important;
|
||||||
|
}
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
.foto-container:hover .fotoedit {
|
||||||
|
opacity: 1 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-unruly {
|
||||||
|
background-color: #ad1010 !important;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*.fotosperre {
|
||||||
|
z-index: 1;
|
||||||
|
font-size: 1rem;
|
||||||
|
width: 1.25rem;
|
||||||
|
height: 1.25rem;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
.foto-container .fotoedit {
|
||||||
|
opacity: 0;
|
||||||
|
transition: opacity 0.3s;
|
||||||
|
backdrop-filter: blur(2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.fotoedit {
|
||||||
|
background-color: rgba(0, 0, 0, 0.4);
|
||||||
|
color: white;
|
||||||
|
border: none;
|
||||||
|
z-index: 4;
|
||||||
|
font-size: 1rem;
|
||||||
|
width: 1.8rem;
|
||||||
|
height: 1.8rem;
|
||||||
|
opacity:0;
|
||||||
|
transition: opacity 0.2s;
|
||||||
|
top:20%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* fotoeditMa {
|
||||||
|
background-color: rgba(0, 0, 0, 0.4);
|
||||||
|
color: white;
|
||||||
|
border: none;
|
||||||
|
z-index: 4;
|
||||||
|
font-size: 1rem;
|
||||||
|
opacity:0;
|
||||||
|
transition: opacity 0.2s;
|
||||||
|
top:20%;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
.buttonleft {
|
||||||
|
margin-left: .25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.buttonright {
|
||||||
|
margin-right: .25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*.fotoEditMa {
|
||||||
|
z-index: 104;
|
||||||
|
font-size: 1rem;
|
||||||
|
width: 2.5rem;
|
||||||
|
height: 2.5rem;
|
||||||
|
opacity:0;
|
||||||
|
transition: opacity 0.2s;
|
||||||
|
top:13%;"
|
||||||
|
z-index: 104; font-size: 1rem; width: 2.5rem; height: 2.5rem; opacity:0; transition: opacity 0.2s; top:13%;"
|
||||||
|
}*/
|
||||||
@@ -0,0 +1,308 @@
|
|||||||
|
/* Base Header */
|
||||||
|
.verpasst-header {
|
||||||
|
background-color: var(--fhc-red-70);
|
||||||
|
font-weight: 600;
|
||||||
|
border-radius: 6px;
|
||||||
|
padding: 0px 0px 0px 34px;
|
||||||
|
transition: background-color 0.3s ease, box-shadow 0.3s ease, color 0.3s ease;
|
||||||
|
box-shadow: 0 1px 2px rgba(0,0,0,0.08);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hover State */
|
||||||
|
.verpasst-header:hover {
|
||||||
|
background-color: var(--fhc-red-60);
|
||||||
|
box-shadow: 0 2px 6px rgba(0,0,0,0.12);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Active / Expanded State */
|
||||||
|
.p-accordion-tab-active > .verpasst-header {
|
||||||
|
background-color: var(--fhc-red-50);
|
||||||
|
box-shadow: 0 2px 8px rgba(0,0,0,0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hover State Active*/
|
||||||
|
.p-accordion-tab-active > .verpasst-header:hover {
|
||||||
|
background-color: var(--fhc-red-60);
|
||||||
|
box-shadow: 0 2px 6px rgba(0,0,0,0.12);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Base Header */
|
||||||
|
.abzugeben-header {
|
||||||
|
background-color: var(--fhc-yellow-70);
|
||||||
|
font-weight: 600;
|
||||||
|
border-radius: 6px;
|
||||||
|
padding: 0px 0px 0px 34px;
|
||||||
|
transition: background-color 0.3s ease, box-shadow 0.3s ease, color 0.3s ease;
|
||||||
|
box-shadow: 0 1px 2px rgba(0,0,0,0.08);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hover State */
|
||||||
|
.abzugeben-header:hover {
|
||||||
|
background-color: var(--fhc-yellow-60);
|
||||||
|
box-shadow: 0 2px 6px rgba(0,0,0,0.12);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Active / Expanded State */
|
||||||
|
.p-accordion-tab-active > .abzugeben-header {
|
||||||
|
background-color: var(--fhc-yellow-50);
|
||||||
|
box-shadow: 0 2px 8px rgba(0,0,0,0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hover State Active*/
|
||||||
|
.p-accordion-tab-active > .abzugeben-header:hover {
|
||||||
|
background-color: var(--fhc-yellow-60);
|
||||||
|
box-shadow: 0 2px 6px rgba(0,0,0,0.12);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Base Header */
|
||||||
|
.beurteilungerforderlich-header {
|
||||||
|
background-color: var(--fhc-orange-70);
|
||||||
|
font-weight: 600;
|
||||||
|
border-radius: 6px;
|
||||||
|
padding: 0px 0px 0px 34px;
|
||||||
|
transition: background-color 0.3s ease, box-shadow 0.3s ease, color 0.3s ease;
|
||||||
|
box-shadow: 0 1px 2px rgba(0,0,0,0.08);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Hover State */
|
||||||
|
.beurteilungerforderlich-header:hover {
|
||||||
|
background-color: var(--fhc-orange-60);
|
||||||
|
box-shadow: 0 2px 6px rgba(0,0,0,0.12);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Active / Expanded State */
|
||||||
|
.p-accordion-tab-active > .beurteilungerforderlich-header {
|
||||||
|
background-color: var(--fhc-orange-50);
|
||||||
|
box-shadow: 0 2px 8px rgba(0,0,0,0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hover State Active*/
|
||||||
|
.p-accordion-tab-active > .beurteilungerforderlich-header:hover {
|
||||||
|
background-color: var(--fhc-orange-60);
|
||||||
|
box-shadow: 0 2px 6px rgba(0,0,0,0.12);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Base Header */
|
||||||
|
.verspaetet-header {
|
||||||
|
background-color: var(--fhc-pink-40);
|
||||||
|
font-weight: 600;
|
||||||
|
border-radius: 6px;
|
||||||
|
padding: 0px 0px 0px 34px;
|
||||||
|
transition: background-color 0.3s ease, box-shadow 0.3s ease, color 0.3s ease;
|
||||||
|
box-shadow: 0 1px 2px rgba(0,0,0,0.08);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hover State */
|
||||||
|
.verspaetet-header:hover {
|
||||||
|
background-color: var(--fhc-pink-20);
|
||||||
|
box-shadow: 0 2px 6px rgba(0,0,0,0.12);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Active / Expanded State */
|
||||||
|
.p-accordion-tab-active > .verspaetet-header {
|
||||||
|
background-color: var(--fhc-pink-30);
|
||||||
|
box-shadow: 0 2px 8px rgba(0,0,0,0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hover State Active*/
|
||||||
|
.p-accordion-tab-active > .verspaetet-header:hover {
|
||||||
|
background-color: var(--fhc-pink-20);
|
||||||
|
box-shadow: 0 2px 6px rgba(0,0,0,0.12);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Base Header */
|
||||||
|
.abgegeben-header {
|
||||||
|
background-color: var(--fhc-green-70);
|
||||||
|
font-weight: 600;
|
||||||
|
border-radius: 6px;
|
||||||
|
padding: 0px 0px 0px 34px;
|
||||||
|
transition: background-color 0.3s ease, box-shadow 0.3s ease, color 0.3s ease;
|
||||||
|
box-shadow: 0 1px 2px rgba(0,0,0,0.08);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hover State */
|
||||||
|
.abgegeben-header:hover {
|
||||||
|
background-color: var(--fhc-green-60);
|
||||||
|
box-shadow: 0 2px 6px rgba(0,0,0,0.12);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Active / Expanded State */
|
||||||
|
.p-accordion-tab-active > .abgegeben-header {
|
||||||
|
background-color: var(--fhc-green-50);
|
||||||
|
box-shadow: 0 2px 8px rgba(0,0,0,0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hover State Active*/
|
||||||
|
.p-accordion-tab-active > .abgegeben-header:hover {
|
||||||
|
background-color: var(--fhc-green-60);
|
||||||
|
box-shadow: 0 2px 6px rgba(0,0,0,0.12);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Base Header */
|
||||||
|
.bestanden-header {
|
||||||
|
background-color: var(--fhc-green-70);
|
||||||
|
font-weight: 600;
|
||||||
|
border-radius: 6px;
|
||||||
|
padding: 0px 0px 0px 34px;
|
||||||
|
transition: background-color 0.3s ease, box-shadow 0.3s ease, color 0.3s ease;
|
||||||
|
box-shadow: 0 1px 2px rgba(0,0,0,0.08);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hover State */
|
||||||
|
.bestanden-header:hover {
|
||||||
|
background-color: var(--fhc-green-60);
|
||||||
|
box-shadow: 0 2px 6px rgba(0,0,0,0.12);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Active / Expanded State */
|
||||||
|
.p-accordion-tab-active > .bestanden-header {
|
||||||
|
background-color: var(--fhc-green-50);
|
||||||
|
box-shadow: 0 2px 8px rgba(0,0,0,0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hover State Active*/
|
||||||
|
.p-accordion-tab-active > .bestanden-header:hover {
|
||||||
|
background-color: var(--fhc-green-60);
|
||||||
|
box-shadow: 0 2px 6px rgba(0,0,0,0.12);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Base Header */
|
||||||
|
.nichtbestanden-header {
|
||||||
|
background-color: var(--fhc-red-70);
|
||||||
|
font-weight: 600;
|
||||||
|
border-radius: 6px;
|
||||||
|
padding: 0px 0px 0px 34px;
|
||||||
|
transition: background-color 0.3s ease, box-shadow 0.3s ease, color 0.3s ease;
|
||||||
|
box-shadow: 0 1px 2px rgba(0,0,0,0.08);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hover State */
|
||||||
|
.nichtbestanden-header:hover {
|
||||||
|
background-color: var(--fhc-red-60);
|
||||||
|
box-shadow: 0 2px 6px rgba(0,0,0,0.12);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Active / Expanded State */
|
||||||
|
.p-accordion-tab-active > .nichtbestanden-header {
|
||||||
|
background-color: var(--fhc-red-50);
|
||||||
|
box-shadow: 0 2px 8px rgba(0,0,0,0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hover State Active*/
|
||||||
|
.p-accordion-tab-active > .nichtbestanden-header:hover {
|
||||||
|
background-color: var(--fhc-red-60);
|
||||||
|
box-shadow: 0 2px 6px rgba(0,0,0,0.12);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Base Header */
|
||||||
|
.erledigt-header {
|
||||||
|
background-color: var(--fhc-red-70);
|
||||||
|
font-weight: 600;
|
||||||
|
border-radius: 6px;
|
||||||
|
padding: 0px 0px 0px 34px;
|
||||||
|
transition: background-color 0.3s ease, box-shadow 0.3s ease, color 0.3s ease;
|
||||||
|
box-shadow: 0 1px 2px rgba(0,0,0,0.08);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hover State */
|
||||||
|
.erledigt-header:hover {
|
||||||
|
background-color: var(--fhc-red-60);
|
||||||
|
box-shadow: 0 2px 6px rgba(0,0,0,0.12);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Active / Expanded State */
|
||||||
|
.p-accordion-tab-active > .erledigt-header {
|
||||||
|
background-color: var(--fhc-red-50);
|
||||||
|
box-shadow: 0 2px 8px rgba(0,0,0,0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hover State Active*/
|
||||||
|
.p-accordion-tab-active > .erledigt-header:hover {
|
||||||
|
background-color: var(--fhc-red-60);
|
||||||
|
box-shadow: 0 2px 6px rgba(0,0,0,0.12);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Base Header */
|
||||||
|
.standard-header {
|
||||||
|
background-color: var(--fhc-white-70);
|
||||||
|
font-weight: 600;
|
||||||
|
border-radius: 6px;
|
||||||
|
padding: 0px 0px 0px 34px;
|
||||||
|
transition: background-color 0.3s ease, box-shadow 0.3s ease, color 0.3s ease;
|
||||||
|
box-shadow: 0 1px 2px rgba(0,0,0,0.08);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hover State */
|
||||||
|
.standard-header:hover {
|
||||||
|
background-color: var(--fhc-white-60);
|
||||||
|
box-shadow: 0 2px 6px rgba(0,0,0,0.12);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Active / Expanded State */
|
||||||
|
.p-accordion-tab-active > .standard-header {
|
||||||
|
background-color: var(--fhc-white-50);
|
||||||
|
box-shadow: 0 2px 8px rgba(0,0,0,0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hover State Active*/
|
||||||
|
.p-accordion-tab-active > .standard-header:hover {
|
||||||
|
background-color: var(--fhc-white-60);
|
||||||
|
box-shadow: 0 2px 6px rgba(0,0,0,0.12);
|
||||||
|
}
|
||||||
|
|
||||||
|
#abgabetoolroot .modal-header{
|
||||||
|
background-color: var(--fhc-blue-primary);
|
||||||
|
color: var(--fhc-white-50);
|
||||||
|
}
|
||||||
|
|
||||||
|
#abgabetoolroot .modal-header .btn-close{
|
||||||
|
filter: invert(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#abgabetoolroot .modal-footer {
|
||||||
|
background-color: var(--fhc-white-20);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.bordered-modal {
|
||||||
|
border: 1px solid rgba(0, 0, 0, 0.15);
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.25);
|
||||||
|
}
|
||||||
|
|
||||||
|
.bordered-modal .modal-body {
|
||||||
|
overflow-y: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-accordion .p-accordion-header .p-accordion-header-link {
|
||||||
|
padding: 12px!important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 1. Stick the Header */
|
||||||
|
#abgabetable .tabulator-header .tabulator-col.sticky-col {
|
||||||
|
position: sticky;
|
||||||
|
left: 0;
|
||||||
|
z-index: 10; /* Must be higher than other headers */
|
||||||
|
background-color: #fff; /* Opaque background is required */
|
||||||
|
border-right: 2px solid #ddd; /* Optional: Separator line */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 2. Stick the Data Cells */
|
||||||
|
#abgabetable .tabulator-tableholder .tabulator-row .tabulator-cell.sticky-col {
|
||||||
|
position: sticky;
|
||||||
|
left: 0;
|
||||||
|
z-index: 10; /* Ensure it floats above other cells */
|
||||||
|
background-color: #fff; /* Match your row background color */
|
||||||
|
border-right: 2px solid #ddd; /* Optional: Separator line */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 3. Fix for Hover Effects (Optional) */
|
||||||
|
/* If you use hover rows, you need to ensure the sticky cell matches the hover color */
|
||||||
|
#abgabetable .tabulator-row:hover .tabulator-cell.sticky-col {
|
||||||
|
background-color: #ccc; /* Match your existing hover color */
|
||||||
|
}
|
||||||
@@ -3578,6 +3578,12 @@
|
|||||||
transition: box-shadow 0.15s;
|
transition: box-shadow 0.15s;
|
||||||
margin-right: 0.5rem;
|
margin-right: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler > svg,
|
||||||
|
.p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler > svg * {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
.p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler:enabled:hover {
|
.p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler:enabled:hover {
|
||||||
color: #495057;
|
color: #495057;
|
||||||
border-color: transparent;
|
border-color: transparent;
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user