Compare commits

...

329 Commits

Author SHA1 Message Date
Manfred 409ccd7640 BugFix DISTINCT in getOrganisationunitsByPersonId 2022-10-24 12:21:40 +02:00
Manfred b89494f80a Merge remote-tracking branch 'origin/master' 2022-10-24 12:18:31 +02:00
Andreas Österreicher 6a2f570ffa Merge branch 'feature-20088/BIS_Studiengangsmeldung_Anpassungen' 2022-10-10 14:42:43 +02:00
Andreas Österreicher 617fa1c450 Merge branch 'master' into feature-20088/BIS_Studiengangsmeldung_Anpassungen 2022-10-10 14:27:39 +02:00
Andreas Österreicher 22613af9fe Merge branch 'feature-25002/Sonstiges-Sprint-192' 2022-10-06 15:12:33 +02:00
Andreas Österreicher 02445ceff4 Zeitaufzeichnung - Zeit verlängert für die Anzeigen von "allen"
Zeitaufzeichnungen auf 360 Tage
2022-10-06 06:51:14 +02:00
KarpAlex 6d457fd573 added codex/Mobilitaet_model for bis.tbl_mobilitaet 2022-10-06 00:32:53 +02:00
Manfred 7fb8c02cd6 Merge remote-tracking branch 'origin/master' 2022-10-05 17:43:57 +02:00
Manfred dfc19f56cb Spalten LAS, ALVS und Anzahl Studierende ergänzt 2022-10-05 17:43:50 +02:00
Cris c27534c93c Corrected: Mail wird nun an alle STGL versendet, wenn mehrere vorhanden sind
Bei der Abgabe von Anrechnungsempfehlungen wurde bisher nur dem ersten STGL
aus potentiell mehreren STGLeitungen ein mail zugeschickt. Nun werden alle addressiert.
2022-10-05 16:27:17 +02:00
Cris c1180c0879 Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2022-10-05 16:19:03 +02:00
Andreas Österreicher fded192a98 Merge branch 'feature-21609/LVVerwaltungDefaultwertFuerNeueLvs' 2022-10-03 16:47:54 +02:00
Andreas Österreicher 7cfc6369b6 Optionalen Eintrag beibehalten bei der Anlage von LVs da sonst alte
Einträge ohne Lehrmodus falsch dargestellt werden
2022-10-03 16:46:49 +02:00
Andreas Österreicher 7b6314dc96 Merge branch 'master' into feature-21609/LVVerwaltungDefaultwertFuerNeueLvs 2022-10-03 16:32:33 +02:00
Andreas Österreicher 3bc1654b76 Merge branch 'feature-25001/warning_beim_zuweisen_von_variablen_zu_personen' 2022-10-03 16:12:47 +02:00
Andreas Österreicher 49124f3100 Added JQueryUI css 2022-10-03 15:22:32 +02:00
KarpAlex 854e0a422f Merge branch 'master' into feature-20088/BIS_Studiengangsmeldung_Anpassungen 2022-09-30 18:16:46 +02:00
KarpAlex c00b9006b5 Merge branch 'master' into feature-20088/BIS_Studiengangsmeldung_Anpassungen 2022-09-30 18:14:33 +02:00
Andreas Österreicher f7b3a3ccaf Merge branch 'feature-19556/Templates_Detailansicht' 2022-09-30 13:50:12 +02:00
ma0048 3967494775 - typo gefixed 2022-09-30 12:52:47 +02:00
Andreas Österreicher b9b7af0e1d Merge branch 'origin/feature-24110/weiterentwicklung_internationalisierungsmassnahmen' 2022-09-30 09:07:34 +02:00
Andreas Österreicher 9e32330a6c Paragraph für Plagiatscheck angepasst bei Beurteilungsformularen 2022-09-29 10:35:21 +02:00
ma0068 8533454ad7 Defaulteintrag in Dropdown Lehrmodus gemäß Configeintrag bei Anlegen neuer LV 2022-09-28 12:13:13 +02:00
Andreas Österreicher 17ad37ac8e Merge branch 'feature-24767/infocenter_zgv_pruefungen_und_lehre_error' 2022-09-26 16:45:06 +02:00
Andreas Österreicher 4f044fb724 Merge branch 'feature-20696/pausenfehler_wird_nicht_angezeigt' 2022-09-26 16:28:22 +02:00
KarpAlex a238a9f550 studentenmeldung.php: previous first Unterbrechungsdatum is used when there are multiple Unterbrecher status after each other 2022-09-26 11:45:48 +02:00
ma0048 2ab548fc87 - absagegrund wird nun mitgespeichert
- neue filter
- studiengangsleitung kann bestaetigung nur noch ablehnen und nicht loeschen
- neue cronjobs
- neue formatierung
- neue phrasen
2022-09-26 09:46:16 +02:00
Andreas Österreicher 0c9d535941 Merge branch 'feature-20221/PHP_7.1_Kompatibilitäte_Excel_Lib' 2022-09-19 16:26:51 +02:00
Andreas Österreicher 4976804f8d Merge branch 'feature-18874/CISMoodleGradeImportMitUID' 2022-09-19 16:02:17 +02:00
Andreas Österreicher 253b1352f9 Merge branch 'bug-20124/FilterWidget_query_executed_before_changes_are_applied_bug' 2022-09-19 15:55:51 +02:00
Andreas Österreicher 4f35d6bf0a Merge branch 'feature-19547/CoodleZeitsperrenAnzeigen' 2022-09-19 15:44:40 +02:00
Andreas Österreicher 0f6836385f Added Column Wahlname to campus.vw_mitarbeiter 2022-09-19 15:31:31 +02:00
Andreas Österreicher 66b9576e15 Merge branch 'bug-24165/Message_reply_token_allow_to_write_to_anybody' 2022-09-19 15:11:51 +02:00
Andreas Österreicher cac01a50ec Added Column Wahlname to campus.vw_student and campus.vw_benutzer 2022-09-19 15:08:50 +02:00
Andreas Österreicher 6ae6751aa4 Merge branch 'feature-19171/Wahlname' 2022-09-19 14:48:05 +02:00
Manfred 79fbb4b7b2 Merge remote-tracking branch 'origin/master' 2022-09-19 14:05:19 +02:00
Manfred 1e85aeb8da Studiensemester save empty string as null 2022-09-19 14:05:12 +02:00
Andreas Österreicher 2a43793982 Merge branch 'feature-18224/Anrechnungen_ECTS-Grenze' 2022-09-19 10:26:44 +02:00
Manfred 83ef4be673 Bugfix Limit 10 entfernt 2022-09-16 14:54:11 +02:00
Manfred ec87bd0c80 UID in Dropdown anzeigen und inaktive Mitarbeiter kennzeichnen 2022-09-16 14:47:59 +02:00
Manfred f65ae01dd0 Suche nach LV-Kurzbz, Bugfix Checksubmit 2022-09-16 14:47:06 +02:00
KarpAlex e34d9afefe BIS Lehrgangsmeldung: correctly placed Orgformcode Tag, indent formatting 2022-09-15 17:22:33 +02:00
KarpAlex 9fb077afdc studentenmeldung bis: renamed Studienkennunguni, master ZGV elements, correct placement of duales studium, correct checkof duales studium 2022-09-15 14:59:04 +02:00
Cris d366c672b9 Merge branch 'master' into feature-18224/Anrechnungen_ECTS-Grenze 2022-09-15 10:18:11 +02:00
Cris 3690984682 Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2022-09-15 10:17:33 +02:00
Cris 941bbaaa79 Fixed falschen ECTS Höchstgrenze Hinweis in STGL Detailansicht
Es wird nun bei der Berechnung der ECTS Höchstgrenze auch auf den
Anrechnungsgrund geschaut.
2022-09-15 10:17:02 +02:00
Manfred 00ac201596 Text-Inputs in eckigen Klammern werden als Array interpretiert 2022-09-14 15:56:01 +02:00
Manfred c2024ada3a Merge remote-tracking branch 'origin/master' 2022-09-14 15:50:35 +02:00
ma0048 f0cec85d8f style anpassungen und funktionen geloescht 2022-09-14 11:57:23 +02:00
Andreas Österreicher 91f867c0d6 Merge branch 'master' into feature-19171/Wahlname 2022-09-14 11:55:02 +02:00
Andreas Österreicher 4e68989c06 Merge branch 'feature-24817/infocenter_doc_loeschen_error' 2022-09-14 10:36:45 +02:00
ma0048 4cae13d2ee zgv und nation dropdowns gefixed 2022-09-14 08:55:54 +02:00
ma0048 f7fa97499c error von loeschen der doc gefixed 2022-09-13 18:01:09 +02:00
Andreas Österreicher 85a6fa5600 Merge branch 'feature-19538/Gruppenadministratoren' 2022-09-12 18:08:17 +02:00
Andreas Österreicher 1d93652b0c Merge branch 'master' into feature-19538/Gruppenadministratoren 2022-09-12 18:07:13 +02:00
Andreas Österreicher c4fbaaaa9d Logging for Students implemented 2022-09-12 17:53:51 +02:00
Andreas Österreicher b526f4ee3a Merge branch 'bug-15317/BTAusbildungsvertragNichtAkzeptierenBeiAbgewiesenen' 2022-09-12 16:29:23 +02:00
Andreas Österreicher dd671bf583 Merge branch 'feature-24767/infocenter_zgv_pruefungen_und_lehre_error' 2022-09-12 14:43:48 +02:00
ma0048 030f1c9c4e zgvpruefung fehler behoben und studienartberechtigung 2022-09-12 14:30:12 +02:00
Andreas Österreicher d6a35603e1 Merge branch 'feature-23977/ZGVNeueKodextabellen' 2022-09-12 13:06:07 +02:00
Andreas Österreicher 9afd03d630 Merge branch 'feature-18984/infocenter_tool_fuer_lehrgaenge_anpassen' 2022-09-12 12:50:43 +02:00
Andreas Österreicher 22088b82ba Merge branch 'feature-19487/infocenter_letzter_bearbeiter_wenn_student' 2022-09-12 12:43:17 +02:00
Andreas Österreicher 75e8c35dcc Merge branch 'feature-19484/infocenter_reihungstest_freigegeben_liste_zeigt_immer_nur_einen_an' 2022-09-12 12:41:41 +02:00
Andreas Österreicher 6855e6ff2e Merge branch 'feature-18940/infocenter_loeschen_von_dokumenten' 2022-09-12 12:36:19 +02:00
ma0048 9c85c7cd97 Merge remote-tracking branch 'origin/master' into feature-19487/infocenter_letzter_bearbeiter_wenn_student 2022-09-12 10:17:52 +02:00
ma0048 f571fef11b Merge remote-tracking branch 'origin/master' into feature-19484/infocenter_reihungstest_freigegeben_liste_zeigt_immer_nur_einen_an 2022-09-12 10:17:15 +02:00
ma0048 33b35286d3 Merge remote-tracking branch 'origin/master' into feature-18984/infocenter_tool_fuer_lehrgaenge_anpassen 2022-09-12 10:15:50 +02:00
ma0048 98cf234f6f Merge remote-tracking branch 'origin/master' into feature-18940/infocenter_loeschen_von_dokumenten 2022-09-12 09:52:19 +02:00
KarpAlex 26236bc989 issues fix: error text is correctly passed when invalid issues status passed from GUI 2022-09-08 15:14:09 +02:00
Andreas Österreicher 1867807cdd Merge branch 'feature-18224/Anrechnungen_ECTS-Grenze' 2022-09-08 14:29:44 +02:00
Cris 3a595dda58 Merge branch 'master' into feature-18224/Anrechnungen_ECTS-Grenze
# Conflicts:
#	application/controllers/lehre/anrechnung/RequestAnrechnung.php
2022-09-08 14:15:49 +02:00
Cris 617dcc0646 Changed application dates for testing reason 2022-09-08 14:09:37 +02:00
Cris 15121ced6d Fixed missing disabled formular and wrong status-test when student emits Anrechnung with Begruendung Hochschule 2022-09-08 14:08:46 +02:00
Cris d13cc789ad Fix Anrechnung Student View: Änderung des Download-Dokumentnamens zurückgenommen
Der Download-Dokumentname ist in der Studierendenansicht nun wieder gleich wie der originale Dokuementname beim Hochladen.
2022-09-08 12:53:44 +02:00
Cris 7ea9b6a741 Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2022-09-07 09:06:03 +02:00
Andreas Österreicher 393eaea91d Removed Dashboard Testfiles 2022-09-07 09:00:00 +02:00
Andreas Österreicher 00f1eb38d1 Added missing index files 2022-09-07 08:27:31 +02:00
Paolo fd649c49c8 Fixed PHP 8.1 compatibilities problems for include/Excel/* 2022-09-06 15:38:42 +02:00
Cris 522e341d3d Dashboard Test V1 2022-09-06 15:29:42 +02:00
Cris c88061463f Hotfix Anrechnung Student View: Änderung des Download-Dokumentnamens zurückgenommen
Der Download-Dokumentname ist in der Studierendenansicht nun wieder gleich wie der originale Dokuementname beim Hochladen.
2022-09-06 14:21:54 +02:00
Andreas Österreicher 7f64f5c29f Merge branch 'feature-19173/mobilityonline_grant_agreement_ins_fas_uebernehmen' 2022-09-06 12:38:21 +02:00
Cris 262b5b869a Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2022-09-06 12:15:46 +02:00
Manfred 14c5bdcf3d BugFix Personen zusammenlegen 2022-09-06 11:47:35 +02:00
Manfred 729aec00b3 Admins sehen PreStudent ID und Person ID zum rauskopieren 2022-09-06 11:41:28 +02:00
ma0068 bb4bf02aa8 Merge branch 'master' into feature-20696/pausenfehler_wird_nicht_angezeigt 2022-09-06 09:20:57 +02:00
ma0068 4f7dd73535 Merge branch 'master' into feature-19484/infocenter_reihungstest_freigegeben_liste_zeigt_immer_nur_einen_an 2022-09-06 09:18:58 +02:00
ma0068 52fe5a78e1 Merge branch 'master' into feature-18940/infocenter_loeschen_von_dokumenten 2022-09-06 09:17:39 +02:00
Andreas Österreicher 259dbe9bdc Fixed Error on File Download from Student View 2022-09-05 18:46:13 +02:00
ma0068 985a430888 Merge branch 'master' into feature-19547/CoodleZeitsperrenAnzeigen 2022-09-05 15:23:03 +02:00
Andreas Österreicher d109747cfc Merge branch 'master' into feature-19173/mobilityonline_grant_agreement_ins_fas_uebernehmen 2022-09-01 15:34:12 +02:00
Andreas Österreicher 1ddd5b7f14 Merge branch 'feature-20226/erfassung_internationalisierungsmassnahmen_bekanntgabe' 2022-08-31 13:36:18 +02:00
ma0048 74331d5e6c dms kategoerie hinzugefuegt 2022-08-31 11:56:19 +02:00
Andreas Österreicher c215b2cb5f Merge branch 'feature-24103/kartenverlaengerung_gueltig_bis_zu_gueltig_fuer' 2022-08-31 11:42:34 +02:00
Andreas Österreicher 162858721c Merge branch 'feature-24184/infocenter_messages_bei_statuswechsel' 2022-08-31 11:34:38 +02:00
ma0048 90a13e445c fix damit messages wieder geschickt werden 2022-08-31 11:33:29 +02:00
Paolo 8e0734ca8c Added check in CL/Messages_model->sendReply to check that $receiver_id, $relationmessage_id and $token match in the database to avoid to be able to write to anyone using a token 2022-08-30 17:31:04 +02:00
ma0048 03535b7589 text aenderung und holen alle studienbeitraege 2022-08-30 14:08:00 +02:00
ma0068 d1bb1b9666 Infocenter: Adaptierungen ZGV-Master und ZGVmasternation Dropdown 2022-08-30 13:10:47 +02:00
ma0068 67f1c9a707 Infocenter: Umbau von disabled auf Zusatz bei Dropdowns ZGV und ZGVNation 2022-08-30 11:28:16 +02:00
ma0068 8fd69ccd26 Infocenter: Anzeige gesperrte Nationen als disabled im Dropdown ZGVNation 2022-08-30 09:41:45 +02:00
Andreas Österreicher 81a33654a4 Merge branch 'feature-18224/Anrechnungen_ECTS-Grenze' 2022-08-30 09:10:40 +02:00
Andreas Österreicher 68d6e3c549 Merge branch 'master' into feature-18224/Anrechnungen_ECTS-Grenze 2022-08-29 16:23:20 +02:00
ma0068 54a1c486c5 Infocenter: Anzeige inaktive ZGVs als disabled im Dropdown ZGV 2022-08-29 15:12:06 +02:00
cgfhtw 49647c8ded Textänderungen "KVP" entfernen 2022-08-29 14:05:15 +02:00
KarpAlex 079137f497 renamed "dual" checkbox to "duales Studium" 2022-08-29 13:28:26 +02:00
cgfhtw ca9281dbf9 Textänderung KVP 2022-08-29 09:08:27 +02:00
KarpAlex 8dd7f72e37 added Studienkennung Uni to table in gsprogramm vilesci gui 2022-08-27 01:44:37 +02:00
Andreas Österreicher da85c69f36 Problem behoben wodurch die Anrechnungen im FAS nicht angezeigt werden
wenn diese ohne Anrechnungstool im FAS erfasst werden
2022-08-25 14:34:40 +02:00
Andreas Österreicher 962ec56b3f Merge branch 'feature-20665/kartenautomat_anpassungen' 2022-08-25 12:48:47 +02:00
ma0048 a13c010cd5 textaenderungen und getzutrittskarte by uid 2022-08-25 10:43:26 +02:00
ma0048 566f2f6399 prueft beim loeschen des dok noch auf person_id 2022-08-25 09:54:33 +02:00
Andreas Österreicher df3f7565e7 Merge branch 'feature-20665/kartenautomat_anpassungen' 2022-08-24 13:39:01 +02:00
ma0068 8292e00aaf neues Feld aktiv in den ZGV-Tabellen, Ansicht als durchgestrichen der inaktiven ZGV-Einträge in FAS 2022-08-24 12:52:49 +02:00
Andreas Österreicher c234843bfd Satzungsteil Paragrahen korrigiert 2022-08-23 16:20:19 +02:00
ma0048 f2fcdf2cbf app per dbupdate hinzufuegen 2022-08-22 14:40:39 +02:00
ma0048 06e62cac11 phrasen angepasst 2022-08-22 14:35:05 +02:00
Harald Bamberger dd6383c57b Merge branch 'master' into feature-19538/Gruppenadministratoren 2022-08-16 07:54:43 +02:00
Harald Bamberger 083c360338 remove duplicate body tags 2022-08-11 16:05:15 +02:00
ma0048 979f8d96bc ermoeglicht das sperren der zutrittskarten 2022-08-11 14:29:56 +02:00
ma0048 f19e13ffd8 ermoeglicht das planen, akzeptieren und erstellen der massnahmen 2022-08-11 14:11:59 +02:00
Cris 6f1ca8e374 Removed unnecessary HTML body tags and added FHC_Footer
Body tags are set in FHC_Header and FHC_Footer.
2022-08-11 14:00:20 +02:00
Cris a5f6ffa237 Changed content in Student view as requested by QM
. changed tooltip text and help text regarding Maximale ECTS and Berufliche Praxis.
2022-08-10 18:19:50 +02:00
Cris 4f435fbc20 Removed date limitation for testing 2022-08-10 16:26:36 +02:00
Cris bfa9c2c8a7 Merge remote-tracking branch 'origin/feature-18224/Anrechnungen_ECTS-Grenze' into feature-18224/Anrechnungen_ECTS-Grenze 2022-08-10 16:01:42 +02:00
Cris 1d728336a2 Hided colums 'ECTS Schule bisher'/'ECTS Beruf bisher'
Hide by default colums 'ECTS Schule bisher'/'ECTS Beruf bisher',
as dynamic ECTS column is providing those informations.
2022-08-10 15:59:11 +02:00
Cris debfbf7827 Created AnrechnungJob sendMailRemindRecommendation
...to remind lecturers to provide their recommendation if not done until
one week after request.
2022-08-10 15:58:13 +02:00
Cris c0ce8997ba Optimized Usability: Column 'Details' now on very left side of table
User needs to open details link very often, but needed to scroll until end of table to open link.
Now the link is set as first column to provide direct access.
2022-08-09 16:52:23 +02:00
Cris e56237038d Optimized 'Ablehnen'-/'Nicht empfehlen'-panels for better usability
- Copy-icons are now right aligned and bigger
- Less in-between-text, instead short explanation text into textarea placeholder
2022-08-09 16:40:43 +02:00
Cris 844bfe9150 Fixed wrong 'Bisher angerechnete ECTS' calculation when approving and withdrawing in one go 2022-08-09 11:10:16 +02:00
Harald Bamberger e63d34132c merged current master 2022-08-08 13:29:44 +02:00
Manfred 602bd375c4 BugFix PHP 7.4 Milak 2022-08-04 17:32:03 +02:00
Manfred 7b0de6b3e1 BugFix PHP 4 Milak 2022-08-04 14:41:34 +02:00
ma0048 6fd50d3c8d letzter bearbeiter online satt studentenname 2022-08-04 13:26:15 +02:00
Cris fc94ea4b49 Fixed: Maximale Dokument Uploadgröße 2022-08-03 16:43:34 +02:00
Cris fac257a2b1 Corrected: Falsche ECTS Summenberechnung, wenn Genehmigung zurückgenommen wurde, korrigiert.
Zurückgenommene Anrechnungen haben noch einen Eintrag "angerechnet" in der Zeugnisnotentabelle, weshalb
sie in der ECTS Summenberechnung mitgerechnet wurden. Das ist nun behoben.
2022-08-03 16:40:58 +02:00
Cris bb8a2a97a5 Fixed: Unclickable URLs after approving Anrechnung are clickable now 2022-08-02 15:25:06 +02:00
Manfred e9c2bcd690 Merge remote-tracking branch 'origin/master' 2022-08-01 14:09:10 +02:00
Manfred 62700194dd Bugfix aktuelles Studiensemester 2022-08-01 14:09:00 +02:00
ma0048 1a6b645693 pausefehlt bei 6.5 stunden hinzugefuegt 2022-08-01 10:49:17 +02:00
KarpAlex 80e15b9448 studentenmeldung.php: added field "dualesstudium" 2022-07-27 18:51:59 +02:00
Cris bf3ed6e48e Corrected ECTS Summen Display in Detail View when Withdrawing
If STGL withdraws a former rejection, there is no need to substract the ECTS in "Bisher angerechnete ECTS".
This is needed only if STGL withdraws a former approvement.
2022-07-27 16:22:17 +02:00
Cris 952d5e51b2 Refactoring der Dynamischen Max-ECTS-Berechnungsspalte, Berechnungen stimmen nun auch nach einem Genehmigungs-Update 2022-07-27 16:03:24 +02:00
KarpAlex aafdc41af2 core BPKWartung: corrected comments, removed uid property 2022-07-27 14:26:26 +02:00
ma0048 937236933e zeigt alle RTs an 2022-07-27 10:52:46 +02:00
KarpAlex 0055243a64 DmsLib: replaced _writeFile function with _copyFile to copy all file in one go (php copy method) instead of reading blocks and writing them 2022-07-27 01:52:08 +02:00
Cris 94644b4403 Adapted: Hochschulqualifikation werden bei Berechnung der max ECTS Überschreitung ausgenommen
Anrechnung aufgrund von Hochschulqualifikationen sind ungeschränkt möglich.
2022-07-26 18:22:51 +02:00
Cris 7b9fd39bbc Added: Hochschul-Qualifikation + ECTS Anzeige in Student View
Checkbox zur Angabe von Hochschulqualifikation
Anzeige, wenn ECTS Grenzen überschritten werden.
2022-07-26 18:18:08 +02:00
Cris 6a43928322 Added: Display (Qualifikations-)Begruendung in STGL Anrechnungen Detail View 2022-07-26 18:14:23 +02:00
KarpAlex 8da4bbd14b studentenmeldung.php: removed TODO comment 2022-07-22 18:40:55 +02:00
KarpAlex 1b457bda83 check that getting last status of previous semester is successfull before setting Wiedereintrittsdatum and Unterbrechungsdatum 2022-07-20 18:47:31 +02:00
Cris 86d7f8a35e Code refactoring of Dynamic ECTS Summen
. now build with tabulators column formatter.
. rows are reinitialized instead of using the updateData.
. format of cell background-color has moved out from row formatter to cell formatter
2022-07-20 11:25:35 +02:00
KarpAlex 503fbd5bde bis studentenmeldung: Unterbrechungsdatum und Wiedereintrittsdatum gesetzt 2022-07-20 01:01:58 +02:00
Cris 760e5758ce Optimized performance of all 'Alle auswählen'-buttons defined via tableWidgetHook
...by passing an array of rows to be selected, instead of selecting each row one by one.
Further triggered functions, e.g. rowSelectionChanged, are now called once only, not for each row.
2022-07-19 17:50:37 +02:00
Cris 4ba1f2cef5 Changed: Dynamic ECTS Summen (LV ECTS Sum by Prestudent + former ECTS) now build with tabulators mutator and rowFormatter 2022-07-18 17:38:20 +02:00
Cris 1544653fa3 Added Begründungstext 'Max ECTS überschritten' als Ablehnungsgrund 2022-07-18 17:33:50 +02:00
Cris 3b1d0f3aaa Merged DB Model Int/Float conversion
+ query type cast adaptation
2022-07-18 17:33:20 +02:00
KarpAlex 1c457f7ab7 studentenmeldung:
- added fields MeldeStatus
- added field HerkunftslandCode for IO Container
- splitted Ausstellungsstaat in ZugangAusstellungsstaat and 
ZugangMaAusstellungsstaat
2022-07-18 00:39:37 +02:00
KarpAlex 055f52a0bd lehrgangsmeldung:
- added field orgform_kurzbz, meldestatus and GS-Block
- splitted Ausstellungsstaat into ZugangAusstellungsstaat and 
ZugangMaAusstellungsstaat
2022-07-18 00:37:27 +02:00
KarpAlex 043f444bb6 added tbl_bisio.herkunftsland_code in db and made it editable as IO data in FAS 2022-07-14 19:50:50 +02:00
Harald Bamberger a463fc0dbf Merge branch 'feature-18236/Standardisierung_Extension_OP-KVP' 2022-07-14 15:58:58 +02:00
Manfred 9fa2f56c89 Grant SELECT to bis.tbl_gsprogramm for web-user 2022-07-14 10:37:25 +02:00
Manfred d569384e66 Merge remote-tracking branch 'origin/master' 2022-07-14 10:34:51 +02:00
Manfred c851cf9da2 Testkorrektur HR Services 2022-07-14 10:34:24 +02:00
KarpAlex 8a813e0a2c added "StudienkennungUni" to BIS XML studentenmeldung 2022-07-13 11:27:10 +02:00
ma0068 141986ca67 Zeitsperren als fixe Termine 2022-07-13 11:11:22 +02:00
ma0068 12bff57e0b Erweiterung Coodle und Freebusy um Zeitsperren 2022-07-13 09:24:37 +02:00
KarpAlex f72c165fe6 added codex/Gsprogramm_model 2022-07-12 19:41:08 +02:00
KarpAlex 013def84e3 bis.tbl_gsprogramm: studienkennung_uni can be added and edited in vilesci 2022-07-12 18:16:09 +02:00
KarpAlex 17493a6e40 dbupdate: added bis.tbl_gsprogramm studienkennung_uni to check array 2022-07-12 16:37:18 +02:00
Cris 91447d7218 Adapted Query getEctsSummeSchulisch: exclude Anrechnung aufgrund universitärer Qualifikation.
Anrechnungen mit universiäterer Qualifikation sind unbegrenzt möglich.
2022-07-11 11:29:42 +02:00
Cris a8f329e501 Added new Anrechnungbegruendung: Hochschulzeugnis 2022-07-11 10:46:53 +02:00
Andreas Österreicher b2eb035613 Merge branch 'feature-20265/infocenter_check_duplicate_user' 2022-07-08 11:24:10 +02:00
Andreas Österreicher 21650a8782 Merge branch 'feature-19486/infocenter_nationengruppe_anzeigen' 2022-07-08 11:20:59 +02:00
Paolo b3caa4c0ac Bugfix: FilterWidget: query executed before changes are applied 2022-07-08 11:15:52 +02:00
KarpAlex cd7fed2b43 Added studienkennung_uni field to bis.tbl_gsprogramm 2022-07-08 00:33:44 +02:00
ma0048 1434deeca1 zeigt die nation gruppe an 2022-07-07 11:29:38 +02:00
ma0048 377cb8ab7f ermoeglicht das loeschen der dokumente ueber das infocenter 2022-07-07 11:25:54 +02:00
Cris b2715bb408 Fixed: Added missing Summe ECTS Schulisch to AntragData. 2022-07-07 10:27:50 +02:00
Cris ade55c9d1f Added ECTS Summen to Anrechnung Detail View 2022-07-07 10:26:56 +02:00
Cris b40db6abbd Added ECTS Summen columns to Anrechnung Übersichtstable 2022-07-07 10:26:13 +02:00
Cris 4d05f54b54 Added ECTS Summen top AnrechnungData in the AnrechnungLib 2022-07-07 10:25:19 +02:00
Cris 2fb4118e69 Added to DB Update: Create functions to get total ECTS Summe by berufliche and schulische Qualifikation 2022-07-07 10:23:33 +02:00
Cris 1dc49ec494 Added methods to sum total ECTS, to be displayed on Anrechnung Details and Uebersicht 2022-07-07 10:21:23 +02:00
Cris 9d7589ddc4 Added DB methods to get ECTS Summen by schulische/berufliche Qualifikation 2022-07-07 10:18:40 +02:00
Cris 44a3231d55 Merge branch 'master' into feature-18224/Anrechnungen_ECTS-Grenze
# Conflicts:
#	application/models/education/Lehrveranstaltung_model.php
2022-07-06 12:00:09 +02:00
Cris 72428d0587 Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2022-07-06 11:54:48 +02:00
ma0048 acffebf515 check doppelte benutzer auch mit unterschiedlicher groß und kleinschreibung 2022-07-06 10:56:24 +02:00
Manfred 759a2b4c8a Merge remote-tracking branch 'origin/master' 2022-07-05 15:33:22 +02:00
Manfred e7587a9f00 Rechtecheck im Skript studienplan_vorrueckung auf lehre/studienplan 2022-07-05 15:33:17 +02:00
Manfred afb9bec9ba Zugangscode ausblenden, wenn Bewerbungstool-Addon nicht aktiv 2022-07-05 15:32:29 +02:00
Andreas Österreicher 1d980274fe Merge branch 'feature-19651/OEH_Beitragsliste' 2022-07-04 16:27:26 +02:00
Andreas Österreicher ac231722f1 Problem behoben wodruch Fehlermeldungen nicht korrekt angezeigt wurden
in der Zeitaufzeichnung
2022-07-01 14:31:39 +02:00
Andreas Österreicher 1641a879af PHP Version Compatibility fixed 2022-07-01 09:04:52 +02:00
KarpAlex 6341246550 Gruppenmanagement vilesci:
- changed description of manager input field
- error messsages are displayed in red color
2022-06-30 15:48:32 +02:00
KarpAlex 9262dc6197 added Gruppenmanagement navigation menu entry to Persons category 2022-06-30 14:22:12 +02:00
Andreas Österreicher dd66e9d119 Merge branch 'feature-19766/Issues_Studiengang_der_Person_anzeigen' 2022-06-30 12:35:22 +02:00
KarpAlex f74e036ec8 moved Berechtigung "extension/dvuh_gui_ekz_anfordern" to DVUH extension SQL 2022-06-30 11:27:24 +02:00
KarpAlex 1c3acc6366 issue overview: added column "Zugehörigkeit"(Belonging) to show study programs of concerning person and wether it is an employee 2022-06-29 17:59:57 +02:00
KarpAlex 500bbec2c1 added "hasSequence" = false to crm/Dokumentprestudent_model to avoid "lastval not found" error 2022-06-28 19:07:09 +02:00
Andreas Österreicher eeba5c7bd5 Merge branch 'feature-18887/Datenverbund_Clearing_und_Community_Changes' 2022-06-28 14:28:04 +02:00
Andreas Österreicher 2692accbdf Merge branch 'master' into feature-18887/Datenverbund_Clearing_und_Community_Changes 2022-06-27 14:48:11 +02:00
Manfred f0df99c46a Merge remote-tracking branch 'origin/master' 2022-06-24 14:29:35 +02:00
Manfred fcf829d03b Button "Liste ausräumen" ergänzt
Löscht leere (unbenutzte) Prüflinge
2022-06-24 14:29:08 +02:00
Cris 5f5031e8d1 Added ECTS Summe to Anrechnung Detail View. 2022-06-22 10:54:17 +02:00
Cris 7bba155bb5 Adapted function getPreviousFrom to return more than 1 previous semester if needed 2022-06-22 10:52:51 +02:00
Cris b52a3c9397 Added DB queries to calculate ECTS Summe in Lehrveranstaltung_model.php 2022-06-22 10:51:39 +02:00
Cris 12c9afbd3d Added function getFirstStatus to Prestudentstatus_model.php
Funktion liefert den Ersten Status eines Prestudenten mit der übergebenen Statuskurzbezeichnung.
2022-06-22 10:48:48 +02:00
Cris 42fb7a4fc8 Added ECTS Summe functions to AnrechnungLib
Added functions to calculate total ECTS Summe of
. angerechnete Studiensemester of Quereinsteiger
. bisher angerechnete schulische Kenntnisse
. bisher angerechente berufliche Kenntisse
2022-06-22 10:47:29 +02:00
cgfhtw 65ba946321 Rework Studienplan->getStudienplanLehrveranstaltung for Templates & use it in Vilesci "Lehrveranstaltung" 2022-06-22 09:39:53 +02:00
KarpAlex ca667feb0d Added document type "Grant Agreement" for syncing of documents with Mobility Online 2022-06-20 18:55:29 +02:00
KarpAlex 40efdf4acf Merge branch 'feature-19538/Gruppenadministratoren' of github.com:FH-Complete/FHC-Core into feature-19538/Gruppenadministratoren 2022-06-20 18:42:35 +02:00
KarpAlex accef23cb8 Gruppenmanagent: correct table cell size when adding/deleting managers and when there are no managers 2022-06-20 18:38:49 +02:00
Andreas Österreicher cfea30162c Merge branch 'feature-19839/rt_freigegeben_liste_uhrzeit_des_rts_anzeigen' 2022-06-20 12:32:41 +02:00
KarpAlex 95f1d87878 melde_studienang_kz can be edited in vilesci 2022-06-15 23:15:23 +02:00
KarpAlex f631cda7a5 Gruppenmanagement: added uid as insertvon when adding Gruppe 2022-06-15 22:53:37 +02:00
KarpAlex dc45427143 gruppenmanagement: renamed variable gruppemanager_class into gruppemanager_hlp 2022-06-15 22:52:37 +02:00
KarpAlex c771cbc644 Gruppenmanagement: added phrases 2022-06-14 18:24:10 +02:00
KarpAlex de08bfd0fc Gruppenmanagement:
- renamed gruppenadministration to gruppenmanagement
- added additional columns to gruppenmanagement filterwidget
- improved comments
- write public.tbl_log every time user is added or deleted from a group
2022-06-14 17:30:07 +02:00
Harald Bamberger 5c65b78a62 Merge branch 'bug-19556/Wrong_LV_Id_on_Template_copy' 2022-06-14 16:27:05 +02:00
KarpAlex 1066dff8e0 Gruppenmanager:
- set on update cascade for gruppe_kurzbz foreign key
- Notice + disabling add of group managers when group is "generiert"
2022-06-14 14:08:27 +02:00
ma0048 5731a98127 uhrzeit bei der rt freigegeben uebersicht hinzugefuegt 2022-06-14 10:29:20 +02:00
cgfhtw e83b1a6ee9 Bugfix: Wrong LV Id on Template copy 2022-06-14 09:11:04 +02:00
KarpAlex 2e728462ca Gruppenmanager:
- Berechtigung "lehre/gruppemanager" needed for managing groups
- added column "aktiv" to benutzeroverview
- group manager are deleted together with their group
- check: generated groups cannot have manager
2022-06-13 19:59:30 +02:00
Harald Bamberger aa8452682d fix error undefined variable 2022-06-13 15:31:40 +02:00
Harald Bamberger 2a95aa3abd Merge branch 'master' of github.com:FH-Complete/FHC-Core 2022-06-13 15:08:56 +02:00
Manfred 8304808127 Beim Zusammenlegen von Personen wird in der Anmerkung "von" ergänzt 2022-06-13 14:18:20 +02:00
Manfred 0f236b1da8 Merge remote-tracking branch 'origin/master' 2022-06-13 12:50:37 +02:00
Manfred 42275f2af1 Bugfix LV-Teile kopieren. Vertrag_id wird nicht mehr kopiert 2022-06-13 12:50:32 +02:00
KarpAlex f57123e100 Gruppenadministration Benutzergruppen:
- changed phrases
- show error dialog when json error returned
- zebra table
- hide filter header for non-filtered columns
- empty input field after adding Benutzer
2022-06-13 12:01:00 +02:00
Harald Bamberger c90fd7d120 Merge branch 'feature-18233-18234/Standardisierung' 2022-06-13 10:27:12 +02:00
Harald Bamberger 47843423d0 add column lehrveranstaltung_template_id to gegenpruefung 2022-06-13 10:19:26 +02:00
Harald Bamberger ec19d2e045 Merge master 2022-06-13 09:57:51 +02:00
KarpAlex 5bc57767d1 Gruppenadministration: - added delete functionality - Benutzer per group are retrieved via javascript and refreshed when group added/delted - moved gruppenadministration files to person folder from organisation - handle error when benutzer was already assigned to a group 2022-06-10 22:01:48 +02:00
KarpAlex 83351e7329 Manager Gruppenadministration:
first version of adding Benutzer to Gruppe
2022-06-09 20:05:46 +02:00
KarpAlex d2fea1ac6f Merge branch 'master' into feature-19538/Gruppenadministratoren 2022-06-09 17:27:07 +02:00
Andreas Österreicher a21ad7bbc7 Merge branch 'feature-19020/Checks_bei_Statusaenderungen' 2022-06-09 14:56:27 +02:00
Andreas Österreicher 2faa649cf3 Löschen von Statuseinträgen auch mit Berechtigung
student/keine_studstatuspruefung ermöglicht
2022-06-09 14:55:15 +02:00
KarpAlex 457ab9dc3e Gruppenadministration: first version of list with Gruppen of a manager. 2022-06-08 19:49:30 +02:00
Andreas Österreicher 9d769bbc16 Merge branch 'feature-18473/UrlaubstoolKeinEintragBeiVorhandenerZeitaufzeichnung' 2022-06-08 14:51:17 +02:00
Andreas Österreicher 25ee7f76cb Merge branch 'feature-18188/Issues_GUI_zum_Pflegen_der_Fehlerzustaendigkeiten' 2022-06-08 14:10:28 +02:00
Andreas Österreicher 90e760a9ff Merge branch 'feature-19351/infocenter_vorhandene_benutzer' 2022-06-08 14:03:45 +02:00
Andreas Österreicher ab408958b7 Merge branch 'Sprint-186/Sonstiges' 2022-06-08 13:34:20 +02:00
Nikolaus Krondraf c7df848d9d consider OE when generating document 2022-06-08 13:16:46 +02:00
Andreas Österreicher 9a1d4bf54d Merge branch 'master' of github.com:FH-Complete/FHC-Core 2022-06-08 13:10:30 +02:00
Andreas Österreicher 71fa8cb355 Merge branch 'bug-19149/Reihungstest_Sprache_Prio' 2022-06-08 13:09:38 +02:00
Nikolaus Krondraf 734fa31111 consider OE when generating document 2022-06-08 13:08:20 +02:00
cgfhtw 2c932f3d86 Bugfix 2022-06-08 10:30:07 +02:00
Andreas Österreicher 0ee1f3723b Räume mit Raumtyp Gesperrt werden am Infoterminal als besetzt/gesperrt
angezeigt
2022-06-08 08:39:53 +02:00
Andreas Österreicher e89a55b73f Removed unused WYSIWYG Editor 2022-06-08 07:09:04 +02:00
KarpAlex c547fd86a7 replaced Berechtigung dvuh_gui_begrenz with dvuh_gui_ekz_anfordern for requesting ekz only 2022-06-07 18:31:43 +02:00
KarpAlex 549396148d Gruppenmanager can be added and deleted in vilesci gui 2022-06-07 17:54:05 +02:00
ma0068 e2b3dbda7b Suche Cis: Wahlname vor Vorname, kein Hinweis auf Wahlname 2022-06-02 14:07:58 +02:00
Manfred 37af8ea331 Gesamtzeilenanzahl wird im FAS immer angezeigt X/Y 2022-06-02 12:55:25 +02:00
Manfred f2defe2c22 BugFix FAS-Filter Anzahl Reihungstest nicht angemedet
Ergänzung um Studiensemester
2022-06-02 12:31:23 +02:00
Manfred 3803c72a97 Merge remote-tracking branch 'origin/master' 2022-05-31 18:03:16 +02:00
Manfred 20c71e1788 Logo statt Fehlermeldung am Informationsbildschirm 2022-05-31 18:03:12 +02:00
Manfred ed08dde5a6 Projektarbeit ID anzeigen um leichter rauskopieren zu können 2022-05-31 18:02:29 +02:00
Manfred 1019d42c73 SQL-Korrektur 2022-05-31 17:54:42 +02:00
Manfred bde469f4b8 Abfrage Brandschutzbeauftragte geändert. FHTW Übergangslösung entfernt 2022-05-31 17:54:23 +02:00
KarpAlex 0cb303c242 added table public.tbl_gruppe_manager for adding managers to groups 2022-05-31 14:59:05 +02:00
ma0068 956e3804bc Merge branch 'feature-19171/Wahlname' of github.com:FH-Complete/FHC-Core into feature-19171/Wahlname 2022-05-31 09:31:57 +02:00
ma0068 3f17c51834 Wahlname bei Suche in Spalte Vorname 2022-05-31 09:31:29 +02:00
Andreas Österreicher f4988f8211 Zeitwuensche Update Mail wird temporär nicht an Studiengänge geschickt 2022-05-30 17:09:11 +02:00
Andreas Österreicher 84ff29ffd2 Merge branch 'feature-16370/AkteLib_create_new_CI_library_to_handle_akte' 2022-05-30 16:08:54 +02:00
KarpAlex 6aa4d4d719 added extension/dvuh_gui_begrenzt Berechtigung for limited functionality access in DVUH GUI 2022-05-30 11:37:59 +02:00
Andreas Österreicher 974791e19b Ausbildungssemester Limitiert damit bei Wiederholern die anzeige
funktioniert
2022-05-27 14:23:24 +02:00
Andreas Österreicher ac91d8ccbc Merge branch 'master' into feature-16370/AkteLib_create_new_CI_library_to_handle_akte 2022-05-27 14:18:30 +02:00
Andreas Österreicher df321c4047 Merge branch 'master' into feature-19171/Wahlname 2022-05-27 13:30:19 +02:00
Andreas Österreicher 0c33ad4a7a Warning bei Fotoliste behoben wenn kein Lektor zugeteilt ist 2022-05-27 13:20:56 +02:00
Andreas Österreicher 95d43753c2 Merge branch 'feature-18486/reihungstest_stoppen_fuer_einzelne_personen' 2022-05-27 11:33:13 +02:00
Andreas Österreicher 99db3ab9f6 Merge branch 'master' into feature-18486/reihungstest_stoppen_fuer_einzelne_personen 2022-05-27 11:01:30 +02:00
KarpAlex dc47a2ffc9 added permission student/keine_studstatuspruefung to enable non-admins to bypass studstatus checks 2022-05-24 18:38:44 +02:00
ma0048 3d3f4d5453 erste version infocenter lehrgaenge 2022-05-24 13:51:39 +02:00
KarpAlex d7708e2f6c Statusänderungen check studentDBDML.php: improved way of checking status by saving status in array first 2022-05-23 18:53:16 +02:00
Andreas Österreicher a73d2a06e8 Merge branch 'bug-19281/Bewerbungen01011970' 2022-05-23 17:54:15 +02:00
Andreas Österreicher 69c30ab39d Merge branch 'bug-19529/Projektarbeituebersicht' 2022-05-23 17:17:03 +02:00
Andreas Österreicher 0a8c7aa032 Problem behoben wodurch die Prüfung auf doppelte Zahlungen bei Personen
nicht funktionierte die noch keine Studierenden sind
2022-05-23 17:01:15 +02:00
Andreas Österreicher 3b1aba63b0 Neue Berechtigung für Verwaltung eigener Variablen hinzugefügt, Filter
für Projektabgabeuebersicht angepasst
2022-05-21 12:10:42 +02:00
Cris 9a57b263d1 Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2022-05-17 16:33:07 +02:00
ma0068 ba8543716c Erweiterung Gesamtnotenimport um student_uid 2022-05-17 13:24:49 +02:00
ma0068 8b061eab74 Adaptierungen FAS für Ergänzung Wahlname + Hinzufügen Zeitstempel kontakt.xul.php für Mitarbeiter 2022-05-16 09:17:31 +02:00
Manfred 71848c5bfc Merge remote-tracking branch 'origin/master' 2022-05-11 16:41:34 +02:00
Manfred 4b3163b67d Anpassung der Breite der Inputfelder 2022-05-11 16:41:31 +02:00
Manfred a9ca16dddc Beim Zusammenlegen von Personen werden beide Anmerkungen erhalten
Außerdem wird eine Info über das Zusammenlegen in der Anmerkung ergänzt
2022-05-11 16:41:14 +02:00
ma0048 fdce499f37 prueft auf doppelte benutzer 2022-05-11 11:31:52 +02:00
ma0068 84bc73f948 Anzeige Wahlname statt Vorname in Noten-,Anwesenheits und Fotoliste, Berücksichtigung in Cis-Suche 2022-05-11 11:18:01 +02:00
KarpAlex f2e337b179 FAS prestudent status: added checks when adding or modifiying status, including status and status date checks 2022-05-11 04:36:23 +02:00
Cris a654cbe583 Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2022-05-10 10:34:07 +02:00
Cris 90c5ec53bf Lehrauftragsmail an KF-Leitung: Bei Berechtigungsabfrage wird nun auch Lese-/Schreibrecht berücksichtigt 2022-05-10 10:33:00 +02:00
Cris 455dd4b8ff Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2022-05-09 10:38:54 +02:00
KarpAlex 707c8a3a6a dbupdate_3.3.php: field melde_studiengang_kz in tbl_studiengang is prefilled correctly 2022-05-02 18:12:29 +02:00
Andreas Österreicher fddc0068e4 Fixed wrong RegEx on Date Check 2022-04-29 12:49:16 +02:00
Harald Bamberger d89fba33e8 Merge branch 'feature-18234/Standardisierung_Studiengangsverwaltungstool_Template_verwenden' into feature-18233-18234/Standardisierung 2022-04-29 11:06:54 +02:00
Harald Bamberger a493ddd68e merge feature 18233 2022-04-29 11:04:32 +02:00
Andreas Österreicher a055a695e3 Merge branch 'master' into feature-18473/UrlaubstoolKeinEintragBeiVorhandenerZeitaufzeichnung 2022-04-29 10:58:06 +02:00
Andreas Österreicher b7b6cd5399 Merge branch 'master' into feature-18188/Issues_GUI_zum_Pflegen_der_Fehlerzustaendigkeiten 2022-04-28 18:26:18 +02:00
ma0068 9e094f38d5 Erweiterung der Validierung um ganztägige Zeitsperren 2022-04-28 11:08:39 +02:00
cgfhtw 63142f58d5 admin templates - & error phrases 2022-04-28 08:56:38 +02:00
ma0048 398c04d0ac sperrt alle prestudents von der person 2022-04-27 08:13:56 +02:00
cgfhtw 899e2e18df 18775 - Admin GUI f. Tabelle extension.tbl_opkvp_organisationseinheit_opprj 2022-04-21 15:29:16 +02:00
KarpAlex 5522d97afe issuesZustaendigkeiten.js: fixed comments 2022-04-15 23:47:16 +02:00
KarpAlex 3f40622af3 bugfixes issues Zuständigkeiten GUI:
- all needed oe kurzbz are shown at any time for assignment
- funktion can only be entered after oe
2022-04-15 21:15:19 +02:00
KarpAlex 087006a7a5 bugfixes issues Zuständigkeiten GUI:
- all needed oe kurzbz are shown at any time for assignment
- only functions not already assigned are shown
- funktion can only be entered after oe
2022-04-15 21:14:42 +02:00
cgfhtw 48333f62f0 autocomplete redesign & template field placement 2022-04-14 15:07:44 +02:00
Paolo 5a00ae5a5e Removed not use constant DEFAULT_USER from libraries/AkteLib.php 2022-04-14 10:21:17 +02:00
KarpAlex 4fe562cbe2 Fehlerzuständigkeiten and issues GUI improvements:
- menu link opens in new tab
- controller id set for easier refresh
- added person and oe Zuständigkeiten to issues list
-
2022-04-13 20:08:08 +02:00
Paolo d1b487e91a - Removed authentication functions from AkteLib and DmsLib
- Added new optional parameter who to write in the database who added the new document
- PHPMD optimizations
2022-04-13 13:22:16 +02:00
ma0048 7c6adaabeb rt stoppen fuer einzelene personen 2022-04-13 11:43:25 +02:00
KarpAlex 3804cce361 studentenmeldung.php: export for all Studiengänge: ausserordentliche Studierende are also included if their Studiengang is melderelevant 2022-04-12 18:34:06 +02:00
ma0068 d5225da80c Kein Eintrag Urlaubstool bei vorhandener Zeitaufzeichnung 2022-04-12 16:48:22 +02:00
KarpAlex 1f13c352a6 Issues.php: moved variable declaration out of if clause (phpcs issue) 2022-04-12 12:04:13 +02:00
KarpAlex 0344904631 AkteLib.php, DmsLib.php coding style fixes:
- splitted too long parameter lines
- method call closing parenthesis on new line
2022-04-11 10:57:08 +02:00
KarpAlex 9e8e8c98c8 checksystem: added column melde_studiengang_kz for tbl_studiengang 2022-04-11 10:23:45 +02:00
KarpAlex b6d61c510d checksystem: added columns insertamum and insertvon to system.tbl_fehler_zustaendigkeiten check array 2022-04-09 19:11:42 +02:00
KarpAlex f2ec48682b Fehler Zuständigkeiten assignment page improvements:
- added the page to navigation
- added organisationseinheiten type to oe dropdown
- correct order of oe and funktion dropdown entries
- bugfix: delete button was not shown when german language
- mitarbeiter autocomplete search also works for "vorname nachname" form
2022-04-09 18:32:47 +02:00
KarpAlex df3cab593c fehlerzustaendigkeit phrase "zuweisen" was incorrectly defined 2022-04-07 12:40:46 +02:00
KarpAlex dcf00b04ce Fehler Zuständigkeiten GUI: removed double row for fehlertyp in fehler info modal 2022-03-31 17:47:20 +02:00
KarpAlex 427a75b74b added GUI for managing Issues Zuständigkeiten 2022-03-31 12:41:18 +02:00
Cris ad77c233e4 Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2022-03-31 10:00:18 +02:00
cgfhtw 1445876955 Copy Template on save 'tbl_studienplan_lehrveranstaltung' 2022-03-28 16:32:52 +02:00
cgfhtw 56079a3674 phrasesupdate 2022-03-28 11:32:32 +02:00
cgfhtw d5d6432f14 modified model added db entry for lehrtyp added db col for template modified vilesci and added webservicerights for autocomplete 2022-03-23 15:54:44 +01:00
cgfhtw 1197f051a2 kvp phrases 2022-03-17 16:20:54 +01:00
Paolo 18d06c6e0c Added commento to an echo in the application/core/FHC_Controller.php
because it is not possible to replace the echo
2022-02-02 11:52:08 +01:00
KarpAlex 40493936c3 - AkteLib: added optional params "archiv", "signiert", "stud_selfservice", removed "uid"
- AkteLib and DmsLib: added comments, added fallback default user for insertvon
- FS_Model: added TempFS_model.php for writing temp files, added comments
2021-12-17 18:03:34 +01:00
KarpAlex 8c2af28595 added AkteLib for adding, updating and deleting akte together with DMS documents 2021-12-14 06:26:20 +01:00
KarpAlex d6fb714b21 - added methods in dmslib for adding and removing files and file versions
- FS_Model: added remove method
2021-12-13 10:04:15 +01:00
Paolo 9b1182405e - core/FHC_Controller->outputFile cleaned
- Adapted controllers/lehre/anrechnung/* to make use of the changed core/FHC_Controller->outputFile
- Changed application/core/FS_Model:
	- It's not abstract anymore
	- Added new constants READ_MODE, READ_WRITE_MODE, READ_APPEND_MODE, BLOCK_SIZE, META_URI
	- Constructor accept a mandatory parameter
	- Does not load the FilesystemLib anymore
	- Renamed all the public methods with the suffix Base64
	- Added new public methods openRead, openReadWrite, openReadAppend, close, readBlock and write
	- Added new private methods _checkPath and _open
- Removed the libraries/FilesystemLib
- Adapted model content/DmsFS_model to make use of the changed core/FS_Model
- Changed libraries/DmsLib:
	- Does not extend the FHC_Controller anymore
	- removed private propery UPLOAD_PATH
	- Cleaned code, make use of the standards
	- Adapted to use the Base64 suffixed methods from core/FS_Model
	- Deprecated old methods
	- Refactored public methods download and getFileInfo
2021-12-03 15:56:39 +01:00
ma0068 23f335e6a5 BT: Ausbildungsvertrag wird bei Abgewiesenen bei nicht vorhandener offener Bewerbung nicht mehr angezeigt 2021-10-04 12:00:51 +02:00
736 changed files with 10697 additions and 95627 deletions
+2 -2
View File
@@ -7,8 +7,8 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
$config['interval_blocking_application'] = 'P1M';
// Application submission period given by start- and enddate.
$config['submit_application_start'] = '01.02.2021';
$config['submit_application_end'] = '22.02.2021';
$config['submit_application_start'] = '05.09.2022';
$config['submit_application_end'] = '22.09.2022';
// Lehrveranstaltungen with these grades will be blocked for application
$config['grades_blocking_application'] = array(
+18
View File
@@ -119,6 +119,13 @@ $config['navigation_header'] = array(
'expand' => true,
'sort' => 30,
'requiredPermissions' => 'system/issues_verwalten:r'
),
'gruppenmanagement' => array(
'link' => site_url('person/Gruppenmanagement'),
'description' => 'Gruppenmanagement',
'expand' => true,
'sort' => 40,
'requiredPermissions' => 'lehre/gruppenmanager:r'
)
)
),
@@ -245,3 +252,14 @@ $config['navigation_menu']['lehre/lehrauftrag/LehrauftragErteilen/*'] = array(
'requiredPermissions' => array('lehre/lehrauftrag_erteilen:r')
)
);
$config['navigation_menu']['system/issues/Issues/*'] = array(
'fehlerzustaendigkeiten' => array(
'link' => site_url('system/issues/IssuesZustaendigkeiten'),
'description' => 'Fehler Zuständigkeiten',
'icon' => 'cogs',
'sort' => 100,
'target' => '_blank',
'requiredPermissions' => array('admin:rw')
)
);
@@ -16,9 +16,11 @@ if (!defined('BASEPATH')) exit('No direct script access allowed');
class AnrechnungJob extends JOB_Controller
{
const APPROVE_ANRECHNUNG_URI = '/lehre/anrechnung/ApproveAnrechnungUebersicht';
const REVIEW_ANRECHNUNG_URI = '/lehre/anrechnung/ReviewAnrechnungUebersicht';
const ANRECHNUNGSTATUS_APPROVED = 'approved';
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor';
const ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_STGL = 'AnrechnungNotizSTGL';
/**
@@ -33,6 +35,8 @@ class AnrechnungJob extends JOB_Controller
$this->load->helper('url');
$this->load->helper('hlp_sancho_helper');
$this->load->library('AnrechnungLib');
}
/**
@@ -342,6 +346,79 @@ html;
}
/**
* Send Sancho mail to remind lecturers to provide their recommendation if not done until one week after request.
*/
public function sendMailRemindRecommendation(){
$this->logInfo('Start AnrechnungJob sendMailRemindRecommendation to remind lecturers to provide their recommendation.');
// Get Anrechnungen with pending recommendations, that were requested 1 week before today.
// Restrict query for Anrechnungen of actual semester.
$this->AnrechnungModel->addSelect('astat.anrechnung_id, astat.datum, astat.insertamum');
$this->AnrechnungModel->addDistinct('astat.anrechnung_id');
$this->AnrechnungModel->addJoin('lehre.tbl_anrechnung_anrechnungstatus astat', 'anrechnung_id');
$result = $this->AnrechnungModel->loadWhere('
studiensemester_kurzbz = (
SELECT studiensemester_kurzbz FROM tbl_studiensemester WHERE now()::date BETWEEN start AND ende)
)
AND genehmigt_von IS NULL
AND empfehlung_anrechnung IS NULL
AND status_kurzbz = '. $this->db->escape(self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR) .' -- in Bearbeitung durch Lektor
AND NOW()::date = (astat.datum + interval \'1 week\') -- eine Woche nach Empfehlungsanfrage
ORDER BY astat.anrechnung_id, astat.datum DESC, astat.insertamum DESC -- nur letzten status dabei prüfen
');
// Exit if there are no pending recommendations
if (!hasData($result))
{
$this->logInfo('End AnrechnungJob sendMailRemindRecommendation, because no recommendations to be done.');
exit;
}
$anrechnung_id_arr = array_column(getData($result), 'anrechnung_id');
$arr_lvLector_arr = array();
foreach ($anrechnung_id_arr as $anrechnung_id)
{
$arr_lvLector_arr[]= $this->anrechnunglib->getLectors($anrechnung_id); // Returns LV Leitung. If not present, then all lectors of LV.
}
// Unique lector array to send only one mail per lector
$arr_lvLector_arr = array_unique($arr_lvLector_arr, SORT_REGULAR);
// Link to 'Anrechnungen prüfen' dashboard
$url =
CIS_ROOT. 'cis/index.php?menu='.
CIS_ROOT. 'cis/menu.php?content_id=&content='.
CIS_ROOT. index_page(). self::REVIEW_ANRECHNUNG_URI;
foreach ($arr_lvLector_arr as $lvLector_arr)
{
foreach ($lvLector_arr as $lector)
{
// Prepare mail content
$fields = array(
'vorname' => $lector->vorname,
'stgl_name' => 'Die Studiengangsleitung',
'link' => anchor($url, 'Anrechnungsanträge Übersicht')
);
// Send mail
sendSanchoMail(
'AnrechnungEmpfehlungAnfordern',
$fields,
$lector->uid. '@'. DOMAIN,
'Erinnerung: Deine Empfehlung wird benötigt zur Anerkennung nachgewiesener Kenntnisse'
);
}
}
$this->logInfo('SUCCEDED AnrechnungJob sendMailRemindRecommendation');
}
// Get STGL mail address
private function _getSTGLMailAddress($studiengang_kz)
{
@@ -240,11 +240,13 @@ class LVPlanJob extends JOB_Controller
}
// Send mail to STG Assistenz
/*
$result = $this->_sendMailToStg($uidByStg_arr);
if (isError($result))
{
$this->logError(getError($result));
}
*/
// Send mail to Kompetenzfeld Leitung
$result = $this->_sendMailToKF($uidByOe_arr);
@@ -359,7 +359,7 @@ class LehrauftragJob extends JOB_Controller
for ($i = 0; $i < $data_len; $i++)
{
// Get all users entitled by organisational unit
$result = $this->BenutzerrolleModel->getBenutzerByBerechtigung(self::BERECHTIGUNG_LEHRAUFTRAG_ERTEILEN, $data[$i]['oe_kurzbz']);
$result = $this->BenutzerrolleModel->getBenutzerByBerechtigung(self::BERECHTIGUNG_LEHRAUFTRAG_ERTEILEN, $data[$i]['oe_kurzbz'], 'suid');
if ($berechtigung_arr = getData($result))
{
@@ -395,8 +395,12 @@ class approveAnrechnungDetail extends Auth_Controller
// Set filename to be used on downlaod
$filename = $this->anrechnunglib->setFilenameOnDownload($dms_id);
// Get file to be downloaded from DMS
$download = $this->dmslib->download($dms_id, $filename);
if (isError($download)) return $download;
// Download file
$this->dmslib->download($dms_id, $filename);
$this->outputFile(getData($download));
}
/**
@@ -8,13 +8,13 @@ class approveAnrechnungUebersicht extends Auth_Controller
const BERECHTIGUNG_ANRECHNUNG_ANLEGEN = 'lehre/anrechnung_anlegen';
const REVIEW_ANRECHNUNG_URI = '/lehre/anrechnung/ReviewAnrechnungUebersicht';
const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP';
const ANRECHNUNGSTATUS_PROGRESSED_BY_KF = 'inProgressKF';
const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor';
const ANRECHNUNGSTATUS_APPROVED = 'approved';
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
public function __construct()
{
// Set required permissions
@@ -27,23 +27,23 @@ class approveAnrechnungUebersicht extends Auth_Controller
'requestRecommendation' => 'lehre/anrechnung_genehmigen:rw'
)
);
// Load models
$this->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel');
$this->load->model('content/DmsVersion_model', 'DmsVersionModel');
// Load libraries
$this->load->library('WidgetLib');
$this->load->library('PermissionLib');
$this->load->library('AnrechnungLib');
$this->load->library('DmsLib');
// Load helpers
$this->load->helper('form');
$this->load->helper('url');
$this->load->helper('hlp_sancho_helper');
// Load language phrases
$this->loadPhrases(
array(
@@ -55,23 +55,23 @@ class approveAnrechnungUebersicht extends Auth_Controller
'table'
)
);
$this->_setAuthUID();
$this->setControllerId();
}
public function index()
{
// Get study semester
$studiensemester_kurzbz = $this->input->get('studiensemester');
if (isEmptyString($studiensemester_kurzbz))
{
$result = $this->StudiensemesterModel->getNearest();
$studiensemester_kurzbz = getData($result)[0]->studiensemester_kurzbz;
}
// Get studiengaenge the user is entitled for
if (!$studiengang_kz_arr = $this->permissionlib->getSTG_isEntitledFor(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN))
{
@@ -91,10 +91,10 @@ class approveAnrechnungUebersicht extends Auth_Controller
'hasReadOnlyAccess' => $hasReadOnlyAccess,
'hasCreateAnrechnungAccess' => $hasCreateAnrechnungAccess
);
$this->load->view('lehre/anrechnung/approveAnrechnungUebersicht.php', $viewData);
}
/**
* Approve Anrechnungen.
*/
@@ -107,22 +107,30 @@ class approveAnrechnungUebersicht extends Auth_Controller
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
$json = array(
'status_kurzbz' => self::ANRECHNUNGSTATUS_APPROVED,
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_APPROVED),
'prestudenten' => []
);
// Approve Anrechnung
foreach ($data as $item)
{
if ($this->anrechnunglib->approveAnrechnung($item['anrechnung_id']))
// Get Prestudent
$this->AnrechnungModel->addSelect('prestudent_id');
$result = $this->AnrechnungModel->load($item['anrechnung_id']);
$prestudent_id = getData($result)[0]->prestudent_id;
// Approve
if ($this->anrechnunglib->approveAnrechnung($item['anrechnung_id']))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'status_kurzbz' => self::ANRECHNUNGSTATUS_APPROVED,
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_APPROVED)
);
$json['prestudenten'][$prestudent_id][] = $item['anrechnung_id'];
}
}
// Output json to ajax
if (isset($json) && !isEmptyArray($json))
if (isset($json) && !isEmptyArray($json['prestudenten']))
{
return $this->outputJsonSuccess($json);
}
@@ -131,20 +139,20 @@ class approveAnrechnungUebersicht extends Auth_Controller
return $this->outputJsonError('Es wurden keine Anrechnungen genehmigt.');
}
}
/**
* Reject Anrechnungen.
*/
public function reject()
{
$data = $this->input->post('data');
// Validate data
if (isEmptyArray($data))
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Reject Anrechnung
foreach ($data as $item)
{
@@ -157,7 +165,7 @@ class approveAnrechnungUebersicht extends Auth_Controller
);
}
}
// Output json to ajax
if (isset($json) && !isEmptyArray($json))
{
@@ -168,22 +176,22 @@ class approveAnrechnungUebersicht extends Auth_Controller
return $this->outputJsonError('Es wurden keine Anrechnungen genehmigt.');
}
}
/**
* Request recommendation for Anrechnungen.
*/
public function requestRecommendation()
{
$data = $this->input->post('data');
if(isEmptyArray($data))
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
$retval = array();
$counter = 0;
foreach ($data as $item)
{
// Check if Anrechnungs-LV has lector
@@ -191,7 +199,7 @@ class approveAnrechnungUebersicht extends Auth_Controller
{
// Count up LV with no lector
$counter++;
// Continue loop, if LV has no lector
continue;
}
@@ -205,7 +213,7 @@ class approveAnrechnungUebersicht extends Auth_Controller
$empfehlungsanfrage_an = !isEmptyArray($lector_arr)
? implode(', ', array_column($lector_arr, 'fullname'))
: '';
$retval[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR,
@@ -216,7 +224,7 @@ class approveAnrechnungUebersicht extends Auth_Controller
);
}
}
/**
* Send mails to lectors
* NOTE: mails are sent at the end to ensure sending only ONE mail to each LV-Leitung or lector
@@ -226,16 +234,16 @@ class approveAnrechnungUebersicht extends Auth_Controller
{
self::_sendSanchoMailToLectors($retval);
}
// Output json to ajax
if (isEmptyArray($retval) && $counter == 0)
{
return $this->outputJsonError('Es wurden keine Empfehlungen angefordert');
}
return $this->outputJsonSuccess($retval);
}
/**
* Download and open uploaded document (Nachweisdokument).
*/
@@ -250,25 +258,28 @@ class approveAnrechnungUebersicht extends Auth_Controller
// Check if user is entitled to read dms doc
$this->_checkIfEntitledToReadDMSDoc($dms_id);
// Set filename to be used on downlaod
$filename = $this->anrechnunglib->setFilenameOnDownload($dms_id);
// Get file to be downloaded from DMS
$download = $this->dmslib->download($dms_id, $filename);
if (isError($download)) return $download;
// Download file
$this->dmslib->download($dms_id, $filename);
$this->outputFile(getData($download));
}
/**
* Retrieve the UID of the logged user and checks if it is valid
*/
private function _setAuthUID()
{
$this->_uid = getAuthUID();
if (!$this->_uid) show_error('User authentification failed');
}
/**
* Check if user is entitled to read dms doc
* @param $dms_id
@@ -276,31 +287,30 @@ class approveAnrechnungUebersicht extends Auth_Controller
private function _checkIfEntitledToReadDMSDoc($dms_id)
{
$result = $this->AnrechnungModel->loadWhere(array('dms_id' => $dms_id));
if(!$result = getData($result)[0])
{
show_error('Failed retrieving Anrechnung');
}
$result = $this->LehrveranstaltungModel->loadWhere(array(
'lehrveranstaltung_id' => $result->lehrveranstaltung_id
));
if(!$result = getData($result)[0])
{
show_error('Failed loading Lehrveranstaltung');
}
$studiengang_kz = $result->studiengang_kz;
// Check if user is entitled
if (!$this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN, 's', $studiengang_kz))
{
show_error('You are not entitled to read this document');
}
}
/**
* Send mail to lectors asking for recommendation. (first to LV-Leitung, if not present to all lectors of lv)
* @param $mail_params
@@ -310,7 +320,7 @@ class approveAnrechnungUebersicht extends Auth_Controller
{
// Get Lehrveranstaltungen
$anrechnung_arr = array();
foreach ($mail_params as $item)
{
$this->AnrechnungModel->addSelect('lehrveranstaltung_id, studiensemester_kurzbz');
@@ -319,10 +329,10 @@ class approveAnrechnungUebersicht extends Auth_Controller
'studiensemester_kurzbz' => $this->AnrechnungModel->load($item['anrechnung_id'])->retval[0]->studiensemester_kurzbz
);
}
$anrechnung_arr = array_unique($anrechnung_arr, SORT_REGULAR);
/**
* Get lectors (prio for LV-Leitung, if not present to all lectors of LV.
* Anyway this function will receive a unique array to avoid sending more mails to one and the same lector.
@@ -334,27 +344,27 @@ class approveAnrechnungUebersicht extends Auth_Controller
{
$to = $lector->uid;
$vorname = $lector->vorname;
// Get full name of stgl
$this->load->model('person/Person_model', 'PersonModel');
if (!$stgl_name = getData($this->PersonModel->getFullName($this->_uid)))
{
show_error ('Failed retrieving person');
}
// Link to Antrag genehmigen
$url =
CIS_ROOT. 'cis/index.php?menu='.
CIS_ROOT. 'cis/menu.php?content_id=&content='.
CIS_ROOT. index_page(). self::REVIEW_ANRECHNUNG_URI;
// Prepare mail content
$body_fields = array(
'vorname' => $vorname,
'stgl_name' => $stgl_name,
'link' => anchor($url, 'Anrechnungsanträge Übersicht')
);
sendSanchoMail(
'AnrechnungEmpfehlungAnfordern',
$body_fields,
@@ -364,7 +374,7 @@ class approveAnrechnungUebersicht extends Auth_Controller
}
return true;
}
/**
* Get lectors (prio for LV-Leitung, if not present to all lectors of LV.
* Anyway this function will receive a unique array to avoid sending more mails to one and the same lector.
@@ -374,18 +384,18 @@ class approveAnrechnungUebersicht extends Auth_Controller
private function _getLectors($anrechnung_arr)
{
$lector_arr = array();
// Get lectors
foreach($anrechnung_arr as $anrechnung)
{
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
$result = $this->LehrveranstaltungModel->getLecturersByLv($anrechnung['studiensemester_kurzbz'], $anrechnung['lehrveranstaltung_id']);
if (!hasData($result))
{
show_error('Failed retrieving lectors of Lehrveranstaltung');
}
$lecturersByLv = getData($result);
// Check if lv has LV-Leitung
@@ -401,7 +411,7 @@ class approveAnrechnungUebersicht extends Auth_Controller
$lector_arr = array_merge($lector_arr, $lecturersByLv);
}
}
/**
* NOTE: This step is only done to make the array unique by uid, vorname and nachname in the following step
* (e.g. if same lector is ones LV-Leitung and another time not, then array_unique would leave both.
@@ -411,10 +421,10 @@ class approveAnrechnungUebersicht extends Auth_Controller
{
unset($lector->lvleiter);
}
// Now make the lector array aka mail receivers unique
$lector_arr = array_unique($lector_arr, SORT_REGULAR);
return $lector_arr;
}
}
}
@@ -6,13 +6,13 @@ class requestAnrechnung extends Auth_Controller
{
const REQUEST_ANRECHNUNG_URI = '/lehre/anrechnung/RequestAnrechnung';
const APPROVE_ANRECHNUNG_URI = '/lehre/anrechnung/ApproveAnrechnungUebersicht';
const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP';
const ANRECHNUNGSTATUS_PROGRESSED_BY_KF = 'inProgressKF';
const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor';
const ANRECHNUNGSTATUS_APPROVED = 'approved';
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
public function __construct()
{
// Set required permissions
@@ -23,22 +23,22 @@ class requestAnrechnung extends Auth_Controller
'download' => 'student/anrechnung_beantragen:rw',
)
);
// Load models
$this->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->load->model('content/DmsVersion_model', 'DmsVersionModel');
// Load libraries
$this->load->library('WidgetLib');
$this->load->library('PermissionLib');
$this->load->library('AnrechnungLib');
$this->load->library('DmsLib');
// Load helpers
$this->load->helper('form');
$this->load->helper('url');
$this->load->helper('hlp_sancho_helper');
// Load configs
$this->load->config('anrechnung');
@@ -205,9 +205,14 @@ class requestAnrechnung extends Auth_Controller
}
// Check if user is entitled to read dms doc
self::_checkIfEntitledToReadDMSDoc($dms_id);
$this->_checkIfEntitledToReadDMSDoc($dms_id);
$this->dmslib->download($dms_id);
// Get file to be downloaded from DMS
$download = $this->dmslib->download($dms_id);
if (isError($download)) return $download;
// Download file
$this->outputFile(getData($download));
}
/**
@@ -216,10 +221,10 @@ class requestAnrechnung extends Auth_Controller
private function _setAuthUID()
{
$this->_uid = getAuthUID();
if (!$this->_uid) show_error('User authentification failed');
}
/**
* Check if application deadline is expired.
*
@@ -232,7 +237,7 @@ class requestAnrechnung extends Auth_Controller
private function _isExpired($start, $ende, $studiensemester_kurzbz)
{
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
// If start is not given, set to Semesterstart.
if (!isset($start) || isEmptyString($start))
{
@@ -240,7 +245,7 @@ class requestAnrechnung extends Auth_Controller
$result = $this->StudiensemesterModel->load($studiensemester_kurzbz);
$start = getData($result)[0]->start;
}
// If ende is not given, set to Semesterende.
if (!isset($ende) || isEmptyString($ende))
{
@@ -248,15 +253,15 @@ class requestAnrechnung extends Auth_Controller
$result = $this->StudiensemesterModel->load($studiensemester_kurzbz);
$ende = getData($result)[0]->ende;
}
$today = new DateTime('today midnight');
$start = new DateTime($start);
$ende = new DateTime($ende);
// True if expired
return ($today < $start || $today > $ende);
}
/**
* Check if user is entitled to read dms doc.
*
@@ -268,9 +273,9 @@ class requestAnrechnung extends Auth_Controller
{
show_error('Failed loading Student');
}
$result = $this->AnrechnungModel->loadWhere(array('dms_id' => $dms_id));
if($result = getData($result)[0])
{
if ($result->prestudent_id == $student->prestudent_id)
@@ -278,10 +283,10 @@ class requestAnrechnung extends Auth_Controller
return;
}
}
show_error('You are not entitled to read this document');
}
/**
* Check if application already exists.
*
@@ -297,15 +302,15 @@ class requestAnrechnung extends Auth_Controller
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'prestudent_id' => $prestudent_id
));
if (isError($result))
{
show_error(getError($result));
}
return hasData($result);
}
/**
* Check if applications' study semester is actual study semester.
*
@@ -317,10 +322,10 @@ class requestAnrechnung extends Auth_Controller
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
$result = $this->StudiensemesterModel->getNearest();
$actual_ss = getData($result)[0]->studiensemester_kurzbz;
return $studiensemester_kurzbz == $actual_ss;
}
private function _LVhasBlockingGrades($studiensemester_kurzbz, $lehrveranstaltung_id)
{
// Get Note of Lehrveranstaltung
@@ -331,12 +336,12 @@ class requestAnrechnung extends Auth_Controller
'lehrveranstaltung_id' => $lehrveranstaltung_id
)
);
// If Lehrveranstaltung has Note
if (hasData($result))
{
$note = getData($result)[0]->note;
// Check if Note is a blocking grade
if (in_array($note, $this->config->item('grades_blocking_application')))
{
@@ -345,7 +350,7 @@ class requestAnrechnung extends Auth_Controller
}
return false;
}
/**
* Upload file via DMS library.
*
@@ -362,8 +367,8 @@ class requestAnrechnung extends Auth_Controller
'insertamum' => (new DateTime())->format('Y-m-d H:i:s'),
'insertvon' => $this->_uid
);
// Upload document
return $this->dmslib->upload($dms, 'uploadfile', array('pdf'));
}
}
}
@@ -217,15 +217,18 @@ class reviewAnrechnungDetail extends Auth_Controller
}
// Check if user is entitled to read dms doc
self::_checkIfEntitledToReadDMSDoc($dms_id);
$this->_checkIfEntitledToReadDMSDoc($dms_id);
// Set filename to be used on downlaod
$filename = $this->anrechnunglib->setFilenameOnDownload($dms_id);
// Download file
$this->dmslib->download($dms_id, $filename);
}
// Get file to be downloaded from DMS
$download = $this->dmslib->download($dms_id, $filename);
if (isError($download)) return $download;
// Download file
$this->outputFile(getData($download));
}
/**
* Retrieve the UID of the logged user and checks if it is valid
@@ -319,20 +322,10 @@ class reviewAnrechnungDetail extends Auth_Controller
// Send mail to STGL of each studiengang
foreach ($studiengang_kz_arr as $studiengang_kz)
{
// Get STGL mail address, if available, otherwise get assistance mail address
$stgmail = $this->_getSTGLMailAddress($studiengang_kz);
if(isSuccess($stgmail) && hasData($stgmail))
list ($to, $vorname) = getData($stgmail)[0];
else
show_error ('Failed retrieving DegreeProgram Mail');
// Get full name of lector
$this->load->model('person/Person_model', 'PersonModel');
if (!$lector_name = getData($this->PersonModel->getFullName($this->_uid)))
{
show_error ('Failed retrieving person');
}
$result = $this->PersonModel->getFullName($this->_uid);
$lector_name = hasData($result) ? getData($result) : 'Ein Lektor';
// Link to Antrag genehmigen
$url =
@@ -340,22 +333,26 @@ class reviewAnrechnungDetail extends Auth_Controller
CIS_ROOT. 'cis/menu.php?content_id=&content='.
CIS_ROOT. index_page(). self::APPROVE_ANRECHNUNG_URI;
// Prepare mail content
$body_fields = array(
'vorname' => $vorname,
'lektor_name' => $lector_name,
'empfehlung' => $empfehlung ? 'positive' : 'negative',
'link' => anchor($url, 'Anrechnungsanträge Übersicht')
);
// Get STGL mail address, if available, otherwise get assistance mail address
if( !$result = $this->_getSTGLMailAddress($studiengang_kz)) return false;
foreach ($result as $stgl)
{
// Prepare mail content
$body_fields = array(
'vorname' => $stgl['vorname'],
'lektor_name' => $lector_name,
'empfehlung' => $empfehlung ? 'positive' : 'negative',
'link' => anchor($url, 'Anrechnungsanträge Übersicht')
);
sendSanchoMail(
'AnrechnungEmpfehlungAbgeben',
$body_fields,
$to,
'Anerkennung nachgewiesener Kenntnisse: Empfehlung wurde abgegeben'
);
sendSanchoMail(
'AnrechnungEmpfehlungAbgeben',
$body_fields,
$stgl['to'],
'Anerkennung nachgewiesener Kenntnisse: Empfehlung wurde abgegeben'
);
}
}
return true;
}
@@ -366,28 +363,33 @@ class reviewAnrechnungDetail extends Auth_Controller
$result = $this->StudiengangModel->getLeitung($stg_kz);
// Get STGL mail address, if available
if (isSuccess($result) && hasData($result))
{
return success(array(
$result->retval[0]->uid. '@'. DOMAIN,
$result->retval[0]->vorname
));
}
if (hasData($result))
{
foreach (getData($result) as $stgl)
{
$stglMailAdress_arr[]= array(
'to' => $stgl->uid. '@'. DOMAIN,
'vorname' => $stgl->vorname
);
}
return $stglMailAdress_arr;
}
// ...otherwise get assistance mail address
else
{
$result = $this->StudiengangModel->load($stg_kz);
if (isSuccess($result) && hasData($result))
if (hasData($result))
{
return success(array(
return array(
$result->retval[0]->email,
''
));
);
}
else
{
return error('Keine E-Mail für diesen Stg gefunden');
return false;
}
}
}
@@ -180,13 +180,17 @@ class reviewAnrechnungUebersicht extends Auth_Controller
}
// Check if user is entitled to read dms doc
self::_checkIfEntitledToReadDMSDoc($dms_id);
$this->_checkIfEntitledToReadDMSDoc($dms_id);
// Set filename to be used on downlaod
$filename = $this->anrechnunglib->setFilenameOnDownload($dms_id);
// Get file to be downloaded from DMS
$download = $this->dmslib->download($dms_id, $filename);
if (isError($download)) return $download;
// Download file
$this->dmslib->download($dms_id, $filename);
$this->outputFile(getData($download));
}
@@ -253,20 +257,10 @@ class reviewAnrechnungUebersicht extends Auth_Controller
// Send mail to STGL of each studiengang
foreach ($studiengang_kz_arr as $studiengang_kz)
{
// Get STGL mail address, if available, otherwise get assistance mail address
$stgmail = $this->_getSTGLMailAddress($studiengang_kz);
if(isSuccess($stgmail) && hasData($stgmail))
list ($to, $vorname) = getData($stgmail)[0];
else
show_error ('Failed retrieving DegreeProgram Mail');
// Get full name of lector
$this->load->model('person/Person_model', 'PersonModel');
if (!$lector_name = getData($this->PersonModel->getFullName($this->_uid)))
{
show_error ('Failed retrieving person');
}
$result = $this->PersonModel->getFullName($this->_uid);
$lector_name = hasData($result) ? getData($result) : 'Ein Lektor';
// Link to Antrag genehmigen
$url =
@@ -274,22 +268,26 @@ class reviewAnrechnungUebersicht extends Auth_Controller
CIS_ROOT. 'cis/menu.php?content_id=&content='.
CIS_ROOT. index_page(). self::APPROVE_ANRECHNUNG_URI;
// Prepare mail content
$body_fields = array(
'vorname' => $vorname,
'lektor_name' => $lector_name,
'empfehlung' => $empfehlung ? 'positive' : 'negative',
'link' => anchor($url, 'Anrechnungsanträge Übersicht')
);
// Get STGL mail address, if available, otherwise get assistance mail address
if (!$result = $this->_getSTGLMailAddress($studiengang_kz)) return false;
foreach ($result as $stgl)
{
// Prepare mail content
$body_fields = array(
'vorname' => $stgl['vorname'],
'lektor_name' => $lector_name,
'empfehlung' => $empfehlung ? 'positive' : 'negative',
'link' => anchor($url, 'Anrechnungsanträge Übersicht')
);
sendSanchoMail(
'AnrechnungEmpfehlungAbgeben',
$body_fields,
$to,
'Anerkennung nachgewiesener Kenntnisse: Empfehlung wurde abgegeben'
);
sendSanchoMail(
'AnrechnungEmpfehlungAbgeben',
$body_fields,
$stgl['to'],
'Anerkennung nachgewiesener Kenntnisse: Empfehlung wurde abgegeben'
);
}
}
return true;
}
@@ -300,28 +298,33 @@ class reviewAnrechnungUebersicht extends Auth_Controller
$result = $this->StudiengangModel->getLeitung($stg_kz);
// Get STGL mail address, if available
if (isSuccess($result) && hasData($result))
{
return success(array(
$result->retval[0]->uid. '@'. DOMAIN,
$result->retval[0]->vorname
));
}
if (hasData($result))
{
foreach (getData($result) as $stgl)
{
$stglMailAdress_arr[]= array(
'to' => $stgl->uid. '@'. DOMAIN,
'vorname' => $stgl->vorname
);
}
return $stglMailAdress_arr;
}
// ...otherwise get assistance mail address
else
{
$result = $this->StudiengangModel->load($stg_kz);
if (isSuccess($result) && hasData($result))
if (hasData($result))
{
return success(array(
return array(
$result->retval[0]->email,
''
));
);
}
else
{
return error('Keine E-Mail für diesen Stg gefunden');
return false;
}
}
}
@@ -138,7 +138,7 @@ class Studiensemester extends Auth_Controller
$start = $this->input->post("semstart");
$ende = $this->input->post("semende");
$studienjahr_kurzbz = $this->input->post("studienjahrkurzbz");
$beschreibung = $this->input->post("beschreibung");
$beschreibung = isEmptyString($this->input->post("beschreibung")) ? null : $this->input->post("beschreibung");
$onlinebewerbung = $this->input->post("onlinebewerbung");
$onlinebewerbung = isset($onlinebewerbung);
@@ -7,8 +7,6 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
*/
class BPKWartung extends Auth_Controller
{
private $_uid; // contains the UID of the logged user
/**
* Constructor
*/
@@ -46,7 +44,7 @@ class BPKWartung extends Auth_Controller
// Public methods
/**
* Main page of the InfoCenter tool
* Main page of the bPK Wartung.
*/
public function index()
{
@@ -56,9 +54,7 @@ class BPKWartung extends Auth_Controller
}
/**
* Personal details page of the InfoCenter tool
* Initialization function, gets person and prestudent data and loads the view with the data
* @param $person_id
* bPK Details initialization function, gets person data and loads the view with the data.
*/
public function showDetails()
{
@@ -85,8 +81,7 @@ class BPKWartung extends Auth_Controller
}
/**
* Saves a ZGV for a prestudent, includes Ort, Datum, Nation for bachelor and master
* @param $prestudent_id
* Saves a bPK for a person.
*/
public function saveBPK()
{
@@ -112,7 +107,7 @@ class BPKWartung extends Auth_Controller
// Private methods
/**
* Loads all necessary Person data: Stammdaten (name, svnr, contact, ...), Dokumente, Logs and Notizen
* Loads all necessary Person data.
* @param $person_id
* @return array
*/
@@ -0,0 +1,254 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
* Page for managing groups of which user is the manager
*/
class Gruppenmanagement extends Auth_Controller
{
private $_uid; // contains the UID of the logged user
/**
* Constructor
*/
public function __construct()
{
parent::__construct(
array(
'index' => 'lehre/gruppenmanager:r',
'showBenutzergruppe' => 'lehre/gruppenmanager:r',
'getBenutzer' => 'lehre/gruppenmanager:r',
'getAllBenutzer' => 'lehre/gruppenmanager:r',
'addBenutzer' => 'lehre/gruppenmanager:rw',
'removeBenutzer' => 'lehre/gruppenmanager:rw'
)
);
// Loads models
$this->load->model('person/benutzer_model', 'BenutzerModel');
$this->load->model('ressource/mitarbeiter_model', 'MitarbeiterModel');
$this->load->model('person/benutzergruppe_model', 'BenutzergruppeModel');
$this->load->model('system/Log_model', 'LogModel');
$this->load->library('WidgetLib');
$this->loadPhrases(
array(
'global',
'person',
'lehre',
'ui',
'filter',
'gruppenmanagement'
)
);
$this->setControllerId(); // sets the controller id
$this->_setAuthUID(); // sets property uid
}
// -----------------------------------------------------------------------------------------------------------------
// Public methods
/**
* Main page
*/
public function index()
{
$this->load->view(
'person/gruppenmanagement/gruppenmanagement.php',
array('uid' => $this->_uid)
);
}
/**
* Shows Benutzergruppe overview page.
*/
public function showBenutzergruppe()
{
$this->_setNavigationMenuShowDetails();
$gruppe_kurzbz = $this->input->get('gruppe_kurzbz');
$data[self::FHC_CONTROLLER_ID] = $this->getControllerId();
$this->load->view(
'person/gruppenmanagement/benutzergruppe.php',
array('gruppe_kurzbz' => $gruppe_kurzbz)
);
}
/**
* Gets Benutzer assigned to a Gruppe
*/
public function getBenutzer()
{
$gruppe_kurzbz = $this->input->get('gruppe_kurzbz');
$this->BenutzergruppeModel->addSelect('uid, vorname, nachname, ben.aktiv');
$this->BenutzergruppeModel->addJoin('public.tbl_benutzer ben', 'uid');
$this->BenutzergruppeModel->addJoin('public.tbl_person', 'person_id');
$benutzerRes = $this->BenutzergruppeModel->loadWhere(array('gruppe_kurzbz' => $gruppe_kurzbz));
$this->outputJson($benutzerRes);
}
/**
* Gets all Benutzer for assignment to Gruppe
*/
public function getAllBenutzer()
{
$this->BenutzerModel->addSelect('uid, vorname, nachname');
$this->BenutzerModel->addJoin('public.tbl_person', 'person_id');
$benutzerRes = $this->BenutzerModel->loadWhere(
array('tbl_benutzer.aktiv' => true)
);
$this->outputJson($benutzerRes);
}
/**
* Adds a Benutzer to Gruppe
*/
public function addBenutzer()
{
$uid = $this->input->post('uid');
$gruppe_kurzbz = $this->input->post('gruppe_kurzbz');
if (isEmptyString($uid))
$result = error('Uid missing');
else
{
$benutzerExistsRes = $this->BenutzergruppeModel->loadWhere(
array(
'uid' => $uid,
'gruppe_kurzbz' => $gruppe_kurzbz
)
);
if (isError($benutzerExistsRes))
{
$this->outputJsonError(getError($benutzerExistsRes));
return;
}
if (hasData($benutzerExistsRes))
{
$this->outputJsonError($this->p->t('gruppenmanagement', 'benutzerSchonZugewiesen'));
return;
}
$result = $this->BenutzergruppeModel->insert(
array(
'uid' => $uid,
'gruppe_kurzbz' => $gruppe_kurzbz,
'insertamum' => date('Y-m-d H:i:s'),
'insertvon' => $this->_uid
)
);
// log the group add
$lastQry = $this->db->last_query();
if (isSuccess($result))
{
$beschreibung = 'Gruppenmanagement: Nutzer zu Gruppe hinzugefügt';
$this->_writeLog($this->_uid, $beschreibung, $lastQry);
}
}
$this->outputJson($result);
}
/**
* Removes Benutzer from Gruppe
*/
public function removeBenutzer()
{
$uid = $this->input->post('uid');
$gruppe_kurzbz = $this->input->post('gruppe_kurzbz');
if (isEmptyString($uid))
$result = error('Uid missing');
else
{
$result = $this->BenutzergruppeModel->delete(
array(
'uid' => $uid,
'gruppe_kurzbz' => $gruppe_kurzbz
)
);
}
// log the group remove
$lastQry = $this->db->last_query();
if (isSuccess($result))
{
$beschreibung = 'Gruppenmanagement: Nutzer aus Gruppe entfernt';
$this->_writeLog($this->_uid, $beschreibung, $lastQry);
}
$this->outputJson($result);
}
// -----------------------------------------------------------------------------------------------------------------
// Private methods
/**
* Define the navigation menu for the showDetails page
*/
private function _setNavigationMenuShowDetails()
{
$this->load->library('NavigationLib', array('navigation_page' => 'person/Gruppenmanagement/showBenutzergruppe'));
$link = site_url('person/Gruppenmanagement');
$this->navigationlib->setSessionMenu(
array(
'back' => $this->navigationlib->oneLevel(
'Zurück', // description
$link, // link
array(), // children
'angle-left', // icon
true, // expand
null, // subscriptDescription
null, // subscriptLinkClass
null, // subscriptLinkValue
'', // target
1 // sort
)
)
);
}
/**
* Set uid of authentificated user
*/
private function _setAuthUID()
{
$this->_uid = getAuthUID();
if (!$this->_uid) show_error('User authentification failed');
}
/**
* Writes an entry in the log table
*/
private function _writeLog($uid, $beschreibung, $lastQry)
{
$mitarbeiterResult = $this->MitarbeiterModel->load(array('mitarbeiter_uid'=>$this->_uid));
if(!isSuccess($mitarbeiterResult) || !hasData($mitarbeiterResult))
{
$uid = DUMMY_LEKTOR_UID;
$beschreibung .= ': '.$this->_uid;
$beschreibung = mb_substr($beschreibung, 0, 64);
}
$this->LogModel->insert(array(
'mitarbeiter_uid' => $uid,
'beschreibung' => $beschreibung,
'sql' => $lastQry
));
}
}
+4 -4
View File
@@ -18,10 +18,10 @@ class Variables extends Auth_Controller
{
parent::__construct(
array(
'setVar' => 'basis/variable:rw',
'getVar' => 'basis/variable:rw',
'changeStudiensemesterVar' => 'basis/variable:rw',
'changeStudengangsTypVar' => 'basis/variable:rw'
'setVar' => array('basis/variable:rw','basis/variable_persoenlich:rw'),
'getVar' => array('basis/variable:rw','basis/variable_persoenlich:rw'),
'changeStudiensemesterVar' => array('basis/variable:rw','basis/variable_persoenlich:rw'),
'changeStudengangsTypVar' => array('basis/variable:rw','basis/variable_persoenlich:rw')
)
);
@@ -88,6 +88,12 @@ class InfoCenter extends Auth_Controller
'message' => 'Type of Document %s was updated, set to %s',
'success' => null
),
'deletedoc' => array(
'logtype' => 'Action',
'name' => 'Document deleted',
'message' => 'Document %s deleted',
'success' => null
),
);
// Name of Interessentenstatus
@@ -131,6 +137,7 @@ class InfoCenter extends Auth_Controller
'reloadZgvPruefungen' => 'infocenter:r',
'reloadMessages' => 'infocenter:r',
'reloadDoks' => 'infocenter:r',
'reloadUebersichtDoks' => 'infocenter:r',
'reloadNotizen' => array('infocenter:r', 'lehre/zgvpruefung:r'),
'reloadLogs' => 'infocenter:r',
'outputAkteContent' => array('infocenter:r', 'lehre/zgvpruefung:r'),
@@ -142,7 +149,9 @@ class InfoCenter extends Auth_Controller
'getStudienjahrEnd' => array('infocenter:r', 'lehre/zgvpruefung:r'),
'setNavigationMenuArrayJson' => 'infocenter:r',
'getAbsageData' => 'infocenter:r',
'saveAbsageForAll' => 'infocenter:rw'
'saveAbsageForAll' => 'infocenter:rw',
'deleteDoc' => 'infocenter:rw',
'getStudienartData' => 'infocenter:rw'
)
);
@@ -159,6 +168,10 @@ class InfoCenter extends Auth_Controller
$this->load->model('system/Message_model', 'MessageModel');
$this->load->model('system/Filters_model', 'FiltersModel');
$this->load->model('system/PersonLock_model', 'PersonLockModel');
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
$this->load->model('codex/Zgv_model', 'ZgvModel');
$this->load->model('codex/Zgvmaster_model', 'ZgvmasterModel');
$this->load->model('codex/Nation_model', 'NationModel');
// Loads libraries
$this->load->library('PersonLogLib');
@@ -398,6 +411,35 @@ class InfoCenter extends Auth_Controller
$this->outputJsonSuccess(array($json));
}
public function deleteDoc($person_id)
{
$akte_id = $this->input->post('akteid');
if (isset($akte_id) && isset($person_id))
{
$this->load->library('AkteLib');
$akte = $this->aktelib->get($akte_id);
if (hasData($akte))
{
$akte = getData($akte);
if ($akte->person_id === (int)$person_id)
{
$result = $this->aktelib->remove($akte_id);
if (isError($result))
{
$this->terminateWithJsonError('Error deleting document');
}
$this->_log($person_id, 'deletedoc', array($akte->bezeichnung));
$this->outputJsonSuccess('success');
}
}
}
}
/**
* Gets prestudent data for a person in json format
* @param $person_id
@@ -1074,6 +1116,17 @@ class InfoCenter extends Auth_Controller
$this->load->view('system/infocenter/dokNachzureichend.php', array('dokumente_nachgereicht' => $dokumente_nachgereicht->retval));
}
public function reloadUebersichtDoks($person_id)
{
$dokumente = $this->AkteModel->getAktenWithDokInfo($person_id, null, false);
$this->DokumentModel->addOrder('bezeichnung');
$dokumentdata = array('dokumententypen' => (getData($this->DokumentModel->load())));
$data = array_merge($dokumentdata, ['dokumente' => $dokumente->retval]);
$this->load->view('system/infocenter/dokpruefung.php', $data);
}
/**
* Outputs content of an Akte, sends appropriate headers (so the document can be downloaded)
* @param $akte_id
@@ -1932,10 +1985,25 @@ class InfoCenter extends Auth_Controller
$abwstatusgruende = $this->StatusgrundModel->getStatus(self::ABGEWIESENERSTATUS, true)->retval;
$intstatusgruende = $this->StatusgrundModel->getStatus(self::INTERESSENTSTATUS)->retval;
$studienArtBerechtigung = array_column($this->getStudienArtBerechtigung(), 'typ');
$this->ZgvModel->addOrder('zgv_bez');
$allZGVs = getData($this->ZgvModel->load());
$this->ZgvModel->addOrder('zgvmas_bez');
$allZGVsMaster = getData($this->ZgvmasterModel->load());
$this->NationModel->addOrder('langtext');
$allNations = getData($this->NationModel->load());
$data = array (
'zgvpruefungen' => $zgvpruefungen,
'abwstatusgruende' => $abwstatusgruende,
'intstatusgruende' => $intstatusgruende
'intstatusgruende' => $intstatusgruende,
'studienArtBerechtigung' => $studienArtBerechtigung,
'all_zgvs' => $allZGVs,
'all_zgvs_master' => $allZGVsMaster,
'all_nations' => $allNations,
);
return $data;
@@ -2194,18 +2262,36 @@ class InfoCenter extends Auth_Controller
public function getAbsageData()
{
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
$studiengang_kz_all = $this->permissionlib->getSTG_isEntitledFor('infocenter');
$stg_typ = $this->StudiengangModel->getStudiengangTyp($studiengang_kz_all, ['b', 'm']);
$statusgruende = $this->StatusgrundModel->getStatus(self::ABGEWIESENERSTATUS, true)->retval;
$studienSemester = $this->variablelib->getVar('infocenter_studiensemester');
$studiengaenge = $this->StudiengangModel->getStudiengaengeWithOrgForm(['b', 'm'], $studienSemester);
if (hasData($stg_typ))
{
$stg_typ = getData($stg_typ);
$statusgruende = $this->StatusgrundModel->getStatus(self::ABGEWIESENERSTATUS, true)->retval;
$studienSemester = $this->variablelib->getVar('infocenter_studiensemester');
$studiengaenge = $this->StudiengangModel->getStudiengaengeWithOrgForm(array_column($stg_typ, 'typ'), $studienSemester);
$data = array (
'statusgruende' => $statusgruende,
'studiengaenge' => $studiengaenge->retval
);
$data = array (
'statusgruende' => $statusgruende,
'studiengaenge' => $studiengaenge->retval
);
$this->outputJsonSuccess($data);
$this->outputJsonSuccess($data);
}
else
$this->outputJsonSuccess(null);
}
public function getStudienArtBerechtigung()
{
$studiengang_kz_all = $this->permissionlib->getSTG_isEntitledFor('infocenter');
$stg_typ = $this->StudiengangModel->getStudiengangTyp($studiengang_kz_all, ['b', 'm', 'l']);
return getData($stg_typ);
}
public function getStudienartData()
{
$this->outputJsonSuccess($this->getStudienArtBerechtigung());
}
public function saveAbsageForAll()
@@ -6,7 +6,7 @@ class Issues extends Auth_Controller
{
private $_uid;
const FUNKTION_KURZBZ = 'ass'; // // user having this funktion can see issues for oes assigned with this funktion
const FUNKTION_KURZBZ = 'ass'; // user having this funktion can see issues for oes assigned with this funktion
const BERECHTIGUNG_KURZBZ = 'system/issues_verwalten'; // user having this permission can see issues for oes assigned with this permission
public function __construct()
@@ -39,6 +39,7 @@ class Issues extends Auth_Controller
);
$this->_setAuthUID(); // sets property uid
$this->setControllerId(); // sets the controller id
}
public function index()
@@ -80,7 +81,7 @@ class Issues extends Auth_Controller
}
if (isEmptyString($changeIssueMethod))
$errors[] = error("Invalid issue status given");
$errors[] = "Invalid issue status given";
else
{
$issueRes = $this->issueslib->{$changeIssueMethod}($issue_id, $user);
@@ -127,7 +128,7 @@ class Issues extends Auth_Controller
{
$all_funktionen_oe_kurzbz[$benutzerfunktion->oe_kurzbz][] = $benutzerfunktion->funktion_kurzbz;
// separate oes for the funktion needed for displaying issues
// separate oes for the additional funktion which enables displaying issues
if ($benutzerfunktion->funktion_kurzbz == self::FUNKTION_KURZBZ)
{
$oe_kurzbz_for_funktion[] = $benutzerfunktion->oe_kurzbz;
@@ -153,7 +154,9 @@ class Issues extends Auth_Controller
}
// add oes for which there is the "manage issues" Berechtigung
if (!$oe_kurzbz_berechtigt = $this->permissionlib->getOE_isEntitledFor(self::BERECHTIGUNG_KURZBZ))
$oe_kurzbz_berechtigt = $this->permissionlib->getOE_isEntitledFor(self::BERECHTIGUNG_KURZBZ);
if (!$oe_kurzbz_berechtigt)
show_error('No permission or error when checking permissions');
$all_oe_kurzbz_berechtigt = array_unique(array_merge($oe_kurzbz_for_funktion, $oe_kurzbz_berechtigt));
@@ -0,0 +1,217 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
class IssuesZustaendigkeiten extends Auth_Controller
{
private $_uid;
public function __construct()
{
parent::__construct(
array(
'index' => 'admin:r',
'getApps' => 'admin:r',
'getFehlercodes' => 'admin:r',
'getNonAssignedZustaendigkeiten' => 'admin:r',
'addZustaendigkeit' => 'admin:rw',
'deleteZustaendigkeit' => 'admin:rw'
)
);
// Load libraries
$this->load->library('IssuesLib');
$this->load->library('WidgetLib');
// Load models
$this->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel');
$this->load->model('system/Fehler_model', 'FehlerModel');
$this->load->model('system/Fehler_model', 'FehlerModel');
$this->load->model('system/Fehlerzustaendigkeiten_model', 'FehlerzustaendigkeitenModel');
$this->loadPhrases(
array(
'global',
'ui',
'filter',
'lehre',
'person',
'fehlermonitoring'
)
);
$this->_setAuthUID(); // sets property uid
$this->setControllerId(); // sets the controller id
}
public function index()
{
$this->load->view("system/issues/issuesZustaendigkeiten.php");
}
/**
* Loads all Apps to which Fehler exist.
*/
public function getApps()
{
$this->FehlerModel->addDistinct();
$this->FehlerModel->addSelect('app');
$this->FehlerModel->addOrder('app');
$appRes = $this->FehlerModel->load();
$this->outputJson($appRes);
}
/**
* Gets all fehlercodes, optionally by app.
*/
public function getFehlercodes()
{
$app = $this->input->get('app');
//$this->FehlerModel->addSelect('fehlercode, fehler_kurzbz, fehlertext, fehlertyp_kurzbz');
$this->FehlerModel->addOrder('fehlercode');
$fehlerRes = isset($app) ? $this->FehlerModel->loadWhere(array('app' => $app)) : $this->FehlerModel->load();
$this->outputJson($fehlerRes);
}
/**
* Gets all Mitarbeiter, Organisationseinheiten, Funktionen not assigned to a Fehler yet.
*/
public function getNonAssignedZustaendigkeiten()
{
$fehlercode = $this->input->get('fehlercode');
$mitarbeiterRes = $this->FehlerzustaendigkeitenModel->getNonAssignedMitarbeiter($fehlercode);
if (isError($mitarbeiterRes))
{
$this->outputJsonError(getError($mitarbeiterRes));
return;
}
$this->OrganisationseinheitModel->addSelect('oe_kurzbz, bezeichnung, organisationseinheittyp_kurzbz');
$this->OrganisationseinheitModel->addOrder('organisationseinheittyp_kurzbz, bezeichnung');
$oeRes = $this->OrganisationseinheitModel->loadWhere(array('aktiv' => true));
if (isError($oeRes))
{
$this->outputJsonError(getError($oeRes));
return;
}
$oe_funktionen = array();
if (hasData($oeRes))
{
$oes = getData($oeRes);
foreach ($oes as $oe)
{
$oe->funktionen = array();
$funktionRes = $this->FehlerzustaendigkeitenModel->getNonAssignedFunktionen($fehlercode, $oe->oe_kurzbz);
if (isError($funktionRes))
{
$this->outputJsonError(getError($oeRes));
return;
}
$funktionData = getData($funktionRes);
$oe->funktionen = $funktionData;
$oe_funktionen[] = $oe;
}
}
if (isError($funktionRes))
{
$this->outputJsonError(getError($funktionRes));
return;
}
$result = array(
'mitarbeiter' => getData($mitarbeiterRes),
'oe_funktionen' => $oe_funktionen
);
$this->outputJsonSuccess($result);
}
/**
* Adds a Zuständigkeit after performing error checks.
*/
public function addZustaendigkeit()
{
$fehlercode = $this->input->post('fehlercode');
$mitarbeiter_person_id = $this->input->post('mitarbeiter_person_id');
$oe_kurzbz = $this->input->post('oe_kurzbz');
$funktion_kurzbz = $this->input->post('funktion_kurzbz');
if (isEmptyString($fehlercode))
$this->outputJsonError($this->p->t('fehlermonitoring', 'fehlercodeFehlt'));
elseif (isEmptyString($mitarbeiter_person_id) && isEmptyString($oe_kurzbz))
$this->outputJsonError($this->p->t('fehlermonitoring', 'mitarbeiterUndOeFehlt'));
elseif (!isEmptyString($mitarbeiter_person_id) && !isEmptyString($oe_kurzbz))
$this->outputJsonError($this->p->t('fehlermonitoring', 'nurOeOderMitarbeiterSetzen'));
elseif (isset($mitarbeiter_person_id) && !is_numeric($mitarbeiter_person_id))
$this->outputJsonError($this->p->t('fehlermonitoring', 'ungueltigeMitarbeiterId'));
else
{
$data = array(
'fehlercode' => $fehlercode
);
if (!isEmptyString($mitarbeiter_person_id))
$data['person_id'] = $mitarbeiter_person_id;
if (!isEmptyString($oe_kurzbz))
$data['oe_kurzbz'] = $oe_kurzbz;
if (!isEmptyString($funktion_kurzbz))
$data['funktion_kurzbz'] = $funktion_kurzbz;
$zustaendigkeitExistsRes = $this->FehlerzustaendigkeitenModel->loadWhere($data);
if (isError($zustaendigkeitExistsRes))
$this->outputJsonError(getError($zustaendigkeitExistsRes));
elseif (hasData($zustaendigkeitExistsRes))
$this->outputJsonError($this->p->t('fehlermonitoring', 'zustaendigkeitExistiert'));
else
{
$data['insertvon'] = $this->_uid;
$this->outputJson($this->FehlerzustaendigkeitenModel->insert($data));
}
}
}
/**
* Deletes a Zuständigkeit.
*/
public function deleteZustaendigkeit()
{
$fehlerzustaendigkeiten_id = $this->input->post('fehlerzustaendigkeiten_id');
// check if Id correctly passed
if (!isset($fehlerzustaendigkeiten_id) || !is_numeric($fehlerzustaendigkeiten_id))
{
$this->outputJsonError($this->p->t('fehlermonitoring', 'ungueltigeZustaendigkeitenId'));
return;
}
$this->outputJson($this->FehlerzustaendigkeitenModel->delete($fehlerzustaendigkeiten_id));
}
/**
* Retrieve the UID of the logged user and checks if it is valid
*/
private function _setAuthUID()
{
$this->_uid = getAuthUID();
if (!$this->_uid) show_error('User authentification failed');
}
}
+47 -7
View File
@@ -22,11 +22,16 @@ class DB_Model extends CI_Model
const PGSQL_BOOLEAN_FALSE = 'f';
const PGSQL_BOOLEAN_TYPE = 'bool';
const PGSQL_BOOLEAN_ARRAY_TYPE = '_bool';
const PGSQL_INT2_TYPE = 'int2';
const PGSQL_INT4_TYPE = 'int4';
const PGSQL_INT8_TYPE = 'int8';
const PGSQL_FLOAT4_TYPE = 'float4';
const PGSQL_FLOAT8_TYPE = 'float8';
protected $dbTable; // Name of the DB-Table for CI-Insert, -Update, ...
protected $pk; // Name of the PrimaryKey for DB-Update, Load, ...
protected $pk; // Name of the PrimaryKey for DB-Update, Load, ...
protected $hasSequence; // False if this table has a composite primary key that is not using a sequence
// True if this table has a primary key that uses a sequence
// True if this table has a primary key that uses a sequence
private $executedQueryMetaData;
private $executedQueryListFields;
@@ -271,11 +276,6 @@ class DB_Model extends CI_Model
/**
* Load data and convert a record into a list of data from the main table,
* and linked to every element, the data from the side tables
*
* TODO:
* - Adding support for composed primary key
* - Adding support for cascading side tables (useful?)
*
* NOTE: sub queries are not supported in the from clause
*
* @return array
@@ -598,6 +598,28 @@ class DB_Model extends CI_Model
return $val;
}
/**
* Convert PG-Int* to PHP-Integer
*/
public function pgIntPhp($val)
{
// If it is null, let it be null
if ($val == null) return $val;
return intval($val);
}
/**
* Convert PG-Float* to PHP-Float
*/
public function pgFloatPhp($val)
{
// If it is null, let it be null
if ($val == null) return $val;
return floatval($val);
}
/**
* Converts from PostgreSQL array to php array
* It also takes care about array of booleans
@@ -892,6 +914,11 @@ class DB_Model extends CI_Model
// If array type, boolean type OR a UDF
if (strpos($eqmd->type, DB_Model::PGSQL_ARRAY_TYPE) !== false
|| $eqmd->type == DB_Model::PGSQL_BOOLEAN_TYPE
|| $eqmd->type == DB_Model::PGSQL_INT2_TYPE
|| $eqmd->type == DB_Model::PGSQL_INT4_TYPE
|| $eqmd->type == DB_Model::PGSQL_INT8_TYPE
|| $eqmd->type == DB_Model::PGSQL_FLOAT4_TYPE
|| $eqmd->type == DB_Model::PGSQL_FLOAT8_TYPE
|| $this->udflib->isUDFColumn($eqmd->name, $eqmd->type))
{
// If UDFs are inside this result set
@@ -941,6 +968,19 @@ class DB_Model extends CI_Model
{
$resultElement->{$toBeConverted->name} = $this->pgBoolPhp($resultElement->{$toBeConverted->name});
}
// Integer type
elseif ($toBeConverted->type == DB_Model::PGSQL_INT2_TYPE
|| $toBeConverted->type == DB_Model::PGSQL_INT4_TYPE
|| $toBeConverted->type == DB_Model::PGSQL_INT8_TYPE)
{
$resultElement->{$toBeConverted->name} = $this->pgIntPhp($resultElement->{$toBeConverted->name});
}
// Float type
elseif ($toBeConverted->type == DB_Model::PGSQL_FLOAT4_TYPE
|| $toBeConverted->type == DB_Model::PGSQL_FLOAT8_TYPE)
{
$resultElement->{$toBeConverted->name} = $this->pgFloatPhp($resultElement->{$toBeConverted->name});
}
}
}
}
+24 -14
View File
@@ -121,7 +121,7 @@ abstract class FHC_Controller extends CI_Controller
protected function terminateWithJsonError($message)
{
header('Content-Type: application/json');
echo json_encode(error($message));
echo json_encode(error($message)); // KEEP IT!!!
exit;
}
@@ -132,31 +132,41 @@ abstract class FHC_Controller extends CI_Controller
{
$this->output->set_content_type('application/json')->set_output(json_encode($mixed));
}
/**
* To download the given file represented by the fileObj parameter.
* fileObj has the following structure:
* $fileObj->filename
* $fileObj->file
* $fileObj->name
* $fileObj->mimetype
* $fileObj->disposition
*/
protected function outputFile($fileObj)
{
if (file_exists($fileObj->file))
// If the file exists
if (isset($fileObj->file) && !isEmptyString($fileObj->file) && file_exists($fileObj->file))
{
$finfo = new finfo(FILEINFO_MIME);
header('Content-Description: File Transfer');
header('Content-Type: '. $finfo->file($fileObj->file));
header('Content-Type: '. $fileObj->mimetype);
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($fileObj->file));
if (isset($fileObj->disposition) && ($fileObj->disposition == 'inline' || $fileObj->disposition == 'attachment'))
if (isset($fileObj->disposition)
&& ($fileObj->disposition == 'inline' || $fileObj->disposition == 'attachment'))
{
header('Content-Disposition: '. $fileObj->disposition. '; filename="'. $fileObj->name. '"');
}
readfile($fileObj->file);
exit;
readfile($fileObj->file); // reads the file content to the output buffer
}
else
{
// Otherwise print an error
show_error('The provided file does not exist: '.(isset($fileObj->file) ? $fileObj->file : 'file not given'));
}
return false;
}
//------------------------------------------------------------------------------------------------------------------
+249 -60
View File
@@ -3,113 +3,238 @@
if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
*
* Model to work with the filesystem, it represents a directory
* It could be extended or could be used directly to work on the given path
*/
abstract class FS_Model extends CI_Model
class FS_Model extends CI_Model
{
protected $filepath; // Path of the file
const READ_MODE = 'r';
const READ_WRITE_MODE = 'w+';
const READ_APPEND_MODE = 'a+';
const BLOCK_SIZE = 8192;
const META_URI = 'uri';
private $_path; // Directory where this model can operate
/**
* Loads FilesystemLib and set properties
* Set properties
*/
public function __construct($filepath = null)
public function __construct($path)
{
parent::__construct();
// Load the filesystem library
$this->load->library('FilesystemLib');
$this->_path = $path;
}
$this->filepath = $filepath;
// ------------------------------------------------------------------------------------------------------------------
// Public methods
/**
* Opens a file in read mode and returns its file handle
*/
public function openRead($filename)
{
return $this->_open($filename, self::READ_MODE);
}
/**
* Read data from file system
*
* @return array
* Opens a file in read and write mode and returns its file handle
* If the file does not exist then it is created
*/
public function read($filename)
public function openReadWrite($filename)
{
// Check Class-Attributes
if (is_null($this->filepath)) return error('The given filepath in not valid', EXIT_ERROR);
// Check method parameters
if (is_null($filename)) return error('The given filename is not valid', EXIT_ERROR);
if (!is_null($data = $this->filesystemlib->read($this->filepath, $filename)))
{
return success(base64_encode($data));
}
else
{
return error('An error occurred while reading a file', EXIT_ERROR);
}
return $this->_open($filename, self::READ_WRITE_MODE);
}
/**
* Writing data to file system
*
* @param string $fileContent File content
* @return object
* Opens a file in read and append mode and returns its file handle
* If the file does not exist then it is created
*/
public function write($filename, $content)
public function openReadAppend($filename)
{
// Check Class-Attributes
if (is_null($this->filepath)) return error('The given filepath in not valid', EXIT_ERROR);
return $this->_open($filename, self::READ_APPEND_MODE);
}
// Check method parameters
if (is_null($content)) return error('The given file content is not valid', EXIT_ERROR);
if (is_null($filename)) return error('The given filename is not valid', EXIT_ERROR);
/**
* Closes a file handle
*/
public function close($fileHandle)
{
return fclose($fileHandle) === true ? success() : error('Error while closing the file handler');
}
if ($this->filesystemlib->write($this->filepath, $filename, base64_decode($content)) === true)
/**
* Reads a block of bytes from the given file
* Returns a success that contains the block
* On failure returns an error
*/
public function readBlock($fileHandle)
{
// Reads a block of bytes from the file
$block = fread($fileHandle, self::BLOCK_SIZE);
// If an error occurred
if ($block === false)
{
// Prepare the error message
$errorMsg = 'An error occurred while reading a file';
// Tries to get the file name and to concatenate it to the error message
$fileMetaData = stream_get_meta_data($fileHandle);
if (isset($fileMetaData[self::META_URI])) $errorMsg .= ': '.$fileMetaData[self::META_URI];
return error($errorMsg); // returns the error
}
return success($block); // return success if everything was fine
}
/**
* Writes/appends (depending on how the file was opened) a content into a file
* Returns a success that contains the written number of bytes
* On failure returns an error
*/
public function write($fileHandle, $content)
{
// Writes the provided content to the file
$writeResult = fwrite($fileHandle, $content);
// If an error occurred
if ($writeResult === false)
{
$errorMsg = 'An error occurred while writing a file';
// Tries to get the file name and to concatenate it to the error message
$fileMetaData = stream_get_meta_data($fileHandle);
if (isset($fileMetaData[self::META_URI])) $errorMsg .= ': '.$fileMetaData[self::META_URI];
return error($errorMsg); // returns the error
}
return success($writeResult);
}
/**
* Removes a given file
*/
public function remove($filename)
{
// Check if the property _path represents a valid directory
$checkResult = $this->_checkPath();
if (isError($checkResult)) return $checkResult; // If not then return the error
// Check filename
if (isEmptyString($filename)) return error('The given filename is not valid');
// remove file
if (unlink($this->_path.DIRECTORY_SEPARATOR.$filename) === true)
{
return success();
}
else
{
return error('An error occurred while writing a file', EXIT_ERROR);
return error('An error occurred while removing a file');
}
}
// ------------------------------------------------------------------------------------------------------------------
// Old public methods that work with the base64 encoding, not to be used!
/**
* Append data to a file
*
* @param array $data File content
* @return array
* Read data from the given file and encode its content to base64
*/
public function append($filename, $content)
public function readBase64($filename)
{
// Check Class-Attributes
if (is_null($this->filepath)) return error('The given filepath in not valid', EXIT_ERROR);
// Open the file in read mode
$openReadResult = $this->openRead($filename);
if (isError($openReadResult)) return $openReadResult; // if an error occurred then return it
// Check method parameters
if (is_null($content)) return error('The given file content is not valid', EXIT_ERROR);
if (is_null($filename)) return error('The given filename is not valid', EXIT_ERROR);
$fileContent = ''; // to store the file content
$fileHandle = getData($openReadResult); // get the file handle
if ($this->filesystemlib->append($this->filepath, $filename, base64_decode($content)) === true)
// While the end of the file is not reached and the read does not fail
while (!feof($fileHandle) && isSuccess($readBlockResult = $this->readBlock($fileHandle)))
{
return success();
}
else
{
return error('An error occurred while appending to a file', EXIT_ERROR);
// Concatenate the content of the file
$fileContent .= getData($readBlockResult);
}
// If an error occurred while reading then return it
if (isError($readBlockResult)) return $readBlockResult;
// Close the file handler
$closeResult = $this->close($fileHandle);
if (isError($closeResult)) return $closeResult; // if it fails then return the error
// If everything was fine encode the file content into base64 and return it as a success
return success(base64_encode($fileContent));
}
/**
* Writes the given content into the given file. The content is base64 encoded
*/
public function writeBase64($filename, $content)
{
// Open the file in read and write mode
$openWriteResult = $this->openReadWrite($filename);
if (isError($openWriteResult)) return $openWriteResult; // if an error occurred then return it
$fileHandle = getData($openWriteResult); // get the file handle
// Writes the given base64 encoded content into to given file
$writeResult = $this->write($fileHandle, base64_decode($content));
// If an error occurred while writing then return it
if (isError($writeResult)) return $writeResult;
// Close the file handler
$closeResult = $this->close($fileHandle);
if (isError($closeResult)) return $closeResult; // if it fails then return the error
// If everything was fine
return success();
}
/**
* Appends the given content into the given file. The content is base64 encoded
*/
public function appendBase64($filename, $content)
{
// Open the file in read and append mode
$openWriteResult = $this->openReadAppend($filename);
if (isError($openWriteResult)) return $openWriteResult; // if an error occurred then return it
$fileHandle = getData($openWriteResult); // get the file handle
// Writes the given base64 encoded content into to given file
$writeResult = $this->write($fileHandle, base64_decode($content));
// If an error occurred while writing then return it
if (isError($writeResult)) return $writeResult;
// Close the file handler
$closeResult = $this->close($fileHandle);
if (isError($closeResult)) return $closeResult; // if it fails then return the error
// If everything was fine
return success();
}
/**
* Delete data from file system
* NOTE: it does not work with the base64 encoding but it has been kept for retro compatibility
*
* @param string $id Primary Key for DELETE
* @return array
*/
public function remove($filename)
public function removeBase64($filename)
{
// Check Class-Attributes
if (is_null($this->filepath)) return error('The given filepath in not valid', EXIT_ERROR);
if (is_null($this->_path)) return error('The given _path in not valid', EXIT_ERROR);
// Check method parameters
if (is_null($filename)) return error('The given filename is not valid', EXIT_ERROR);
if ($this->filesystemlib->remove($this->filepath, $filename) === true)
if (unlink($this->_path.DIRECTORY_SEPARATOR.$filename) === true)
{
return success();
}
@@ -121,20 +246,21 @@ abstract class FS_Model extends CI_Model
/**
* Rename a file
* NOTE: it does not work with the base64 encoding but it has been kept for retro compatibility
*
* @param string $id Primary Key for DELETE
* @return array
*/
public function rename($filename, $newFilename)
public function renameBase64($filename, $newFilename)
{
// Check Class-Attributes
if (is_null($this->filepath)) return error('The given filepath in not valid', EXIT_ERROR);
if (is_null($this->_path)) return error('The given _path in not valid', EXIT_ERROR);
// Check method parameters
if (is_null($filename)) return error('The given filename is not valid', EXIT_ERROR);
if (is_null($newFilename)) return error('The given new filename is not valid', EXIT_ERROR);
if ($this->filesystemlib->rename($this->filepath, $filename, $this->filepath, $newFilename) === true)
if (rename($this->_path.DIRECTORY_SEPARATOR.$filename, $this->_path.DIRECTORY_SEPARATOR.$newFilename) === true)
{
return success();
}
@@ -143,4 +269,67 @@ abstract class FS_Model extends CI_Model
return error('An error occurred while renaming a file', EXIT_ERROR);
}
}
// ------------------------------------------------------------------------------------------------------------------
// Private methods
/**
* Checks if the given $this->_path is a valid directory
*/
private function _checkPath()
{
// If _path...
if (!isEmptyString($this->_path) // ...is a not empty string...
&& file_exists($this->_path) && is_dir($this->_path)) // ...exists on the file system and it is a directory...
{
return success(); // return a success
}
// If not a valid path return an error
return error('The given path is not valid: '.$this->_path);
}
/**
* Open a file using the provided mode
* It returns a file handle
* Or write and append if the file does not exist then creates it
*/
private function _open($filename, $mode)
{
// Check if the property _path represents a valid directory
$checkResult = $this->_checkPath();
if (isError($checkResult)) return $checkResult; // If not then return the error
// Full file path: path + filename
$fileFullPath = $this->_path.DIRECTORY_SEPARATOR.$filename;
// If needed then check if the file exists and really it is a file
if ($mode == self::READ_MODE && (!file_exists($fileFullPath) || !is_file($fileFullPath)))
{
return error('Trying to read a not existing file');
}
// If needed then check if it is possible to read from the path and the file
if ($mode == self::READ_MODE && (!is_readable($this->_path) || !is_readable($fileFullPath)))
{
return error('The given path or filename are not readable: '.$fileFullPath);
}
// If needed then check if the path and the filename are writable
if (($mode == self::READ_WRITE_MODE || $mode == self::READ_APPEND_MODE)
&& (!is_writable($this->_path) || (file_exists($fileFullPath) && !is_writable($fileFullPath))))
{
return error('The given path or filename are not writable: '.$fileFullPath);
}
// Open the file in read mode
$fileHandle = fopen($fileFullPath, $mode);
// If it was a failure the return the error
if ($fileHandle === false) return error('An error occurred while opening a file in '.$mode.' mode');
// Otherwise return the file handle
return success($fileHandle);
}
}
+268
View File
@@ -0,0 +1,268 @@
<?php
/**
* FH-Complete
*
* @package FHC-Helper
* @author FHC-Team
* @copyright Copyright (c) 2022 fhcomplete.net
* @license GPLv3
*/
if (! defined('BASEPATH')) exit('No direct script access allowed');
class AkteLib
{
const AKTE_KATEGORIE_KURZBZ = 'Akte'; // kategorie_kurzbz of dms when inserting for akte
private $_ci; // Code igniter instance
private $_who; // who added this document
/**
* Object initialization
*/
public function __construct($params = null)
{
$this->_ci =& get_instance();
// Set the the _who property
$this->_who = 'Akte system'; // default
// It is possible to set it using the who parameter
if (!isEmptyArray($params) && isset($params['who']) && !isEmptyString($params['who'])) $this->_who = $params['who'];
$this->_ci->load->model('crm/Akte_model', 'AkteModel');
$this->_ci->load->model('content/DmsFS_model', 'DmsFSModel');
$this->_ci->load->library('DmsLib');
}
/**
* Writes a new file, adds a new dms entry with given akte data,
* adds a new dms version 0 for the written file, and adds Akte if dms add was successfull
* Returns success with inserted akte id or error
*/
public function add(
$person_id, $dokument_kurzbz, $titel, $mimetype, $fileHandle, // Required parameters
$bezeichnung = null, $archiv = false, $signiert = false, $stud_selfservice = false
)
{
// add new dms entry and new dms version for the Akte, using Akte data (title, mimetype, file content as handle)
$dmsAddResult = $this->_ci->dmslib->add($titel, $mimetype, $fileHandle, self::AKTE_KATEGORIE_KURZBZ, $dokument_kurzbz, $bezeichnung);
if (isError($dmsAddResult)) return $dmsAddResult;
if (!hasData($dmsAddResult)) return error("Dms document could not be added");
$dmsAddData = getData($dmsAddResult);
// insert the Akte
return $this->_ci->AkteModel->insert(
array(
'person_id' => $person_id,
'dokument_kurzbz' => $dokument_kurzbz,
'titel' => $titel,
'mimetype' => $mimetype,
'bezeichnung' => $bezeichnung,
'erstelltam' => date('Y-m-d'),
'dms_id' => $dmsAddData->dms_id,
'archiv' => $archiv,
'signiert' => $signiert,
'stud_selfservice' => $stud_selfservice,
'insertamum' => date('Y-m-d H:i:s'),
'insertvon' => $this->_who
)
);
}
/**
* Writes a new file, adds a new dms version 0 for the written file, and updates Akte if dms version add was successfull
* Returns success with updated akte id or error
*/
public function update($akte_id, $titel, $mimetype, $fileHandle, $bezeichnung = null, $archiv = false, $signiert = false, $stud_selfservice = false)
{
// check if Akte with dms exists
$this->_ci->AkteModel->addSelect('dms_id');
$akteResult = $this->_ci->AkteModel->load($akte_id);
if (isError($akteResult)) return $akteResult;
if (!hasData($akteResult)) return error("Akte not found");
$dms_id = getData($akteResult)[0]->dms_id;
if (isEmptyString($dms_id)) return error("Akte has no dms document");
// if Akte with dms found, update the last dms version
$dmsUpdateResult = $this->_ci->dmslib->updateLastVersion($dms_id, $fileHandle, $titel, $mimetype, $bezeichnung);
if (isError($dmsUpdateResult)) return $dmsUpdateResult;
if (!hasData($dmsUpdateResult)) return error("Dms document could not be updated");
// update the Akte
return $this->_ci->AkteModel->update(
$akte_id,
array(
'titel' => $titel,
'mimetype' => $mimetype,
'bezeichnung' => $bezeichnung,
'erstelltam' => date('Y-m-d'),
'dms_id' => $dms_id,
'archiv' => $archiv,
'signiert' => $signiert,
'stud_selfservice' => $stud_selfservice,
'updateamum' => date('Y-m-d H:i:s'),
'updatevon' => $this->_who
)
);
}
/**
* Gets akte data and associated dms data by akte Id
* Returns success with akte and dms data or error
*/
public function get($akte_id)
{
// get Akte data
$this->_ci->AkteModel->addSelect('person_id, dokument_kurzbz, mimetype, erstelltam, titel, bezeichnung,
gedruckt, uid, dms_id, nachgereicht, nachgereicht_am, anmerkung,
ausstellungsnation, formal_geprueft_amum, archiv, signiert,
stud_selfservice, akzeptiertamum, insertvon, insertamum, updatevon, updateamum');
$this->_ci->AkteModel->load($akte_id);
$akteResult = $this->_ci->AkteModel->load($akte_id);
if (isError($akteResult)) return $akteResult;
if (!hasData($akteResult)) return error("Akte not found");
$resultObject = getData($akteResult)[0];
// set properties with same name in Akte and Dms table
$resultObject->akte_mimetype = $resultObject->mimetype;
// get dms data
$dmsResult = $this->_ci->dmslib->getLastVersion($resultObject->dms_id);
if (isError($dmsResult)) return $dmsResult;
// properties to retrieve from dms
$dmsProperties = array('version', 'filename', 'mimetype', 'name', 'beschreibung', 'cis_suche', 'schlagworte', DmsLib::FILE_CONTENT_PROPERTY);
// set dms properties
if (hasData($dmsResult))
{
$dmsData = getData($dmsResult);
foreach ($dmsProperties as $dmsProperty)
{
$resultObject->{$dmsProperty} = $dmsData->{$dmsProperty};
}
}
else
{
// set null if no dms result found
foreach ($dmsProperties as $dmsProperty)
{
$resultObject->{$dmsProperty} = null;
}
}
// return the object containing akte and dms data
return success($resultObject);
}
/**
* Gets Akte data and associated dms data by person Id and dokument_kurzbz
* Returns success with result array with akte and dms data or error
*/
public function getByPersonIdAndDocumentType($person_id, $dokument_kurzbz)
{
// load all Akte entries for given person and dokument_kurzbz
$this->_ci->AkteModel->addSelect('akte_id');
$akteResult = $this->_ci->AkteModel->loadWhere(
array(
'person_id' => $person_id,
'dokument_kurzbz' => $dokument_kurzbz
)
);
if (!hasData($akteResult)) return error("Akte not found");
$akteData = getData($akteResult);
$resultArr = array();
// for each found akte entry
foreach ($akteData as $akte)
{
// get dms and akte data from akte Id
$getAkteDmsResult = $this->get($akte->akte_id);
if (isError($getAkteDmsResult)) return $getAkteDmsResult;
$resultArr[] = getData($getAkteDmsResult);
}
// return all found entries
return success($resultArr);
}
/**
* Removes Akte by akte Id, removes all associated dms entries and versions, and deletes all associated files
* Returns success with removed version numbers or error
*/
public function remove($akte_id)
{
// get dms_id for akte
$this->_ci->AkteModel->addSelect('dms_id');
$akteResult = $this->_ci->AkteModel->load($akte_id);
if (isError($akteResult)) return $akteResult;
if (!hasData($akteResult)) return error("Akte not found");
$dms_id = getData($akteResult)[0]->dms_id;
$error = null;
// Start DB transaction to avoid deleting only part of the data
$this->_ci->db->trans_begin();
// delete Akte
$deleteResult = $this->_ci->AkteModel->delete($akte_id);
if (isError($deleteResult))
{
$error = $deleteResult;
}
else
{
// remove all dms entry for dms of the akte
$removeAllResult = $this->_ci->dmslib->removeAll($dms_id);
if (isError($removeAllResult))
$error = $removeAllResult;
}
// Transaction complete!
$this->_ci->db->trans_complete();
// Check if everything went ok during the transaction
if ($this->_ci->db->trans_status() === false || isset($error))
{
$this->_ci->db->trans_rollback();
// return occured error
if (isset($error))
return $error;
else
return error("Error occured when deleting, rolled back");
}
else
{
$this->_ci->db->trans_commit();
// return removed dms entry data
return $removeAllResult;
}
}
}
+121 -1
View File
@@ -80,14 +80,24 @@ class AnrechnungLib
// Get latest ZGV
$result = $this->ci->PrestudentModel->getLatestZGVBezeichnung($prestudent_id);
$latest_zgv_bezeichnung = hasData($result) ? getData($result)[0]->bezeichnung : '';
// Get Sum of berufliche and schulische ECTS
$result = $this->ci->LehrveranstaltungModel->getEctsSumSchulisch($uid, $prestudent_id, $lv->studiengang_kz);
$sumEctsSchulisch = getData($result)[0]->ectssumschulisch;
$result = $this->ci->LehrveranstaltungModel->getEctsSumBeruflich($uid);
$sumEctsBeruflich = getData($result)[0]->ectssumberuflich;
// Set the given studiensemester
$antrag_data->lv_id = $lv_id;
$antrag_data->lv_bezeichnung = $lv->bezeichnung;
$antrag_data->ects = $lv->ects;
$antrag_data->sumEctsSchulisch = $sumEctsSchulisch;
$antrag_data->sumEctsBeruflich = $sumEctsBeruflich;
$antrag_data->studiensemester_kurzbz = $studiensemester_kurzbz;
$antrag_data->vorname = $person->vorname;
$antrag_data->nachname = $person->nachname;
$antrag_data->student_uid = $uid;
$antrag_data->matrikelnr = $student->matrikelnr;
$antrag_data->studiengang_kz = $studiengang->studiengang_kz;
$antrag_data->stg_bezeichnung = $studiengang->bezeichnung;
@@ -112,6 +122,7 @@ class AnrechnungLib
$anrechnung_data = new StdClass();
$this->ci->AnrechnungModel->addJoin('lehre.tbl_anrechnung_begruendung', 'begruendung_id');
$result = $this->ci->AnrechnungModel->load($anrechnung_id);
if (isError($result))
@@ -145,6 +156,7 @@ class AnrechnungLib
$anrechnung_data->prestudent_id = '';
$anrechnung_data->lehrveranstaltung = '';
$anrechnung_data->begruendung_id = '';
$anrechnung_data->begruendung = '';
$anrechnung_data->anmerkung = '';
$anrechnung_data->dms_id = '';
$anrechnung_data->insertamum = '';
@@ -155,6 +167,7 @@ class AnrechnungLib
$anrechnung_data->status = getUserLanguage() == 'German' ? 'neu' : 'new';
$anrechnung_data->dokumentname = '';
$this->ci->AnrechnungModel->addJoin('lehre.tbl_anrechnung_begruendung', 'begruendung_id');
$result = $this->ci->AnrechnungModel->loadWhere(
array(
'lehrveranstaltung_id' => $lehrveranstaltung_id,
@@ -800,6 +813,7 @@ class AnrechnungLib
$anrechnung_data->prestudent_id = $anrechnung->prestudent_id;
$anrechnung_data->lehrveranstaltung_id = $anrechnung->lehrveranstaltung_id;
$anrechnung_data->begruendung_id = $anrechnung->begruendung_id;
$anrechnung_data->begruendung = $anrechnung->bezeichnung;
$anrechnung_data->anmerkung = $anrechnung->anmerkung_student;
$anrechnung_data->dms_id = $anrechnung->dms_id;
$anrechnung_data->insertamum = (new DateTime($anrechnung->insertamum))->format('d.m.Y');
@@ -823,4 +837,110 @@ class AnrechnungLib
return $anrechnung_data;
}
/**
* If Student is a Quereinsteiger, get ECTS Summe of all angerechnete Studiensemester.
*
* @param $prestudent_id
* @param $studiengang_kz Studiengang_kz der LV
* @return int|mixed
*/
public function getQuereinsteigerEctsSumme($prestudent_id, $studiengang_kz)
{
$sumEctsQuereinsteiger = 0;
// Check, if student is Quereinsteiger
$this->ci->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
$result = $this->ci->PrestudentstatusModel->getFirstStatus($prestudent_id, 'Student');
$prestudentFirstStudentStatus = getData($result)[0];
// If Prestudent is not a Quereinsteiger
if ($prestudentFirstStudentStatus->ausbildungssemester == 1)
{
return $sumEctsQuereinsteiger; // return 0
}
$anzahlAngerechneteStudiensemester = $prestudentFirstStudentStatus->ausbildungssemester - 1;
// If Prestudent is a Quereinsteiger
if ($prestudentFirstStudentStatus->ausbildungssemester > 1)
{
// Get the 'angerechnete Studiensemester'
$this->ci->load->model('organisations/Studiensemester_model', 'StudiensemesterModel');
$result = $this->ci->StudiensemesterModel->getPreviousFrom(
$prestudentFirstStudentStatus->studiensemester_kurzbz,
$anzahlAngerechneteStudiensemester
);
// Get ECTS Summe of each 'angerechnetes Studiensemester'
foreach (getData($result) as $studiensemester)
{
$result = $this->ci->LehrveranstaltungModel->getSumQuereinstiegsECTSProSemester(
$studiengang_kz,
$studiensemester->studiensemester_kurzbz,
$anzahlAngerechneteStudiensemester--,
$prestudentFirstStudentStatus->orgform_kurzbz
);
if (hasData($result))
{
$sumEctsQuereinsteiger = $sumEctsQuereinsteiger + getData($result)[0]->sum_ects;
}
}
}
return $sumEctsQuereinsteiger; // return sum of ects of all 'angerechnete Studiensemester'
}
/**
* Get ECTS Summe of all Anrechnungen based on schulische Kenntnisse.
*
* @param $student_uid
* @return int|mixed
*/
public function getSchulischeAnrechnungenEctsSumme($student_uid)
{
$sumEctsSchule = 0;
$result = $this->ci->LehrveranstaltungModel->getSumAngerechneteECTSByBegruendung($student_uid);
if (hasData($result))
{
foreach (getData($result) as $ects)
{
if ($ects->begruendung_id != 4)
{
$sumEctsSchule = $sumEctsSchule + $ects->sum;
}
}
}
return $sumEctsSchule;
}
/**
* Get ECTS Summe of all Anrechnungen based on berufliche Kenntnisse.
*
* @param $student_uid
* @return int
*/
public function getBeruflicheAnrechnungenEctsSumme($student_uid)
{
$sumEctsBeruflich = 0;
$result = $this->ci->LehrveranstaltungModel->getSumAngerechneteECTSByBegruendung($student_uid);
if (hasData($result))
{
foreach (getData($result) as $ects)
{
if ($ects->begruendung_id == 4)
{
$sumEctsBeruflich = $ects->sum;
}
}
}
return $sumEctsBeruflich;
}
}
+588 -147
View File
@@ -1,26 +1,483 @@
<?php
/**
* FH-Complete
*
* @package FHC-Helper
* @author FHC-Team
* @copyright Copyright (c) 2022 fhcomplete.net
* @license GPLv3
*/
if (! defined('BASEPATH')) exit('No direct script access allowed');
class DmsLib extends FHC_Controller
use \stdClass as stdClass;
class DmsLib
{
const FILE_CONTENT_PROPERTY = 'file_content';
private $UPLOAD_PATH = DMS_PATH; // temporary directory to store the upload file
const FILE_CONTENT_PROPERTY = 'file_content'; // property name for file content
private $_ci; // code igniter instance
private $_who; // who added this document
/**
* Object initialization
*/
public function __construct()
public function __construct($params = null)
{
$this->ci =& get_instance();
$this->_ci =& get_instance();
$this->ci->load->model('crm/Akte_model', 'AkteModel');
$this->ci->load->model('content/Dms_model', 'DmsModel');
$this->ci->load->model('content/DmsVersion_model', 'DmsVersionModel');
$this->ci->load->model('content/DmsFS_model', 'DmsFSModel');
// Set the the _who property
$this->_who = 'DMS system'; // default
// It is possible to set it using the who parameter
if (!isEmptyArray($params) && isset($params['who']) && !isEmptyString($params['who'])) $this->_who = $params['who'];
$this->_ci->load->model('crm/Akte_model', 'AkteModel'); // deprecated, should not be used here!
$this->_ci->load->model('content/Dms_model', 'DmsModel');
$this->_ci->load->model('content/DmsVersion_model', 'DmsVersionModel');
$this->_ci->load->model('content/DmsFS_model', 'DmsFSModel');
}
// -----------------------------------------------------------------------------------------------------------
// Public methods
/**
* Writes a new file, adds a new dms entry and a new dms version 0 for the written file
* Returns success info of added dms entry (dms_id, version, filename) or error
*/
public function add(
$name, $mimetype, $fileHandle, // Required parameters
$kategorie_kurzbz = null, $dokument_kurzbz = null, $beschreibung = null, $cis_suche = false, $schlagworte = null
)
{
// create unique filename, using original document name to detect file extension
$filename = $this->_getUniqueFilename($name);
// copy file from fileHandle to dms folder
$copyFileResult = $this->_copyFile($fileHandle, $filename);
if (isError($copyFileResult)) return $copyFileResult;
// if file written successful, insert dms
$dmsResult = $this->_ci->DmsModel->insert(
array(
'kategorie_kurzbz' => $kategorie_kurzbz,
'dokument_kurzbz' => $dokument_kurzbz
)
);
if (isError($dmsResult)) return $dmsResult;
if (hasData($dmsResult))
{
$dms_id = getData($dmsResult);
$version = 0;
// insert dms version
$dmsVersion = array(
'dms_id' => $dms_id,
'version' => $version,
'filename' => $filename,
'mimetype' => $mimetype,
'name' => $name,
'beschreibung' => $beschreibung,
'cis_suche' => $cis_suche,
'schlagworte' => $schlagworte,
'insertvon' => $this->_who,
'insertamum' => date('Y-m-d H:i:s')
);
$dmsVersionResult = $this->_ci->DmsVersionModel->insert($dmsVersion);
if (isError($dmsVersionResult)) return $dmsVersionResult;
// return dms info
$resObj = new stdClass();
$resObj->dms_id = $dms_id;
$resObj->version = $version;
$resObj->filename = $filename;
return success($resObj);
}
else
return error("error when inserting DMS");
}
/**
* Writes a new file with content of fileHandle, adds a new dms version (max version number + 1) for the written file
* Returns success with info of added dms version (version, filename) or error
*/
public function addNewVersion($dms_id, $fileHandle, $name = null, $mimetype = null, $beschreibung = null, $cis_suche = false, $schlagworte = null)
{
// get the latest version
$lastVersionResult = $this->getLastVersion($dms_id);
if (isError($lastVersionResult)) return $lastVersionResult;
if (hasData($lastVersionResult))
{
$lastVersion = getData($lastVersionResult);
$originalName = isset($name) ? $name : $lastVersion->name;
// create unique filename, using original document name to detect file extension
$filename = $this->_getUniqueFilename($originalName);
// copy file from fileHandle to dms folder
$copyFileResult = $this->_copyFile($fileHandle, $filename);
if (isError($copyFileResult)) return $copyFileResult;
// insert new version
$newVersionNumber = $lastVersion->version + 1;
// if new parameters given, use them, otherwise use parameters from last version
$newVersion = array(
'dms_id' => $dms_id,
'name' => $originalName,
'filename' => $filename,
'version' => $newVersionNumber,
'mimetype' => isset($mimetype) ? $mimetype : $lastVersion->mimetype,
'beschreibung' => isset($beschreibung) ? $beschreibung : $lastVersion->beschreibung,
'cis_suche' => isset($cis_suche) ? $cis_suche : $lastVersion->cis_suche,
'schlagworte' => isset($schlagworte) ? $schlagworte : $lastVersion->schlagworte,
'insertvon' => $this->_who,
'insertamum' => date('Y-m-d H:i:s')
);
$addVersionResult = $this->_ci->DmsVersionModel->insert($newVersion);
if (isError($addVersionResult)) return $addVersionResult;
// return dms info
$resObj = new stdClass();
$resObj->version = $newVersionNumber;
$resObj->filename = $filename;
return success($resObj);
}
else
return error("last version not found");
}
/**
* Updates the last version (max version number) of a dms entry
* Overwrites the file associated with this version with content read from fileHandle
* Returns success with info of added dms version (version, filename) or error
*/
public function updateLastVersion($dms_id, $fileHandle, $name = null, $mimetype = null, $beschreibung = null, $cis_suche = false, $schlagworte = null)
{
// get the latest version
$lastVersionResult = $this->getLastVersion($dms_id);
if (isError($lastVersionResult)) return $lastVersionResult;
if (hasData($lastVersionResult))
{
$lastVersion = getData($lastVersionResult);
$filename = $lastVersion->filename;
// update file in filesystem
$copyFileResult = $this->_copyFile($fileHandle, $filename);
if (isError($copyFileResult)) return $copyFileResult;
// if new parameters given, use them, otherwise use parameters from last version
$newVersion = array(
'name' => isset($name) ? $name : $lastVersion->name,
'filename' => $filename,
'mimetype' => isset($mimetype) ? $mimetype : $lastVersion->mimetype,
'beschreibung' => isset($beschreibung) ? $beschreibung : $lastVersion->beschreibung,
'cis_suche' => isset($cis_suche) ? $cis_suche : $lastVersion->cis_suche,
'schlagworte' => isset($schlagworte) ? $schlagworte : $lastVersion->schlagworte,
);
// update last dms version
$addVersionResult = $this->_ci->DmsVersionModel->update(
array($dms_id, $lastVersion->version),
$newVersion
);
if (isError($addVersionResult)) return $addVersionResult;
// return dms info
$resObj = new stdClass();
$resObj->version = $lastVersion->version;
$resObj->filename = $filename;
return success($resObj);
}
else
return error("last version not found");
}
/**
* Gets dms version with highest number
* Returns success with dms data and fileHandle with file content or error
*/
public function getLastVersion($dms_id)
{
// get the latest version number
$this->_ci->DmsVersionModel->addSelect('version');
$this->_ci->DmsVersionModel->addOrder('version', 'DESC');
$this->_ci->DmsVersionModel->addOrder('insertamum', 'DESC');
$this->_ci->DmsVersionModel->addLimit(1);
$lastDmsVersionResult = $this->_ci->DmsVersionModel->loadWhere(
array('dms_id' => $dms_id)
);
if (isError($lastDmsVersionResult)) return $lastDmsVersionResult;
if (hasData($lastDmsVersionResult))
{
$lastDmsVersionData = getData($lastDmsVersionResult)[0];
$lastDmsVersion = $lastDmsVersionData->version;
// call get Version with last version number
return $this->getVersion($dms_id, $lastDmsVersion);
}
else
return error("Dms last version not found");
}
/**
* Gets specified dms version
* Returns success with dms data and fileHandle with file content or error
*/
public function getVersion($dms_id, $version)
{
$this->_ci->DmsVersionModel->addSelect('dms_id, version, filename, mimetype, name, beschreibung, cis_suche, schlagworte');
$dmsVersionResult = $this->_ci->DmsVersionModel->loadWhere(
array(
'dms_id' => $dms_id,
'version' => $version
)
);
if (isError($dmsVersionResult)) return $dmsVersionResult;
if (hasData($dmsVersionResult))
{
$dmsVersion = getData($dmsVersionResult)[0];
// get file content as file pointer
$fileHandleResult = $this->_ci->DmsFSModel->openRead($dmsVersion->filename);
if (isError($fileHandleResult)) return $fileHandleResult;
if (hasData($fileHandleResult))
{
$fileHandle = getData($fileHandleResult);
$dmsVersion->{self::FILE_CONTENT_PROPERTY} = $fileHandle;
// close file pointer
$closeResult = $this->_ci->DmsFSModel->close($fileHandle);
if (isError($closeResult)) return $closeResult;
return success($dmsVersion);
}
else
return error("File could not be opened");
}
else
return error("Dms version not found");
}
/**
* Removes dms entry and all its versions, deletes all associated files
* Returns success with removed version numbers or error
*/
public function removeAll($dms_id)
{
$versionsRemoved = array();
$this->_ci->DmsVersionModel->addSelect('version, filename');
$allVersionsResult = $this->_ci->DmsVersionModel->loadWhere(array('dms_id' => $dms_id));
if (hasData($allVersionsResult))
{
$allVersionsData = getData($allVersionsResult);
$error = null;
// Start DB transaction to avoid deleting only part of the data
$this->_ci->db->trans_begin();
// remove all versions of the dms Id
foreach ($allVersionsData as $version)
{
$removeVersionResult = $this->removeVersion($dms_id, $version->version);
if (isError($removeVersionResult))
{
$error = $removeVersionResult;
break;
}
else
$versionsRemoved[] = $version; // return removed versions
}
// Transaction complete!
$this->_ci->db->trans_complete();
// Check if everything went ok during the transaction
if ($this->_ci->db->trans_status() === false || isset($error))
{
$this->_ci->db->trans_rollback();
if (isset($error))
return $error;
else
return error("Error occured when deleting, rolled back");
}
else
{
$this->_ci->db->trans_commit();
}
}
return success($versionsRemoved);
}
/**
* Removes latest version and its associated file
* Returns success with removed dms version data (dms_id, version, filename) or error
*/
public function removeLastVersion($dms_id)
{
$lastVersionNumber = 0;
// get the latest version
$lastVersionResult = $this->getLastVersion($dms_id);
if (isError($lastVersionResult)) return $lastVersionResult;
if (hasData($lastVersionResult))
{
$lastVersion = getData($lastVersionResult);
$lastVersionNumber = $lastVersion->version;
}
// call remove method for latest version
return $this->removeVersion($dms_id, $lastVersionNumber);
}
/**
* Removes latest version and its associated file
* Returns success with removed dms version data (dms_id, version, filename) or error
*/
public function removeVersion($dms_id, $version)
{
$removeVersionResultObj = new stdClass();
$removeVersionResultObj->dms_id = null;
$removeVersionResultObj->version = null;
$removeVersionResultObj->filename = null;
// load dms version and check how many versions there are
$db = new DB_Model();
$checkDeleteResult = $db->execReadOnlyQuery(
"SELECT filename,
(SELECT count(version)
FROM campus.tbl_dms_version dv_anzahl
WHERE dv_anzahl.dms_id = dv.dms_id) AS anzahl_versionen
FROM campus.tbl_dms_version dv
WHERE dms_id=?
AND version=?",
array($dms_id, $version)
);
if (isError($checkDeleteResult)) return $checkDeleteResult;
if (hasData($checkDeleteResult))
{
$checkDeleteData = getData($checkDeleteResult)[0];
// delete version
$deleteVersionResult = $this->_ci->DmsVersionModel->delete(array($dms_id, $version));
if (isError($deleteVersionResult)) return $deleteVersionResult;
$removeVersionResultObj->version = $version;
$removeVersionResultObj->filename = $checkDeleteData->filename;
// delete dms too if no versions left
if ($checkDeleteData->anzahl_versionen <= 1)
{
$deleteDmsResult = $this->_ci->DmsModel->delete($dms_id);
if (isError($deleteDmsResult)) return $deleteDmsResult;
$removeVersionResultObj->dms_id = $dms_id;
}
// delete file from file system
$removeResult = $this->_ci->DmsFSModel->remove($checkDeleteData->filename);
if (isError($removeResult)) return $removeResult;
}
return success($removeVersionResultObj);
}
// -----------------------------------------------------------------------------------------------------------
// Private methods
/**
* Copies file from sourceFileHandle to destinationFilename in DMS folder
* Returns success or error on fail
*/
private function _copyFile($sourceFileHandle, $destinationFilename)
{
// get file location from file handle
$metaData = stream_get_meta_data($sourceFileHandle);
if (isset($metaData['uri']) && !isEmptyString($metaData['uri']))
{
// if file location determined, copy file
$source = $metaData['uri'];
if (copy($source, DMS_PATH.$destinationFilename))
{
return success();
}
else
{
// error if copy returned false
return error('error occured while copying file');
}
}
else
{
// error when source location could not be determined
return error('error occured while getting source file name');
}
return success($resObj);
}
/**
* Generates unique filename, appends file extension from document name
* Returns the filename string
*/
private function _getUniqueFilename($dokname)
{
// create unique id
$uniqueFilename = uniqid();
// getting extension of file from document name
$fileExtension = pathinfo($dokname, PATHINFO_EXTENSION);
// if file extension found, append it
if (!isEmptyString($fileExtension))
$uniqueFilename .= '.'.$fileExtension;
return $uniqueFilename;
}
// -----------------------------------------------------------------------------------------------------------
// Deprecated methods, not to be used
/**
* Load a DMS Document.
* If no version is particularly given, the latest version is loaded.
@@ -33,19 +490,20 @@ class DmsLib extends FHC_Controller
{
if (is_numeric($dms_id))
{
$this->ci->DmsModel->addJoin('campus.tbl_dms_version', 'dms_id');
$this->ci->DmsModel->addOrder('version', 'DESC');
$this->ci->DmsModel->addLimit(1);
$this->_ci->DmsModel->addJoin('campus.tbl_dms_version', 'dms_id');
$this->_ci->DmsModel->addOrder('version', 'DESC');
$this->_ci->DmsModel->addLimit(1);
if (!is_numeric($version))
{
return $this->ci->DmsModel->load($dms_id);
return $this->_ci->DmsModel->load($dms_id);
}
else
{
return $this->ci->DmsModel->loadWhere(array('dms_id' => $dms_id, 'version' => $version));
return $this->_ci->DmsModel->loadWhere(array('dms_id' => $dms_id, 'version' => $version));
}
}
return error('The parameter DMS ID must be a number');
}
@@ -57,34 +515,30 @@ class DmsLib extends FHC_Controller
*/
public function read($dms_id, $version = null)
{
$result = null;
$result = error('Wrong dms_id parameter');
if (isset($dms_id))
{
$this->ci->DmsModel->addJoin('campus.tbl_dms_version', 'dms_id');
$this->ci->DmsModel->addOrder('version', 'DESC');
$this->ci->DmsModel->addLimit(1);
$this->_ci->DmsModel->addJoin('campus.tbl_dms_version', 'dms_id');
$this->_ci->DmsModel->addOrder('version', 'DESC');
$this->_ci->DmsModel->addLimit(1);
if (!isset($version))
{
$result = $this->ci->DmsModel->load($dms_id);
$result = $this->_ci->DmsModel->load($dms_id);
}
else
{
$result = $this->ci->DmsModel->loadWhere(array('dms_id' => $dms_id, 'version' => $version));
$result = $this->_ci->DmsModel->loadWhere(array('dms_id' => $dms_id, 'version' => $version));
}
}
if (hasData($result))
{
$resultFS = $this->ci->DmsFSModel->read($result->retval[0]->filename);
if (isSuccess($resultFS))
// If a dms has been found
if (hasData($result))
{
$result->retval[0]->{DmsLib::FILE_CONTENT_PROPERTY} = $resultFS->retval;
}
else
{
$result = $resultFS;
$resultFS = $this->_ci->DmsFSModel->readBase64(getData($result)[0]->filename);
if (isError($resultFS)) return $resultFS; // if an error occurred return it
$result->retval[0]->{self::FILE_CONTENT_PROPERTY} = getData($resultFS);
}
}
@@ -101,28 +555,22 @@ class DmsLib extends FHC_Controller
*/
public function getAktenAcceptedDms($person_id, $dokument_kurzbz = null, $no_file = null)
{
$result = $this->ci->AkteModel->getAktenAcceptedDms($person_id, $dokument_kurzbz);
$result = $this->_ci->AkteModel->getAktenAcceptedDms($person_id, $dokument_kurzbz);
if (hasData($result) && $no_file == null)
{
$cnt = count($result->retval);
for ($i = 0; $i < $cnt; $i++)
for ($i = 0; $i < count(getData($result)); $i++)
{
$resultFS = $this->ci->DmsFSModel->read($result->retval[$i]->filename);
if (isSuccess($resultFS))
{
$result->retval[$i]->{DmsLib::FILE_CONTENT_PROPERTY} = $resultFS->retval;
}
else
{
$result = $resultFS;
}
$resultFS = $this->_ci->DmsFSModel->readBase64(getData($result)[$i]->filename);
if (isError($resultFS)) return $resultFS; // if an error occurred return it
$result->retval[$i]->{self::FILE_CONTENT_PROPERTY} = getData($resultFS);
}
}
return $result;
}
/**
* Uploads a document and saves it to DMS
* @param $dms DMS assoc array
@@ -135,32 +583,33 @@ class DmsLib extends FHC_Controller
// Init upload configs
$this->_loadUploadLibrary($allowed_types);
if (!$this->ci->upload->do_upload($field_name))
if (!$this->_ci->upload->do_upload($field_name))
{
return error($this->ci->upload->display_errors());
return error($this->_ci->upload->display_errors());
}
$upload_data = $this->ci->upload->data(); // data about the uploaded file
$filename = $upload_data['file_name'];
$upload_data = $this->_ci->upload->data(); // data about the uploaded file
// Insert to DMS table
if (!$result = $this->ci->DmsModel->insert($this->ci->DmsModel->filterFields($dms)))
{
return error('Failed inserting to DMS');
}
$upload_data['dms_id'] = $result->retval;
$insDmsResult = $this->_ci->DmsModel->insert($this->_ci->DmsModel->filterFields($dms));
if (isError($insDmsResult)) return $insDmsResult;
$upload_data['dms_id'] = getData($insDmsResult);
// Insert DMS version
if (!$result = $this->ci->DmsVersionModel->insert(
$this->ci->DmsVersionModel->filterFields($dms, $result->retval, $filename)))
{
return error('Failed inserting DMS version');
}
$insVersionResult = $this->_ci->DmsVersionModel->insert(
$this->_ci->DmsVersionModel->filterFields(
$dms,
$upload_data['dms_id'],
$upload_data['file_name']
)
);
if (isError($insVersionResult)) return $insVersionResult;
// return result of uploaded data
return success($upload_data); // data about the uploaded file
// Return result of uploaded data
return success($upload_data);
}
/**
* Download a document.
*
@@ -171,38 +620,31 @@ class DmsLib extends FHC_Controller
*/
public function download($dms_id, $filename = null, $disposition = 'inline')
{
$result = $this->getFileInfo($dms_id);
if (isError($result))
// Retrieves info about the given dms
$fileInfoResult = $this->getFileInfo($dms_id);
if (isError($fileInfoResult)) return error(getError($fileInfoResult));
// If data have been found
if (hasData($fileInfoResult))
{
return error(getError($result));
$fileObj = getData($fileInfoResult);
// Change filename, if filename is provided
if (!isEmptyString($filename)) $fileObj->name = $filename;
// Add file disposition if disposition has a valid value
if ($disposition == 'attachment' || $disposition == 'inline')
{
$fileObj->disposition = $disposition;
}
return success($fileObj);
}
$fileObj = getData($result);
// Change filename, if filename is provided
if (is_string($filename))
{
$fileObj->name = $filename;
}
// Add file disposition
if ($disposition == 'attachment')
{
$fileObj->disposition = 'attachment';
}
else
{
$fileObj->disposition = 'inline';
}
// Output file
if(!$this->outputFile($fileObj))
{
return error('Error on file output');
}
// If no data have been found then return an empty success
return success();
}
/**
* Get file information.
*
@@ -212,28 +654,28 @@ class DmsLib extends FHC_Controller
*/
public function getFileInfo($dms_id, $version = null)
{
if (!is_numeric($dms_id))
{
return error('Wrong parameter');
}
// Load file
// Checks the dms_id parameter
if (!is_numeric($dms_id)) return error('Wrong parameter');
// Load DMS from database
$result = $this->load($dms_id, $version);
if (isError($result)) return error(getError($result));
if (isError($result))
// If data have been found
if (hasData($result))
{
return error(getError($result));
// Store file information in fileObj
$fileObj = new stdClass();
$fileObj->filename = getData($result)[0]->filename;
$fileObj->file = DMS_PATH.getData($result)[0]->filename;
$fileObj->name = DMS_PATH.getData($result)[0]->name; // original user filename
$fileObj->mimetype = getData($result)[0]->mimetype;
return success($fileObj);
}
// Store file information in fileObj
$fileObj = new StdClass();
$fileObj->filename = getData($result)[0]->filename;
$fileObj->file = DMS_PATH. getData($result)[0]->filename;
$fileObj->name = DMS_PATH. getData($result)[0]->name; // original users filename
$fileObj->mimetype = DMS_PATH. getData($result)[0]->mimetype;
return success($fileObj);
// If no data have been found return an empty success
return success();
}
/**
@@ -253,20 +695,20 @@ class DmsLib extends FHC_Controller
$result = $this->_saveFileOnInsert($dms);
if (isSuccess($result))
{
$filename = $result->retval;
$filename = getData($result);
if (isset($dms['dms_id']) && $dms['dms_id'] != '')
{
$result = $this->ci->DmsVersionModel->insert(
$this->ci->DmsVersionModel->filterFields($dms, $dms['dms_id'], $filename)
$result = $this->_ci->DmsVersionModel->insert(
$this->_ci->DmsVersionModel->filterFields($dms, $dms['dms_id'], $filename)
);
}
else
{
$result = $this->ci->DmsModel->insert($this->ci->DmsModel->filterFields($dms));
$result = $this->_ci->DmsModel->insert($this->_ci->DmsModel->filterFields($dms));
if (isSuccess($result))
{
$result = $this->ci->DmsVersionModel->insert(
$this->ci->DmsVersionModel->filterFields($dms, $result->retval, $filename)
$result = $this->_ci->DmsVersionModel->insert(
$this->_ci->DmsVersionModel->filterFields($dms, getData($result), $filename)
);
}
}
@@ -277,15 +719,15 @@ class DmsLib extends FHC_Controller
$result = $this->_saveFileOnUpdate($dms);
if (isSuccess($result))
{
$result = $this->ci->DmsModel->update($dms['dms_id'], $this->ci->DmsModel->filterFields($dms));
$result = $this->_ci->DmsModel->update($dms['dms_id'], $this->_ci->DmsModel->filterFields($dms));
if (isSuccess($result))
{
$result = $this->ci->DmsVersionModel->update(
$result = $this->_ci->DmsVersionModel->update(
array(
$dms['dms_id'],
$dms['version']
),
$this->ci->DmsVersionModel->filterFields($dms)
$this->_ci->DmsVersionModel->filterFields($dms)
);
}
}
@@ -308,56 +750,54 @@ class DmsLib extends FHC_Controller
if (is_numeric($person_id) && is_numeric($dms_id))
{
// Start DB transaction
$this->ci->db->trans_start(false);
$this->_ci->db->trans_start(false);
// Get akte_id from table tbl_akte
$result = $this->ci->AkteModel->loadWhere(array('person_id' => $person_id, 'dms_id' => $dms_id));
$result = $this->_ci->AkteModel->loadWhere(array('person_id' => $person_id, 'dms_id' => $dms_id));
if (isSuccess($result))
{
// Delete all entries in tbl_akte
$cnt = count($result->retval);
for ($i = 0; $i < $cnt; $i++)
for ($i = 0; $i < count(getData($result)); $i++)
{
$this->ci->AkteModel->delete($result->retval[$i]->akte_id);
$this->_ci->AkteModel->delete(getData($result)[$i]->akte_id);
}
// Get all filenames related to this dms
$resultFileNames = $this->ci->DmsVersionModel->loadWhere(array('dms_id' => $dms_id));
$resultFileNames = $this->_ci->DmsVersionModel->loadWhere(array('dms_id' => $dms_id));
if (isSuccess($resultFileNames))
{
// Delete from tbl_dms_version
$result = $this->ci->DmsVersionModel->delete(array('dms_id' => $dms_id));
$result = $this->_ci->DmsVersionModel->delete(array('dms_id' => $dms_id));
if (isSuccess($result))
{
// Delete from tbl_dms
$result = $this->ci->DmsModel->delete($dms_id);
$result = $this->_ci->DmsModel->delete($dms_id);
}
}
}
// Transaction complete!
$this->ci->db->trans_complete();
$this->_ci->db->trans_complete();
// Check if everything went ok during the transaction
if ($this->ci->db->trans_status() === false || isError($result))
if ($this->_ci->db->trans_status() === false || isError($result))
{
$this->ci->db->trans_rollback();
$this->_ci->db->trans_rollback();
$result = error('An error occurred while performing a delete operation', EXIT_ERROR);
}
else
{
$this->ci->db->trans_commit();
$this->_ci->db->trans_commit();
$result = success('Dms successfully removed from DB');
}
// If everything is ok
if (isSuccess($result))
{
$cnt = count($resultFileNames->retval);
// Remove all files related to this person and dms
for ($i = 0; $i < $cnt; $i++)
for ($i = 0; $i < count(getData($resultFileNames)); $i++)
{
$this->ci->DmsFSModel->remove($resultFileNames->retval[$i]->filename);
$this->_ci->DmsFSModel->removeBase64(getData($resultFileNames)[$i]->filename);
}
}
}
@@ -376,19 +816,19 @@ class DmsLib extends FHC_Controller
*/
public function getAkteContent($akte_id)
{
$akte = $this->ci->AkteModel->load($akte_id);
$akte = $this->_ci->AkteModel->load($akte_id);
if (hasData($akte))
{
if ($akte->retval[0]->inhalt != '')
if (getData($akte)[0]->inhalt != '')
{
return success(base64_decode($akte->retval[0]->inhalt));
return success(base64_decode(getData($akte)[0]->inhalt));
}
elseif ($akte->retval[0]->dms_id != '')
elseif (getData($akte)[0]->dms_id != '')
{
$dmscontent = $this->read($akte->retval[0]->dms_id);
$dmscontent = $this->read(getData($akte)[0]->dms_id);
if (isSuccess($dmscontent))
{
return success(base64_decode($dmscontent->retval[0]->file_content));
return success(base64_decode(getData($dmscontent)[0]->file_content));
}
else
{
@@ -415,10 +855,10 @@ class DmsLib extends FHC_Controller
{
$filename = uniqid().'.'.pathinfo($dms['name'], PATHINFO_EXTENSION);
$result = $this->ci->DmsFSModel->write($filename, $dms['file_content']);
$result = $this->_ci->DmsFSModel->writeBase64($filename, $dms['file_content']);
if (isSuccess($result))
{
$result->retval = $filename;
$result = success($filename);
}
return $result;
@@ -439,7 +879,7 @@ class DmsLib extends FHC_Controller
if (hasData($result))
{
$result = $this->ci->DmsFSModel->write($result->retval[0]->filename, $dms['file_content']);
$result = $this->_ci->DmsFSModel->writeBase64(getData($result)[0]->filename, $dms['file_content']);
}
}
@@ -451,12 +891,13 @@ class DmsLib extends FHC_Controller
*/
private function _loadUploadLibrary($allowed_types)
{
$config['upload_path'] = $this->UPLOAD_PATH;
$config['allowed_types'] = implode('|', $allowed_types);
$config['overwrite'] = true;
$config['file_name'] = uniqid().'.pdf';
$config = array();
$config['upload_path'] = DMS_PATH;
$config['allowed_types'] = implode('|', $allowed_types);
$config['overwrite'] = true;
$config['file_name'] = uniqid().'.pdf';
$this->ci->load->library('upload', $config);
$this->ci->upload->initialize($config);
$this->_ci->load->library('upload', $config);
$this->_ci->upload->initialize($config);
}
}
-142
View File
@@ -1,142 +0,0 @@
<?php
/***
* FH-Complete
*
* @package FHC-API
* @author FHC-Team
* @copyright Copyright (c) 2016, fhcomplete.org
* @license GPLv3
* @link http://fhcomplete.org
* @since Version 1.0
* @filesource
*/
if (!defined('BASEPATH')) exit('No direct script access allowed');
class FilesystemLib
{
/**
* checkParameters
*/
private function checkParameters($filepath, $filename)
{
if (isset($filepath) && isset($filename) &&
$filepath != '' && $filename != '')
{
return true;
}
else
{
return false;
}
}
/**
* read
*/
public function read($filepath, $filename)
{
$result = null;
if ($this->checkParameters($filepath, $filename))
{
$resource = $filepath.DIRECTORY_SEPARATOR.$filename;
if (file_exists($resource) && $fileHandle = fopen($resource, 'r'))
{
$result = '';
while (!feof($fileHandle))
{
$result .= fread($fileHandle, 8192);
}
fclose($fileHandle);
}
}
return $result;
}
/**
* write
*/
public function write($filepath, $filename, $content)
{
$result = null;
if ($this->checkParameters($filepath, $filename) && isset($content))
{
$resource = $filepath.DIRECTORY_SEPARATOR.$filename;
if (is_writable($filepath) && $fileHandle = fopen($resource, 'w'))
{
if (fwrite($fileHandle, $content) !== false)
{
$result = true;
}
fclose($fileHandle);
}
}
return $result;
}
/**
* append
*/
public function append($filepath, $filename, $content)
{
$result = null;
if ($this->checkParameters($filepath, $filename) && isset($content))
{
$resource = $filepath.DIRECTORY_SEPARATOR.$filename;
if (is_writable($resource) && $fileHandle = fopen($resource, 'a'))
{
if (fwrite($fileHandle, $content) !== false)
{
$result = true;
}
fclose($fileHandle);
}
}
return $result;
}
/**
* remove
*/
public function remove($filepath, $filename)
{
$result = null;
if ($this->checkParameters($filepath, $filename))
{
if (is_writable($filepath))
{
$resource = $filepath.DIRECTORY_SEPARATOR.$filename;
$result = unlink($resource);
}
}
return $result;
}
/**
* rename
*/
public function rename($filepath, $filename, $newFilepath, $newFilename)
{
$result = null;
if ($this->checkParameters($filepath, $filename) && $this->checkParameters($newFilepath, $newFilename))
{
$resource = $filepath.DIRECTORY_SEPARATOR.$filename;
if (is_writable($filepath) && is_writable($newFilepath) && file_exists($resource))
{
$destination = $newFilepath.DIRECTORY_SEPARATOR.$newFilename;
$result = rename($resource, $destination);
}
}
return $result;
}
}
+15 -10
View File
@@ -340,20 +340,25 @@ class FilterWidgetLib
{
$filterDefinition = $filters[$filtersCounter]; // definition of one filter
if ($filtersCounter > 0)
$where .= ' AND '; // if it's NOT the last one
if (!isEmptyString($filterDefinition->name)) // if the name of the applied filter is valid
// If the name of the applied filter is valid
if (!isEmptyString($filterDefinition->name))
{
// ...build the condition
$where .= '"'.$filterDefinition->name.'"'.$this->_getDatasetQueryCondition($filterDefinition);
// Build the query conditions
$datasetQueryCondition = $this->_getDatasetQueryCondition($filterDefinition);
// If the built condition is valid then add it to the query clause
if (!isEmptyString($datasetQueryCondition))
{
// // If this is NOT the first one
if ($filtersCounter > 0) $where .= ' AND ';
$where .= '"'.$filterDefinition->name.'"'.$datasetQueryCondition;
}
}
}
if ($where != '') // if the SQL where clause was built
{
$datasetQuery .= ' WHERE '.$where;
}
// If the SQL where clause was built
if ($where != '') $datasetQuery .= ' WHERE '.$where;
}
return $datasetQuery;
+7
View File
@@ -528,6 +528,13 @@ class Messages_model extends CI_Model
*/
public function sendReply($receiver_id, $subject, $body, $relationmessage_id, $token)
{
// Checks that the receiver_id, relationmessage_id and token belongs to the same message
$crossedDataResult = $this->MessageTokenModel->crossClientData($token, $relationmessage_id, $receiver_id);
if (isError($crossedDataResult)) show_error(getError($crossedDataResult));
if (!hasData($crossedDataResult)) show_error(
'The parameters token, relationmessage_id and receiver_id do not belong to the same message'
);
// Retrieves message sender information
$senderResult = $this->MessageTokenModel->getSenderData($receiver_id);
if (isError($senderResult)) show_error(getError($senderResult));
@@ -135,7 +135,7 @@ class Vertragvertragsstatus_model extends DB_Model
/**
* Get all contracts, where the status had been set to 'bestellt' on given date
* @param string $string_date e.g. '01.11.2019' or special Date/Time inputs like 'YESTERDAY', 'TODAY', 'NOW'
* @param string $string_date e.g. 'YYYY-MM-DD' or special Date/Time inputs like 'YESTERDAY', 'TODAY', 'NOW'
* @param bool $further_processed If true, ALL ordered contracts of that day are retrieved, even if they were
* were ALSO approved/accepted/cancelled (further processed) on that same day.
* @return array
@@ -0,0 +1,15 @@
<?php
class Gsprogramm_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'bis.tbl_gsprogramm';
$this->pk = 'gsprogramm_id';
}
}
@@ -0,0 +1,14 @@
<?php
class Mobilitaet_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'bis.tbl_mobilitaet';
$this->pk = 'mobilitaet_id';
}
}
+2 -2
View File
@@ -3,7 +3,7 @@
class Nation_model extends DB_Model
{
/**
*
*
*/
public function __construct()
{
@@ -11,4 +11,4 @@ class Nation_model extends DB_Model
$this->dbTable = 'bis.tbl_nation';
$this->pk = 'nation_code';
}
}
}
+3 -3
View File
@@ -7,7 +7,7 @@ class DmsFS_model extends FS_Model
*/
public function __construct()
{
parent::__construct();
$this->filepath = DMS_PATH;
parent::__construct(DMS_PATH);
}
}
}
@@ -0,0 +1,16 @@
<?php
/**
* Model for writing temporary files
*/
class TempFS_model extends FS_Model
{
/**
* Constructor
*/
public function __construct()
{
// default temp directory of server is used
parent::__construct(sys_get_temp_dir());
}
}
@@ -10,6 +10,7 @@ class Dokumentprestudent_model extends DB_Model
parent::__construct();
$this->dbTable = 'public.tbl_dokumentprestudent';
$this->pk = array('prestudent_id', 'dokument_kurzbz');
$this->hasSequence = false;
}
/**
+4 -3
View File
@@ -74,10 +74,11 @@ class Konto_model extends DB_Model
}
}
public function getLastStudienbeitrag($uid, $buchungstypen)
public function getStudienbeitraege($uid, $buchungstypen)
{
$query = 'SELECT konto.studiensemester_kurzbz
FROM public.tbl_konto konto,
FROM public.tbl_konto konto
JOIN public.tbl_studiensemester studiensemester ON konto.studiensemester_kurzbz = studiensemester.studiensemester_kurzbz,
public.tbl_benutzer,
public.tbl_student
WHERE tbl_benutzer.uid = \'' . $uid . '\'
@@ -91,7 +92,7 @@ class Konto_model extends DB_Model
WHERE skonto.buchungsnr = konto.buchungsnr_verweis
OR skonto.buchungsnr_verweis = konto.buchungsnr_verweis
)
ORDER BY buchungsnr DESC LIMIT 1;
ORDER BY studiensemester.start DESC;
';
return $this->execQuery($query);
+1 -1
View File
@@ -556,7 +556,7 @@ class Prestudent_model extends DB_Model
*/
public function getOrganisationunitsByPersonId($person_id)
{
$query = 'SELECT o.oe_kurzbz,
$query = 'SELECT DISTINCT o.oe_kurzbz,
o.bezeichnung,
(CASE
WHEN sg.typ = \'b\' THEN ps.prestudent_id
@@ -52,6 +52,24 @@ class Prestudentstatus_model extends DB_Model
return $this->execQuery($query, $parametersArray);
}
/**
* Liefert den Ersten Status eines Prestudenten mit der übergebenen Statuskurzbezeichnung.
*
* @param $prestudent_id
* @param $status_kurzbz
* @return array
*/
public function getFirstStatus($prestudent_id, $status_kurzbz)
{
$this->addOrder('datum, insertamum, ext_id');
$this->addLimit(1);
return $this->loadWhere(array(
'prestudent_id' => $prestudent_id,
'status_kurzbz' => $status_kurzbz
));
}
/**
* updateStufe
*/
+16
View File
@@ -66,4 +66,20 @@ class Student_model extends DB_Model
return $result->retval[0]->student_uid;
}
public function searchStudent($filter)
{
$this->addSelect('vorname, nachname, gebdatum, person.person_id, student_uid');
$this->addJoin('public.tbl_prestudent ps', 'prestudent_id');
$this->addJoin('public.tbl_person person', 'person_id');
$result = $this->loadWhere(
"lower(student_uid) like ".$this->db->escape('%'.$filter.'%')."
OR lower(person.nachname) like ".$this->db->escape('%'.$filter.'%')."
OR lower(person.vorname) like ".$this->db->escape('%'.$filter.'%')."
OR lower(person.nachname || ' ' || person.vorname) like ".$this->db->escape('%'.$filter.'%')."
OR lower(person.vorname || ' ' || person.nachname) like ".$this->db->escape('%'.$filter.'%'));
return $result;
}
}
@@ -309,4 +309,166 @@ class Lehrveranstaltung_model extends DB_Model
return $this->execQuery($query, array($uid, $studiensemester_kurzbz, $lehrveranstaltung_id));
}
/**
* Sucht nach LV Templates und gibt Id und Label ("bezeichnung [kurzbz]") aus
* Diese funktion ist für autocomplete gedacht
*
* @param string $filter Suchfilter
* @return \stdClass A return object
*/
public function loadTemplates($filter)
{
$filter = strtolower($filter);
$qry = "SELECT
tbl_lehrveranstaltung.lehrveranstaltung_id, tbl_lehrveranstaltung.bezeichnung, tbl_lehrveranstaltung.kurzbz
FROM
lehre.tbl_lehrveranstaltung
WHERE
tbl_lehrveranstaltung.lehrtyp_kurzbz = 'tpl' AND (
CAST(tbl_lehrveranstaltung.lehrveranstaltung_id AS TEXT) LIKE '%".$this->db_escape($filter)."%' OR
LOWER(tbl_lehrveranstaltung.bezeichnung) LIKE '%".$this->db_escape($filter). "%' OR
LOWER(tbl_lehrveranstaltung.kurzbz) LIKE '%".$this->db_escape($filter). "%'
)
";
return $this->execQuery($qry);
}
/**
* Lädt Template und gibt Id und Label ("bezeichnung [kurzbz]") zurück
* Diese funktion ist für autocomplete gedacht
*
* @param string $name
* @return \stdClass A return object
*/
public function loadTemplateByName($name)
{
$qry = "SELECT
tbl_lehrveranstaltung.lehrveranstaltung_id as id, CONCAT(tbl_lehrveranstaltung.bezeichnung, ' [', tbl_lehrveranstaltung.kurzbz, ']') as label
FROM
lehre.tbl_lehrveranstaltung
WHERE
tbl_lehrveranstaltung.lehrtyp_kurzbz = 'tpl' AND (
CAST(tbl_lehrveranstaltung.lehrveranstaltung_id AS TEXT) = '".($name ? $this->db_escape($name) : 0)."' OR tbl_lehrveranstaltung.bezeichnung = '".$this->db_escape($name). "' OR tbl_lehrveranstaltung.kurzbz = '".$this->db_escape($name). "'
)
";
return $this->execQuery($qry);
}
/**
* Get ECTS Summe pro angerechnetes Quereinstiegssemester.
*
* @param $studiengang_kz
* @param $studiensemester_kurzbz
* @param $ausbildungssemester
* @param $orgform_kurzbz
* @return array|stdClass|null
*/
public function getSumQuereinstiegsECTSProSemester($studiengang_kz, $studiensemester_kurzbz, $ausbildungssemester, $orgform_kurzbz)
{
$qry = '
SELECT
sum(tbl_lehrveranstaltung.ects) as "sum_ects"
FROM
lehre.tbl_studienplan
JOIN lehre.tbl_studienplan_lehrveranstaltung USING (studienplan_id)
JOIN lehre.tbl_lehrveranstaltung USING (lehrveranstaltung_id)
WHERE
tbl_studienplan.studienplan_id = (
SELECT
studienplan_id
FROM
lehre.tbl_studienordnung
JOIN lehre.tbl_studienplan USING (studienordnung_id)
JOIN lehre.tbl_studienplan_semester USING (studienplan_id)
WHERE tbl_studienordnung.studiengang_kz = ?
AND tbl_studienplan_semester.semester = ?
AND tbl_studienplan_semester.studiensemester_kurzbz = ?
AND tbl_studienplan.orgform_kurzbz = ?
LIMIT 1
)
AND tbl_studienplan_lehrveranstaltung.semester = ?
AND studienplan_lehrveranstaltung_id_parent IS NULL -- auf Modulebene
AND tbl_studienplan_lehrveranstaltung.export = TRUE
';
return $this->execQuery($qry, array(
$studiengang_kz, $ausbildungssemester, $studiensemester_kurzbz, $orgform_kurzbz, $ausbildungssemester)
);
}
/**
* Get ECTS Summe aller bisher angerechneten LVs.
* Wenn keine explizite Begruendung angegeben ist, wird eine schulische Begruendung angenommen.
*
* @param $student_uid
* @return array|stdClass|null
*/
public function getSumAngerechneteECTSByBegruendung($student_uid)
{
$qry = '
SELECT sum(ects), begruendung_id FROM (
SELECT
lehrveranstaltung_id, studiensemester_kurzbz, ects, COALESCE(begruendung_id, 1) as begruendung_id -- fallback auf externes Zeugnis
FROM
lehre.tbl_zeugnisnote
LEFT JOIN lehre.tbl_anrechnung USING(lehrveranstaltung_id, studiensemester_kurzbz)
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
JOIN public.tbl_student USING(student_uid)
WHERE
tbl_zeugnisnote.note = 6
AND student_uid = ?
AND (lehre.tbl_anrechnung.prestudent_id = tbl_student.prestudent_id
OR lehre.tbl_anrechnung.prestudent_id is null)
UNION
SELECT
lehrveranstaltung_id, studiensemester_kurzbz, ects, begruendung_id -- fallback auf externes Zeugnis
FROM
lehre.tbl_anrechnung
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
JOIN public.tbl_student USING(prestudent_id)
WHERE
genehmigt_von is not null
AND student_uid = ?
) lvsangerechnet
GROUP BY begruendung_id
';
return $this->execQuery($qry, array($student_uid, $student_uid));
}
/**
* Get ECTS Summe aller bisher schulisch begruendeten angerechneten LVs.
* Derzeit wird auch jede Anrechnung, die nicht beruflich ist, als schulisch angenommen.
*
* @param $student_uid
* @return array|stdClass|null
*/
public function getEctsSumSchulisch($student_uid, $prestudent_id, $studiengang_kz)
{
$qry = '
SELECT get_ects_summe_schulisch(?, ?, ?) AS ectsSumSchulisch
';
return $this->execQuery($qry, array($student_uid, $prestudent_id, $studiengang_kz));
}
/**
* Get ECTS Summe aller bisher beruflich angerechneten LVs.
*
* @param $student_uid
* @return array|stdClass|null
*/
public function getEctsSumBeruflich($student_uid)
{
$qry = '
SELECT get_ects_summe_beruflich(?) AS ectsSumBeruflich
';
return $this->execQuery($qry, array($student_uid));
}
}
@@ -507,4 +507,14 @@ class Studiengang_model extends DB_Model
return $this->execQuery($query, array($typ, $semester));
}
public function getStudiengangTyp($studiengang_kz, $typ)
{
$query = "SELECT DISTINCT(sgt.*)
FROM tbl_studiengangstyp sgt JOIN tbl_studiengang sg on sgt.typ = sg.typ
WHERE studiengang_kz IN ? and sgt.typ IN ?";
return $this->execQuery($query, array($studiengang_kz, $typ));
}
}
@@ -105,7 +105,7 @@ class Studiensemester_model extends DB_Model
/**
* getPreviousFrom
*/
public function getPreviousFrom($studiensemester_kurzbz)
public function getPreviousFrom($studiensemester_kurzbz, $limit = 1)
{
$query = 'SELECT studiensemester_kurzbz,
start,
@@ -117,9 +117,9 @@ class Studiensemester_model extends DB_Model
WHERE studiensemester_kurzbz = ?
)
ORDER BY start DESC
LIMIT 1';
LIMIT ?';
return $this->execQuery($query, array($studiensemester_kurzbz));
return $this->execQuery($query, array($studiensemester_kurzbz, $limit));
}
/**
+17 -7
View File
@@ -82,7 +82,7 @@ class Person_model extends DB_Model
}
else
{
$person['svnr'] = $person['svnr'] . 'v' . ($result->retval[0]->svnr{11} + 1);
$person['svnr'] = $person['svnr'] . 'v' . ($result->retval[0]->svnr[11] + 1);
}
}
}
@@ -283,8 +283,8 @@ class Person_model extends DB_Model
SELECT p2.person_id
FROM public.tbl_person p
JOIN public.tbl_person p2
ON p.vorname = p2.vorname
AND p.nachname = p2.nachname
ON lower(p.vorname) = lower(p2.vorname)
AND lower(p.nachname) = lower(p2.nachname)
AND p.gebdatum = p2.gebdatum
AND p.person_id = ?
)
@@ -310,8 +310,8 @@ class Person_model extends DB_Model
SELECT p2.person_id
FROM public.tbl_person p
JOIN public.tbl_person p2
ON p.vorname = p2.vorname
AND p.nachname = p2.nachname
ON lower(p.vorname) = lower(p2.vorname)
AND lower(p.nachname) = lower(p2.nachname)
AND p.gebdatum = p2.gebdatum
AND p.person_id = ?
)
@@ -321,8 +321,18 @@ class Person_model extends DB_Model
JOIN public.tbl_status USING(status_kurzbz)
WHERE status_kurzbz = 'Abbrecher'
)
";
return $this->execQuery($qry, array($person_id, $person_id));
UNION
SELECT p2.person_id
FROM tbl_person p1
INNER JOIN (
SELECT vorname, nachname, gebdatum, person_id
FROM tbl_person
) p2
ON (lower(p1.vorname) = lower(p2.vorname) AND lower(p1.nachname) = lower(p2.nachname) AND p1.gebdatum = p2.gebdatum)
WHERE p1.person_id != p2.person_id AND (p1.person_id = ?)";
return $this->execQuery($qry, array($person_id, $person_id, $person_id));
}
}
@@ -72,4 +72,28 @@ class Betriebsmittelperson_model extends DB_Model
return $this->loadWhere($where);
}
public function getBetriebsmittelByUid($uid, $betriebsmitteltyp = null, $isRetourniert = false)
{
$this->addJoin('wawi.tbl_betriebsmittel', 'betriebsmittel_id');
$condition = ' wawi.tbl_betriebsmittelperson.uid = '. $this->escape($uid);
if (is_string($betriebsmitteltyp))
{
$condition .= ' AND betriebsmitteltyp = ' . $this->escape($betriebsmitteltyp);
}
if ($isRetourniert === true) {
$condition .= ' AND retouram IS NOT NULL';
}
elseif ($isRetourniert === false)
{
$condition .= ' AND retouram IS NULL';
}
$this->addOrder('ausgegebenam', 'DESC');
return $this->loadWhere($condition);
}
}
@@ -43,7 +43,7 @@ class Benutzerrolle_model extends DB_Model
* @param null $oe_kurzbz
* @return array
*/
public function getBenutzerByBerechtigung($berechtigung_kurzbz, $oe_kurzbz = null)
public function getBenutzerByBerechtigung($berechtigung_kurzbz, $oe_kurzbz = null, $art = null)
{
$params = array();
$query = '
@@ -62,6 +62,12 @@ class Benutzerrolle_model extends DB_Model
$params[] = $oe_kurzbz;
}
if (!is_null($art))
{
$query .= ' AND art = ?';
$params[] = $art;
}
return $this->execQuery($query, $params);
}
}
@@ -0,0 +1,58 @@
<?php
class Fehlerzustaendigkeiten_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'system.tbl_fehler_zustaendigkeiten';
$this->pk = 'fehlerzustaendigkeiten_id';
}
/**
* Gets active Mitarbeiter not assigned to a Fehler.
* @param $fehlercode
* @return object
*/
public function getNonAssignedMitarbeiter($fehlercode)
{
$query = "SELECT person_id, ben.uid, vorname, nachname, titelpre, titelpost, personalnummer
FROM public.tbl_mitarbeiter
JOIN public.tbl_benutzer ben ON tbl_mitarbeiter.mitarbeiter_uid = ben.uid
JOIN public.tbl_person pers USING (person_id)
WHERE ben.aktiv
AND NOT EXISTS (
SELECT 1 FROM system.tbl_fehler_zustaendigkeiten
WHERE person_id = pers.person_id
AND fehlercode = ?
)
ORDER BY nachname, vorname, uid";
return $this->execReadOnlyQuery($query, array($fehlercode));
}
/**
* Gets Funktionen not assigned to a Fehler (over an organisational unit).
* @param $fehlercode
* @param $oe_kurzbz
* @return object
*/
public function getNonAssignedFunktionen($fehlercode, $oe_kurzbz)
{
$query = "SELECT funktion_kurzbz, beschreibung
FROM public.tbl_funktion funk
WHERE aktiv
AND NOT EXISTS (
SELECT 1 FROM system.tbl_fehler_zustaendigkeiten
WHERE funktion_kurzbz = funk.funktion_kurzbz
AND fehlercode = ?
AND oe_kurzbz = ?
)
ORDER BY beschreibung";
return $this->execReadOnlyQuery($query, array($fehlercode, $oe_kurzbz));
}
}
@@ -176,4 +176,20 @@ class MessageToken_model extends DB_Model
return $this->execQuery($sql, array($oe_kurzbz));
}
/**
*
*/
public function crossClientData($token, $relationmessage_id, $receiver_id)
{
$sql = 'SELECT mm.message_id
FROM public.tbl_msg_message mm
JOIN public.tbl_msg_recipient mr USING(message_id)
WHERE mr.token = ?
AND mm.message_id = ?
AND mm.person_id = ?';
return $this->execQuery($sql, array($token, $relationmessage_id, $receiver_id));
}
}
@@ -44,7 +44,8 @@ $this->load->view(
'empfehlungsanforderungWirklichZuruecknehmen',
'erfolgreichZurueckgenommen',
'empfehlungPositivConfirmed',
'empfehlungNegativConfirmed'
'empfehlungNegativConfirmed',
'anrechnungEctsTooltipTextBeiUeberschreitung'
)
),
'customCSSs' => array(
@@ -59,7 +60,6 @@ $this->load->view(
);
?>
<body>
<div id="page-wrapper">
<div class="container-fluid">
<!-- header -->
@@ -124,11 +124,27 @@ $this->load->view(
<tr>
<th class="col-xs-4"><?php echo $this->p->t('lehre', 'ects'); ?></th>
<td><?php echo $antragData->ects ?></td>
<td colspan="3"><span id="ects"><?php echo $antragData->ects ?></span></td>
</tr>
<tr>
<th class="col-xs-4">
<?php echo $this->p->t('anrechnung', 'bisherAngerechneteEcts'); ?>
<span class="approveAnrechnungDetail-anrechnungEctsTooltip"
data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungEctsTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
</th>
<td colspan="3">
Total: <span id="sumEctsTotal"><?php echo number_format($antragData->sumEctsSchulisch + $antragData->sumEctsBeruflich, 1) ?></span>
[Schulisch: <span id="sumEctsSchulisch" value="<?php echo $antragData->sumEctsSchulisch ?>"><?php echo $antragData->sumEctsSchulisch ?></span> /
Beruflich: <span id="sumEctsBeruflich" value="<?php echo $antragData->sumEctsBeruflich ?>"><?php echo $antragData->sumEctsBeruflich ?></span> ]
<span id="sumEctsMsg"></span>
</td>
</tr>
<tr>
<th class="col-xs-4"><?php echo $this->p->t('lehre', 'lektorInnen'); ?></th>
<td>
<td colspan="3">
<?php $len = count($antragData->lektoren) - 1 ?>
<?php foreach ($antragData->lektoren as $key => $lektor): ?>
<?php echo $lektor->vorname . ' ' . $lektor->nachname;
@@ -138,19 +154,23 @@ $this->load->view(
</tr>
<tr>
<th class="col-xs-4"><?php echo ucfirst($this->p->t('global', 'zgv')); ?></th>
<td><?php echo $antragData->zgv ?></td>
<td colspan="3"><?php echo $antragData->zgv ?></td>
</tr>
<tr>
<th class="col-xs-4"><?php echo $this->p->t('anrechnung', 'herkunftDerKenntnisse'); ?></th>
<td><?php echo $anrechnungData->anmerkung ?></td>
<td colspan="3"><?php echo $anrechnungData->anmerkung ?></td>
</tr>
<tr>
<th class="col-xs-4"><?php echo $this->p->t('anrechnung', 'nachweisdokumente'); ?></th>
<td>
<td colspan="3">
<a href="<?php echo current_url() . '/download?dms_id=' . $anrechnungData->dms_id; ?>"
target="_blank"><?php echo htmlentities($anrechnungData->dokumentname) ?></a>
</td>
</tr>
<tr>
<th class="col-xs-4"><?php echo $this->p->t('global', 'begruendung'); ?></th>
<td colspan="3"><span id="begruendung_id" data-begruendung_id="<?php echo $anrechnungData->begruendung_id ?>" ><?php echo $anrechnungData->begruendung ?></span></td>
</tr>
</tbody>
</table>
</div>
@@ -178,8 +198,10 @@ $this->load->view(
<div class="row">
<div class="col-lg-6">
<form id="form-empfehlung">
<input type="hidden" name="anrechnung_id"
value="<?php echo $anrechnungData->anrechnung_id ?>">
<input type="hidden" name="anrechnung_id" value="<?php echo $anrechnungData->anrechnung_id ?>">
<input type="hidden" name="ects" value="<?php echo $antragData->ects ?>">
<input type="hidden" name="sumEctsSchulisch" value="<?php echo $antragData->sumEctsSchulisch ?>">
<input type="hidden" name="sumEctsBeruflich" value="<?php echo $antragData->sumEctsBeruflich ?>">
<table class="table table-bordered table-condensed table-fixed">
<tbody>
<tr>
@@ -291,38 +313,44 @@ $this->load->view(
<div style="display: none" id="approveAnrechnungDetail-begruendung-panel">
<div>
<h4 class="panel panel-body panel-danger text-danger"><?php echo $this->p->t('anrechnung', 'genehmigungNegativQuestion'); ?></h4>
<b>&nbsp;<?php echo $this->p->t('anrechnung', 'bitteBegruendungAngeben'); ?></b><br><br>
<ul>
<li>
<ul class="list-group">
<li class="list-group-item">
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativPruefungNichtMoeglich'); ?></span>
<span class="btn-copyIntoTextarea" data-toggle="tooltip"
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
<li>
<li class="list-group-item">
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativKenntnisseNichtGleichwertig'); ?></span>
<span class="btn-copyIntoTextarea" data-toggle="tooltip"
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
<li>
<li class="list-group-item">
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativEctsHoechstgrenzeUeberschritten'); ?></span>
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
<li class="list-group-item">
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativEmpfehlungstextUebernehmen'); ?></span>
<span id="empfehlungstextUebernehmen" class="btn-copyIntoTextarea" data-toggle="tooltip"
<span id="empfehlungstextUebernehmen" class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
<li><?php echo $this->p->t('anrechnung', 'andereBegruendung'); ?></li>
</ul>
<br>
<textarea class="form-control" name="begruendung"
id="approveAnrechnungDetail-begruendung"
rows="2" required></textarea>
rows="2"
placeholder="<?php echo $this->p->t('anrechnung', 'textUebernehmenOderEigenenBegruendungstext'); ?>" required></textarea>
</div>
<br>
<!-- Action Button 'Abbrechen'-->
@@ -399,6 +427,5 @@ $this->load->view(
</div><!--end container-fluid-->
</div><!--end page-wrapper-->
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -87,7 +87,6 @@ $this->load->view(
);
?>
<body>
<div id="page-wrapper">
<div class="container-fluid">
<!-- title -->
@@ -134,28 +133,34 @@ $this->load->view(
id="approveAnrechnungUebersicht-begruendung-panel">
<div>
<h4 class="panel panel-body panel-danger text-danger"><?php echo $this->p->t('anrechnung', 'genehmigungenNegativQuestion'); ?></h4>
&nbsp;<b><?php echo $this->p->t('anrechnung', 'bitteBegruendungAngeben'); ?></b><br><br>
<ol>
<li><?php echo $this->p->t('anrechnung', 'genehmigungNegativPruefungNichtMoeglich'); ?>
<span class="btn-copyIntoTextarea" data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
</span>
</li>
<li><?php echo $this->p->t('anrechnung', 'genehmigungNegativKenntnisseNichtGleichwertig'); ?>
<span class="btn-copyIntoTextarea" data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
</span>
</li>
<li><?php echo $this->p->t('anrechnung', 'andereBegruendung'); ?></li>
</ol>
<br>
&nbsp;<b><?php echo $this->p->t('anrechnung', 'bitteBegruendungAngeben'); ?>
<span class="text-danger">
<?php echo $this->p->t('anrechnung', 'begruendungWirdFuerAlleUebernommen'); ?>
</span><br><br>
</span></b>
<br><br>
<ol class="list-group">
<li class="list-group-item"><?php echo $this->p->t('anrechnung', 'genehmigungNegativPruefungNichtMoeglich'); ?>
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
<li class="list-group-item"><?php echo $this->p->t('anrechnung', 'genehmigungNegativKenntnisseNichtGleichwertig'); ?>
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
<li class="list-group-item"><?php echo $this->p->t('anrechnung', 'genehmigungNegativEctsHoechstgrenzeUeberschritten'); ?>
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
</ol>
<textarea class="form-control" name="begruendung" id="approveAnrechnungUebersicht-begruendung"
rows="2" required></textarea>
rows="2"
placeholder="<?php echo $this->p->t('anrechnung', 'textUebernehmenOderEigenenBegruendungstext'); ?>" required></textarea>
</div>
<br>
<!-- Action Button 'Abbrechen'-->
@@ -249,6 +254,5 @@ $this->load->view(
</div>
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -16,15 +16,20 @@ $query = '
anrechnung.dms_id,
anrechnung.studiensemester_kurzbz,
stg.studiengang_kz,
stg.bezeichnung AS "stg_bezeichnung",
stg.bezeichnung AS stg_bezeichnung,
lv.orgform_kurzbz,
(SELECT ausbildungssemester
FROM public.tbl_prestudentstatus press
WHERE press.prestudent_id = anrechnung.prestudent_id
AND press.studiensemester_kurzbz = anrechnung.studiensemester_kurzbz
AND press.status_kurzbz = \'Student\'),
lv.bezeichnung AS "lv_bezeichnung",
lv.ects,
AND press.status_kurzbz = \'Student\'
ORDER BY press.datum DESC
LIMIT 1
),
lv.bezeichnung AS lv_bezeichnung,
lv.ects::numeric(4,1),
get_ects_summe_schulisch(student.student_uid, anrechnung.prestudent_id, stg.studiengang_kz) AS ectsSumSchulisch,
get_ects_summe_beruflich(student.student_uid) AS ectsSumBeruflich,
(person.nachname || \' \' || person.vorname) AS "student",
begruendung.bezeichnung AS "begruendung",
dmsversion.name AS "dokument_bezeichnung",
@@ -46,7 +51,9 @@ $query = '
WHERE anrechnung_id = anrechnung.anrechnung_id
ORDER BY insertamum DESC
LIMIT 1
) AS status_kurzbz
) AS status_kurzbz,
student.student_uid,
anrechnung.prestudent_id
FROM lehre.tbl_anrechnung AS anrechnung
JOIN public.tbl_prestudent USING (prestudent_id)
JOIN public.tbl_person AS person USING (person_id)
@@ -55,44 +62,69 @@ $query = '
LEFT JOIN campus.tbl_dms_version AS dmsversion USING (dms_id)
JOIN lehre.tbl_anrechnung_anrechnungstatus USING (anrechnung_id)
JOIN lehre.tbl_anrechnung_begruendung AS begruendung USING (begruendung_id)
JOIN public.tbl_student student USING (prestudent_id)
WHERE anrechnung.studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
AND stg.studiengang_kz IN (' . $STUDIENGAENGE_ENTITLED . ')
)
SELECT anrechnungen.*,
array_to_json(anrechnungstatus.bezeichnung_mehrsprachig::varchar[])->>' . $LANGUAGE_INDEX . ' AS "status_bezeichnung",
CASE
WHEN (anrechnungen.empfehlung_anrechnung IS NULL AND anrechnungen.status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_STGL . '\') THEN NULL
ELSE
(SELECT insertamum::date
FROM lehre.tbl_anrechnungstatus
JOIN lehre.tbl_anrechnung_anrechnungstatus USING (status_kurzbz)
WHERE anrechnung_id = anrechnungen.anrechnung_id
AND status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR . '\'
ORDER BY insertamum DESC
LIMIT 1)
END "empfehlungsanfrageAm",
CASE
WHEN (anrechnungen.empfehlung_anrechnung IS NULL AND anrechnungen.status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_STGL . '\') THEN NULL
ELSE
(SELECT COALESCE(
STRING_AGG(CONCAT_WS(\' \', vorname, nachname), \', \') FILTER (WHERE lvleiter = TRUE),
STRING_AGG(CONCAT_WS(\' \', vorname, nachname), \', \') FILTER (WHERE lvleiter = FALSE)
) empfehlungsanfrageAn
FROM (
SELECT DISTINCT ON (benutzer.uid) uid, vorname, nachname,
CASE WHEN lehrfunktion_kurzbz = \'LV-Leitung\' THEN TRUE ELSE FALSE END AS lvleiter
FROM lehre.tbl_lehreinheit
JOIN lehre.tbl_lehreinheitmitarbeiter lema USING (lehreinheit_id)
JOIN public.tbl_benutzer benutzer ON lema.mitarbeiter_uid = benutzer.uid
JOIN public.tbl_person USING (person_id)
WHERE studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
AND lehrveranstaltung_id = anrechnungen.lehrveranstaltung_id
AND lema.mitarbeiter_uid NOT like \'_Dummy%\'
AND benutzer.aktiv = TRUE
AND tbl_person.aktiv = TRUE
ORDER BY benutzer.uid, lvleiter DESC, nachname, vorname
) as tmp_lvlektoren
)
END "empfehlungsanfrageAn"
SELECT anrechnungen.anrechnung_id,
anrechnungen.lehrveranstaltung_id,
anrechnungen.begruendung_id,
anrechnungen.dms_id,
anrechnungen.studiensemester_kurzbz,
anrechnungen.studiengang_kz,
anrechnungen.stg_bezeichnung,
anrechnungen.orgform_kurzbz,
anrechnungen.ausbildungssemester,
anrechnungen.lv_bezeichnung,
anrechnungen.ects::float4 AS ects,
NULL AS "ectsSumBisherUndNeu",
anrechnungen.ectsSumSchulisch::float4 AS "ectsSumSchulisch",
anrechnungen.ectsSumBeruflich::float4 AS "ectsSumBeruflich",
anrechnungen.begruendung,
anrechnungen.student,
anrechnungen.dokument_bezeichnung,
anrechnungen.anmerkung_student,
anrechnungen.zgv,
anrechnungen.antragsdatum,
anrechnungen.empfehlung_anrechnung,
anrechnungen.status_kurzbz,
array_to_json(anrechnungstatus.bezeichnung_mehrsprachig::varchar[])->>' . $LANGUAGE_INDEX . ' AS "status_bezeichnung",
anrechnungen.prestudent_id,
CASE
WHEN (anrechnungen.empfehlung_anrechnung IS NULL AND anrechnungen.status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_STGL . '\') THEN NULL
ELSE
(SELECT insertamum::date
FROM lehre.tbl_anrechnungstatus
JOIN lehre.tbl_anrechnung_anrechnungstatus USING (status_kurzbz)
WHERE anrechnung_id = anrechnungen.anrechnung_id
AND status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR . '\'
ORDER BY insertamum DESC
LIMIT 1)
END "empfehlungsanfrageAm",
CASE
WHEN (anrechnungen.empfehlung_anrechnung IS NULL AND anrechnungen.status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_STGL . '\') THEN NULL
ELSE
(SELECT COALESCE(
STRING_AGG(CONCAT_WS(\' \', vorname, nachname), \', \') FILTER (WHERE lvleiter = TRUE),
STRING_AGG(CONCAT_WS(\' \', vorname, nachname), \', \') FILTER (WHERE lvleiter = FALSE)
) empfehlungsanfrageAn
FROM (
SELECT DISTINCT ON (benutzer.uid) uid, vorname, nachname,
CASE WHEN lehrfunktion_kurzbz = \'LV-Leitung\' THEN TRUE ELSE FALSE END AS lvleiter
FROM lehre.tbl_lehreinheit
JOIN lehre.tbl_lehreinheitmitarbeiter lema USING (lehreinheit_id)
JOIN public.tbl_benutzer benutzer ON lema.mitarbeiter_uid = benutzer.uid
JOIN public.tbl_person USING (person_id)
WHERE studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
AND lehrveranstaltung_id = anrechnungen.lehrveranstaltung_id
AND lema.mitarbeiter_uid NOT like \'_Dummy%\'
AND benutzer.aktiv = TRUE
AND tbl_person.aktiv = TRUE
ORDER BY benutzer.uid, lvleiter DESC, nachname, vorname
) as tmp_lvlektoren
)
END "empfehlungsanfrageAn"
FROM anrechnungen
JOIN lehre.tbl_anrechnungstatus as anrechnungstatus ON (anrechnungstatus.status_kurzbz = anrechnungen.status_kurzbz)
WHERE studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
@@ -115,9 +147,12 @@ $filterWidgetArray = array(
ucfirst($this->p->t('lehre', 'organisationsform')),
'Semester',
ucfirst($this->p->t('lehre', 'lehrveranstaltung')),
'ECTS',
ucfirst($this->p->t('person', 'studentIn')),
'ECTS (LV)',
'ECTS (LV + Bisher)',
'ECTS (Bisher schulisch)',
'ECTS (Bisher beruflich',
ucfirst($this->p->t('global', 'begruendung')),
ucfirst($this->p->t('person', 'studentIn')),
ucfirst($this->p->t('anrechnung', 'nachweisdokumente')),
ucfirst($this->p->t('anrechnung', 'herkunft')),
ucfirst($this->p->t('global', 'zgv')),
@@ -125,6 +160,7 @@ $filterWidgetArray = array(
ucfirst($this->p->t('anrechnung', 'empfehlung')),
'status_kurzbz',
'Status',
'PrestudentID',
ucfirst($this->p->t('anrechnung', 'empfehlungsanfrageAm')),
ucfirst($this->p->t('anrechnung', 'empfehlungsanfrageAn'))
),
@@ -152,8 +188,8 @@ $filterWidgetArray = array(
rowFormatter:function(row){
func_rowFormatter(row);
},
rowUpdated:function(row){
func_rowUpdated(row);
rowSelectionChanged:function(data, rows){
func_rowSelectionChanged(data, rows);
},
tooltips: function(cell){
return func_tooltips(cell);
@@ -171,8 +207,11 @@ $filterWidgetArray = array(
ausbildungssemester: {headerFilter:"input"},
lv_bezeichnung: {headerFilter:"input"},
ects: {headerFilter:"input", align:"center"},
ectsSumBisherUndNeu: {formatter: format_ectsSumBisherUndNeu},
ectsSumSchulisch: {visible: false, headerFilter:"input", align:"right"},
ectsSumBeruflich: {visible: false, headerFilter:"input", align:"right"},
begruendung: {headerFilter:"input", visible: true},
student: {headerFilter:"input"},
begruendung: {headerFilter:"input"},
zgv: {visible: false, headerFilter:"input"},
dokument_bezeichnung: {headerFilter:"input", formatter:"link", formatterParams:{
labelField:"dokument_bezeichnung",
@@ -184,6 +223,7 @@ $filterWidgetArray = array(
empfehlung_anrechnung: {headerFilter:"input", align:"center", formatter: format_empfehlung_anrechnung, headerFilterFunc: hf_filterTrueFalse},
status_kurzbz: {visible: false, headerFilter:"input"},
status_bezeichnung: {headerFilter:"input"},
prestudent_id: {visible: false, headerFilter:"input"},
empfehlungsanfrageAm: {visible: false, align:"center", headerFilter:"input", mutator: mut_formatStringDate},
empfehlungsanfrageAn: {visible: false, headerFilter:"input"}
}', // col properties
@@ -191,4 +231,4 @@ $filterWidgetArray = array(
echo $this->widgetlib->widget('TableWidget', $filterWidgetArray);
?>
?>
@@ -38,7 +38,6 @@ $this->load->view(
);
?>
<body>
<div id="page-wrapper">
<div class="container-fluid">
@@ -170,4 +169,5 @@ $this->load->view(
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -31,7 +31,9 @@ $this->load->view(
),
'anrechnung' => array(
'deadlineUeberschritten',
'benotungDerLV'
'benotungDerLV',
'anrechnungEctsTextBeiUeberschreitung',
'anrechnungEctsTooltipTextBeiUeberschreitung'
),
'person' => array(
'student',
@@ -60,7 +62,6 @@ $this->load->view(
}
</style>
<body>
<div id="page-wrapper">
<div class="container-fluid">
<!-- header -->
@@ -80,9 +81,13 @@ $this->load->view(
<div class="row">
<div class="col-lg-12">
<form id="requestAnrechnung-form">
<input type="hidden" name="anrechnung_id" id="anrechnung_id" value="<?php echo $anrechnungData->anrechnung_id ?>">
<input type="hidden" name="lv_id" value="<?php echo $antragData->lv_id ?>">
<input type="hidden" name="studiensemester" value="<?php echo $antragData->studiensemester_kurzbz ?>">
<!-- Antragsdaten -->
<input type="hidden" name="ects" value="<?php echo $antragData->ects ?>">
<input type="hidden" name="sumEctsSchulisch" value="<?php echo $antragData->sumEctsSchulisch ?>">
<input type="hidden" name="sumEctsBeruflich" value="<?php echo $antragData->sumEctsBeruflich ?>">
<!-- Antragsdaten -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
@@ -119,8 +124,23 @@ $this->load->view(
</tr>
<tr>
<th><?php echo $this->p->t('lehre', 'ects'); ?></th>
<td><?php echo $antragData->ects ?></td>
<td><span id="ects"><?php echo number_format($antragData->ects, 1) ?> ECTS</span></td>
</tr>
<tr>
<th>
<?php echo $this->p->t('anrechnung', 'bisherAngerechneteEcts'); ?>
<span data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungEctsTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
</th>
<td colspan="3">
Total ECTS: <span id="sumEctsTotal"><?php echo number_format($antragData->sumEctsSchulisch + $antragData->sumEctsBeruflich, 1) ?></span>
[ Schulisch: <span id="sumEctsSchulisch"><?php echo $antragData->sumEctsSchulisch ?></span> |
Beruflich: <span id="sumEctsBeruflich"><?php echo $antragData->sumEctsBeruflich ?></span> ]
<span id="requestAnrechnung-maxEctsUeberschrittenMsg"></span>
</td>
</tr>
<tr>
<th><?php echo ucfirst($this->p->t('lehre', 'lektorInnen')); ?></th>
<td>
@@ -152,6 +172,17 @@ $this->load->view(
</span>
</label>
</div>
<div class="checkbox">
<label>
<input type="radio" name="begruendung" value="5" required
<?php echo $anrechnungData->begruendung_id == '5' ? 'checked' : ''; ?> />
<?php echo $this->p->t('anrechnung', 'antragStellenWegenHochschulzeugnis'); ?>&emsp;
<span id="requestAnrechnung-anrechnungGrundHochschulzeugnisTooltip" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungGrundZeugnisTooltipText'); ?>" />
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
</label>
</div>
<div class="checkbox">
<label>
<input type="radio" name="begruendung" value="4" required
@@ -180,7 +211,7 @@ $this->load->view(
<div class="form-inline panel-body">
<div class="form-group">
<input type="file" id="requestAnrechnung-uploadfile"
name="uploadfile" accept=".pdf" size="50" data-maxsize="<?php echo (int)ini_get('upload_max_filesize') * 1024 ?>"
name="uploadfile" accept=".pdf" size="50" data-maxsize="<?php echo (int)ini_get('upload_max_filesize') * 1024 * 1024 ?>"
required>
</div>
<span id="requestAnrechnung-uploadTooltip" data-toggle="tooltip" data-placement="right"
@@ -261,6 +292,5 @@ $this->load->view(
</div>
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -52,7 +52,6 @@ $this->load->view(
);
?>
<body>
<div id="page-wrapper">
<div class="container-fluid">
<!-- title -->
@@ -225,31 +224,29 @@ $this->load->view(
<div class="panel panel-default panel-body" style="display: none" id="reviewAnrechnungDetail-begruendung-panel">
<div>
<h4 class="panel panel-body panel-danger text-danger"><?php echo $this->p->t('anrechnung', 'empfehlungNegativQuestion'); ?></h4>
&ensp;
<b>&ensp;<?php echo $this->p->t('anrechnung', 'bitteBegruendungAngeben'); ?></b><br><br>
<ul>
<li>
<ul class="list-group">
<li class="list-group-item">
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativPruefungNichtMoeglich'); ?></span>&emsp;
<span class="btn-copyIntoTextarea" data-toggle="tooltip"
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
<li>
<li class="list-group-item">
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativKenntnisseNichtGleichwertig'); ?></span>&emsp;
<span class="btn-copyIntoTextarea" data-toggle="tooltip"
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
<li><?php echo $this->p->t('anrechnung', 'andereBegruendung'); ?></li>
</ul>
<br>
<textarea class="form-control" name="begruendung"
id="reviewAnrechnungDetail-begruendung"
rows="2" required></textarea>
rows="2"
placeholder="<?php echo $this->p->t('anrechnung', 'textUebernehmenOderEigenenBegruendungstext'); ?>"
required></textarea>
</div>
<br>
<!-- Button Abbrechen & Bestaetigen-->
@@ -318,6 +315,5 @@ $this->load->view(
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -80,7 +80,6 @@ $this->load->view(
);
?>
<body>
<div id="page-wrapper">
<div class="container-fluid">
<!-- title -->
@@ -127,30 +126,31 @@ $this->load->view(
id="reviewAnrechnungUebersicht-begruendung-panel">
<div>
<h4 class="panel panel-body panel-danger text-danger"><?php echo $this->p->t('anrechnung', 'empfehlungenNegativQuestion'); ?></h4>
<b>&ensp;<?php echo $this->p->t('anrechnung', 'bitteBegruendungAngeben'); ?></b><br><br>
<ul>
<li>
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativPruefungNichtMoeglich'); ?></span>
<span class="btn-copyIntoTextarea" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
</span>
</li>
<li>
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativKenntnisseNichtGleichwertig'); ?></span>
<span class="btn-copyIntoTextarea" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
</span>
</li>
<li><?php echo $this->p->t('anrechnung', 'andereBegruendung'); ?></li>
</ul>
<br>
<span class="text-danger">
<b><span>&ensp;<?php echo $this->p->t('anrechnung', 'bitteBegruendungAngeben'); ?></span>
<span class="text-danger">
<?php echo $this->p->t('anrechnung', 'begruendungWirdFuerAlleUebernommen'); ?>
</span><br><br>
</span></b>
<br><br>
<ul class="list-group">
<li class="list-group-item">
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativPruefungNichtMoeglich'); ?></span>
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
<li class="list-group-item">
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativKenntnisseNichtGleichwertig'); ?></span>
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
</ul>
<textarea class="form-control" name="begruendung" id="reviewAnrechnungUebersicht-begruendung"
rows="2" required></textarea>
rows="2"
placeholder="<?php echo $this->p->t('anrechnung', 'textUebernehmenOderEigenenBegruendungstext'); ?>"
required></textarea>
</div>
<br>
<!-- Action Button Abbrechen & Bestaetigen-->
@@ -235,7 +235,6 @@ $this->load->view(
</div>
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -0,0 +1,75 @@
<?php
$this->load->view(
'templates/FHC-Header',
array(
'title' => 'Benutzer in Gruppe',
'jquery' => true,
'jqueryui' => true,
'bootstrap' => true,
'fontawesome' => true,
'sbadmintemplate' => true,
'tablesorter' => true,
'ajaxlib' => true,
'dialoglib' => true,
'navigationwidget' => true,
'phrases' => array(
'gruppenmanagement',
'ui'
),
'customCSSs' => 'public/css/sbadmin2/tablesort_bootstrap.css',
'customJSs' => array('public/js/bootstrapper.js', 'public/js/tablesort/tablesort.js', 'public/js/person/benutzergruppe.js')
)
);
?>
<body>
<div id="wrapper">
<?php echo $this->widgetlib->widget('NavigationWidget'); ?>
<div id="page-wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<h3 class="page-header">
<?php echo ucfirst($this->p->t('gruppenmanagement', 'benutzergruppe')).' '.$gruppe_kurzbz ?>
</h3>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="form-inline">
<div class="input-group" id="absgstatusgrselect_137998">
<input type="text" class="form-control" name="teilnehmerSelect" id="teilnehmerSelect">
<input type="hidden" name="teilnehmer_uid" id="teilnehmer_uid">
<input type="hidden" name="gruppe_kurzbz" id="gruppe_kurzbz" value="<?php echo $gruppe_kurzbz ?>">
<span class="input-group-btn">
<button type="button" class="btn btn-default" id="teilnehmerHinzufuegen">
<?php echo $this->p->t('gruppenmanagement', 'benutzerHinzufuegen') ?>
</button>
</span>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<table class="table table-bordered table-condensed table-responsive" id="benutzer-table">
<thead>
<th>Uid</th>
<th><?php echo ucfirst($this->p->t('person', 'vorname')); ?></th>
<th><?php echo ucfirst($this->p->t('person', 'nachname')); ?></th>
<th><?php echo ucfirst($this->p->t('gruppenmanagement', 'aktiv')); ?></th>
<th><?php echo ucfirst($this->p->t('ui', 'entfernen')); ?></th>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -0,0 +1,46 @@
<?php
$this->load->view(
'templates/FHC-Header',
array(
'title' => 'Gruppenmanagement',
'jquery' => true,
'jqueryui' => true,
'bootstrap' => true,
'fontawesome' => true,
'sbadmintemplate' => true,
'tablesorter' => true,
'ajaxlib' => true,
'filterwidget' => true,
'navigationwidget' => true,
'phrases' => array(
'ui'
),
'customCSSs' => 'public/css/sbadmin2/tablesort_bootstrap.css',
'customJSs' => array('public/js/bootstrapper.js')
)
);
?>
<body>
<div id="wrapper">
<?php echo $this->widgetlib->widget('NavigationWidget'); ?>
<div id="page-wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<h3 class="page-header">
<?php echo ucfirst($this->p->t('gruppenmanagement', 'gruppenmanagement')); ?>
</h3>
</div>
</div>
<div>
<?php $this->load->view('person/gruppenmanagement/gruppenmanagementData.php'); ?>
</div>
</div>
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -0,0 +1,66 @@
<?php
$filterWidgetArray = array(
'query' => '
SELECT gruppe_kurzbz, grp.bezeichnung AS gruppe_bezeichnung, grp.beschreibung AS gruppe_beschreibung,
studiengang_kz, UPPER(stg.typ||stg.kurzbz) AS studiengang_kurzbz, semester, sichtbar, lehre, grp.aktiv, mailgrp, generiert
FROM public.tbl_gruppe grp
JOIN public.tbl_studiengang stg USING (studiengang_kz)
JOIN public.tbl_gruppe_manager grpmgr USING (gruppe_kurzbz)
WHERE grp.aktiv = TRUE
AND grpmgr.uid = \''.$uid.'\'',
'requiredPermissions' => 'lehre/gruppenmanager',
'datasetRepresentation' => 'tablesorter',
'additionalColumns' => array('Teilnehmer'),
'columnsAliases' => array(
ucfirst($this->p->t('gruppenmanagement', 'kurzbezeichnung')),
ucfirst($this->p->t('gruppenmanagement', 'bezeichnung')),
ucfirst($this->p->t('gruppenmanagement', 'beschreibung')),
ucfirst($this->p->t('lehre', 'studiengangskennzahlLehre')),
ucfirst($this->p->t('lehre', 'studiengang')),
ucfirst($this->p->t('lehre', 'semester')),
'Sichtbar',
'Lehre',
'Aktiv',
'Mailgrp',
'Generiert'
),
'formatRow' => function($datasetRaw) {
/* NOTE: Dont use $this here for PHP Version compatibility */
$datasetRaw->{'Teilnehmer'} = sprintf(
'<a href="%s?gruppe_kurzbz=%s&origin_page=%s&fhc_controller_id=%s">'.$this->p->t('gruppenmanagement', 'zuweisenloeschen').'</a>',
site_url('person/Gruppenmanagement/showBenutzergruppe'),
$datasetRaw->{'gruppe_kurzbz'},
'index',
(isset($_GET['fhc_controller_id'])?$_GET['fhc_controller_id']:'')
);
if ($datasetRaw->{'gruppe_bezeichnung'} == null)
{
$datasetRaw->{'gruppe_bezeichnung'} = '-';
}
if ($datasetRaw->{'gruppe_beschreibung'} == null)
{
$datasetRaw->{'gruppe_beschreibung'} = '-';
}
if ($datasetRaw->{'semester'} == null)
{
$datasetRaw->{'semester'} = '-';
}
$datasetRaw->{'sichtbar'} = $datasetRaw->{'sichtbar'} == 'true' ? 'ja' : 'nein';
$datasetRaw->{'lehre'} = $datasetRaw->{'lehre'} == 'true' ? 'ja' : 'nein';
$datasetRaw->{'aktiv'} = $datasetRaw->{'aktiv'} == 'true' ? 'ja' : 'nein';
$datasetRaw->{'mailgrp'} = $datasetRaw->{'mailgrp'} == 'true' ? 'ja' : 'nein';
$datasetRaw->{'generiert'} = $datasetRaw->{'generiert'} == 'true' ? 'ja' : 'nein';
return $datasetRaw;
}
);
$filterWidgetArray['app'] = 'core';
$filterWidgetArray['datasetName'] = 'gruppenmanagement';
$filterWidgetArray['filterKurzbz'] = 'gruppenmanagement';
$filterWidgetArray['filter_id'] = $this->input->get('filter_id');
echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray);
?>
@@ -1,10 +1,11 @@
<div class="table-responsive">
<table id="doctable" class="table table-bordered">
<div class="table-responsive" id="uebersichtDoks">
<table id="doctable" class="table table-bordered table-condensed tablesorter tablesorter-default">
<thead>
<tr>
<th><?php echo ucfirst($this->p->t('global','name')) ?></th>
<th><?php echo ucfirst($this->p->t('global','typ')) ?></th>
<th><?php echo ucfirst($this->p->t('global','uploaddatum')) ?></th>
<th><?php echo ucfirst($this->p->t('ui','loeschen')) ?></th>
<th><?php echo ucfirst($this->p->t('infocenter','ausstellungsnation')) ?></th>
<?php
if (!isset($formalReadonly))
@@ -22,7 +23,7 @@
<a href="outputAkteContent/<?php echo $dokument->akte_id ?>"><?php echo isEmptyString($dokument->titel) ? $dokument->bezeichnung : $dokument->titel ?></a>
</td>
<td>
<select class="aktenid" id="aktenid_<?php echo $dokument->akte_id?>" <?php echo (isset($formalReadonly) ? 'disabled' : '') ?> autocomplete="off">
<select class="form-control aktenid" id="aktenid_<?php echo $dokument->akte_id?>" <?php echo (isset($formalReadonly) ? 'disabled' : '') ?> autocomplete="off">
<?php
foreach($dokumententypen as $dokumenttyp)
echo "<option " . ($dokumenttyp->bezeichnung === $dokument->dokument_bezeichnung ? 'selected' : '') . " value = " . $dokumenttyp->dokument_kurzbz . ">" . $dokumenttyp->bezeichnung . "</option>"
@@ -30,7 +31,7 @@
</select>
<div class="row">
<button class="nachreichungInfos hidden" id="nachreichungInfos_<?php echo $dokument->akte_id?>"><?php echo ucfirst($this->p->t('infocenter','dokumentWirdNachgereicht')) ?></button>
<button class="nachreichungInfos hidden btn btn-default" id="nachreichungInfos_<?php echo $dokument->akte_id?>"><?php echo ucfirst($this->p->t('infocenter','dokumentWirdNachgereicht')) ?></button>
</div>
<div class="nachreichungInputs hidden" id="nachreichungInputs_<?php echo $dokument->akte_id?>">
@@ -49,7 +50,7 @@
<div class="row">
<div class="col-sm-12">
<div class="btn-group pull-right">
<input type="button" value="OK" class="btn btn-primary nachreichungSpeichern" id="nachreichungSpeichern_<?php echo $dokument->akte_id?>">
<input type="button" value="OK" class="btn btn-primary nachreichungSpeichern btn-default" id="nachreichungSpeichern_<?php echo $dokument->akte_id?>">
<input type="button" value="Abbrechen" class="btn btn-default nachreichungAbbrechen" id="nachreichungAbbrechen_<?php echo $dokument->akte_id?>">
</div>
</div>
@@ -60,6 +61,7 @@
</td>
<td><?php echo date_format(date_create($dokument->erstelltam), 'd.m.Y') ?></td>
<td><input type="button" value="<?php echo ucfirst($this->p->t('ui','loeschen')); ?>" class="btn btn-default dokLoeschen" id="dokLoeschen_<?php echo $dokument->akte_id?>" <?php echo (isset($formalReadonly) ? 'disabled' : '') ?>></td>
<td><?php echo $dokument->langtext ?></td>
<?php
if (!isset($formalReadonly)) :
@@ -15,6 +15,7 @@
$AKTE_TYP = '\'identity\', \'zgv_bakk\'';
$STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\'';
$ORG_NAME = '\'InfoCenter\'';
$ONLINE = '\'online\'';
$query = '
SELECT
@@ -55,10 +56,13 @@
a.dokument_kurzbz in ('.$AKTE_TYP.')
) AS "AnzahlAkte",
(
SELECT CASE WHEN sp.nachname IS NULL THEN l.insertvon ELSE sp.nachname END
SELECT CASE WHEN student.student_uid IS NULL THEN
(CASE WHEN sp.nachname IS NULL THEN l.insertvon ELSE sp.nachname END)
ELSE '. $ONLINE .' END
FROM system.tbl_log l
LEFT JOIN public.tbl_benutzer on l.insertvon = tbl_benutzer.uid
LEFT JOIN public.tbl_person sp on tbl_benutzer.person_id = sp.person_id
LEFT JOIN public.tbl_student student ON tbl_benutzer.uid = student.student_uid
WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.')
AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.')
AND l.person_id = p.person_id
@@ -254,6 +258,22 @@
ORDER BY ps.zgvmanation DESC NULLS LAST, ps.prestudent_id DESC
LIMIT 1
) AS "ZGVMNation",
(
SELECT upper(tbl_nation.nationengruppe_kurzbz)
FROM public.tbl_prestudent ps
JOIN bis.tbl_nation ON ps.zgvnation = tbl_nation.nation_code
WHERE ps.person_id = p.person_id
ORDER BY ps.zgvnation DESC NULLS LAST, ps.prestudent_id DESC
LIMIT 1
) AS "ZGVNationGruppe",
(
SELECT upper(tbl_nation.nationengruppe_kurzbz)
FROM public.tbl_prestudent ps
JOIN bis.tbl_nation ON ps.zgvmanation = tbl_nation.nation_code
WHERE ps.person_id = p.person_id
ORDER BY ps.zgvmanation DESC NULLS LAST, ps.prestudent_id DESC
LIMIT 1
) AS "ZGVMNationGruppe",
(
SELECT tbl_organisationseinheit.bezeichnung
FROM public.tbl_benutzerfunktion
@@ -361,6 +381,8 @@
ucfirst($this->p->t('lehre', 'studiengang')).' ('.$this->p->t('global', 'aktiv').')',
'ZGV Nation BA',
'ZGV Nation MA',
'ZGV Gruppe BA',
'ZGV Gruppe MA',
'InfoCenter Mitarbeiter'
),
'formatRow' => function($datasetRaw) {
@@ -452,6 +474,16 @@
$datasetRaw->{'ZGVMNation'} = '-';
}
if ($datasetRaw->{'ZGVNationGruppe'} == null)
{
$datasetRaw->{'ZGVNationGruppe'} = '-';
}
if ($datasetRaw->{'ZGVMNationGruppe'} == null)
{
$datasetRaw->{'ZGVMNationGruppe'} = '-';
}
if ($datasetRaw->{'InfoCenterMitarbeiter'} === null)
{
$datasetRaw->{'InfoCenterMitarbeiter'} = 'Nein';
@@ -12,6 +12,7 @@
$STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\'';
$ORG_NAME = '\'InfoCenter\'';
$IDENTITY = '\'identity\'';
$ONLINE = '\'online\'';
$query = '
SELECT
@@ -42,10 +43,13 @@ $query = '
LIMIT 1
) AS "LastActionType",
(
SELECT CASE WHEN sp.nachname IS NULL THEN l.insertvon ELSE sp.nachname END
SELECT CASE WHEN student.student_uid IS NULL THEN
(CASE WHEN sp.nachname IS NULL THEN l.insertvon ELSE sp.nachname END)
ELSE '. $ONLINE .' END
FROM system.tbl_log l
LEFT JOIN public.tbl_benutzer on l.insertvon = tbl_benutzer.uid
LEFT JOIN public.tbl_person sp on tbl_benutzer.person_id = sp.person_id
LEFT JOIN public.tbl_student student ON tbl_benutzer.uid = student.student_uid
WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.')
AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.')
AND l.person_id = p.person_id
@@ -178,7 +182,7 @@ $query = '
WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND ps.person_id = p.person_id
AND pss.studiensemester_kurzbz = '.$STUDIENSEMESTER.'
ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC
ORDER BY rtp.teilgenommen NULLS FIRST, pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC
LIMIT 1
) AS "ReihungstestAngetreten",
(
@@ -199,21 +203,25 @@ $query = '
LIMIT 1
) AS "ReihungstestApplied",
(
SELECT rtp.datum
SELECT (ARRAY_TO_STRING(array_agg(DISTINCT(CONCAT(rtp.datum, \' \', to_char(rtp.uhrzeit, \'HH24:MI\'), \' \', studiengang.kurzbzlang))), \', \'))
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
LEFT JOIN (
SELECT rtp.person_id,
rt.studiensemester_kurzbz,
rtp.teilgenommen,
rt.datum
rt.datum,
rt.uhrzeit,
rt.studiengang_kz
FROM public.tbl_rt_person rtp
JOIN tbl_reihungstest rt ON(rtp.rt_id = rt.reihungstest_id)
WHERE rt.stufe = 1
) rtp ON(rtp.person_id = ps.person_id AND rtp.studiensemester_kurzbz = pss.studiensemester_kurzbz)
JOIN tbl_studiengang studiengang ON rtp.studiengang_kz = studiengang.studiengang_kz
WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND ps.person_id = p.person_id
AND pss.studiensemester_kurzbz = '.$STUDIENSEMESTER.'
GROUP BY pss.datum, pss.insertamum, pss.ext_id
ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC
LIMIT 1
) AS "ReihungstestDate",
@@ -409,14 +417,10 @@ $query = '
$datasetRaw->{'ReihungstestApplied'} = 'Nein';
}
if ($datasetRaw->{'ReihungstestDate'} == null)
if ($datasetRaw->{'ReihungstestDate'} == '')
{
$datasetRaw->{'ReihungstestDate'} = '-';
}
else
{
$datasetRaw->{'ReihungstestDate'} = date_format(date_create($datasetRaw->{'ReihungstestDate'}),'Y-m-d');
}
if ($datasetRaw->{'ZGVNation'} == null)
{
@@ -124,6 +124,32 @@
</div>
<div id="collapse<?php echo $zgvpruefung->prestudent_id ?>"
class="panel-collapse collapse<?php echo $infoonly ? '' : ' in' ?>">
<?php
$disabled = $disabledStg = $disabledTxt = $disabledStgTxt = '';
if (isEmptyString($zgvpruefung->prestudentstatus->bewerbung_abgeschicktamum))
{
$disabled = $disabledStg = 'disabled';
$disabledTxt = $disabledStgTxt = $this->p->t('infocenter', 'bewerbungMussAbgeschickt');
}
if ($studiengangtyp !== 'b' && $studiengangtyp !== 'm')
{
$disabled = 'disabled';
$disabledTxt = $this->p->t('infocenter', 'nurBachelorMasterFreigeben');
// FIT-Lehrgänge: exceptions, can be freigegeben in Infocenter
if (!in_array($studiengang_kz, $fit_programme_studiengaenge))
{
$disabledStg = 'disabled';
$disabledStgTxt = $this->p->t('infocenter', 'nurBachelorMasterFreigeben');
}
}
if (!in_array($studiengangtyp, $studienArtBerechtigung))
$disabledPer = 'disabled';
else
$disabledPer = '';
?>
<div class="panel-body">
<form action="javascript:void(0);" class="zgvform" id="zgvform_<?php echo $zgvpruefung->prestudent_id ?>">
<input type="hidden" name="prestudentid" value="<?php echo $zgvpruefung->prestudent_id ?>" class="prestudentidinput">
@@ -196,12 +222,25 @@
<a href="javascript:void(0)"><i class="fa fa-info-circle"></i> <?php echo $this->p->t('infocenter', 'zgv') ?> <?php echo $studiengangkurzbz ?></a>
</div>
</div>
<?php if (!$infoonly)
echo $this->widgetlib->widget(
'Zgv_widget',
array(DropdownWidget::SELECTED_ELEMENT => $zgvpruefung->zgv_code),
array('name' => 'zgv', 'id' => 'zgv_'.$zgvpruefung->prestudent_id)
); ?>
<?php if (!$infoonly):
echo "<select id='zgv_" . $zgvpruefung->prestudent_id . "' name='zgv' class='form-control'>";
$selectedDefault = (is_null($zgvpruefung->zgv_code) ? 'selected' : '');
echo "<option " . $selectedDefault . " value='null'>Bitte Eintrag wählen...</option>";
foreach ($all_zgvs as $zgv)
{
$selected = ($zgvpruefung->zgv_code === $zgv->zgv_code) ? 'selected' : '';
$aktiv = '';
$class = '';
if (!$zgv->aktiv)
{
$aktiv = '(inaktiv)';
$class = 'gesperrtoption';
}
echo "<option " . $selected . " value='" . $zgv->zgv_code . "' class='". $class ."'>" . $zgv->zgv_bez . " " . $aktiv ."</option>";
}
echo "</select>";
endif;?>
</div>
</div>
<div class="col-lg-<?php echo $columns[1] ?>">
@@ -239,11 +278,26 @@
<?php if ($infoonly)
echo $zgvpruefung->zgvnation_bez;
else
echo $this->widgetlib->widget(
'Nation_widget',
array(DropdownWidget::SELECTED_ELEMENT => $zgvpruefung->zgvnation_code),
array('name' => 'zgvnation', 'id' => 'zgvnation_'.$zgvpruefung->prestudent_id)
); ?>
{
echo "<select id='zgvnation_" . $zgvpruefung->prestudent_id . "' name='zgvnation' class='form-control'>";
$selectedDefault = (is_null($zgvpruefung->zgvnation_code) ? 'selected' : '');
echo "<option " . $selectedDefault . " value='null'>Bitte Eintrag wählen...</option>";
foreach ($all_nations as $nation)
{
$selected = ($nation->nation_code === $zgvpruefung->zgvnation_code) ? 'selected' : '';
$sperre = '';
$class = '';
if ($nation->sperre == 'true')
{
$sperre = '(gesperrt)';
$class = 'gesperrtoption';
}
echo "<option " . $selected . " value='" . $nation->nation_code . "' class='" . $class ."'>" . $nation->langtext . " " . $sperre ."</option>";
}
echo "</select>";
}
?>
</div>
</div>
</div>
@@ -256,11 +310,25 @@
if ($infoonly)
echo $zgvpruefung->zgvmas_bez;
else
echo $this->widgetlib->widget(
'Zgvmaster_widget',
array(DropdownWidget::SELECTED_ELEMENT => $zgvpruefung->zgvmas_code),
array('name' => 'zgvmas', 'id' => 'zgvmas_'.$zgvpruefung->prestudent_id)
); ?>
{
echo "<select id='zgvmas_" . $zgvpruefung->prestudent_id . "' name='zgvmas' class='form-control'>";
$selectedDefault = (is_null($zgvpruefung->zgvmas_code) ? 'selected' : '');
echo "<option " . $selectedDefault . " value='null'>Bitte Eintrag wählen...</option>";
foreach ($all_zgvs_master as $zgv)
{
$selected = ($zgvpruefung->zgvmas_code === $zgv->zgvmas_code) ? 'selected' : '';
$aktiv = '';
$class = '';
if (!$zgv->aktiv)
{
$aktiv = '(inaktiv)';
$class = 'gesperrtoption';
}
echo "<option " . $selected . " value='" . $zgv->zgvmas_code . "' class='" . $class . "'>" . $zgv->zgvmas_bez . " " . $aktiv ."</option>";
}
echo "</select>";
}
?>
</div>
</div>
<div class="col-lg-<?php echo $columns[1] ?>">
@@ -300,11 +368,28 @@
if ($infoonly)
echo $zgvpruefung->zgvmanation_bez;
else
echo $this->widgetlib->widget(
'Nation_widget',
array(DropdownWidget::SELECTED_ELEMENT => $zgvpruefung->zgvmanation_code),
array('name' => 'zgvmanation', 'id' => 'zgvmanation_'.$zgvpruefung->prestudent_id)
); ?>
{
echo "<select id='zgvmanation_" . $zgvpruefung->prestudent_id . "' name='zgvmanation' class='form-control'>";
$selectedDefault = (is_null($zgvpruefung->zgvmanation_code) ? 'selected' : '');
echo "<option " . $selectedDefault . " value='null'>Bitte Eintrag wählen...</option>";
foreach ($all_nations as $nation)
{
$selected = ($nation->nation_code === $zgvpruefung->zgvmanation_code) ? 'selected' : '';
$sperre = '';
$class = '';
if ($nation->sperre == 'true')
{
$sperre = '(gesperrt)';
$class = 'gesperrtoption';
}
echo "<option " . $selected . " value='" . $nation->nation_code . "' class='" . $class . "'>" . $nation->langtext . " " . $sperre ."</option>";
}
echo "</select>";
}
?>
</div>
</div>
</div>
@@ -318,17 +403,17 @@
<?php if (!$infoonly): ?>
<div class="row">
<div class="col-xs-8 text-left zgvBearbeitungButtons" id="zgvBearbeitungButtons_<?php echo $zgvpruefung->prestudent_id ?>">
<button type="button" class="btn btn-default zgvUebernehmen" id="zgvUebernehmen_<?php echo $zgvpruefung->prestudent_id ?>">
<button type="button" class="btn btn-default zgvUebernehmen" id="zgvUebernehmen_<?php echo $zgvpruefung->prestudent_id ?>" <?php echo $disabledPer?>>
<?php echo $this->p->t('infocenter', 'letzteZgvUebernehmen') ?>
</button>
<button class="btn btn-default zgvRueckfragen" id="zgvRueckfragen_<?php echo $zgvpruefung->prestudent_id ?>">
<button class="btn btn-default zgvRueckfragen" <?php echo $disabledStg . ' ' . $disabledPer?> id="zgvRueckfragen_<?php echo $zgvpruefung->prestudent_id ?>">
<?php echo $this->p->t('infocenter', 'zgvRueckfragen') ?>
</button>
<span class="zgvStatusText" id="zgvStatusText_<?php echo $zgvpruefung->prestudent_id ?>" <?php (!(isset($zgvpruefung->statusZGV))) ?: print_r('data-info="need"')?>>
</span>
</div>
<div class="col-xs-4 text-right">
<button type="submit" class="btn btn-default saveZgv" id="zgvSpeichern_<?php echo $zgvpruefung->prestudent_id ?>">
<button type="submit" class="btn btn-default saveZgv" id="zgvSpeichern_<?php echo $zgvpruefung->prestudent_id ?>" <?php echo $disabledPer?>>
<?php echo $this->p->t('ui', 'speichern') ?>
</button>
</div>
@@ -336,7 +421,7 @@
<?php endif; ?>
<br />
<?php
if (isset($zgvpruefung->prestudentUdfs))
if (isset($zgvpruefung->prestudentUdfs) && $studiengangtyp !== 'l')
{
echo $this->udflib->UDFWidget(
array(
@@ -362,6 +447,8 @@
<div class="form-inline">
<div class="input-group" id="absgstatusgrselect_<?php echo $zgvpruefung->prestudent_id ?>">
<select name="absgstatusgrund"
<?php echo $disabledStg ?>
<?php echo $disabledPer ?>
class="d-inline float-right"
required>
<option value="null"
@@ -373,7 +460,7 @@
</select>
<span class="input-group-btn">
<button type="button"
class="btn btn-default absageBtn" id="absagebtn_<?php echo $zgvpruefung->prestudent_id ?>">
class="btn btn-default absageBtn" <?php echo $disabledStg . ' ' . $disabledPer?> id="absagebtn_<?php echo $zgvpruefung->prestudent_id ?>">
<?php echo $this->p->t('ui', 'absagen') ?>
</button>
</span>
@@ -381,25 +468,6 @@
</div>
</div><!-- /.column-absage -->
<?php
$disabled = $disabledStg = $disabledTxt = $disabledStgTxt = '';
if (isEmptyString($zgvpruefung->prestudentstatus->bewerbung_abgeschicktamum))
{
$disabled = $disabledStg = 'disabled';
$disabledTxt = $disabledStgTxt = $this->p->t('infocenter', 'bewerbungMussAbgeschickt');
}
if ($studiengangtyp !== 'b' && $studiengangtyp !== 'm')
{
$disabled = 'disabled';
$disabledTxt = $this->p->t('infocenter', 'nurBachelorMasterFreigeben');
// FIT-Lehrgänge: exceptions, can be freigegeben in Infocenter
if (!in_array($studiengang_kz, $fit_programme_studiengaenge))
{
$disabledStg = 'disabled';
$disabledStgTxt = $this->p->t('infocenter', 'nurBachelorMasterFreigeben');
}
}
if (!$infoonly) :
?>
<div class="col-lg-8 text-right">
@@ -408,6 +476,7 @@
<select name="frgstatusgrund"
class="d-inline float-right"
<?php echo $disabledStg ?>
<?php echo $disabledPer ?>
required>
<option value="null"
selected="selected"><?php echo ucfirst($this->p->t('ui', 'freigabeart')) . '...' ?>
@@ -417,14 +486,14 @@
<?php endforeach ?>
</select>
<span class="input-group-btn">
<button class="btn btn-default freigabebtnstg" <?php echo $disabledStg ?> id="freigabebtnstg_<?php echo $zgvpruefung->prestudent_id ?>"
<button class="btn btn-default freigabebtnstg" <?php echo $disabledStg . ' ' . $disabledPer?> id="freigabebtnstg_<?php echo $zgvpruefung->prestudent_id ?>"
data-toggle="tooltip" title="<?php echo $disabledStgTxt ?>">
<?php echo $this->p->t('ui', 'freigabeAnStudiengang') ?>
</button>
</span>
</div>
<div class="input-group" id="igrfrgbtn">
<button type="button" id="freigabebtn_<?php echo $zgvpruefung->prestudent_id ?>" class="btn btn-default freigabebtn" <?php echo $disabled ?>
<button type="button" id="freigabebtn_<?php echo $zgvpruefung->prestudent_id ?>" class="btn btn-default freigabebtn" <?php echo $disabled . ' ' . $disabledPer?>
data-toggle="tooltip" title="<?php echo $disabledTxt ?>">
<?php echo $this->p->t('ui', 'freigabeZumReihungstest') ?>
</button>
@@ -489,6 +558,8 @@
<div class="col-lg-4 text-left">
<div class="input-group" id="absgstatusgrselect_<?php echo $zgvpruefung->prestudent_id ?>">
<select name="absgstatusgrund"
<?php echo $disabledStg?>
<?php echo $disabledPer?>
class="d-inline float-right"
required>
<option value="null"
@@ -500,6 +571,8 @@
</select>
<span class="input-group-btn">
<button type="button"
<?php echo $disabledStg ?>
<?php echo $disabledPer ?>
class="btn btn-default absageBtn" id="absagebtn_<?php echo $zgvpruefung->prestudent_id ?>">
<?php echo $this->p->t('ui', 'absagen') ?>
</button>
@@ -552,4 +625,3 @@
endforeach; // end foreach zgvpruefungen
?>
</div><!-- /.panel-group -->
+89 -39
View File
@@ -1,7 +1,9 @@
<?php
$PERSON_ID = getAuthPersonId();
// all oe kurzbz for which logged user has a funktion
$ALL_FUNKTIONEN_OE_KURZBZ = "('" . implode("','", array_keys($all_funktionen_oe_kurzbz)) . "')";
// all oes for which logged user has issues permissions, including permissions for "special" issue funktion
$ALL_OE_KURZBZ_BERECHTIGT = "('" . implode("','", $all_oe_kurzbz_berechtigt) . "')";
$RELEVANT_PRESTUDENT_STATUS = "('Aufgenommener', 'Student', 'Incoming', 'Diplomand', 'Abbrecher', 'Unterbrecher', 'Absolvent')";
$LANGUAGE_INDEX = getUserLanguage() == 'German' ? '1' : '2';
@@ -29,39 +31,74 @@ $query = "WITH zustaendigkeiten AS (
$query .= " THEN TRUE
ELSE FALSE
END AS \"zustaendig\"
FROM system.tbl_fehler_zustaendigkeiten zst
FROM system.tbl_fehler_zustaendigkeiten zst
)";
$query .= "SELECT issue_id, fehlercode AS \"Fehlercode\", iss.fehlercode_extern AS \"Fehlercode extern\", datum AS \"Datum\",
inhalt AS \"Inhalt\", inhalt_extern AS \"Inhalt extern\", iss.person_id AS \"PersonId\", iss.oe_kurzbz AS \"OE\",
ftyp.bezeichnung_mehrsprachig[".$LANGUAGE_INDEX."] AS \"Fehlertyp\", stat.bezeichnung_mehrsprachig[".$LANGUAGE_INDEX."] AS \"Fehlerstatus\",
verarbeitetvon AS \"Verarbeitet von\",verarbeitetamum AS \"Verarbeitet am\", fr.app AS \"Applikation\",
fr.fehlertyp_kurzbz AS \"Fehlertypcode\", iss.status_kurzbz AS \"Statuscode\",
pers.vorname AS \"Vorname\", pers.nachname AS \"Nachname\",
CASE
WHEN
EXISTS(SELECT 1
FROM zustaendigkeiten
WHERE fehlercode = iss.fehlercode
AND zustaendig = TRUE) /* If Zuständigkeit is defined for the oe/person, zustaendig. */
THEN 'Ja'
WHEN
EXISTS(SELECT 1
FROM zustaendigkeiten
WHERE fehlercode = iss.fehlercode
AND zustaendig = FALSE) /* If Zuständigkeit is defined for different oe/person, not zustaendig. */
THEN 'Nein'
ELSE 'Ja' /* If no Zuständigkeit defined, zustaendig by default. */
END AS \"Hauptzuständig\"
FROM system.tbl_issue iss
JOIN system.tbl_fehler fr USING (fehlercode)
JOIN system.tbl_fehlertyp ftyp USING (fehlertyp_kurzbz)
JOIN system.tbl_issue_status stat USING (status_kurzbz)
LEFT JOIN public.tbl_person pers ON iss.person_id = pers.person_id
WHERE EXISTS ( /* if oe or person is specified in fehler_zustaendigkeiten */
SELECT 1 FROM zustaendigkeiten
WHERE fehlercode = iss.fehlercode
AND zustaendig = TRUE)";
inhalt AS \"Inhalt\", inhalt_extern AS \"Inhalt extern\", iss.person_id AS \"PersonId\", iss.oe_kurzbz AS \"OE\",
ftyp.bezeichnung_mehrsprachig[".$LANGUAGE_INDEX."] AS \"Fehlertyp\", stat.bezeichnung_mehrsprachig[".$LANGUAGE_INDEX."] AS \"Fehlerstatus\",
verarbeitetvon AS \"Verarbeitet von\",verarbeitetamum AS \"Verarbeitet am\", fr.app AS \"Applikation\",
fr.fehlertyp_kurzbz AS \"Fehlertypcode\", iss.status_kurzbz AS \"Statuscode\",
pers.vorname AS \"Vorname\", pers.nachname AS \"Nachname\",
(
/* show all relevant Studiengänge of person and wether it is an employee*/
SELECT STRING_AGG(studiengang || ' ' || last_status, ' | ')
|| (CASE WHEN EXISTS (
SELECT 1 FROM public.tbl_mitarbeiter ma
JOIN public.tbl_benutzer ben ON ma.mitarbeiter_uid = ben.uid
WHERE person_id = prestudents.person_id
AND ben.aktiv
) THEN ' | Mitarbeiter' ELSE '' END)
FROM (
SELECT DISTINCT person_id, prestudent_id, UPPER(stg.typ || stg.kurzbz) AS studiengang, get_rolle_prestudent(ps.prestudent_id, null) AS last_status
FROM public.tbl_prestudent ps
JOIN public.tbl_studiengang stg USING (studiengang_kz)
WHERE person_id = pers.person_id
ORDER BY prestudent_id DESC
) prestudents
WHERE last_status IN ('Aufgenommener', 'Student', 'Incoming', 'Diplomand', 'Abbrecher', 'Unterbrecher', 'Absolvent')
GROUP BY person_id
LIMIT 1;
) AS \"Zugehörigkeit\",
CASE
WHEN
EXISTS(SELECT 1
FROM zustaendigkeiten
WHERE fehlercode = iss.fehlercode
AND zustaendig = TRUE) /* If Zuständigkeit is defined for the oe/person, zustaendig. */
THEN 'Ja'
WHEN
EXISTS(SELECT 1
FROM zustaendigkeiten
WHERE fehlercode = iss.fehlercode
AND zustaendig = FALSE) /* If Zuständigkeit is defined for different oe/person, not zustaendig. */
THEN 'Nein'
ELSE 'Ja' /* If no Zuständigkeit defined, zustaendig by default. */
END AS \"Hauptzuständig\",
(
SELECT string_agg(vorname || ' ' || nachname, ' | ' ORDER BY vorname, nachname)
FROM system.tbl_fehler_zustaendigkeiten
JOIN public.tbl_person USING (person_id)
WHERE fehlercode = fr.fehlercode
GROUP BY fehlercode
) AS \"Person Zuständigkeiten\",
(
SELECT string_agg(organisationseinheittyp_kurzbz || ' ' || oe.bezeichnung || COALESCE(' - ' || fu.beschreibung, ''), ' | ' ORDER BY bezeichnung, oe_kurzbz)
FROM system.tbl_fehler_zustaendigkeiten
LEFT JOIN public.tbl_organisationseinheit oe USING (oe_kurzbz)
LEFT JOIN public.tbl_funktion fu USING (funktion_kurzbz)
WHERE fehlercode = fr.fehlercode
GROUP BY fehlercode
) AS \"Organisationseinheit Zuständigkeiten\"
FROM system.tbl_issue iss
JOIN system.tbl_fehler fr USING (fehlercode)
JOIN system.tbl_fehlertyp ftyp USING (fehlertyp_kurzbz)
JOIN system.tbl_issue_status stat USING (status_kurzbz)
LEFT JOIN public.tbl_person pers ON iss.person_id = pers.person_id
WHERE EXISTS ( /* if oe or person is specified in fehler_zustaendigkeiten */
SELECT 1 FROM zustaendigkeiten
WHERE fehlercode = iss.fehlercode
AND zustaendig = TRUE)";
// show issue if it is assigend to oe of logged in user or to student of oe of logged in user
if (!isEmptyArray($all_oe_kurzbz_berechtigt))
@@ -78,13 +115,13 @@ if (!isEmptyArray($all_oe_kurzbz_berechtigt))
AND NOT EXISTS (SELECT 1 /* irrelevant if already finished studies and studied a while ago */
FROM public.tbl_prestudentstatus ps_finished
JOIN public.tbl_studiensemester sem_finished USING (studiensemester_kurzbz)
WHERE prestudent_id = ps.prestudent_id
WHERE prestudent_id = ps.prestudent_id
AND status_kurzbz IN ('Absolvent','Abbrecher','Abgewiesener')
AND datum::date + interval '2 months' < NOW()
AND EXISTS (SELECT 1 FROM public.tbl_prestudent /* if more recent prestudent exists, still display the issue */
JOIN public.tbl_prestudentstatus USING (prestudent_id)
JOIN public.tbl_studiensemester USING (studiensemester_kurzbz)
WHERE tbl_prestudentstatus.status_kurzbz IN $RELEVANT_PRESTUDENT_STATUS
WHERE tbl_prestudentstatus.status_kurzbz IN $RELEVANT_PRESTUDENT_STATUS
AND person_id = ps.person_id
AND prestudent_id <> ps_finished.prestudent_id
AND tbl_studiensemester.start::date > sem_finished.start::date)
@@ -111,7 +148,7 @@ $filterWidgetArray = array(
'datasetName' => 'issues',
'filter_id' => $this->input->get('filter_id'),
'tableUniqueId' => 'issues',
'requiredPermissions' => 'admin',
'requiredPermissions' => 'system/issues_verwalten',
'datasetRepresentation' => 'tablesorter',
'checkboxes' => 'issue_id',
'columnsAliases' => array(
@@ -132,7 +169,10 @@ $filterWidgetArray = array(
ucfirst($this->p->t('fehlermonitoring', 'statuscode')),
ucfirst($this->p->t('person', 'vorname')),
ucfirst($this->p->t('person', 'nachname')),
ucfirst($this->p->t('fehlermonitoring', 'hauptzustaendig'))
ucfirst($this->p->t('fehlermonitoring', 'zugehoerigkeit')),
ucfirst($this->p->t('fehlermonitoring', 'hauptzustaendig')),
ucfirst($this->p->t('fehlermonitoring', 'zustaendigePersonen')),
ucfirst($this->p->t('fehlermonitoring', 'zustaendigeOrganisationseinheiten'))
),
'formatRow' => function($datasetRaw) {
@@ -161,16 +201,26 @@ $filterWidgetArray = array(
$datasetRaw->{'OE'} = '-';
}
if ($datasetRaw->{'Verarbeitet am'} == null)
{
$datasetRaw->{'Verarbeitet am'} = '-';
}
if ($datasetRaw->{'Verarbeitet von'} == null)
{
$datasetRaw->{'Verarbeitet von'} = '-';
}
if ($datasetRaw->{'Zugehörigkeit'} == null)
{
$datasetRaw->{'Zugehörigkeit'} = '-';
}
if ($datasetRaw->{'Person Zuständigkeiten'} == null)
{
$datasetRaw->{'Person Zuständigkeiten'} = '-';
}
if ($datasetRaw->{'Organisationseinheit Zuständigkeiten'} == null)
{
$datasetRaw->{'Organisationseinheit Zuständigkeiten'} = '-';
}
return $datasetRaw;
},
'markRow' => function($datasetRaw) {
@@ -0,0 +1,168 @@
<?php
$this->load->view(
'templates/FHC-Header',
array(
'title' => 'Fehler Zuständigkeiten',
'jquery' => true,
'jqueryui' => true,
'jquerycheckboxes' => true,
'bootstrap' => true,
'fontawesome' => true,
'sbadmintemplate' => true,
'tablesorter' => true,
'ajaxlib' => true,
'filterwidget' => true,
'navigationwidget' => true,
'dialoglib' => true,
'phrases' => array(
'ui',
'fehlermonitoring'
),
'customCSSs' => array('public/css/issues/issuesZustaendigkeiten.css', 'public/css/sbadmin2/tablesort_bootstrap.css'),
'customJSs' => array('public/js/issues/issuesZustaendigkeiten.js', 'public/js/bootstrapper.js')
)
);
?>
<body>
<div id="wrapper">
<?php echo $this->widgetlib->widget('NavigationWidget'); ?>
<div id="page-wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<h3 class="page-header">
<?php echo $this->p->t('fehlermonitoring', 'fehlerZustaendigkeiten') ?>
</h3>
</div>
</div>
<div class="row">
<div class="col-lg-4">
<div class="panel panel-default">
<table class="table table-bordered" id="fehlercodeSelectTable">
<tr>
<td class="tableCellNoRightBorder">
<label for="fehlerappSelect">App</label>
<select class="form-control" name="fehlerappSelect" id="fehlerappSelect">
</select>
</td>
<td class="tableCellNoLeftBorder tableCellNoRightBorder">
<label for="fehlercodeSelect"><?php echo $this->p->t('fehlermonitoring', 'fehlercode') ?></label>
<select class="form-control" name="fehlercodeSelect" id="fehlercodeSelect">
</select>
</td>
<td class="tableCellNoLeftBorder" id="fehlercodeInfoCell"><i class="fa fa-info-circle"></i></td>
</tr>
</table>
</div>
</div>
<div class="col-lg-8">
<div class="panel panel-default">
<table class="table table-bordered">
<tr>
<td>
<label for="mitarbeiterSelect"><?php echo $this->p->t('fehlermonitoring', 'zustaendigerMitarbeiter') ?></label>
<input type="text" class="form-control" name="mitarbeiterSelect" id="mitarbeiterSelect">
<input type="hidden" name="mitarbeiter_person_id" id="mitarbeiter_person_id">
</td>
<td align="center">
<?php echo $this->p->t('fehlermonitoring', 'oder') ?>
<br>
<i class="fa fa-arrows-h"></i>
</td>
<td class="tableCellNoRightBorder">
<label for="oeSelect"><?php echo $this->p->t('fehlermonitoring', 'organisationseinheit') ?></label>
<select class="form-control" name="oeSelect" id="oeSelect">
</select>
</td>
<td class="tableCellNoLeftBorder">
<label for="funktionSelect"><?php echo $this->p->t('fehlermonitoring', 'funktion') ?></label>
<select class="form-control" name="funktionSelect" id="funktionSelect">
</select>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-offset-3 col-lg-9">
<button class="btn btn-default" id="assignZustaendigkeit">
<i class="fa fa-angle-double-right"></i>&nbsp;
<?php echo $this->p->t('fehlermonitoring', 'zustaendigkeitZuweisen') ?>
</button>
</div>
</div>
<div>
<?php $this->load->view('system/issues/issuesZustaendigkeitenData.php'); ?>
</div>
<div class="modal fade" id="fehlerInfo" tabindex="-1"
role="dialog"
aria-labelledby="fehlerInfoLabel"
aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close"
data-dismiss="modal"
aria-hidden="true">&times;
</button>
<h4 class="modal-title" id="fehlerInfoLabel">
</h4>
</div>
<div class="modal-body" id="fehlerInfoContent">
<table class="table table-condensed table-bordered">
<tr>
<td>
<b><?php echo ucfirst($this->p->t('fehlermonitoring', 'fehlercode')) ?></b>
</td>
<td>
<span id="fehlercodeInfo"></span>
</td>
</tr>
<tr>
<td>
<b><?php echo ucfirst($this->p->t('fehlermonitoring', 'fehlerkurzbz')) ?></b>
</td>
<td>
<span id="fehlerkurzbzInfo"></span>
</td>
</tr>
<tr>
<td>
<b><?php echo ucfirst($this->p->t('fehlermonitoring', 'fehlertyp')) ?></b>
</td>
<td>
<span id="fehlertypInfo"></span>
</td>
</tr>
<tr>
<td>
<b><?php echo ucfirst($this->p->t('fehlermonitoring', 'fehlercodeExtern')) ?></b>
</td>
<td>
<span id="fehlercodeExternInfo"></span>
</td>
</tr>
<tr>
<td>
<b><?php echo ucfirst($this->p->t('fehlermonitoring', 'fehlertext')) ?></b>
</td>
<td>
<span id="fehlertextInfo"></span>
</td>
</tr>
</table>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal-fade -->
</div>
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -0,0 +1,84 @@
<?php
// get assigned Zustaendigkeiten
$query = "SELECT fehlerzustaendigkeiten_id, fe.fehlercode, fe.fehlercode_extern, fehler_kurzbz, fehlertext, fehlertyp_kurzbz, fe.app,
pers.person_id, pers.vorname, pers.nachname,
oe.oe_kurzbz, oe.bezeichnung AS oe_bezeichnung, funk.funktion_kurzbz, funk.beschreibung AS funktion_beschreibung
FROM system.tbl_fehler_zustaendigkeiten zst
JOIN system.tbl_fehler fe USING (fehlercode)
LEFT JOIN public.tbl_person pers USING (person_id)
LEFT JOIN public.tbl_organisationseinheit oe USING (oe_kurzbz)
LEFT JOIN public.tbl_funktion funk USING (funktion_kurzbz)
ORDER BY fe.fehlercode, pers.nachname, oe.bezeichnung, funk.beschreibung";
$filterWidgetArray = array(
'query' => $query,
'app' => 'core',
'datasetName' => 'fehlerZustaendigkeiten',
'filter_id' => $this->input->get('filter_id'),
'tableUniqueId' => 'issuesZustaendigkeiten',
'requiredPermissions' => 'admin',
'datasetRepresentation' => 'tablesorter',
'additionalColumns' => array('Delete'),
'columnsAliases' => array(
'ID',
ucfirst($this->p->t('fehlermonitoring', 'fehlercode')),
ucfirst($this->p->t('fehlermonitoring', 'fehlercodeExtern')),
ucfirst($this->p->t('fehlermonitoring', 'fehlerkurzbz')),
ucfirst($this->p->t('fehlermonitoring', 'fehlertext')),
ucfirst($this->p->t('fehlermonitoring', 'fehlertyp')),
'app',
'PersonId',
ucfirst($this->p->t('person', 'vorname')),
ucfirst($this->p->t('person', 'nachname')),
ucfirst($this->p->t('fehlermonitoring', 'oeKurzbz')),
ucfirst($this->p->t('fehlermonitoring', 'oeBezeichnung')),
ucfirst($this->p->t('fehlermonitoring', 'funktionKurzbz')),
ucfirst($this->p->t('fehlermonitoring', 'funktionBeschreibung'))
),
'formatRow' => function($datasetRaw) {
$datasetRaw->{'Delete'} =
"<button id='".$datasetRaw->{'fehlerzustaendigkeiten_id'}."' class='btn btn-default deleteBtn'>"
.ucfirst($this->p->t('ui', 'loeschen'))."</button>";
if ($datasetRaw->{'person_id'} == null)
{
$datasetRaw->{'person_id'} = '-';
}
if ($datasetRaw->{'vorname'} == null)
{
$datasetRaw->{'vorname'} = '-';
}
if ($datasetRaw->{'nachname'} == null)
{
$datasetRaw->{'nachname'} = '-';
}
if ($datasetRaw->{'oe_kurzbz'} == null)
{
$datasetRaw->{'oe_kurzbz'} = '-';
}
if ($datasetRaw->{'oe_bezeichnung'} == null)
{
$datasetRaw->{'oe_bezeichnung'} = '-';
}
if ($datasetRaw->{'funktion_kurzbz'} == null)
{
$datasetRaw->{'funktion_kurzbz'} = '-';
}
if ($datasetRaw->{'funktion_beschreibung'} == null)
{
$datasetRaw->{'funktion_beschreibung'} = '-';
}
return $datasetRaw;
}
);
echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray);
+23 -173
View File
@@ -22,21 +22,21 @@
*/
session_start();
require_once('../../config/cis.config.inc.php');
require_once('../../include/wochenplan.class.php');
require_once('../../include/benutzerberechtigung.class.php');
require_once('../../include/betriebsmittel.class.php');
require_once('../../include/betriebsmittelperson.class.php');
require_once('../../include/betriebsmitteltyp.class.php');
require_once('../../include/mail.class.php');
require_once('../../include/news.class.php');
require_once('../../include/content.class.php');
require_once('../../include/studiensemester.class.php');
require_once('../../include/konto.class.php');
require_once('../../include/functions.inc.php');
require_once('../../include/authentication.class.php');
require_once('../../include/addon.class.php');
require_once('../../include/'.EXT_FKT_PATH.'/serviceterminal.inc.php');
require_once('../../config/cis.config.inc.php');
require_once('../../include/wochenplan.class.php');
require_once('../../include/benutzerberechtigung.class.php');
require_once('../../include/betriebsmittel.class.php');
require_once('../../include/betriebsmittelperson.class.php');
require_once('../../include/betriebsmitteltyp.class.php');
require_once('../../include/mail.class.php');
require_once('../../include/news.class.php');
require_once('../../include/content.class.php');
require_once('../../include/studiensemester.class.php');
require_once('../../include/konto.class.php');
require_once('../../include/functions.inc.php');
require_once('../../include/authentication.class.php');
require_once('../../include/addon.class.php');
require_once('../../include/'.EXT_FKT_PATH.'/serviceterminal.inc.php');
if (!$db = new basis_db())
$db=false;
@@ -679,10 +679,6 @@ function meine_uid_informationen($db,$uid,$user="")
if ($db)
$user_array=personen_id_read_mitarbeiter_oder_student($db,$user->person_id);
#echo '<hr>';
##var_dump($user_array);
#var_dump($_SESSION[constSESSIONNAME]["ldap_get_entries"]);
if (isset($user_array) && is_array($user_array) && count($user_array)>1)
{
$html_user_daten.='<table class="persoenlichedaten">';
@@ -724,54 +720,6 @@ function meine_uid_informationen($db,$uid,$user="")
$html_user_daten.='<hr>';
// eMail senden nach anforderung
/*
$send_mail=(isset($_REQUEST['send_mail']) ? $_REQUEST['send_mail']:false);
if ($send_mail)
{
$to=$uid.'@'.DOMAIN;
$from=MAIL_CIS;
$subject=CAMPUS_NAME.' Informationen';
$mail=new mail($to, $from, $subject, $html_user_daten_detail);
if (isset($user_array) && is_array($user_array) && count($user_array)>1)
{
reset($user_array);
for ($i=0;$i<count($user_array);$i++)
{
if ($uid!=$user_array[$i]->uid && ($user_array[$i]->aktiv='t' || ($user_array[$i]->aktiv !='f' && $user_array[$i]->aktiv)) )
$mail->setCCRecievers($user_array[$i]->uid.'@'.DOMAIN);
}
}
$mail->setHTMLContent($html_user_daten_detail);
if ($mail->send())
$html_user_daten.='<p>email gesendet an '.$mail->to.' '.($mail->CC_recievers?$mail->CC_recievers:'').'</p>';
else
$html_user_daten.='<p>email nicht gesendet an '.$mail->to.'</p>';
}
// Send eMail Auswahl anzeigen
else
{
$farbe='gruen';
$html_user_daten.='<table class="persoenlichedaten">';
$html_user_daten.='<tr>';
$html_user_daten.='<td>';
$html_user_daten.='<a href="'.$_SERVER['PHP_SELF'].'?work=meinedaten&amp;send_mail=x&amp;standort_id='.$standort_id.'">';
$html_user_daten.='<b class="'.$farbe.'_rtop">
<b class="'.$farbe.'_r1"></b> <b class="'.$farbe.'_r2"></b> <b class="'.$farbe.'_r3"></b> <b class="'.$farbe.'_r4"></b>
</b>
<span class="'.$farbe.'_mitteText">';
$html_user_daten.='Informationen per Mail senden';
$html_user_daten.='
</span>
<b class="'.$farbe.'_rbottom">
<b class="'.$farbe.'_r4"></b><b class="'.$farbe.'_r3"></b> <b class="'.$farbe.'_r2"></b> <b class="'.$farbe.'_r1"></b>
</b>';
$html_user_daten.='</a>';
$html_user_daten.='</td>';
$html_user_daten.='</tr>';
$html_user_daten.='</table>';
}*/
return $html_user_daten;
}
#-------------------------------------------------------------------------------------------
@@ -952,33 +900,6 @@ function meine_uid_informationen_detail($db,$uid,$count=0)
die($db->db_last_error());
$nr_mg=$db->db_num_rows($erg_mg);
// Betriebsmittel zur Person lesen
/*
$betriebsmittelperson=array();
$qry="SELECT nummer,betriebsmitteltyp FROM public.vw_betriebsmittelperson where uid='".addslashes(trim($uid))."' and aktiv and benutzer_aktiv and ( retouram IS NULL ) LIMIT 50 ; ";
if(!$result=$db->db_query($qry))
die('Probleme beim Lesen der Benutzer uid '.$db->db_last_error());
if ($result)
{
while($rows = $db->db_fetch_object($result))
{
$rows->asco='ASCO Datens&auml;tze gefunden';
if (is_numeric($rows->nummer) && $mssql_verbindung)
{
$card_no=$rows->nummer;
$anfrage = mssql_query('SELECT * FROM view_fh_technikum_mitarbeiterkarten_berechtigungen where card_no='.$card_no);
if (mssql_num_rows($anfrage))
{
$rows->asco=array();
while ($datensatz = mssql_fetch_object($anfrage))
$rows->asco[]=$datensatz;
}
mssql_free_result($anfrage);
}
$betriebsmittelperson[]=$rows;
}
}*/
if ($count==0)
{
$html_user_daten.='<h1>Pers&ouml;nliche Daten</h1>';
@@ -1022,49 +943,6 @@ function meine_uid_informationen_detail($db,$uid,$count=0)
$html_user_daten.='<tr><td style="background-color: #E9ECEE;" align="center" colspan="2" ><b><font size="+1">Email</font></b></td></tr>';
$html_user_daten.='<tr><td ><b>Intern</b></td><td >'.$email.'</td></tr>';
$html_user_daten.='<tr><td ><b>Alias</b></td><td >'.$email_alias.'</td></tr>';
/*
$html_user_daten.='<tr><td style="background-color: #E9ECEE;" align="center" colspan="2" ><b>Mitglied in folgenden Verteilern</b></td></tr>';
for($i=0;$i<$nr_mg;$i++)
{
$row=$db->db_fetch_object($erg_mg,$i);
$html_user_daten.='<tr>';
$html_user_daten.='<td valign="top"><a class="Item" href="mailto:'.trim(strtolower($row->gruppe_kurzbz)).'@'.DOMAIN.'">'.strtolower($row->gruppe_kurzbz).'&nbsp;</td>';
$html_user_daten.='<td >'.$row->beschreibung.'&nbsp;</td>';
$html_user_daten.='</tr>';
}
if (isset($matrikelnr))
{
$html_user_daten.='<TR><TD valign="top"><A class="Item" href="mailto:'.strtolower(trim($stgkz)).'_std@'.DOMAIN.'">'.strtolower($stgkz).'_std&nbsp;</TD>';
$html_user_daten.="\n<TD >&nbsp;Alle Studierdenden von $stgbez</TD><TD></TD></TR>";
$html_user_daten.='<TR><TD valign="top">'.strtolower($stgkz).$semester.'&nbsp;</TD>';
$html_user_daten.="\n<TD >&nbsp;Alle Studierenden von $stgkz $semester</TD><TD></TD></TR>";
$html_user_daten.='<TR><TD valign="top"><A class="Item" href="mailto:'.strtolower(trim($stgkz)).trim($semester).strtolower(trim($verband)).'@'.DOMAIN.'">'.strtolower($stgkz).$semester.strtolower($verband).'&nbsp;</TD>';
$html_user_daten.="\n<TD >&nbsp;Alle Studierenden von $stgkz $semester$verband</TD><TD></TD></TR>";
$html_user_daten.='<TR><TD valign="top"><A class="Item" href="mailto:'.strtolower(trim($stgkz)).trim($semester).strtolower(trim($verband)).trim($gruppe).'@'.DOMAIN.'">'.strtolower($stgkz).$semester.strtolower($verband).$gruppe.'&nbsp;</TD>';
$html_user_daten.="\n<TD >&nbsp;Alle Studierenden von $stgkz $semester$verband$gruppe</TD><TD></TD></TR>";
}
$html_user_daten.='</table>&nbsp;</td>';
$html_user_daten.='<td valign="top" width="50%"><table width="100%">';
if ($stud_num_rows==1)
{
$html_user_daten.='<tr><td colspan="2" align="center" style="background-color: #E9ECEE;"><b><font size="+1">StudentIn</font></b></td></tr>';
$html_user_daten.="<td colspan='2' >
Studiengang: $stgbez<br>
Semester: $semester<br>
Verband: $verband<br>
Gruppe: $gruppe<br>
Matrikelnummer: $matrikelnr";
$html_user_daten.='</td></tr>';
}
else if ($lekt_num_rows==1)
{
$html_user_daten.='<tr><td colspan="2" align="center" style="background-color: #E9ECEE;"><b><font size="+1">Lektor </font></b></td></tr>';
$html_user_daten.='<td colspan="2"><b>Kurzzeichen: </b>'.$kurzbz.'<br><b>Standort: </b>'.$ort.'<br><b>'.($tel!=''?'Telefon TW:</b> '.$vorwahl.' '.$tel:'').'</td></tr>';
}*/
$html_user_daten.='</table>';
$html_user_daten.='&nbsp;</td></tr></table>';
@@ -1096,30 +974,6 @@ function alle_uid_stundenplan_informationen($db,$uid,$user_array="")
return $html_liste_raum;
}
// ------------------------------------------------------------------------------------------
// Kalenderwoche und Tage Initialisieren
// ------------------------------------------------------------------------------------------
/*
$date = date('d');
$month = date('m');
$year = date('y');
$weekday = date('w');
$kalenderweek = ((int)date('W')<10?'0'.(int)date('W'):date('W'));
// Montag ermitteln
if($weekday == 0)
{
$datum=mktime(0, 0, 0, $month, $date-$weekday -6, $year);
$ersterTagMonat=date('m', mktime(0, 0, 0, $month, $date-$weekday -6, $year));
$ersterTag=date('d', mktime(0, 0, 0, $month, $date-$weekday -6, $year));
}
else
{
$datum=mktime(0, 0, 0, $month, $date-$weekday +1, $year);
$ersterTagMonat=date('m', mktime(0, 0, 0, $month, $date-$weekday +1, $year));
$ersterTag=date('d', mktime(0, 0, 0, $month, $date-$weekday +1, $year));
}
*/
// ------------------------------------------------------------------------------------------
// Alle Termine zum User lesen
// ------------------------------------------------------------------------------------------
@@ -1334,18 +1188,19 @@ function alle_raum_informationen($db,$raumtyp_kurzbz,$ort_kurzbz, $standort_id)
$qry.=" SELECT DISTINCT ";
$qry.=" tbl_ortraumtyp.ort_kurzbz ";
$qry.=" ,tbl_ort.bezeichnung ,tbl_ort.aktiv ";
$qry.=" , (SELECT 'gesperrt'::text FROM public.tbl_ortraumtyp WHERE raumtyp_kurzbz='Gesperrt' AND ort_kurzbz=tbl_ort.ort_kurzbz) as gesperrt";
$qry.=" FROM tbl_raumtyp , tbl_ortraumtyp , tbl_ort ";
$qry.=" WHERE tbl_ortraumtyp.raumtyp_kurzbz=tbl_raumtyp.raumtyp_kurzbz ";
$qry.=" AND tbl_ort.ort_kurzbz=tbl_ortraumtyp.ort_kurzbz ";
$qry.=" AND tbl_ort.aktiv ";
$qry.=" AND lower(tbl_raumtyp.raumtyp_kurzbz) like lower('%".$db->db_escape(trim($raumtyp_kurzbz))."%') ";
if($standort_id!='')
$qry.=" AND (tbl_ort.standort_id=".$db->db_add_param($standort_id, FHC_INTEGER).' OR tbl_ort.standort_id is null)';
$qry.=" AND (tbl_ort.standort_id=".$db->db_add_param($standort_id, FHC_INTEGER)." OR tbl_ort.standort_id is null)";
$qry.=" order by tbl_ortraumtyp.ort_kurzbz ";
$qry.=" ; ";
if(!$result=$db->db_query($qry))
die('Probleme beim lesen der Raumtyptabelle '.$db->db_last_error());
die('Probleme beim lesen der Raumtyptabelle ');
$num_rows_stunde=$db->db_num_rows($result);
if($num_rows_stunde==0)
@@ -1372,7 +1227,6 @@ function alle_raum_informationen($db,$raumtyp_kurzbz,$ort_kurzbz, $standort_id)
// Raumreservierungen fuer Aktive Raumauswahl
// --------------------------------------------------------------
// Die aktive Stunde ermitteln - zum lesen welcher Raum jetzt besetzt ist - aktive Lehreinheit
$row_stunde=array();
@@ -1382,9 +1236,6 @@ function alle_raum_informationen($db,$raumtyp_kurzbz,$ort_kurzbz, $standort_id)
$qry.=" WHERE ".$db->db_add_param(constAktuelleZeitHHMi,FHC_STRING)." between to_char(tbl_stunde.beginn, 'HH24MI') and to_char(tbl_stunde.ende, 'HH24MI') ";
$qry.=" ORDER BY stunde LIMIT 1 ; ";
# $qry.=" WHERE '". constAktuelleZeitHH."' between to_char(tbl_stunde.beginn, 'HH24') and to_char(tbl_stunde.ende, 'HH24') ";
# $qry.=" ORDER BY stunde desc LIMIT 1; ";
if(!$result=$db->db_query($qry))
die('Probleme beim lesen der Raumtyptabelle '.$db->db_last_error());
@@ -1436,8 +1287,8 @@ function alle_raum_informationen($db,$raumtyp_kurzbz,$ort_kurzbz, $standort_id)
$farbe="gruen";
}
# if ($farbe=="orange")
# var_dump($info);
if ($row_raum[$i]->gesperrt=="gesperrt")
$farbe="rot";
// Nach 4 Raumanzeigen eine Neuezeile erzeugen
$html_liste_raum.=($i==0 || $i%4?"":"</tr><tr>");
@@ -1461,7 +1312,7 @@ function alle_raum_informationen($db,$raumtyp_kurzbz,$ort_kurzbz, $standort_id)
$html_liste_raum.='<td><table><tr><td><span class="gruen_mitteText">&nbsp;&nbsp;&nbsp;</span></td><td>Mindestens n&auml;chsten 2 Einheiten frei</td></tr></table></td>';
$html_liste_raum.='<td><table><tr><td><span class="orange_mitteText">&nbsp;&nbsp;&nbsp;</span></td><td>Derzeit frei</td></tr></table></td>';
$html_liste_raum.='<td><table><tr><td><span class="rot_mitteText">&nbsp;&nbsp;&nbsp;</span></td><td>Raum derzeit besetzt</td></tr></table></td>';
$html_liste_raum.='<td><table><tr><td><span class="rot_mitteText">&nbsp;&nbsp;&nbsp;</span></td><td>Raum derzeit besetzt / gesperrt</td></tr></table></td>';
$html_liste_raum.='</tr>';
$html_liste_raum.='</table>';
$html_liste_raum.='<hr>';
@@ -1506,7 +1357,6 @@ function alle_raum_informationen($db,$raumtyp_kurzbz,$ort_kurzbz, $standort_id)
// dh. Letztes Ende ist gleich Start aktueller Datensatz
if ($lastEnde && $row->time_beginn!=$lastEnde)
{
# echo "<p>Zeit korr. Funktion:alle_raum_informationen ".$row->beginn_show." wird zu ".$lastShowEnde."</p>";
$row->time_beginn=$lastEnde;
}
@@ -1900,7 +1750,7 @@ function uid_read_mitarbeiter_oder_student($db,$uid)
// Wenn kein Mitarbeiter pruefen ob Student
$qry="SELECT uid,person_id,anrede,titelpre,vorname,vornamen,nachname,aktiv FROM campus.vw_student where uid=".$db->db_add_param(trim($uid), FHC_STRING)." LIMIT 1 ; ";
if(!$result=$db->db_query($qry))
die('Probleme beim Lesen der Studierenden '.$db->db_last_error());
die('Probleme beim Lesen der Studierenden ');
if ($num_rows_stunde=$db->db_num_rows($result))
{
while($rows = $db->db_fetch_object($result))
@@ -1976,7 +1826,7 @@ function read_create_html_news($db,$fachbereich_kurzbz,$studiengang_kz,$semester
{
if(defined('CIS_INFOSCREEN_NEWS_ANZEIGEN') && CIS_INFOSCREEN_NEWS_ANZEIGEN==false)
return '';
// ------------------------------------------------------------------------------------------
// Lesen Newstickerzeilen
// ------------------------------------------------------------------------------------------
+11 -10
View File
@@ -169,21 +169,22 @@ echo '
echo '<!-- Last content:'.$lastinfoscreencontent.' ID:'.$infoscreen_id.' IP:'.$ip.'-->';
if($infoscreen_id!='' && isset($content[$aktuellerContentIdx]))
{
echo '<center style="height: 100%"><iframe id="content" src="../../cms/content.php?content_id='.$content[$aktuellerContentIdx].'" ></iframe></center>';
}
else
{
echo '<br><br><br>
<center>
<h1>Informationsbildschirm - '.CAMPUS_NAME.'</h1>
<br><br><br>
Dieser Informationsbildschirm wurde noch nicht registriert
<br><br>
IP-Adresse:'.$ip.'
</center>';
echo ' <table style="width: 100%; height: 100%">
<tr>
<td style="height: 80%; vertical-align: center; text-align: center">
<img style="height: 900px" src="../../skin/styles/'.EXT_FKT_PATH.'/logo_200x400.png" />
</td>
</tr>
<tr>
<td style="height: 20%; vertical-align: bottom; text-align: right; color: #CCCCCC; padding: 50px">'.$ip.'</td>
</tr>
</table>
';
}
echo '
</body>
</html>';
View File
+16 -26
View File
@@ -48,11 +48,11 @@ if(check_lektor($user))
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="../../../skin/style.css.php" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="../../../skin/jquery-ui-1.9.2.custom.min.css">
<script type="text/javascript" src="../../../vendor/jquery/jqueryV1/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="../../../vendor/christianbach/tablesorter/jquery.tablesorter.min.js"></script>
<script type="text/javascript" src="../../../vendor/components/jqueryui/jquery-ui.min.js"></script>
<script type="text/javascript" src="../../../include/js/jquery.ui.datepicker.translation.js"></script>
<link rel="stylesheet" type="text/css" href="../../../skin/jquery-ui-1.9.2.custom.min.css">
<script type="text/javascript" src="../../../vendor/jquery/jqueryV1/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="../../../vendor/christianbach/tablesorter/jquery.tablesorter.min.js"></script>
<script type="text/javascript" src="../../../vendor/components/jqueryui/jquery-ui.min.js"></script>
<script type="text/javascript" src="../../../include/js/jquery.ui.datepicker.translation.js"></script>
<script type="text/javascript" src="../../../vendor/jquery/sizzle/sizzle.js"></script>
<link rel="stylesheet" href="../../../skin/tablesort.css" type="text/css"/>
<script type="text/javascript">
@@ -175,16 +175,23 @@ if(check_lektor($user))
<?php
$zeilenzaehl=0;
$sql_query = "SELECT vorname, nachname, telefonklappe, kontakt, ort_kurzbz, beschreibung, vw_mitarbeiter.standort_id
$sql_query = "SELECT vorname, nachname, telefonklappe, kontakt, ort_kurzbz, beschreibung, vw_mitarbeiter.standort_id, uid
FROM campus.vw_mitarbeiter
JOIN public.tbl_benutzerfunktion USING (uid)
JOIN public.tbl_funktion USING (funktion_kurzbz)
JOIN public.tbl_kontakt USING (person_id)
WHERE funktion_kurzbz='brandbeauftragt'
AND (datum_bis>='now()' OR datum_bis IS NULL)
AND (
datum_von <= 'now()'
OR datum_von IS NULL
)
AND (
datum_bis >= 'now()'
OR datum_bis IS NULL
)
AND campus.vw_mitarbeiter.aktiv=TRUE
AND vw_mitarbeiter.standort_id IS NOT NULL
AND kontakt LIKE '%61925%'
AND kontakttyp='firmenhandy'
ORDER BY funktion_kurzbz";
$result = $db->db_query($sql_query);
if ($db->db_num_rows($result) > 0)
@@ -202,7 +209,7 @@ if(check_lektor($user))
{
echo '
<tr>
<td width="40%">'.$row->nachname.'</td>
<td width="40%"><a href="../profile/index.php?uid='.$row->uid.'">'.$row->nachname.'</a></td>
<td width="30%">'.$row->vorname.'</td>
<td ><nobr>'.$row->kontakt.'</nobr></td>
</tr>';
@@ -210,23 +217,6 @@ if(check_lektor($user))
echo '
</tbody></table>';
}
// An der FHTW wird als Übergangsloesung statisch die Fa. HEALTH COUNSULT als Brandschutzbeauftragte angezeigt
if ($db->db_num_rows($result) == 0 && CAMPUS_NAME == 'FH Technikum Wien')
{
echo '<h2 style="margin-top:0px;">'.$p->t("notfallbestimmungen/brandschutzbeauftragte").'</h2>';
echo '<table class="tablesorter" id="t2">
<thead>
<tr>
<th>Name</th>
<th>Nummer</th>
</tr>
</thead><tbody>
<tr>
<td>HEALT COUNSULT - Sicherheitstechnik GmbH</td>
<td ><nobr>0650/30 96 909</nobr></td>
</tr>
</tbody></table>';
}
?>
<!--Rektorat auslesen-->
View File
+1 -1
View File
@@ -68,7 +68,7 @@ isset($_GET['lehreinheit_id']) ? $lehreinheit = $_GET['lehreinheit_id'] : $lehre
$stg = new studiengang();
$stg->load($lv->studiengang_kz);
$doc = new dokument_export('Anwesenheitslist');
$doc = new dokument_export('Anwesenheitslist', $stg->oe_kurzbz);
$lehrelisthelper = new LehreListHelper($db, $studiensemester, $lvid, $lv, $stg, $lehreinheit);
$arr_lehrende = $lehrelisthelper->getArr_Lehrende();
@@ -233,12 +233,21 @@ if (isset($_REQUEST["submit"]))
continue;
}
$punkte=str_replace(',','.', $punkte);
//UID ermitteln
//check ob statt Matrikelnummer nicht bereits student_uid (Moodle Grade Import) vorliegt..
$student = new student();
if(!$student_uid = $student->getUidFromMatrikelnummer($matrikelnummer))
if (!$student->checkIfValidStudentUID($matrikelnummer))
{
$response.="\n".$p->t('benotungstool/studentMitMatrikelnummerExistiertNicht',array($matrikelnummer));
continue;
//UID ermitteln
if(!$student_uid = $student->getUidFromMatrikelnummer($matrikelnummer))
{
$response.="\n".$p->t('benotungstool/studentMitMatrikelnummerExistiertNicht',array($matrikelnummer));
continue;
}
}
else
{
$student_uid = $matrikelnummer;
}
// Hole Zeugnisnote wenn schon eine eingetragen ist
@@ -803,6 +803,7 @@ if (defined('CIS_ANWESENHEITSLISTE_NOTENLISTE_ANZEIGEN') && CIS_ANWESENHEITSLIST
{
$hrefpath = "../notenliste.xls.php?stg=$stg_obj->studiengang_kz&lvid=$lvid&stsem=$stsem";
echo "<br><a class='Item' href='" . $hrefpath . "'>" . $p->t('benotungstool/notenlisteImport') . "</a>";
}
// eingetragene lv-gesamtnoten freigeben
+15 -2
View File
@@ -37,7 +37,6 @@ require_once('../../../include/erhalter.class.php');
require_once('../../../include/datum.class.php');
$doc = new dokument_export('fotoliste');
$output = 'pdf';
$show_all_fotos = false;
@@ -62,6 +61,8 @@ $lv->load($lvid);
$stg = new studiengang();
$stg->load($lv->studiengang_kz);
$doc = new dokument_export('fotoliste', $stg->oe_kurzbz);
$berechtigung = new benutzerberechtigung();
$berechtigung->getBerechtigungen($user);
@@ -102,6 +103,7 @@ $gruppen_string = '';
$gruppen_string_arr = array();
$stg_typ = $stg->typ;
$stg_bezeichnung = $stg->bezeichnung;
$lv_bezeichnung = '';
//structure overall lehrveranstaltungs data
if ($result = $db->db_query($qry)) {
@@ -153,6 +155,7 @@ $qry = 'SELECT DISTINCT ON
(nachname, vorname, person_id)
vorname,
nachname,
wahlname,
matrikelnr,
tbl_studentlehrverband.semester,
tbl_studentlehrverband.verband,
@@ -237,6 +240,16 @@ if ($result = $db->db_query($qry)) {
if ($row->stg_kz_student == $a_o_kz) //Außerordentliche Studierende
$zusatz .= '(a.o.)';
//wenn Wahlname vorhanden, wird dieser anstelle des Vornamens angezeigt
if ($row->wahlname != '')
{
$vorname = $row->wahlname;
}
else
{
$vorname = $row->vorname;
}
//allow admin and assistenz to see ALL fotos (even if locked by user)
if ($show_all_fotos)
$row->foto_sperre = 'f';
@@ -271,7 +284,7 @@ if ($result = $db->db_query($qry)) {
//add studierenden data for XML
$data[] = array('studierende' => array(
'vorname' => $row->vorname,
'vorname' => $vorname,
'nachname' => mb_strtoupper($row->nachname, 'UTF-8'),
'personenkennzeichen' => trim($row->matrikelnr),
'geschlecht' => $row->geschlecht,
+1
View File
@@ -102,6 +102,7 @@ if (isset($_GET["handbuch"])){
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="../../../skin/style.css.php" rel="stylesheet" type="text/css">
<link href="../../../skin/jquery.css" rel="stylesheet" type="text/css"/>
<link href="../../../vendor/components/jqueryui/themes/base/jquery-ui.min.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../../vendor/jquery/jqueryV1/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="../../../vendor/christianbach/tablesorter/jquery.tablesorter.min.js"></script>
<script type="text/javascript" src="../../../vendor/components/jqueryui/jquery-ui.min.js"></script>
+3 -2
View File
@@ -136,7 +136,7 @@ if (! check_student($user))
}
else
{
$qry = "SELECT vw_student.vorname, vw_student.nachname, vw_student.prestudent_id, tbl_studiengang.studiengang_kz
$qry = "SELECT vw_student.vorname, vw_student.nachname, vw_student.wahlname, vw_student.prestudent_id, tbl_studiengang.studiengang_kz
FROM public.tbl_studiengang JOIN campus.vw_student USING (studiengang_kz)
WHERE campus.vw_student.uid = " . $db->db_add_param($user) . ";";
@@ -148,6 +148,7 @@ else
$vorname = $row->vorname;
$nachname = $row->nachname;
$wahlname = $row->wahlname;
$prestudent_id = $row->prestudent_id;
$stg_obj = new studiengang();
$stg_obj->load($row->studiengang_kz);
@@ -313,7 +314,7 @@ else
// Noten ohne Wert werden entfernen
if(isset($notenarr[$row->note]['notenwert']))
{
$notenSummenArray[$row->lehrveranstaltung_id]['notenwert'] = $notenarr[$row->note]['notenwert'];
$notenSummenArray[$row->lehrveranstaltung_id]['notenwert'] = $notenarr[$row->note]['notenwert'];
$notenSummenArray[$row->lehrveranstaltung_id]['ects'] = $row->ects;
}
}
+4 -2
View File
@@ -167,7 +167,7 @@ else
//Lektoren ermitteln
$qry = "SELECT
distinct vorname, nachname
distinct vorname, nachname, wahlname
FROM
campus.vw_benutzer, lehre.tbl_lehreinheit, lehre.tbl_lehreinheitmitarbeiter
WHERE
@@ -211,7 +211,7 @@ else
$qry = "
SELECT
distinct on(nachname, vorname, person_id)
vorname, nachname, matrikelnr, person_id, tbl_student.student_uid as uid,
vorname, nachname, wahlname, matrikelnr, person_id, tbl_student.student_uid as uid,
tbl_studentlehrverband.semester, tbl_studentlehrverband.verband, tbl_studentlehrverband.gruppe,
(SELECT status_kurzbz
FROM public.tbl_prestudentstatus
@@ -277,6 +277,8 @@ else
$worksheet->write($lines,1,$elem->uid);
$worksheet->write($lines,2,$elem->nachname.$inc);
$worksheet->write($lines,3,$elem->vorname);
//wenn Wahlname vorhanden überschreibt dieser den Vornamen
$worksheet->write($lines,3,$elem->wahlname);
$worksheet->write($lines,4,'="'.$elem->semester.$elem->verband.$elem->gruppe.'"');
$worksheet->write($lines,5,'="'.trim($elem->matrikelnr).'"',$format_highlight);
$worksheet->write($lines,6, $note, $format_highlightright);
+34 -24
View File
@@ -19,7 +19,7 @@
*/
/*
* GUI fuer die FreeBusy Verwaltung
*
*
* Mit diesem Tool koennen FreeBusy URLs aus verschiedenen Quellen zu einer
* FreeBusy URL zusammengefasst werden
*/
@@ -32,7 +32,7 @@ require_once('../../../include/benutzerberechtigung.class.php');
if (!$db = new basis_db())
die('Fehler beim Oeffnen der Datenbankverbindung');
$user = get_uid();
$sprache = getSprache();
$p = new phrasen($sprache);
@@ -60,23 +60,23 @@ echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
<link rel="stylesheet" href="../../../skin/jquery.css" type="text/css">
<link rel="stylesheet" href="../../../skin/style.css.php" type="text/css">
<title>'.$p->t('freebusy/titel').'</title>
<link rel="stylesheet" type="text/css" href="../../../skin/jquery-ui-1.9.2.custom.min.css">
<script type="text/javascript" src="../../../vendor/jquery/jqueryV1/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="../../../vendor/christianbach/tablesorter/jquery.tablesorter.min.js"></script>
<script type="text/javascript" src="../../../vendor/components/jqueryui/jquery-ui.min.js"></script>
<script type="text/javascript" src="../../../include/js/jquery.ui.datepicker.translation.js"></script>
<script type="text/javascript" src="../../../vendor/jquery/sizzle/sizzle.js"></script>
<script type="text/javascript" src="../../../vendor/jquery/sizzle/sizzle.js"></script>
<script type="text/javascript">
$(document).ready(function()
$(document).ready(function()
{
$("#myTable").tablesorter(
{
sortList: [[0,1]],
widgets: [\'zebra\']
});
});
});
function seturl()
{
url = $("#typ option:selected").attr("url");
@@ -116,25 +116,25 @@ if($action=='delete')
elseif($action=='save')
{
//Speichern von Eintraegen
$id = (isset($_POST['id'])?$_POST['id']:'');
$aktiv = isset($_POST['aktiv']);
if(isset($_POST['bezeichnung']))
$bezeichnung = $_POST['bezeichnung'];
else
die($p->t('global/fehlerBeiDerParameteruebergabe'));
if(isset($_POST['typ']))
$typ = $_POST['typ'];
else
die($p->t('global/fehlerBeiDerParameteruebergabe'));
if(isset($_POST['url']))
$url = $_POST['url'];
else
die($p->t('global/fehlerBeiDerParameteruebergabe'));
//Pruefen ob die URL geoeffnet werden kann
$fp = @fopen($url,'r');
if (!$fp)
@@ -142,7 +142,7 @@ elseif($action=='save')
else
{
fclose($fp);
$fb = new freebusy();
if($id!='')
{
@@ -150,8 +150,8 @@ elseif($action=='save')
die($p->t('global/fehleraufgetreten'));
if($fb->uid!=$user)
die($p->t('global/keineBerechtigungZumAendernDesDatensatzes'));
$fb->new=false;
}
else
@@ -161,20 +161,20 @@ elseif($action=='save')
$fb->insertvon = $user;
$fb->uid = $user;
}
$fb->updateamum = date('Y-m-d H:i:s');
$fb->updatevon = $user;
$fb->bezeichnung = $bezeichnung;
$fb->url = $url;
$fb->freebusytyp_kurzbz = $typ;
$fb->aktiv = $aktiv;
if($fb->save())
echo '<span class="ok">'.$p->t('global/erfolgreichgespeichert').'</span>';
else
echo '<span class="error">'.$p->t('global/fehleraufgetreten').'</span>';
echo '<span class="error">'.$p->t('global/fehleraufgetreten').'</span>';
}
}
//Tabelle mit den vorhandenen Eintraegen anzeigen
@@ -201,7 +201,17 @@ echo '<table id="myTable" class="tablesorter">
echo '<td></td>';
echo '<td></td>';
echo '</tr>';
//zeitsperren
echo '<tr>';
echo '<td>'.$p->t('freebusy/ZeitsperrenBezeichnung').'</td>';
echo '<td>'.$p->t('freebusy/ZeitsperrenTyp').'</td>';
echo '<td></td>';
echo '<td>'.$p->t('global/ja').'</td>';
echo '<td></td>';
echo '<td></td>';
echo '</tr>';
foreach($fb->result as $row)
{
$typ = new freebusy();
@@ -223,7 +233,7 @@ echo '<a href="'.$_SERVER['PHP_SELF'].'?action=neu">'.$p->t('freebusy/neuerEintr
if($action=='edit' || $action=='neu')
{
$fb = new freebusy();
if($action=='neu')
{
$new = true;
@@ -236,7 +246,7 @@ if($action=='edit' || $action=='neu')
if(!$fb->load($id))
die($p->t('global/fehlerBeimLadenDesDatensatzes'));
}
echo '<form action="'.$_SERVER['PHP_SELF'].'?action=save" method="POST">';
echo '<input type="hidden" name="id" value="'.$fb->freebusy_id.'" />';
echo '<table>
@@ -259,7 +269,7 @@ if($action=='edit' || $action=='neu')
$selected='selected';
else
$selected='';
$vorlage = mb_str_replace('$uid',$user, $row->url_vorlage);
echo '<OPTION value="'.$db->convert_html_chars($row->freebusytyp_kurzbz).'" '.$selected.' url="'.$db->convert_html_chars($vorlage).'">'.$db->convert_html_chars($row->bezeichnung),'</OPTION>';
}
@@ -275,4 +285,4 @@ if($action=='edit' || $action=='neu')
}
?>
</body>
</html>
</html>
+51 -11
View File
@@ -33,6 +33,7 @@ require_once('../../../include/mail.class.php');
require_once('../../../include/phrasen.class.php');
require_once('../../../include/globals.inc.php');
require_once('../../../include/sprache.class.php');
require_once('../../../include/zeitaufzeichnung.class.php');
$sprache = getSprache();
$lang = new sprache();
@@ -270,20 +271,59 @@ if(isset($_GET['speichern']) && isset($_GET['wtag']))
}
//Pruefen ob bereits ein Urlaub in den markierten Bereichen vorhanden ist und ggf Abbrechen
//Das Problem sollte nur beim manuellen Refresh der Seite auftreten
$error=false;
for($i=0;$i<count($akette);$i++)
//Prüfen, ob eine Zeitaufzeichnung vorhanden ist und ggf Abbrechen
$error = false;
for ($i = 0; $i < count($akette); $i++)
{
$zeitsperre = new zeitsperre();
$za = new zeitaufzeichnung();
$vonDatum = new DateTime($akette[$i]);
$bisDatum = new DateTime($ekette[$i]);
if($zeitsperre->UrlaubEingetragen($uid, $akette[$i], $ekette[$i]))
if ($za->existsZeitaufzeichnung($uid, $vonDatum->format('d.m.Y'), $bisDatum->format('d.m.Y')))
{
$vgmail.='<br><span class="error">'.$p->t('zeitsperre/urlaubBereitsEingetragen').'</span>';
$error=true;
$error = true;
$vgmail .= '<br><span class="error">'.$p->t('zeitsperre/zeitaufzeichnungVorhanden'). ' '.
$vonDatum->format('d.m.Y'). ' - '. $bisDatum->format('d.m.Y'). '</span>';
break;
}
}
//Prüfen ob eine ganztägige Zeitsperre eingetragen ist und ggf abbrechen
$daysToCheck = array();
for ($i = 0; $i < count($akette); $i++)
{
$zeitsperre = new zeitsperre();
$vonDatum = new DateTime($akette[$i]);
$bisDatum = new DateTime($ekette[$i]);
//add here to array, weil in der foreach-Schleife, das bisdatum nicht inkludiert ist
$daysToCheck[] = $bisDatum->format("Y-m-d");
$daterange = new DatePeriod($vonDatum, new DateInterval('P1D'), $bisDatum);
foreach($daterange as $date)
{
$daysToCheck[] = $date->format("Y-m-d");
}
}
foreach ($daysToCheck AS $date)
{
$zeitsperre->getSperreByDate($uid, $date, null, zeitsperre::NUR_BLOCKIERENDE_ZEITSPERREN);
foreach ($zeitsperre->result as $z)
{
if ($z->zeitsperretyp_kurzbz)
{
$error = true;
$z->zeitsperretyp_kurzbz == 'Urlaub' ?
$vgmail.='<br><span class="error">'.$p->t('zeitsperre/urlaubBereitsEingetragen').'</span>' :
$vgmail .= '<br><span class="error">'.$p->t('zeitsperre/zeitsperreEingetragen',[$date, $z->zeitsperretyp_kurzbz]). '</span>';
break;
}
}
}
}
if(!$error)
@@ -794,13 +834,13 @@ for ($i=0;$i<6;$i++)
echo '<b>'.$tage[$j+7*$i].'</b><br>';
if(strlen(stristr($tage[$j+7*$i],"."))>0)
{
echo '<input type="checkbox" name="wtag[]"
value="'.date("Y-m-d",mktime(0, 0, 0, substr($tage[$j+7*$i],3,2) , substr($tage[$j+7*$i],0,2), substr($tage[$j+7*$i],6,4))).'"
echo '<input type="checkbox" name="wtag[]"
value="'.date("Y-m-d",mktime(0, 0, 0, substr($tage[$j+7*$i],3,2) , substr($tage[$j+7*$i],0,2), substr($tage[$j+7*$i],6,4))).'"
id="'.date("d.m.Y",mktime(0, 0, 0, substr($tage[$j+7*$i],3,2) , substr($tage[$j+7*$i],0,2), substr($tage[$j+7*$i],6,4))).'"></td>';
}
else
{
echo '<input type="checkbox" name="wtag[]" value="'.date("Y-m-d",mktime(0, 0, 0, ($wmonat+1) , $tage[$j+7*$i], $jahre[$wjahr])).'"
echo '<input type="checkbox" name="wtag[]" value="'.date("Y-m-d",mktime(0, 0, 0, ($wmonat+1) , $tage[$j+7*$i], $jahre[$wjahr])).'"
id="'.date("d.m.Y",mktime(0, 0, 0, ($wmonat+1) , $tage[$j+7*$i], $jahre[$wjahr])).'"></td>';
}
}
@@ -282,7 +282,7 @@ function showHideBezeichnungDropDown()
}
else if (dd.options[dd.selectedIndex].value == 'DienstF')
{
sp.innerHTML = '<font color="red"><b>Dienstfreistellungen</b> nur in Absprache mit Personalservice eintragen!</font><br><input type="text" name="bezeichnung" maxlength="32" size="32" value="">';
sp.innerHTML = '<font color="red"><b>Dienstfreistellungen</b> nur in Absprache mit HR Service eintragen!</font><br><input type="text" name="bezeichnung" maxlength="32" size="32" value="">';
}
else
{
View File
+11 -6
View File
@@ -108,7 +108,7 @@ if (defined('LOG_CONTENT') && LOG_CONTENT==true)
//Easter Egg
$easteregg = array ('antwort','leben','universum','rest','answer','universe','life','everything');
$easteregg_intersect = array_intersect(array_map('strtolower',$searchItems), $easteregg);
if (count($easteregg_intersect)==4)
if (count($easteregg_intersect)==3)
{
echo '<table width="100%"><tr><td align="center"><br><br><br><p style="align:center; font-size: 2000%;"><strong>42</strong></p></td></tr></table>';
exit;
@@ -178,20 +178,25 @@ function searchPerson($searchItems)
echo '<tr>';
//echo '<td>',$row->titelpre,'</td>';
echo '<td>',$row->anrede,'</td>';
echo '<td>',$row->vorname,'</td>';
if ($row->wahlname)
echo '<td>',$row->wahlname, ' ' ,$row->vorname, '</td>';
else
echo '<td>',$row->vorname, '</td>';
echo '<td>';
if(!defined('CIS_SUCHE_PROFIL_ANZEIGEN'))
echo '<a href="../profile/index.php?uid=',$row->uid,'" title="',$row->titelpre,' ',$row->vorname,' ',$row->nachname,' ',$row->titelpost,'">',$row->nachname,'</a>';
echo '<a href="../profile/index.php?uid=',$row->uid,'" title="',$row->titelpre,' ',$row->vorname,' ',$row->wahlname, ' ',$row->nachname,' ',$row->titelpost,'">',$row->nachname,'</a>';
else if(!CIS_SUCHE_PROFIL_ANZEIGEN)
{
$mitarbeiter = new Mitarbeiter($uid);
if($mitarbeiter->errormsg === NULL)
echo '<a href="../profile/index.php?uid=',$row->uid,'" title="',$row->titelpre,' ',$row->vorname,' ',$row->nachname,' ',$row->titelpost,'">',$row->nachname,'</a>';
echo '<a href="../profile/index.php?uid=',$row->uid,'" title="',$row->titelpre,' ',$row->vorname,' ',$row->wahlname, ' ',$row->nachname,' ',$row->titelpost,'">',$row->nachname,'</a>';
else
echo $row->nachname;
}
else
echo '<a href="../profile/index.php?uid=',$row->uid,'" title="',$row->titelpre,' ',$row->vorname,' ',$row->nachname,' ',$row->titelpost,'">',$row->nachname,'</a>';
echo '<a href="../profile/index.php?uid=',$row->uid,'" title="',$row->titelpre,' ',$row->vorname,' ',$row->wahlname,' ',$row->nachname,' ',$row->titelpost,'">',$row->nachname,'</a>';
if($row->aktiv==false)
echo '<span style="color: red"> (ausgeschieden)</span>';
elseif($bisverwendung->beschausmasscode=='5')
@@ -275,7 +280,7 @@ function searchOE($searchItems)
$oe->result[] = new organisationseinheit($row->oe_kurzbz);
}
if(count($oe->result)>0)
if(is_array($oe->result) && count($oe->result)>0)
{
echo '<h2 style="padding-bottom: 10px;">',$p->t('global/organisationseinheiten'),'</h2>';
echo '
+2 -2
View File
@@ -158,7 +158,7 @@ $angezeigte_tage = '50';
$zs = new zeitsperre();
if ($alle)
$zs->getZeitsperrenForZeitaufzeichnung($user,'180');
$zs->getZeitsperrenForZeitaufzeichnung($user,'360');
else
$zs->getZeitsperrenForZeitaufzeichnung($user,$angezeigte_tage);
@@ -1440,7 +1440,7 @@ if ($projekt->getProjekteMitarbeiter($user, true))
else
{
if ($alle==true)
$za->getListeUserFull($user, '');
$za->getListeUserFull($user, '360');
else
$za->getListeUserFull($user, $angezeigte_tage);
}
+20
View File
@@ -105,6 +105,26 @@ else
$ical->importFreeBusy($doc, 'LVPLAN');
}
//Zeitsperren
$fp = fopen(APP_ROOT.'cis/public/freebusy_zeitsperren.php/'.$uid,'r');
if (!$fp)
{
echo "URL kann nicht geoeffnet werden<br />\n";
}
else
{
$doc = '';
while (!feof($fp))
{
$line = fgets($fp);
$doc.=$line;
}
fclose($fp);
$ical->importFreeBusy($doc, 'Zeitsperren');
}
echo $ical->getFreeBusy();
echo "\nEND:VCALENDAR";
?>
+7
View File
@@ -37,6 +37,7 @@ require_once('../../include/gebiet.class.php');
require_once('../../include/sprache.class.php');
require_once '../../include/phrasen.class.php';
require_once '../../include/reihungstest.class.php';
require_once '../../include/pruefling.class.php';
if (!$db = new basis_db())
die('Fehler beim Oeffnen der Datenbankverbindung');
@@ -157,6 +158,12 @@ echo '
if(!isset($_SESSION['pruefling_id']))
die($p->t('testtool/bitteZuerstAnmelden'));
$pruefling = new pruefling();
$pruefling->load($_SESSION['pruefling_id']);
if ($pruefling->gesperrt === 't')
die("<script>document.location.href='prueflinggesperrt.php';</script>");
$gebiet = new gebiet($gebiet_id);
if($gebiet->level_start!='')
+39
View File
@@ -0,0 +1,39 @@
<?php
require_once('../../config/cis.config.inc.php');
require_once('../../include/basis_db.class.php');
require_once('../../include/sprache.class.php');
require_once '../../include/phrasen.class.php';
if (!$db = new basis_db())
die('Fehler beim Oeffnen der Datenbankverbindung');
// Start session
session_start();
// If language is changed by language select menu, reset language variables
if (isset($_GET['sprache_user']) && !empty($_GET['sprache_user']))
{
$_SESSION['sprache_user'] = $_GET['sprache_user'];
$sprache_user = $_GET['sprache_user'];
}
// Set language variable
$sprache_user = (isset($_SESSION['sprache_user']) && !empty($_SESSION['sprache_user'])) ? $_SESSION['sprache_user'] : DEFAULT_LANGUAGE;
$p = new phrasen($sprache_user);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="../../skin/style.css.php" rel="stylesheet" type="text/css">
</head>
<body>
<br><br><br><br><br>
<center><h2><?php echo $p->t('testtool/prueflingGesperrt');?></h2>
</center>
</body>
</html>
+1 -1
View File
@@ -175,7 +175,7 @@ SELECT
SELECT
'Verlinkung von '||content_id AS art
FROM campus.tbl_contentsprache
WHERE content::text LIKE '%content.php?content_id='||content.content_id||'%'
WHERE content::text LIKE '%content.php?content_id='||content.content_id
/*WHERE content::text ~* '[\w\d\s]*content\.php\?content_id=1245[\w\d\s]*'*/
) verwendung
) AS verwendung_in,
+3
View File
@@ -258,6 +258,9 @@ define('STIP_USER_PASSWORD','password');
// Array mit Usern die nicht Kollidieren
define('KOLLISIONSFREIE_USER',serialize(array('_DummyLektor')));
// UID des Dummy Lektors
define('DUMMY_LEKTOR_UID','_DummyLektor');
// Soll der Lageplan am Infoterminal angezeigt werden (true|false)
//define('CIS_INFOSCREEN_LAGEPLAN_ANZEIGEN', true);
+3
View File
@@ -263,4 +263,7 @@ define('FAS_DOPPELTE_BUCHUNGSTYPEN_CHECK', serialize(
// Spezialnoten die am Zeunigs und Diplomasupplement ignoriert werden
define('ZEUGNISNOTE_NICHT_ANZEIGEN',serialize(array('iar', 'nz')));
//Default Lehrmodus
define ('DEFAULT_LEHRMODUS','regulaer');
?>
+1 -1
View File
@@ -496,7 +496,7 @@ if(!$error)
elseif(isset($_POST['stsem_aktuell']))
{
$stsem = new studiensemester();
$studiensemester_kurzbz = $stsem->getakt();
$studiensemester_kurzbz = $stsem->getNearest();
$variable->name = 'semester_aktuell';
$variable->wert = $studiensemester_kurzbz;
+1 -1
View File
@@ -1477,7 +1477,7 @@ if(!$error)
$lema_new->insertamum = date('Y-m-d H:i:s');
$lema_new->insertvon = $user;
$lema_new->ext_id = $row->ext_id;
$lema_new->vertrag_id = $row->vertrag_id;
$lema_new->vertrag_id = '';
if (!$lema_new->save(true))
{
+2 -1
View File
@@ -74,6 +74,7 @@ if(!$error)
$mitarbeiter->titelpre = $_POST['titelpre'];
$mitarbeiter->titelpost = $_POST['titelpost'];
$mitarbeiter->vorname = $_POST['vorname'];
$mitarbeiter->wahlname = $_POST['wahlname'];
$mitarbeiter->vornamen = $_POST['vornamen'];
$mitarbeiter->nachname = $_POST['nachname'];
$mitarbeiter->gebdatum = $_POST['geburtsdatum'];
@@ -181,7 +182,7 @@ if(!$error)
$verwendung->azgrelevant = false;
else
$verwendung->azgrelevant = '';
if($_POST['homeoffice']=='true')
$verwendung->homeoffice = true;
elseif($_POST['homeoffice']=='false')
@@ -85,6 +85,10 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
<label value="Vornamen" control="mitarbeiter-detail-textbox-vornamen"/>
<textbox id="mitarbeiter-detail-textbox-vornamen" disabled="true" maxlength="128" oninput="MitarbeiterDetailValueChange()"/>
</row>
<row>
<label value="Wahlname" control="mitarbeiter-detail-textbox-wahlname"/>
<textbox id="mitarbeiter-detail-textbox-wahlname" disabled="true" maxlength="128" oninput="MitarbeiterDetailValueChange()"/>
</row>
<row <?php echo ($rechte->isBerechtigt('mitarbeiter/persoenlich'))?'':'hidden="true"'; ?>>
<label value="Geburtsdatum" control="mitarbeiter-detail-textbox-geburtsdatum" />
<hbox>
@@ -414,6 +414,7 @@ function MitarbeiterDetailDisableFields(val)
document.getElementById('mitarbeiter-detail-textbox-titelpost').disabled=val;
document.getElementById('mitarbeiter-detail-textbox-nachname').disabled=val;
document.getElementById('mitarbeiter-detail-textbox-vorname').disabled=val;
document.getElementById('mitarbeiter-detail-textbox-wahlname').disabled=val;
document.getElementById('mitarbeiter-detail-textbox-vornamen').disabled=val;
document.getElementById('mitarbeiter-detail-textbox-geburtsdatum').disabled=val;
document.getElementById('mitarbeiter-detail-textbox-geburtsort').disabled=val;
@@ -535,6 +536,7 @@ function MitarbeiterAuswahl()
titelpre=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#titelpre" ));
titelpost=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#titelpost" ));
vorname=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#vorname" ));
wahlname=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#wahlname" ));
vornamen=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#vornamen" ));
nachname=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#nachname" ));
geburtsdatum=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#geburtsdatum" ));
@@ -576,6 +578,7 @@ function MitarbeiterAuswahl()
document.getElementById('mitarbeiter-detail-textbox-titelpre').value=titelpre;
document.getElementById('mitarbeiter-detail-textbox-titelpost').value=titelpost;
document.getElementById('mitarbeiter-detail-textbox-vorname').value=vorname;
document.getElementById('mitarbeiter-detail-textbox-wahlname').value=wahlname;
document.getElementById('mitarbeiter-detail-textbox-vornamen').value=vornamen;
document.getElementById('mitarbeiter-detail-textbox-nachname').value=nachname;
document.getElementById('mitarbeiter-detail-textbox-geburtsdatum').value=geburtsdatum;
@@ -631,7 +634,7 @@ function MitarbeiterAuswahl()
document.getElementById('mitarbeiter-detail-textbox-alias').value=alias;
// ***** KONTAKTE *****
document.getElementById('mitarbeiter-kontakt').setAttribute('src','kontakt.xul.php?person_id='+person_id);
document.getElementById('mitarbeiter-kontakt').setAttribute('src','kontakt.xul.php?person_id='+person_id+'&'+gettimestamp());
// ***** BETRIEBSMITTEL *****
document.getElementById('mitarbeiter-betriebsmittel').setAttribute('src','betriebsmitteloverlay.xul.php?person_id='+person_id+'&uid='+uid);
@@ -818,6 +821,7 @@ function MitarbeiterSave()
titelpre = document.getElementById('mitarbeiter-detail-textbox-titelpre').value;
titelpost = document.getElementById('mitarbeiter-detail-textbox-titelpost').value;
vorname = document.getElementById('mitarbeiter-detail-textbox-vorname').value;
wahlname = document.getElementById('mitarbeiter-detail-textbox-wahlname').value;
vornamen = document.getElementById('mitarbeiter-detail-textbox-vornamen').value;
nachname = document.getElementById('mitarbeiter-detail-textbox-nachname').value;
geburtsdatum = document.getElementById('mitarbeiter-detail-textbox-geburtsdatum').value;
@@ -873,6 +877,7 @@ function MitarbeiterSave()
req.add('titelpre', titelpre);
req.add('titelpost', titelpost);
req.add('vorname', vorname);
req.add('wahlname', wahlname);
req.add('vornamen', vornamen);
req.add('nachname', nachname);
req.add('geburtsdatum', ConvertDateToISO(geburtsdatum));
@@ -988,6 +993,7 @@ function MitarbeiterDetailgetSpaltenname(id)
if(id=='mitarbeiter-treecol-titelpre') return 'titelpre';
if(id=='mitarbeiter-treecol-vorname') return 'vorname';
if(id=='mitarbeiter-treecol-vornamen') return 'vornamen';
if(id=='mitarbeiter-treecol-wahlname') return 'wahlname';
if(id=='mitarbeiter-treecol-nachname') return 'nachname';
if(id=='mitarbeiter-treecol-titelpost') return 'titelpost';
if(id=='mitarbeiter-treecol-personalnummer') return 'personalnummer';
@@ -111,9 +111,13 @@ echo '<?xul-overlay href="'.APP_ROOT.'content/mitarbeiter/mitarbeitervertragover
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/mitarbeiter/rdf#vorname" onclick="MitarbeiterTreeSort()"/>
<splitter class="tree-splitter"/>
<treecol id="mitarbeiter-treecol-wahlname" label="Wahlname" flex="1" persist="hidden, width, ordinal" hidden="true"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/mitarbeiter/rdf#wahlname" onclick="MitarbeiterTreeSort()"/>
<splitter class="tree-splitter"/>
<treecol id="mitarbeiter-treecol-vornamen" label="Vornamen" flex="1" persist="hidden, width, ordinal" hidden="true"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/mitarbeiter/rdf#vornamen" onclick="MitarbeiterTreeSort()"/>
sort="rdf:http://www.technikum-wien.at/mitarbeiter/rdf#wahlname" onclick="MitarbeiterTreeSort()"/>
<splitter class="tree-splitter"/>
<treecol id="mitarbeiter-treecol-titelpost" label="TitelPost" flex="1" persist="hidden, width, ordinal" hidden="true"
class="sortDirectionIndicator"
@@ -208,7 +212,8 @@ echo '<?xul-overlay href="'.APP_ROOT.'content/mitarbeiter/mitarbeitervertragover
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/mitarbeiter/rdf#aktiv" label="rdf:http://www.technikum-wien.at/mitarbeiter/rdf#titelpre" />
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/mitarbeiter/rdf#aktiv" label="rdf:http://www.technikum-wien.at/mitarbeiter/rdf#nachname" />
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/mitarbeiter/rdf#aktiv" label="rdf:http://www.technikum-wien.at/mitarbeiter/rdf#vorname" />
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/mitarbeiter/rdf#aktiv" label="rdf:http://www.technikum-wien.at/mitarbeiter/rdf#vornamen" />
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/mitarbeiter/rdf#aktiv" label="rdf:http://www.technikum-wien.at/mitarbeiter/rdf#wahlname" />
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/mitarbeiter/rdf#aktiv" label="rdf:http://www.technikum-wien.at/mitarbeiter/rdf#vornamen" />
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/mitarbeiter/rdf#aktiv" label="rdf:http://www.technikum-wien.at/mitarbeiter/rdf#titelpost" />
<?php
if($rechte->isBerechtigt('mitarbeiter/persoenlich'))
+32 -2
View File
@@ -181,7 +181,9 @@ SELECT tbl_lehrveranstaltung.bezeichnung AS lf_bezeichnung,
AND tbl_lehrveranstaltung.lehrform_kurzbz = slv.lehrform_kurzbz
AND sle.studiensemester_kurzbz = " . $db->db_add_param($previousStsem) . "
) AS vorjahr_lektor,
tbl_lehrveranstaltung.lehrform_kurzbz
tbl_lehrveranstaltung.lehrform_kurzbz,
tbl_lehrveranstaltung.las,
tbl_lehrveranstaltung.alvs
FROM lehre.tbl_lehrveranstaltung
JOIN lehre.tbl_lehreinheit USING (lehrveranstaltung_id)
JOIN lehre.tbl_lehreinheitmitarbeiter USING (lehreinheit_id)
@@ -274,7 +276,7 @@ $maxlength[$spalte]=9;
$worksheet->write($zeile,++$spalte,"LV-Nummer", $format_bold);
$maxlength[$spalte]=9;
$worksheet->write($zeile,++$spalte,"Semesterstunden", $format_bold);
$worksheet->write($zeile,++$spalte,"Lehrauftragsstunden", $format_bold);
$maxlength[$spalte]=15;
$worksheet->write($zeile,++$spalte,"ECTS", $format_bold);
@@ -295,6 +297,14 @@ $maxlength[$spalte]=10;
$worksheet->write($zeile,++$spalte,"Start in KW", $format_bold);
$maxlength[$spalte]=10;
$worksheet->write($zeile,++$spalte,"LAS der LV", $format_bold);
$maxlength[$spalte]=10;
$worksheet->write($zeile,++$spalte,"ALVS der LV", $format_bold);
$maxlength[$spalte]=10;
$worksheet->write($zeile,++$spalte,"Anzahl Studierende", $format_bold);
$maxlength[$spalte]=16;
if($result = $db->db_query($qry))
{
@@ -445,6 +455,26 @@ if($result = $db->db_query($qry))
//Start in KW
$worksheet->write($zeile,++$spalte,$row->start_kw);
//LAS der LV
$worksheet->write($zeile,++$spalte,$row->las);
//ALVS der LV
$worksheet->write($zeile,++$spalte,$row->alvs);
// Anzahl Studierende in Lehreinheit
$anzahlStudierende = 0;
$qry_anz_std = "SELECT count(DISTINCT uid) as anzahl FROM campus.vw_student_lehrveranstaltung WHERE lehreinheit_id=".$db->db_add_param($row->lehreinheit_id, FHC_INTEGER);
if($result_anz_std = $db->db_query($qry_anz_std))
{
if ($row_anz_std = $db->db_fetch_object($result_anz_std))
{
$anzahlStudierende = $row_anz_std->anzahl;
}
}
$worksheet->write($zeile,++$spalte,$anzahlStudierende);
}
//Betreuungen
+224 -7
View File
@@ -95,6 +95,7 @@ if(!$rechte->isBerechtigt('admin') && !$rechte->isBerechtigt('assistenz') && !$r
$data = '';
$error = true;
}
$check_statusaenderung_berechtigung = 'student/keine_studstatuspruefung';
// *** FUNKTIONEN ***
@@ -372,6 +373,175 @@ function isBuchungAllowedToChange($buchung_obj)
return true;
}
/**
*
* Prüft für einen Prestudenten, ob eine bestimmte Statusänderung valide ist.
* @param $prestudent_id
* @param $status_kurzbz des neuen/bearbeiteten Status
* @param $new_status_studiensemester Studiensemester des neuen/zu ändernen Status
* @param $new_status_datum Datum des neuen/zu ändernen Status
* @param $new_status_ausbildungssemester Ausbildungssemester des neuen/zu ändernen Status
* @param $old_status_studiensemester Studiensemester des alten Status, leer wenn neuer Status
* @param $old_status_ausbildungssemester Ausbildungssemester des alten Status, leer wenn neuer Status
* @return array
*/
function checkStatusaenderung(
$prestudent_id, $status_kurzbz, $new_status_studiensemester, $new_status_datum, $new_status_ausbildungssemester,
$old_status_studiensemester = '', $old_status_ausbildungssemester = ''
)
{
global $db;
// Es ist ein neuer Status wenn es kein altes Semester gibt
$isNewStatus = $old_status_studiensemester == '' && $old_status_ausbildungssemester == '';
// status_kurzbz für Endstatus
$endstatusArr = array('Absolvent', 'Abbrecher');
// Datum des neuen Status setzen
$new_status_datum = new DateTime($new_status_datum);
// Wenn neuer Status
if ($isNewStatus)
{
// Datum des neuen Status darf nicht in Vergangenheit liegen, sonst Probleme wenn neues Datum < Bismeldedatum
$current_date = new DateTime('today');
if ($new_status_datum < $current_date)
{
return array(
'error' => true,
'errormsg' => 'Datum eines neuen Statuseintrags darf nicht in der Vergangenheit liegen'
);
}
}
// start des Studiensemesters holen
$studiensemester = new studiensemester();
$studiensemester->load($new_status_studiensemester);
$new_status_semesterstart = new DateTime($studiensemester->start);
// Alle bisherigen prestudentstatus nach Datum sortiert
$qry = "SELECT status_kurzbz, studiensemester_kurzbz, ausbildungssemester, datum, sem.start AS studiensemester_start
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_studiensemester sem USING (studiensemester_kurzbz)
WHERE prestudent_id=".$db->db_add_param($prestudent_id, FHC_INTEGER);
// zu ändernden Status rausfiltern wenn Status bearbeitet wird
if (!$isNewStatus)
{
$qry .= " AND NOT (
status_kurzbz=".$db->db_add_param($status_kurzbz)
." AND studiensemester_kurzbz=".$db->db_add_param($old_status_studiensemester)
." AND ausbildungssemester=".$db->db_add_param($old_status_ausbildungssemester, FHC_INTEGER)."
)";
}
$qry .= " ORDER BY datum DESC, pss.insertamum DESC, pss.ext_id DESC";
$statusArr = array();
if ($result = $db->db_query($qry))
{
$newStatusInserted = false;
// für jeden Status
while ($row = $db->db_fetch_object($result))
{
$studiensemester_start = new DateTime($row->studiensemester_start);
$status_datum = new DateTime($row->datum);
// Neuer/editierter Statuseintrag nach bestehendem Statuseintrag
if ($new_status_datum >= $status_datum && $new_status_semesterstart >= $studiensemester_start)
{
if (!$newStatusInserted)
{
// neuer Status erstmals größer als Datum eines bestehenden Status -> neuen Status einfügen
$new_status = new stdClass();
$new_status->status_kurzbz = $status_kurzbz;
$new_status->studiensemester_kurzbz = $new_status_studiensemester;
$new_status->datum = $new_status_datum;
$new_status->ausbildungssemester = $new_status_ausbildungssemester;
$statusArr[] = $new_status;
$newStatusInserted = true;
}
// Gültige Zeitabfolge, bestehenden Status hinzufügen
$statusArr[] = $row;
}
// oder Neuer/editierter Statuseintrag nach bestehendem Statuseintrag
elseif ($new_status_datum <= $status_datum && $new_status_semesterstart <= $studiensemester_start)
{
// Gültige Zeitabfolge, bestehenden Status hinzufügen
$statusArr[] = $row;
}
else
{
// Zeitabfolge ungültig, Fehler
return array(
'error' => true,
'errormsg' => 'Datum des Statuseintrags muss nach dem Statusdatum,'
.' Semesterstartdatum nach Semesterstartdatum des vorherigen Statuseintrags sein'
);
}
}
// Prüfungen den Prestudentstatus betreffend
// Über alle gespeicherten Status gehen und Statusabfolge prüfen
for ($i = 0; $i < count($statusArr); $i++)
{
$curr_status = $statusArr[$i];
$curr_status_kurzbz = $curr_status->status_kurzbz;
$curr_status_ausbildungssemester = $curr_status->ausbildungssemester;
$next_idx = $i - 1; //absteigend sortiert, nächster Status ist vorheriger Eintrag
$next_status = isset($statusArr[$next_idx]) ? $statusArr[$next_idx] : null;
// Abbrecher- oder Absolventenstatus muss Endstatus sein
if (isset($next_status) && in_array($curr_status_kurzbz, $endstatusArr))
{
return array(
'error' => true,
'errormsg' => 'Nach Abbrecher- und Absolventenstatus darf kein anderer Status mehr eingetragen werden'
);
}
// wenn Unterbrecher auf Unterbrecher folgt, muss Ausbildungssemester gleich sein
if (
$curr_status_kurzbz == 'Unterbrecher' && isset($next_status) && $next_status->status_kurzbz == 'Unterbrecher'
&& $curr_status_ausbildungssemester != $next_status->ausbildungssemester
)
{
return array(
'error' => true,
'errormsg' => 'Aufeinanderfolgende Unterbrecher müssen gleiches Ausbildungssemester haben'
);
}
// wenn Abbrecher auf Unterbrecher folgt, muss Ausbildungssemester gleich sein
if (
isset($next_status) && $curr_status_kurzbz == 'Unterbrecher'
&& $next_status->status_kurzbz == 'Abbrecher' && $curr_status_ausbildungssemester != $next_status->ausbildungssemester
)
{
return array(
'error' => true,
'errormsg' => 'Unterbrecher und folgender Abbrecher müssen gleiches Ausbildungssemester haben'
);
}
// keine Studenten nach Diplomand Status
if (
isset($next_status) && $curr_status_kurzbz == 'Diplomand' && $next_status->status_kurzbz == 'Student'
)
{
return array(
'error' => true,
'errormsg' => 'Nach Diplomantenstatus darf kein Studentenstatus mehr eingetragen werden'
);
}
}
}
else
return array('error' => true, 'errormsg' => 'Fehler bei Statusänderungcheck');
return array('error' => false, 'errormsg' => '');
}
if(!$error)
{
@@ -403,7 +573,7 @@ if(!$error)
$return = false;
$errormsg = 'Geburtsdatum ist nicht korrekt.';
$error = true;
}
}
if(!$error)
{
@@ -412,6 +582,7 @@ if(!$error)
$student->titelpre = $_POST['titelpre'];
$student->titelpost = $_POST['titelpost'];
$student->vorname = $_POST['vorname'];
$student->wahlname = $_POST['wahlname'];
$student->vornamen = $_POST['vornamen'];
$student->nachname = $_POST['nachname'];
$student->gebdatum = $_POST['geburtsdatum'];
@@ -565,6 +736,7 @@ if(!$error)
$person->titelpost = $_POST['titelpost'];
$person->vorname = $_POST['vorname'];
$person->vornamen = $_POST['vornamen'];
$person->wahlname = $_POST['wahlname'];
$person->nachname = $_POST['nachname'];
$person->gebdatum = $_POST['geburtsdatum'];
$person->gebort = $_POST['geburtsort'];
@@ -648,12 +820,12 @@ if(!$error)
$prestudent->zgvort = $_POST['zgvort'];
$prestudent->zgvdatum = $_POST['zgvdatum'];
$prestudent->zgvnation = $_POST['zgvnation'];
$prestudent->zgv_erfuellt = $_POST['zgv_erfuellt'];
$prestudent->zgv_erfuellt = $_POST['zgv_erfuellt'];
$prestudent->zgvmas_code = $_POST['zgvmas_code'];
$prestudent->zgvmaort = $_POST['zgvmaort'];
$prestudent->zgvmadatum = $_POST['zgvmadatum'];
$prestudent->zgvmanation = $_POST['zgvmanation'];
$prestudent->zgvmas_erfuellt = $_POST['zgvmas_erfuellt'];
$prestudent->zgvmas_erfuellt = $_POST['zgvmas_erfuellt'];
$prestudent->zgvdoktor_code = $_POST['zgvdoktor_code'];
$prestudent->zgvdoktorort = $_POST['zgvdoktorort'];
$prestudent->zgvdoktordatum = $_POST['zgvdoktordatum'];
@@ -808,6 +980,28 @@ if(!$error)
}
}
// wenn keine spezielle Berechtiung zur Umgebung, Statusänderung Checks durchführen
if (!$rechte->isBerechtigt($check_statusaenderung_berechtigung))
{
$new_status_datum = isset($_POST['datum']) ? $_POST['datum'] : date('Y-m-d');
$check_statusaenderung_result = checkStatusaenderung(
$prestudent_id,
$_POST['status_kurzbz'],
$studiensemester,
$new_status_datum,
$sem
);
if (isset($check_statusaenderung_result['error']) && $check_statusaenderung_result['error'] === true)
{
$return = false;
$error = true;
$errormsg .= isset($check_statusaenderung_result['errormsg']) ? $check_statusaenderung_result['errormsg'] : '';
$anzahl_fehler++;
}
}
if(!$error)
{
$prestd_neu = new prestudent();
@@ -1003,7 +1197,7 @@ if(!$error)
isset($_POST['prestudent_id']) && is_numeric($_POST['prestudent_id']) &&
isset($_POST['ausbildungssemester']) && is_numeric($_POST['ausbildungssemester']))
{
if($_POST['status_kurzbz']=='Student' && !$rechte->isBerechtigt('admin', null, 'suid'))
if($_POST['status_kurzbz']=='Student' && !$rechte->isBerechtigt('admin', null, 'suid') && !$rechte->isBerechtigt('student/keine_studstatuspruefung', null, 'suid'))
{
$return = false;
$errormsg = 'Studentenrolle kann nur durch den Administrator geloescht werden';
@@ -1019,7 +1213,7 @@ if(!$error)
if($row->anzahl<=1)
{
$deletePrestudent = true;
if (!$rechte->isBerechtigt('admin', null, 'suid'))
if (!$rechte->isBerechtigt('admin', null, 'suid') && !$rechte->isBerechtigt('student/keine_studstatuspruefung', null, 'suid'))
{
$return = false;
$errormsg = 'Die letzte Rolle kann nur durch den Administrator geloescht werden';
@@ -1307,6 +1501,28 @@ if(!$error)
$rolle->new = false;
}
// Statuschecks durchführen wenn keine spezielle Berechtigung zur Umgehung
if (!$rechte->isBerechtigt($check_statusaenderung_berechtigung))
{
// allgemeine Prüfung bei Änderung oder Hinzufügen eines Status, inkludiert alle Status
$check_statusaenderung_result = checkStatusaenderung(
$_POST['prestudent_id'],
$_POST['status_kurzbz'],
$_POST['studiensemester_kurzbz'],
$_POST['datum'],
$_POST['ausbildungssemester'],
$_POST['studiensemester_old'],
$_POST['ausbildungssemester_old']
);
if (isset($check_statusaenderung_result['error']) && $check_statusaenderung_result['error'] === true)
{
$return = false;
$error = true;
$errormsg = isset($check_statusaenderung_result['errormsg']) ? $check_statusaenderung_result['errormsg'] : '';
}
}
if(!$error)
{
// Bei Studenten wird der Studentlehrverband Eintrag angelegt/korrigiert
@@ -2361,7 +2577,7 @@ if(!$error)
{
if ($dokument_kurzbz === 'Sonst' && $sonst !== 0)
continue;
if($dokument_kurzbz!='')
{
$dok = new dokument();
@@ -2374,7 +2590,7 @@ if(!$error)
$dok->new = true;
if ($dokument_kurzbz === 'Sonst')
$sonst++;
if(!$dok->save())
{
@@ -2912,6 +3128,7 @@ if(!$error)
$bisio->bisio_id = (isset($_POST['bisio_id'])?$_POST['bisio_id']:'');
$bisio->mobilitaetsprogramm_code = $_POST['mobilitaetsprogramm_code'];
$bisio->nation_code = $_POST['nation_code'];
$bisio->herkunftsland_code = $_POST['herkunftsland_code'];
$bisio->von = $_POST['von'];
$bisio->bis = $_POST['bis'];
$bisio->student_uid = $_POST['student_uid'];
@@ -226,17 +226,28 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
<row>
<label value="Vorsitz" control="student-abschlusspruefung-menulist-vorsitz" />
<menulist id="student-abschlusspruefung-menulist-vorsitz"
xmlns:MITARBEITER_AKTIV="http://www.technikum-wien.at/mitarbeiter/rdf#"
editable="true" disabled="true"
datasources="rdf:null" flex="1"
ref="http://www.technikum-wien.at/mitarbeiter/liste"
oninput="StudentAbschlusspruefungMenulistMitarbeiterLoad(this)">
<template>
<menupopup>
<menuitem value="rdf:http://www.technikum-wien.at/mitarbeiter/rdf#uid"
label="rdf:http://www.technikum-wien.at/mitarbeiter/rdf#nachname rdf:http://www.technikum-wien.at/mitarbeiter/rdf#vorname rdf:http://www.technikum-wien.at/mitarbeiter/rdf#titelpre rdf:http://www.technikum-wien.at/mitarbeiter/rdf#titelpost"
myvalue="rdf:http://www.technikum-wien.at/mitarbeiter/rdf#uid"
uri="rdf:*"/>
</menupopup>
<rule MITARBEITER_AKTIV:aktiv='inaktiv'>
<menupopup>
<menuitem value="rdf:http://www.technikum-wien.at/mitarbeiter/rdf#uid"
label="rdf:http://www.technikum-wien.at/mitarbeiter/rdf#nachname rdf:http://www.technikum-wien.at/mitarbeiter/rdf#vorname rdf:http://www.technikum-wien.at/mitarbeiter/rdf#titelpre rdf:http://www.technikum-wien.at/mitarbeiter/rdf#titelpost ( rdf:http://www.technikum-wien.at/mitarbeiter/rdf#uid )"
myvalue="rdf:http://www.technikum-wien.at/mitarbeiter/rdf#uid"
uri="rdf:*" style="color: grey;"/>
</menupopup>
</rule>
<rule>
<menupopup>
<menuitem value="rdf:http://www.technikum-wien.at/mitarbeiter/rdf#uid"
label="rdf:http://www.technikum-wien.at/mitarbeiter/rdf#nachname rdf:http://www.technikum-wien.at/mitarbeiter/rdf#vorname rdf:http://www.technikum-wien.at/mitarbeiter/rdf#titelpre rdf:http://www.technikum-wien.at/mitarbeiter/rdf#titelpost ( rdf:http://www.technikum-wien.at/mitarbeiter/rdf#uid )"
myvalue="rdf:http://www.technikum-wien.at/mitarbeiter/rdf#uid"
uri="rdf:*"/>
</menupopup>
</rule>
</template>
</menulist>
<label value="PrueferIn 1" id="student-abschlusspruefung-label-pruefer1" control="student-abschlusspruefung-menulist-pruefer1" />
+83 -30
View File
@@ -71,9 +71,10 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
<row>
<label value="Person ID" control="student-detail-textbox-person_id"/>
<hbox><textbox id="student-detail-textbox-person_id" readonly="true" maxlength="16" size="16"/></hbox>
<label value="Zugangscode" control="student-detail-zugangscode"/>
<?php $hideZugangscode = (defined('ACTIVE_ADDONS') && strpos(ACTIVE_ADDONS, 'bewerbung') !== false) ? '':' hidden="true"'; ?>
<label value="Zugangscode" control="student-detail-zugangscode" <?php echo $hideZugangscode; ?>/>
<label id="label-student-detail-link_bewerbungstool" hidden="true" value=""></label>
<label class="text-link" href="#" id="label-student-detail-zugangscode" value="" onclick="window.open(document.getElementById('label-student-detail-link_bewerbungstool').value)"/>
<label class="text-link" href="#" id="label-student-detail-zugangscode" value="" <?php echo $hideZugangscode; ?> onclick="window.open(document.getElementById('label-student-detail-link_bewerbungstool').value)"/>
<?php $hideBpk = $rechte->isBerechtigt('student/bpk') ? '':' hidden="true"'; ?>
<label value="BPK" control="student-detail-textbox-bpk"<?php echo $hideBpk; ?>/>
<hbox><textbox id="student-detail-textbox-bpk" disabled="true" maxlength="28" size="50"<?php echo $hideBpk; ?>/></hbox>
@@ -94,6 +95,10 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
<label value="Vornamen" control="student-detail-textbox-vornamen"/>
<textbox id="student-detail-textbox-vornamen" disabled="true" maxlength="128"/>
</row>
<row>
<label value="Wahlname" control="student-detail-textbox-wahlname"/>
<textbox id="student-detail-textbox-wahlname" disabled="true" maxlength="128"/>
</row>
<row>
<label value="Geburtsdatum" control="student-detail-textbox-geburtsdatum"/>
<hbox>
@@ -302,17 +307,14 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
<menuitem label="Status vorrücken" oncommand="StudentPrestudentRolleVorruecken();" id="student-prestudent-rolle-tree-popup-move_forward" hidden="false"/>
</menupopup>
</popupset>
<vbox hidden="true">
<label value="Neu"/>
<checkbox id="student-prestudent-checkbox-new" checked="false" />
<label value="Person_id"/>
<textbox id="student-prestudent-textbox-person_id" disabled="true"/>
<label value="Prestudent_id"/>
<textbox id="student-prestudent-textbox-prestudent_id" disabled="true"/>
<label value="studiengang_kz"/>
<textbox id="student-prestudent-textbox-studiengang_kz" disabled="true"/>
</vbox>
<hbox hidden="true">
<toolbox flex="1">
<label value="Neu"/>
<checkbox id="student-prestudent-checkbox-new" checked="false" />
<label value="studiengang_kz"/>
<textbox id="student-prestudent-textbox-studiengang_kz"/>
</toolbox>
</hbox>
<groupbox id="student-detail-groupbox-zgv">
<caption id="student-detail-groupbox-caption" label="Zugangsvoraussetzung" />
<grid id="student-prestudent-grid-zgv" style="margin:4px;" flex="1">
@@ -329,18 +331,44 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
<column flex="1"/>
</columns>
<rows>
<?php
$hidden = 'hidden="true"';
$rechte = new benutzerberechtigung();
$rechte->getBerechtigungen($user);
if($rechte->isBerechtigt('admin'))
$hidden = '';
?>
<row <?php echo $hidden ?>>
<label value="Prestudent_id"/>
<hbox><textbox id="student-prestudent-textbox-prestudent_id" readonly="true" maxlength="16" size="16"/></hbox>
<label value="Person_id"/>
<hbox><textbox id="student-prestudent-textbox-person_id" readonly="true" maxlength="16" size="16"/></hbox>
</row>
<row>
<label value="ZGV" control="student-prestudent-menulist-zgvcode"/>
<menulist id="student-prestudent-menulist-zgvcode" disabled="true"
datasources="<?php echo APP_ROOT ?>rdf/zgv.rdf.php?optional=true" flex="1"
ref="http://www.technikum-wien.at/zgv/alle"
xmlns:ZGV="http://www.technikum-wien.at/zgv/rdf#"
style="min-width: 130px">
<template>
<menupopup>
<menuitem value="rdf:http://www.technikum-wien.at/zgv/rdf#code"
label="rdf:http://www.technikum-wien.at/zgv/rdf#kurzbz"
uri="rdf:*"/>
<rule ZGV:aktiv='f'>
<menupopup>
<menuitem value="rdf:http://www.technikum-wien.at/zgv/rdf#code"
label="rdf:http://www.technikum-wien.at/zgv/rdf#kurzbz"
uri="rdf:*"
style="text-decoration:line-through;"
/>
</menupopup>
</rule>
<rule>
<menupopup>
<menuitem value="rdf:http://www.technikum-wien.at/zgv/rdf#code"
label="rdf:http://www.technikum-wien.at/zgv/rdf#kurzbz"
uri="rdf:*"
/>
</menupopup>
</rule>
</template>
</menulist>
<label value="ZGV Ort" control="student-prestudent-textbox-zgvort"/>
@@ -391,14 +419,26 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
<menulist id="student-prestudent-menulist-zgvmastercode" disabled="true"
datasources="<?php echo APP_ROOT ?>rdf/zgvmaster.rdf.php?optional=true" flex="1"
ref="http://www.technikum-wien.at/zgvmaster/alle"
xmlns:ZGVMASTER="http://www.technikum-wien.at/zgvmaster/rdf#"
style="min-width: 130px" >
<template>
<menupopup>
<menuitem value="rdf:http://www.technikum-wien.at/zgvmaster/rdf#code"
label="rdf:http://www.technikum-wien.at/zgvmaster/rdf#kurzbz"
uri="rdf:*"
/>
</menupopup>
<rule ZGVMASTER:aktiv='f'>
<menupopup>
<menuitem value="rdf:http://www.technikum-wien.at/zgvmaster/rdf#code"
label="rdf:http://www.technikum-wien.at/zgvmaster/rdf#kurzbz"
uri="rdf:*"
style="text-decoration:line-through;"
/>
</menupopup>
</rule>
<rule>
<menupopup>
<menuitem value="rdf:http://www.technikum-wien.at/zgvmaster/rdf#code"
label="rdf:http://www.technikum-wien.at/zgvmaster/rdf#kurzbz"
uri="rdf:*"
/>
</menupopup>
</rule>
</template>
</menulist>
<label value="ZGV Master Ort" control="student-prestudent-textbox-zgvmasterort"/>
@@ -451,13 +491,26 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
<label value="ZGV Doktor" control="student-prestudent-menulist-zgvdoktorcode"/>
<menulist id="student-prestudent-menulist-zgvdoktorcode" disabled="true"
datasources="<?php echo APP_ROOT ?>rdf/zgvdoktor.rdf.php?optional=true" flex="1"
ref="http://www.technikum-wien.at/zgvdoktor/alle" >
ref="http://www.technikum-wien.at/zgvdoktor/alle"
xmlns:ZGVDOKTOR="http://www.technikum-wien.at/zgvdoktor/rdf#">
<template>
<menupopup>
<menuitem value="rdf:http://www.technikum-wien.at/zgvdoktor/rdf#code"
label="rdf:http://www.technikum-wien.at/zgvdoktor/rdf#kurzbz"
uri="rdf:*"/>
</menupopup>
<rule ZGVDOKTOR:aktiv='f'>
<menupopup>
<menuitem value="rdf:http://www.technikum-wien.at/zgvdoktor/rdf#code"
label="rdf:http://www.technikum-wien.at/zgvdoktor/rdf#kurzbz"
uri="rdf:*"
style="text-decoration:line-through;"
/>
</menupopup>
</rule>
<rule>
<menupopup>
<menuitem value="rdf:http://www.technikum-wien.at/zgvdoktor/rdf#code"
label="rdf:http://www.technikum-wien.at/zgvdoktor/rdf#kurzbz"
uri="rdf:*"
/>
</menupopup>
</rule>
</template>
</menulist>
<label value="ZGV Doktor Ort" control="student-prestudent-textbox-zgvdoktorort"/>
@@ -626,7 +679,7 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
<checkbox id="student-prestudent-checkbox-bismelden" checked="true" disabled="true"/>
</hbox>
<hbox>
<label value="Dual" control="student-prestudent-checkbox-dual"/>
<label value="Duales Studium" control="student-prestudent-checkbox-dual"/>
<checkbox id="student-prestudent-checkbox-dual" checked="false" disabled="true"/>
</hbox>
<hbox>
+6 -1
View File
@@ -131,7 +131,7 @@ else
echo '<menuitem label="Student" oncommand="StudentUnterbrecherZuStudent()" disabled="false" tooltiptext="Status ändern auf Student"/>';
if ($id == 'interessent-toolbar-zustudent')
echo '<menuitem label="Student" oncommand="InteressentzuStudent()" disabled="false" tooltiptext="Status ändern auf Student"/>';
foreach($gruende[$status_kurzbz] as $row)
{
$commandWithID = str_replace('STATUSGRUNDID',$row['statusgrund_id'],$command);
@@ -270,6 +270,10 @@ else
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/student/rdf#vorname" onclick="StudentTreeSort()"/>
<splitter class="tree-splitter"/>
<treecol id="student-treecol-wahlname" label="Wahlname" flex="1" hidden="true" persist="hidden, width, ordinal"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/student/rdf#wahlname" onclick="StudentTreeSort()"/>
<splitter class="tree-splitter"/>
<treecol id="student-treecol-vornamen" label="Vornamen" flex="1" hidden="true" persist="hidden, width, ordinal"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/student/rdf#vornamen" onclick="StudentTreeSort()"/>
@@ -436,6 +440,7 @@ else
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/student/rdf#aktiv" label="rdf:http://www.technikum-wien.at/student/rdf#titelpre" />
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/student/rdf#aktiv" label="rdf:http://www.technikum-wien.at/student/rdf#nachname" />
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/student/rdf#aktiv" label="rdf:http://www.technikum-wien.at/student/rdf#vorname" />
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/student/rdf#aktiv" label="rdf:http://www.technikum-wien.at/student/rdf#wahlname" />
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/student/rdf#aktiv" label="rdf:http://www.technikum-wien.at/student/rdf#vornamen" />
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/student/rdf#aktiv" label="rdf:http://www.technikum-wien.at/student/rdf#titelpost" />
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/student/rdf#aktiv" label="rdf:http://www.technikum-wien.at/student/rdf#svnr" />
+14
View File
@@ -171,6 +171,20 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
</template>
</menulist>
</row>
<row>
<label value="Herkunftsland" control="student-io-menulist-herkunftsland"/>
<menulist id="student-io-menulist-herkunftsland" disabled="true"
datasources="<?php echo APP_ROOT ?>rdf/nation.rdf.php" flex="1"
ref="http://www.technikum-wien.at/nation/liste" >
<template>
<menupopup>
<menuitem value="rdf:http://www.technikum-wien.at/nation/rdf#nation_code"
label="rdf:http://www.technikum-wien.at/nation/rdf#kurztext"
uri="rdf:*"/>
</menupopup>
</template>
</menulist>
</row>
<row>
<label value="Zweck" control="student-io-menulist-zweck"/>
<vbox>
+17 -1
View File
@@ -727,6 +727,7 @@ function StudentDetailReset()
document.getElementById('student-detail-textbox-titelpre').value='';
document.getElementById('student-detail-textbox-titelpost').value='';
document.getElementById('student-detail-textbox-vorname').value='';
document.getElementById('student-detail-textbox-wahlname').value='';
document.getElementById('student-detail-textbox-vornamen').value='';
document.getElementById('student-detail-textbox-nachname').value='';
document.getElementById('student-detail-textbox-geburtsdatum').value='';
@@ -759,6 +760,7 @@ function StudentDetailDisableFields(val)
document.getElementById('student-detail-textbox-titelpre').disabled=val;
document.getElementById('student-detail-textbox-titelpost').disabled=val;
document.getElementById('student-detail-textbox-vorname').disabled=val;
document.getElementById('student-detail-textbox-wahlname').disabled=val;
document.getElementById('student-detail-textbox-vornamen').disabled=val;
document.getElementById('student-detail-textbox-nachname').disabled=val;
document.getElementById('student-detail-textbox-geburtsdatum').disabled=val;
@@ -799,6 +801,7 @@ function StudentDetailSave()
titelpre = document.getElementById('student-detail-textbox-titelpre').value;
titelpost = document.getElementById('student-detail-textbox-titelpost').value;
vorname = document.getElementById('student-detail-textbox-vorname').value;
wahlname = document.getElementById('student-detail-textbox-wahlname').value;
vornamen = document.getElementById('student-detail-textbox-vornamen').value;
nachname = document.getElementById('student-detail-textbox-nachname').value;
geburtsdatum = document.getElementById('student-detail-textbox-geburtsdatum').value;
@@ -857,6 +860,7 @@ function StudentDetailSave()
req.add('titelpre', titelpre);
req.add('titelpost', titelpost);
req.add('vorname', vorname);
req.add('wahlname', wahlname);
req.add('vornamen', vornamen);
req.add('nachname', nachname);
req.add('geburtsdatum', ConvertDateToISO(geburtsdatum));
@@ -1025,7 +1029,10 @@ function StudentCount()
// ****
function StudentAuswahl()
{
document.getElementById('student-toolbar-label-anzahl').value = 'Anzahl: ' + StudentCount();
var tree=document.getElementById('student-tree');
var items = tree.view.rowCount; //Anzahl der Zeilen ermitteln
document.getElementById('student-toolbar-label-anzahl').value = 'Anzahl: ' + StudentCount() + '/' + items;
if(!StudentTreeLoadDataOnSelect)
{
@@ -1101,6 +1108,7 @@ function StudentAuswahl()
titelpre=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#titelpre" ));
titelpost=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#titelpost" ));
vorname=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#vorname" ));
wahlname=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#wahlname" ));
vornamen=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#vornamen" ));
nachname=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#nachname" ));
geburtsdatum=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#geburtsdatum" ));
@@ -1144,6 +1152,7 @@ function StudentAuswahl()
document.getElementById('student-detail-textbox-titelpre').value=titelpre;
document.getElementById('student-detail-textbox-titelpost').value=titelpost;
document.getElementById('student-detail-textbox-vorname').value=vorname;
document.getElementById('student-detail-textbox-wahlname').value=wahlname;
document.getElementById('student-detail-textbox-vornamen').value=vornamen;
document.getElementById('student-detail-textbox-nachname').value=nachname;
document.getElementById('student-detail-textbox-geburtsdatum').value=geburtsdatum;
@@ -3502,6 +3511,7 @@ function StudentIOAuswahl()
mobilitaetsprogramm_code = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#mobilitaetsprogramm_code" ));
nation_code = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#nation_code" ));
herkunftsland_code = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#herkunftsland_code" ));
von = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#von" ));
bis = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#bis" ));
zweck_code = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#zweck_code" ));
@@ -3576,6 +3586,7 @@ function StudentIOAuswahl()
document.getElementById('student-io-menulist-mobilitaetsprogramm').value=mobilitaetsprogramm_code;
document.getElementById('student-io-menulist-nation').value=nation_code;
document.getElementById('student-io-menulist-herkunftsland').value=herkunftsland_code;
document.getElementById('student-io-textbox-von').value=von;
document.getElementById('student-io-textbox-bis').value=bis;
document.getElementById('student-io-detail-textbox-uid').value=student_uid;
@@ -3810,6 +3821,7 @@ function StudentIODetailDisableFields(val)
document.getElementById('student-io-textbox-bis').disabled=val;
document.getElementById('student-io-menulist-mobilitaetsprogramm').disabled=val;
document.getElementById('student-io-menulist-nation').disabled=val;
document.getElementById('student-io-menulist-herkunftsland').disabled=val;
document.getElementById('student-io-menulist-zweck').disabled=val;
document.getElementById('student-io-button-speichern').disabled=val;
document.getElementById('student-io-menulist-lehrveranstaltung').disabled=val;
@@ -3835,6 +3847,7 @@ function StudentIOResetFileds()
document.getElementById('student-io-menulist-mobilitaetsprogramm').value='7';
document.getElementById('student-io-menulist-zweck').value='2';
document.getElementById('student-io-menulist-nation').value='A';
document.getElementById('student-io-menulist-herkunftsland').value='A';
document.getElementById('student-io-textbox-ort').value='';
document.getElementById('student-io-textbox-universitaet').value='';
document.getElementById('student-io-textbox-ects_angerechnet').value='';
@@ -3852,6 +3865,7 @@ function StudentIODetailSpeichern()
bis = document.getElementById('student-io-textbox-bis').value;
mobilitaetsprogramm = document.getElementById('student-io-menulist-mobilitaetsprogramm').value;
nation_code = document.getElementById('student-io-menulist-nation').value;
herkunftsland_code = document.getElementById('student-io-menulist-herkunftsland').value;
zweck_code = document.getElementById('student-io-menulist-zweck').value;
uid = document.getElementById('student-io-detail-textbox-uid').value;
neu = document.getElementById('student-io-detail-checkbox-neu').checked;
@@ -3889,6 +3903,7 @@ function StudentIODetailSpeichern()
req.add('bis', ConvertDateToISO(bis));
req.add('mobilitaetsprogramm_code', mobilitaetsprogramm);
req.add('nation_code', nation_code);
req.add('herkunftsland_code', herkunftsland_code);
req.add('zweck_code', zweck_code);
req.add('student_uid', uid);
req.add('studiengang_kz', studiengang_kz);
@@ -4026,6 +4041,7 @@ function StudentIONeu()
req.add('bis', ConvertDateToISO(defaultdatum));
req.add('mobilitaetsprogramm_code', mobilitaetsprogramm);
req.add('nation_code', 'A');
req.add('herkunftsland_code', 'A');
req.add('student_uid', uid);
req.add('studiengang_kz', stg_kz);
req.add('lehreinheit_id', '');

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