diff --git a/application/config/anrechnung.php b/application/config/anrechnung.php new file mode 100644 index 000000000..d1f4f0958 --- /dev/null +++ b/application/config/anrechnung.php @@ -0,0 +1,22 @@ + LDAP_BASE_DN, 'username' => LDAP_BIND_USER, 'password' => LDAP_BIND_PASSWORD, - 'usf' => LDAP_USER_SEARCH_FILTER + 'usf' => LDAP_USER_SEARCH_FILTER, + 'timeout' => 1 ); } @@ -30,7 +31,8 @@ if (defined('LDAP2_SERVER')) // 2nd LDAP server 'basedn' => LDAP2_BASE_DN, 'username' => LDAP2_BIND_USER, 'password' => LDAP2_BIND_PASSWORD, - 'usf' => LDAP2_USER_SEARCH_FILTER + 'usf' => LDAP2_USER_SEARCH_FILTER, + 'timeout' => 1 ); } @@ -45,7 +47,8 @@ if (defined('LDAP_SERVER')) // 1st LDAP server 'basedn' => LDAP_BASE_DN, 'username' => LDAP_BIND_USER, 'password' => LDAP_BIND_PASSWORD, - 'usf' => LDAP_USER_SEARCH_FILTER + 'usf' => LDAP_USER_SEARCH_FILTER, + 'timeout' => 1 ); } @@ -58,6 +61,8 @@ if (defined('LDAP2_SERVER')) // 2nd LDAP server 'basedn' => LDAP2_BASE_DN, 'username' => LDAP2_BIND_USER, 'password' => LDAP2_BIND_PASSWORD, - 'usf' => LDAP2_USER_SEARCH_FILTER + 'usf' => LDAP2_USER_SEARCH_FILTER, + 'timeout' => 1 ); } + diff --git a/application/config/navigation.php b/application/config/navigation.php index 84004b58e..c2d221a80 100644 --- a/application/config/navigation.php +++ b/application/config/navigation.php @@ -62,6 +62,15 @@ $config['navigation_header'] = array( 'lehre/lehrauftrag_bestellen:r', 'lehre/lehrauftrag_erteilen:r' ) + ), + 'zgvueberpruefung' => array( + 'link' => site_url('system/infocenter/ZGVUeberpruefung'), + 'description' => 'ZGV Überprüfung', + 'expand' => true, + 'sort' => 50, + 'requiredPermissions' => array( + 'lehre/zgvpruefung:r' + ) ) ) ), diff --git a/application/controllers/api/v1/CheckUserAuth.php b/application/controllers/api/v1/CheckUserAuth.php index ee751e886..c82df9065 100644 --- a/application/controllers/api/v1/CheckUserAuth.php +++ b/application/controllers/api/v1/CheckUserAuth.php @@ -12,7 +12,7 @@ class CheckUserAuth extends RESTFul_Controller parent::__construct(); // Loads helper message to manage returning messages - // NOTE: loaded here because it does not extend the APIv1_Controller + // NOTE: loaded here because it does not extend the API_Controller $this->load->helper('hlp_return_object'); } diff --git a/application/controllers/api/v1/accounting/Aufteilung.php b/application/controllers/api/v1/accounting/Aufteilung.php index cc9c2826f..9cf4e3474 100644 --- a/application/controllers/api/v1/accounting/Aufteilung.php +++ b/application/controllers/api/v1/accounting/Aufteilung.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Aufteilung extends APIv1_Controller +class Aufteilung extends API_Controller { /** * Aufteilung API constructor. diff --git a/application/controllers/api/v1/accounting/Bestelldetail.php b/application/controllers/api/v1/accounting/Bestelldetail.php index 191ba95a0..f21b1bee6 100644 --- a/application/controllers/api/v1/accounting/Bestelldetail.php +++ b/application/controllers/api/v1/accounting/Bestelldetail.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Bestelldetail extends APIv1_Controller +class Bestelldetail extends API_Controller { /** * Bestelldetail API constructor. diff --git a/application/controllers/api/v1/accounting/Bestelldetailtag.php b/application/controllers/api/v1/accounting/Bestelldetailtag.php index 36229d47c..c7c534cc4 100644 --- a/application/controllers/api/v1/accounting/Bestelldetailtag.php +++ b/application/controllers/api/v1/accounting/Bestelldetailtag.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Bestelldetailtag extends APIv1_Controller +class Bestelldetailtag extends API_Controller { /** * Bestelldetailtag API constructor. diff --git a/application/controllers/api/v1/accounting/Bestellstatus.php b/application/controllers/api/v1/accounting/Bestellstatus.php index dc3695ff2..e52dedab2 100644 --- a/application/controllers/api/v1/accounting/Bestellstatus.php +++ b/application/controllers/api/v1/accounting/Bestellstatus.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Bestellstatus extends APIv1_Controller +class Bestellstatus extends API_Controller { /** * Bestellstatus API constructor. diff --git a/application/controllers/api/v1/accounting/Bestellung.php b/application/controllers/api/v1/accounting/Bestellung.php index 018b77180..96ae689e8 100644 --- a/application/controllers/api/v1/accounting/Bestellung.php +++ b/application/controllers/api/v1/accounting/Bestellung.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Bestellung extends APIv1_Controller +class Bestellung extends API_Controller { /** * Bestellung API constructor. diff --git a/application/controllers/api/v1/accounting/Bestellungtag.php b/application/controllers/api/v1/accounting/Bestellungtag.php index 7b404fa05..7609975ab 100644 --- a/application/controllers/api/v1/accounting/Bestellungtag.php +++ b/application/controllers/api/v1/accounting/Bestellungtag.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Bestellungtag extends APIv1_Controller +class Bestellungtag extends API_Controller { /** * Bestellungtag API constructor. diff --git a/application/controllers/api/v1/accounting/Buchung.php b/application/controllers/api/v1/accounting/Buchung.php index 12fa02c33..44c91f1a4 100644 --- a/application/controllers/api/v1/accounting/Buchung.php +++ b/application/controllers/api/v1/accounting/Buchung.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Buchung extends APIv1_Controller +class Buchung extends API_Controller { /** * Buchung API constructor. diff --git a/application/controllers/api/v1/accounting/Buchungstyp.php b/application/controllers/api/v1/accounting/Buchungstyp.php index 3e9718469..20b69bec9 100644 --- a/application/controllers/api/v1/accounting/Buchungstyp.php +++ b/application/controllers/api/v1/accounting/Buchungstyp.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Buchungstyp extends APIv1_Controller +class Buchungstyp extends API_Controller { /** * Buchungstyp API constructor. diff --git a/application/controllers/api/v1/accounting/Budget.php b/application/controllers/api/v1/accounting/Budget.php index 31ee3ef1c..9ffbb3656 100644 --- a/application/controllers/api/v1/accounting/Budget.php +++ b/application/controllers/api/v1/accounting/Budget.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Budget extends APIv1_Controller +class Budget extends API_Controller { /** * Budget API constructor. diff --git a/application/controllers/api/v1/accounting/Konto.php b/application/controllers/api/v1/accounting/Konto.php index 0b78ff98f..ba9b44558 100644 --- a/application/controllers/api/v1/accounting/Konto.php +++ b/application/controllers/api/v1/accounting/Konto.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Konto extends APIv1_Controller +class Konto extends API_Controller { /** * Konto API constructor. diff --git a/application/controllers/api/v1/accounting/Kostenstelle.php b/application/controllers/api/v1/accounting/Kostenstelle.php index 2ebf554c0..a90445b76 100644 --- a/application/controllers/api/v1/accounting/Kostenstelle.php +++ b/application/controllers/api/v1/accounting/Kostenstelle.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Kostenstelle extends APIv1_Controller +class Kostenstelle extends API_Controller { /** * Kostenstelle API constructor. diff --git a/application/controllers/api/v1/accounting/Rechnung.php b/application/controllers/api/v1/accounting/Rechnung.php index 5ac77b36b..18d0e36dd 100644 --- a/application/controllers/api/v1/accounting/Rechnung.php +++ b/application/controllers/api/v1/accounting/Rechnung.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Rechnung extends APIv1_Controller +class Rechnung extends API_Controller { /** * Rechnung API constructor. diff --git a/application/controllers/api/v1/accounting/Rechnungsbetrag.php b/application/controllers/api/v1/accounting/Rechnungsbetrag.php index 2f02c794d..57f2803a4 100644 --- a/application/controllers/api/v1/accounting/Rechnungsbetrag.php +++ b/application/controllers/api/v1/accounting/Rechnungsbetrag.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Rechnungsbetrag extends APIv1_Controller +class Rechnungsbetrag extends API_Controller { /** * Rechnungsbetrag API constructor. diff --git a/application/controllers/api/v1/accounting/Rechnungstyp.php b/application/controllers/api/v1/accounting/Rechnungstyp.php index f85dae43e..37efdd784 100644 --- a/application/controllers/api/v1/accounting/Rechnungstyp.php +++ b/application/controllers/api/v1/accounting/Rechnungstyp.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Rechnungstyp extends APIv1_Controller +class Rechnungstyp extends API_Controller { /** * Rechnungstyp API constructor. diff --git a/application/controllers/api/v1/accounting/Vertrag.php b/application/controllers/api/v1/accounting/Vertrag.php index 3b3d3fac2..164dd05a0 100644 --- a/application/controllers/api/v1/accounting/Vertrag.php +++ b/application/controllers/api/v1/accounting/Vertrag.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Vertrag extends APIv1_Controller +class Vertrag extends API_Controller { /** * Vertrag API constructor. diff --git a/application/controllers/api/v1/accounting/Vertragsstatus.php b/application/controllers/api/v1/accounting/Vertragsstatus.php index c6125e609..876a2912a 100644 --- a/application/controllers/api/v1/accounting/Vertragsstatus.php +++ b/application/controllers/api/v1/accounting/Vertragsstatus.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Vertragsstatus extends APIv1_Controller +class Vertragsstatus extends API_Controller { /** * Vertragsstatus API constructor. diff --git a/application/controllers/api/v1/accounting/Vertragstyp.php b/application/controllers/api/v1/accounting/Vertragstyp.php index 69b0907dd..40d826af2 100644 --- a/application/controllers/api/v1/accounting/Vertragstyp.php +++ b/application/controllers/api/v1/accounting/Vertragstyp.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Vertragstyp extends APIv1_Controller +class Vertragstyp extends API_Controller { /** * Vertragstyp API constructor. diff --git a/application/controllers/api/v1/accounting/Zahlungstyp.php b/application/controllers/api/v1/accounting/Zahlungstyp.php index e7abf74df..bef1e14e1 100644 --- a/application/controllers/api/v1/accounting/Zahlungstyp.php +++ b/application/controllers/api/v1/accounting/Zahlungstyp.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Zahlungstyp extends APIv1_Controller +class Zahlungstyp extends API_Controller { /** * Zahlungstyp API constructor. diff --git a/application/controllers/api/v1/codex/Akadgrad.php b/application/controllers/api/v1/codex/Akadgrad.php index 2aeb01e59..3d99d16be 100644 --- a/application/controllers/api/v1/codex/Akadgrad.php +++ b/application/controllers/api/v1/codex/Akadgrad.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Akadgrad extends APIv1_Controller +class Akadgrad extends API_Controller { /** * Akadgrad API constructor. diff --git a/application/controllers/api/v1/codex/Archiv.php b/application/controllers/api/v1/codex/Archiv.php index b35ec840d..38fbb1710 100644 --- a/application/controllers/api/v1/codex/Archiv.php +++ b/application/controllers/api/v1/codex/Archiv.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Archiv extends APIv1_Controller +class Archiv extends API_Controller { /** * Archiv API constructor. diff --git a/application/controllers/api/v1/codex/Aufmerksamdurch.php b/application/controllers/api/v1/codex/Aufmerksamdurch.php index dc27d4dd8..ce9cf25ba 100644 --- a/application/controllers/api/v1/codex/Aufmerksamdurch.php +++ b/application/controllers/api/v1/codex/Aufmerksamdurch.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Aufmerksamdurch extends APIv1_Controller +class Aufmerksamdurch extends API_Controller { /** * Aufmerksamdurch API constructor. diff --git a/application/controllers/api/v1/codex/Ausbildung.php b/application/controllers/api/v1/codex/Ausbildung.php index 4fea8add4..5886ed724 100644 --- a/application/controllers/api/v1/codex/Ausbildung.php +++ b/application/controllers/api/v1/codex/Ausbildung.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Ausbildung extends APIv1_Controller +class Ausbildung extends API_Controller { /** * Ausbildung API constructor. diff --git a/application/controllers/api/v1/codex/Berufstaetigkeit.php b/application/controllers/api/v1/codex/Berufstaetigkeit.php index 0941eba9e..02d62ae5d 100644 --- a/application/controllers/api/v1/codex/Berufstaetigkeit.php +++ b/application/controllers/api/v1/codex/Berufstaetigkeit.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Berufstaetigkeit extends APIv1_Controller +class Berufstaetigkeit extends API_Controller { /** * Berufstaetigkeit API constructor. diff --git a/application/controllers/api/v1/codex/Beschaeftigungsausmass.php b/application/controllers/api/v1/codex/Beschaeftigungsausmass.php index 115aa37fd..f10fe9d51 100644 --- a/application/controllers/api/v1/codex/Beschaeftigungsausmass.php +++ b/application/controllers/api/v1/codex/Beschaeftigungsausmass.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Beschaeftigungsausmass extends APIv1_Controller +class Beschaeftigungsausmass extends API_Controller { /** * Beschaeftigungsausmass API constructor. diff --git a/application/controllers/api/v1/codex/Besqual.php b/application/controllers/api/v1/codex/Besqual.php index 6bad18ff7..f4b5c8a16 100644 --- a/application/controllers/api/v1/codex/Besqual.php +++ b/application/controllers/api/v1/codex/Besqual.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Besqual extends APIv1_Controller +class Besqual extends API_Controller { /** * Besqual API constructor. diff --git a/application/controllers/api/v1/codex/Bisfunktion.php b/application/controllers/api/v1/codex/Bisfunktion.php index 85a7fca7b..c7318c51c 100644 --- a/application/controllers/api/v1/codex/Bisfunktion.php +++ b/application/controllers/api/v1/codex/Bisfunktion.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Bisfunktion extends APIv1_Controller +class Bisfunktion extends API_Controller { /** * Bisfunktion API constructor. diff --git a/application/controllers/api/v1/codex/Bisio.php b/application/controllers/api/v1/codex/Bisio.php index 1b0999bb1..3cbb0ca4f 100644 --- a/application/controllers/api/v1/codex/Bisio.php +++ b/application/controllers/api/v1/codex/Bisio.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Bisio extends APIv1_Controller +class Bisio extends API_Controller { /** * Bisio API constructor. diff --git a/application/controllers/api/v1/codex/Bisorgform.php b/application/controllers/api/v1/codex/Bisorgform.php index af72644c8..8ead76ecf 100644 --- a/application/controllers/api/v1/codex/Bisorgform.php +++ b/application/controllers/api/v1/codex/Bisorgform.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Bisorgform extends APIv1_Controller +class Bisorgform extends API_Controller { /** * Bisorgform API constructor. diff --git a/application/controllers/api/v1/codex/Bisverwendung.php b/application/controllers/api/v1/codex/Bisverwendung.php index ee2b0d5ca..8e6a1a310 100644 --- a/application/controllers/api/v1/codex/Bisverwendung.php +++ b/application/controllers/api/v1/codex/Bisverwendung.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Bisverwendung extends APIv1_Controller +class Bisverwendung extends API_Controller { /** * Bisverwendung API constructor. diff --git a/application/controllers/api/v1/codex/Bundesland.php b/application/controllers/api/v1/codex/Bundesland.php index ccff4f047..53fbda2ba 100644 --- a/application/controllers/api/v1/codex/Bundesland.php +++ b/application/controllers/api/v1/codex/Bundesland.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Bundesland extends APIv1_Controller +class Bundesland extends API_Controller { /** * Course API constructor. diff --git a/application/controllers/api/v1/codex/Entwicklungsteam.php b/application/controllers/api/v1/codex/Entwicklungsteam.php index bf376a842..5ad2fb453 100644 --- a/application/controllers/api/v1/codex/Entwicklungsteam.php +++ b/application/controllers/api/v1/codex/Entwicklungsteam.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Entwicklungsteam extends APIv1_Controller +class Entwicklungsteam extends API_Controller { /** * Entwicklungsteam API constructor. diff --git a/application/controllers/api/v1/codex/Gemeinde.php b/application/controllers/api/v1/codex/Gemeinde.php index 340d1ed9b..8f8e76854 100644 --- a/application/controllers/api/v1/codex/Gemeinde.php +++ b/application/controllers/api/v1/codex/Gemeinde.php @@ -14,7 +14,7 @@ if (!defined("BASEPATH")) exit("No direct script access allowed"); -class Gemeinde extends APIv1_Controller +class Gemeinde extends API_Controller { /** * Gemeinde API constructor. diff --git a/application/controllers/api/v1/codex/Hauptberuf.php b/application/controllers/api/v1/codex/Hauptberuf.php index 05396c473..4fdf8a687 100644 --- a/application/controllers/api/v1/codex/Hauptberuf.php +++ b/application/controllers/api/v1/codex/Hauptberuf.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Hauptberuf extends APIv1_Controller +class Hauptberuf extends API_Controller { /** * Hauptberuf API constructor. diff --git a/application/controllers/api/v1/codex/Lehrform.php b/application/controllers/api/v1/codex/Lehrform.php index e789e76ec..25b5a4253 100644 --- a/application/controllers/api/v1/codex/Lehrform.php +++ b/application/controllers/api/v1/codex/Lehrform.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Lehrform extends APIv1_Controller +class Lehrform extends API_Controller { /** * Lehrform API constructor. diff --git a/application/controllers/api/v1/codex/Lgartcode.php b/application/controllers/api/v1/codex/Lgartcode.php index 5be7cab59..2ee1bbf6f 100644 --- a/application/controllers/api/v1/codex/Lgartcode.php +++ b/application/controllers/api/v1/codex/Lgartcode.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Lgartcode extends APIv1_Controller +class Lgartcode extends API_Controller { /** * Lgartcode API constructor. diff --git a/application/controllers/api/v1/codex/Mobilitaetsprogramm.php b/application/controllers/api/v1/codex/Mobilitaetsprogramm.php index 70f0c3dc6..2215ebf92 100644 --- a/application/controllers/api/v1/codex/Mobilitaetsprogramm.php +++ b/application/controllers/api/v1/codex/Mobilitaetsprogramm.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Mobilitaetsprogramm extends APIv1_Controller +class Mobilitaetsprogramm extends API_Controller { /** * Mobilitaetsprogramm API constructor. diff --git a/application/controllers/api/v1/codex/Nation.php b/application/controllers/api/v1/codex/Nation.php index ad6c5e10e..16d9bf59a 100644 --- a/application/controllers/api/v1/codex/Nation.php +++ b/application/controllers/api/v1/codex/Nation.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Nation extends APIv1_Controller +class Nation extends API_Controller { /** * Course API constructor. diff --git a/application/controllers/api/v1/codex/Note.php b/application/controllers/api/v1/codex/Note.php index f42032fe5..d6f9c919a 100644 --- a/application/controllers/api/v1/codex/Note.php +++ b/application/controllers/api/v1/codex/Note.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Note extends APIv1_Controller +class Note extends API_Controller { /** * Note API constructor. diff --git a/application/controllers/api/v1/codex/Orgform.php b/application/controllers/api/v1/codex/Orgform.php index ad5d94185..481f01d2e 100644 --- a/application/controllers/api/v1/codex/Orgform.php +++ b/application/controllers/api/v1/codex/Orgform.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Orgform extends APIv1_Controller +class Orgform extends API_Controller { /** * Orgform API constructor. diff --git a/application/controllers/api/v1/codex/Verwendung.php b/application/controllers/api/v1/codex/Verwendung.php index 9823d3915..0eab46414 100644 --- a/application/controllers/api/v1/codex/Verwendung.php +++ b/application/controllers/api/v1/codex/Verwendung.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Verwendung extends APIv1_Controller +class Verwendung extends API_Controller { /** * Verwendung API constructor. diff --git a/application/controllers/api/v1/codex/Zgv.php b/application/controllers/api/v1/codex/Zgv.php index b1a0981dc..670ffc190 100644 --- a/application/controllers/api/v1/codex/Zgv.php +++ b/application/controllers/api/v1/codex/Zgv.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Zgv extends APIv1_Controller +class Zgv extends API_Controller { /** * Zgv API constructor. diff --git a/application/controllers/api/v1/codex/Zgvdoktor.php b/application/controllers/api/v1/codex/Zgvdoktor.php index aeaf56463..63059356e 100644 --- a/application/controllers/api/v1/codex/Zgvdoktor.php +++ b/application/controllers/api/v1/codex/Zgvdoktor.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Zgvdoktor extends APIv1_Controller +class Zgvdoktor extends API_Controller { /** * Zgvdoktor API constructor. diff --git a/application/controllers/api/v1/codex/Zgvgruppe.php b/application/controllers/api/v1/codex/Zgvgruppe.php index 38b1fe520..95ac6c6fc 100644 --- a/application/controllers/api/v1/codex/Zgvgruppe.php +++ b/application/controllers/api/v1/codex/Zgvgruppe.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Zgvgruppe extends APIv1_Controller +class Zgvgruppe extends API_Controller { /** * Zgvgruppe API constructor. diff --git a/application/controllers/api/v1/codex/Zgvmaster.php b/application/controllers/api/v1/codex/Zgvmaster.php index b8e7ee86d..ff737dd7f 100644 --- a/application/controllers/api/v1/codex/Zgvmaster.php +++ b/application/controllers/api/v1/codex/Zgvmaster.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Zgvmaster extends APIv1_Controller +class Zgvmaster extends API_Controller { /** * Zgvmaster API constructor. diff --git a/application/controllers/api/v1/codex/Zweck.php b/application/controllers/api/v1/codex/Zweck.php index c5710c7a5..75333fa6d 100644 --- a/application/controllers/api/v1/codex/Zweck.php +++ b/application/controllers/api/v1/codex/Zweck.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Zweck extends APIv1_Controller +class Zweck extends API_Controller { /** * Zweck API constructor. diff --git a/application/controllers/api/v1/content/Ampel.php b/application/controllers/api/v1/content/Ampel.php index f550eafdd..661af47cc 100644 --- a/application/controllers/api/v1/content/Ampel.php +++ b/application/controllers/api/v1/content/Ampel.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Ampel extends APIv1_Controller +class Ampel extends API_Controller { /** * Ampel API constructor. diff --git a/application/controllers/api/v1/content/Content.php b/application/controllers/api/v1/content/Content.php index 5d0854c2e..8d2474457 100644 --- a/application/controllers/api/v1/content/Content.php +++ b/application/controllers/api/v1/content/Content.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Content extends APIv1_Controller +class Content extends API_Controller { /** * Content API constructor. diff --git a/application/controllers/api/v1/content/Contentchild.php b/application/controllers/api/v1/content/Contentchild.php index 95dbc4ab0..d4647e3d3 100644 --- a/application/controllers/api/v1/content/Contentchild.php +++ b/application/controllers/api/v1/content/Contentchild.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Contentchild extends APIv1_Controller +class Contentchild extends API_Controller { /** * Contentchild API constructor. diff --git a/application/controllers/api/v1/content/Contentgruppe.php b/application/controllers/api/v1/content/Contentgruppe.php index 794400dc1..18c245288 100644 --- a/application/controllers/api/v1/content/Contentgruppe.php +++ b/application/controllers/api/v1/content/Contentgruppe.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Contentgruppe extends APIv1_Controller +class Contentgruppe extends API_Controller { /** * Contentgruppe API constructor. diff --git a/application/controllers/api/v1/content/Contentlog.php b/application/controllers/api/v1/content/Contentlog.php index ef4738828..d6e6ff940 100644 --- a/application/controllers/api/v1/content/Contentlog.php +++ b/application/controllers/api/v1/content/Contentlog.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Contentlog extends APIv1_Controller +class Contentlog extends API_Controller { /** * Contentlog API constructor. diff --git a/application/controllers/api/v1/content/Contentsprache.php b/application/controllers/api/v1/content/Contentsprache.php index f3696d2ad..15430d405 100644 --- a/application/controllers/api/v1/content/Contentsprache.php +++ b/application/controllers/api/v1/content/Contentsprache.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Contentsprache extends APIv1_Controller +class Contentsprache extends API_Controller { /** * Contentsprache API constructor. diff --git a/application/controllers/api/v1/content/Dms.php b/application/controllers/api/v1/content/Dms.php index e73254888..1109bd3ca 100644 --- a/application/controllers/api/v1/content/Dms.php +++ b/application/controllers/api/v1/content/Dms.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Dms extends APIv1_Controller +class Dms extends API_Controller { /** * diff --git a/application/controllers/api/v1/content/Infoscreen.php b/application/controllers/api/v1/content/Infoscreen.php index 3012af304..4b648c753 100644 --- a/application/controllers/api/v1/content/Infoscreen.php +++ b/application/controllers/api/v1/content/Infoscreen.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Infoscreen extends APIv1_Controller +class Infoscreen extends API_Controller { /** * Infoscreen API constructor. diff --git a/application/controllers/api/v1/content/News.php b/application/controllers/api/v1/content/News.php index b085afb7d..e7c0b3797 100644 --- a/application/controllers/api/v1/content/News.php +++ b/application/controllers/api/v1/content/News.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class News extends APIv1_Controller +class News extends API_Controller { /** * News API constructor. diff --git a/application/controllers/api/v1/content/Template.php b/application/controllers/api/v1/content/Template.php index e15156b14..bfd9fcd08 100644 --- a/application/controllers/api/v1/content/Template.php +++ b/application/controllers/api/v1/content/Template.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Template extends APIv1_Controller +class Template extends API_Controller { /** * Template API constructor. diff --git a/application/controllers/api/v1/content/Veranstaltung.php b/application/controllers/api/v1/content/Veranstaltung.php index 5f922e65a..5447e538d 100644 --- a/application/controllers/api/v1/content/Veranstaltung.php +++ b/application/controllers/api/v1/content/Veranstaltung.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Veranstaltung extends APIv1_Controller +class Veranstaltung extends API_Controller { /** * Veranstaltung API constructor. diff --git a/application/controllers/api/v1/content/Veranstaltungskategorie.php b/application/controllers/api/v1/content/Veranstaltungskategorie.php index 20af408c5..afc2c4968 100644 --- a/application/controllers/api/v1/content/Veranstaltungskategorie.php +++ b/application/controllers/api/v1/content/Veranstaltungskategorie.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Veranstaltungskategorie extends APIv1_Controller +class Veranstaltungskategorie extends API_Controller { /** * Veranstaltungskategorie API constructor. diff --git a/application/controllers/api/v1/crm/Akte.php b/application/controllers/api/v1/crm/Akte.php index e9c892da5..a24d7abcc 100644 --- a/application/controllers/api/v1/crm/Akte.php +++ b/application/controllers/api/v1/crm/Akte.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Akte extends APIv1_Controller +class Akte extends API_Controller { /** * Akte API constructor. diff --git a/application/controllers/api/v1/crm/Aufnahmeschluessel.php b/application/controllers/api/v1/crm/Aufnahmeschluessel.php index f2724481c..f055f1d20 100644 --- a/application/controllers/api/v1/crm/Aufnahmeschluessel.php +++ b/application/controllers/api/v1/crm/Aufnahmeschluessel.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Aufnahmeschluessel extends APIv1_Controller +class Aufnahmeschluessel extends API_Controller { /** * Aufnahmeschluessel API constructor. diff --git a/application/controllers/api/v1/crm/Aufnahmetermin.php b/application/controllers/api/v1/crm/Aufnahmetermin.php index e199adbf8..31b1d8ef4 100644 --- a/application/controllers/api/v1/crm/Aufnahmetermin.php +++ b/application/controllers/api/v1/crm/Aufnahmetermin.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Aufnahmetermin extends APIv1_Controller +class Aufnahmetermin extends API_Controller { /** * Aufnahmetermin API constructor. diff --git a/application/controllers/api/v1/crm/Aufnahmetermintyp.php b/application/controllers/api/v1/crm/Aufnahmetermintyp.php index 7219598bf..ccc5d5901 100644 --- a/application/controllers/api/v1/crm/Aufnahmetermintyp.php +++ b/application/controllers/api/v1/crm/Aufnahmetermintyp.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Aufnahmetermintyp extends APIv1_Controller +class Aufnahmetermintyp extends API_Controller { /** * Aufnahmetermintyp API constructor. diff --git a/application/controllers/api/v1/crm/Bewerbungstermine.php b/application/controllers/api/v1/crm/Bewerbungstermine.php index 55d49ff58..f39623b6b 100644 --- a/application/controllers/api/v1/crm/Bewerbungstermine.php +++ b/application/controllers/api/v1/crm/Bewerbungstermine.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Bewerbungstermine extends APIv1_Controller +class Bewerbungstermine extends API_Controller { /** * Bewerbungstermine API constructor. diff --git a/application/controllers/api/v1/crm/Buchungstyp.php b/application/controllers/api/v1/crm/Buchungstyp.php index 0253050f3..90129f1c3 100644 --- a/application/controllers/api/v1/crm/Buchungstyp.php +++ b/application/controllers/api/v1/crm/Buchungstyp.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Buchungstyp extends APIv1_Controller +class Buchungstyp extends API_Controller { /** * Buchungstyp API constructor. diff --git a/application/controllers/api/v1/crm/Dokument.php b/application/controllers/api/v1/crm/Dokument.php index 11a603496..c94413f55 100644 --- a/application/controllers/api/v1/crm/Dokument.php +++ b/application/controllers/api/v1/crm/Dokument.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Dokument extends APIv1_Controller +class Dokument extends API_Controller { /** * Dokument API constructor. diff --git a/application/controllers/api/v1/crm/Dokumentprestudent.php b/application/controllers/api/v1/crm/Dokumentprestudent.php index e05815d33..20ebe37bc 100644 --- a/application/controllers/api/v1/crm/Dokumentprestudent.php +++ b/application/controllers/api/v1/crm/Dokumentprestudent.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Dokumentprestudent extends APIv1_Controller +class Dokumentprestudent extends API_Controller { /** * Dokumentprestudent API constructor. diff --git a/application/controllers/api/v1/crm/Dokumentstudiengang.php b/application/controllers/api/v1/crm/Dokumentstudiengang.php index 3e908d455..81b84c888 100644 --- a/application/controllers/api/v1/crm/Dokumentstudiengang.php +++ b/application/controllers/api/v1/crm/Dokumentstudiengang.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Dokumentstudiengang extends APIv1_Controller +class Dokumentstudiengang extends API_Controller { /** * Dokumentstudiengang API constructor. diff --git a/application/controllers/api/v1/crm/Konto.php b/application/controllers/api/v1/crm/Konto.php index 5a2cdafe2..135d36ab7 100644 --- a/application/controllers/api/v1/crm/Konto.php +++ b/application/controllers/api/v1/crm/Konto.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Konto extends APIv1_Controller +class Konto extends API_Controller { /** * Konto API constructor. diff --git a/application/controllers/api/v1/crm/Preincoming.php b/application/controllers/api/v1/crm/Preincoming.php index 14da2b9c3..f319218ae 100644 --- a/application/controllers/api/v1/crm/Preincoming.php +++ b/application/controllers/api/v1/crm/Preincoming.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Preincoming extends APIv1_Controller +class Preincoming extends API_Controller { /** * Preincoming API constructor. diff --git a/application/controllers/api/v1/crm/Preinteressent.php b/application/controllers/api/v1/crm/Preinteressent.php index 62c29dfda..ab3ee68d6 100644 --- a/application/controllers/api/v1/crm/Preinteressent.php +++ b/application/controllers/api/v1/crm/Preinteressent.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Preinteressent extends APIv1_Controller +class Preinteressent extends API_Controller { /** * Person API constructor. diff --git a/application/controllers/api/v1/crm/Preinteressentstudiengang.php b/application/controllers/api/v1/crm/Preinteressentstudiengang.php index e4e834ef9..4a97077d0 100644 --- a/application/controllers/api/v1/crm/Preinteressentstudiengang.php +++ b/application/controllers/api/v1/crm/Preinteressentstudiengang.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Preinteressentstudiengang extends APIv1_Controller +class Preinteressentstudiengang extends API_Controller { /** * Preinteressentstudiengang API constructor. diff --git a/application/controllers/api/v1/crm/Preoutgoing.php b/application/controllers/api/v1/crm/Preoutgoing.php index 733bd2eb9..0f2829dfd 100644 --- a/application/controllers/api/v1/crm/Preoutgoing.php +++ b/application/controllers/api/v1/crm/Preoutgoing.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Preoutgoing extends APIv1_Controller +class Preoutgoing extends API_Controller { /** * Preoutgoing API constructor. diff --git a/application/controllers/api/v1/crm/Prestudent.php b/application/controllers/api/v1/crm/Prestudent.php index 072ba3eea..6376ef94f 100644 --- a/application/controllers/api/v1/crm/Prestudent.php +++ b/application/controllers/api/v1/crm/Prestudent.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Prestudent extends APIv1_Controller +class Prestudent extends API_Controller { /** * Prestudent API constructor. diff --git a/application/controllers/api/v1/crm/Prestudentstatus.php b/application/controllers/api/v1/crm/Prestudentstatus.php index b72ac2fe9..5c3c38e1c 100644 --- a/application/controllers/api/v1/crm/Prestudentstatus.php +++ b/application/controllers/api/v1/crm/Prestudentstatus.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Prestudentstatus extends APIv1_Controller +class Prestudentstatus extends API_Controller { /** * Prestudentstatus API constructor. diff --git a/application/controllers/api/v1/crm/Reihungstest.php b/application/controllers/api/v1/crm/Reihungstest.php index e9012d740..81dc32cec 100644 --- a/application/controllers/api/v1/crm/Reihungstest.php +++ b/application/controllers/api/v1/crm/Reihungstest.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Reihungstest extends APIv1_Controller +class Reihungstest extends API_Controller { /** * Reihungstest API constructor. diff --git a/application/controllers/api/v1/crm/RtPerson.php b/application/controllers/api/v1/crm/RtPerson.php index f9610722a..ed84de90e 100644 --- a/application/controllers/api/v1/crm/RtPerson.php +++ b/application/controllers/api/v1/crm/RtPerson.php @@ -14,7 +14,7 @@ if (!defined("BASEPATH")) exit("No direct script access allowed"); -class RtPerson extends APIv1_Controller +class RtPerson extends API_Controller { /** * Status API constructor. diff --git a/application/controllers/api/v1/crm/Status.php b/application/controllers/api/v1/crm/Status.php index 37a8fbd11..6a9a89ec3 100644 --- a/application/controllers/api/v1/crm/Status.php +++ b/application/controllers/api/v1/crm/Status.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Status extends APIv1_Controller +class Status extends API_Controller { /** * Status API constructor. diff --git a/application/controllers/api/v1/crm/Statusgrund.php b/application/controllers/api/v1/crm/Statusgrund.php index 3f19f2f82..fbf225e42 100644 --- a/application/controllers/api/v1/crm/Statusgrund.php +++ b/application/controllers/api/v1/crm/Statusgrund.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Statusgrund extends APIv1_Controller +class Statusgrund extends API_Controller { /** * Status API constructor. diff --git a/application/controllers/api/v1/crm/Student.php b/application/controllers/api/v1/crm/Student.php index 6227cb6e3..34920021c 100644 --- a/application/controllers/api/v1/crm/Student.php +++ b/application/controllers/api/v1/crm/Student.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Student extends APIv1_Controller +class Student extends API_Controller { /** * Student API constructor. diff --git a/application/controllers/api/v1/education/Abgabe.php b/application/controllers/api/v1/education/Abgabe.php index e3fd64530..676414d70 100644 --- a/application/controllers/api/v1/education/Abgabe.php +++ b/application/controllers/api/v1/education/Abgabe.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Abgabe extends APIv1_Controller +class Abgabe extends API_Controller { /** * Abgabe API constructor. diff --git a/application/controllers/api/v1/education/Abschlussbeurteilung.php b/application/controllers/api/v1/education/Abschlussbeurteilung.php index 1987e276f..1c4f3fb90 100644 --- a/application/controllers/api/v1/education/Abschlussbeurteilung.php +++ b/application/controllers/api/v1/education/Abschlussbeurteilung.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Abschlussbeurteilung extends APIv1_Controller +class Abschlussbeurteilung extends API_Controller { /** * Abschlussbeurteilung API constructor. diff --git a/application/controllers/api/v1/education/Abschlusspruefung.php b/application/controllers/api/v1/education/Abschlusspruefung.php index cadea53ca..a47adc992 100644 --- a/application/controllers/api/v1/education/Abschlusspruefung.php +++ b/application/controllers/api/v1/education/Abschlusspruefung.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Abschlusspruefung extends APIv1_Controller +class Abschlusspruefung extends API_Controller { /** * Abschlusspruefung API constructor. diff --git a/application/controllers/api/v1/education/Anrechnung.php b/application/controllers/api/v1/education/Anrechnung.php index 5a99b08ab..743ff7e5b 100644 --- a/application/controllers/api/v1/education/Anrechnung.php +++ b/application/controllers/api/v1/education/Anrechnung.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Anrechnung extends APIv1_Controller +class Anrechnung extends API_Controller { /** * Anrechnung API constructor. diff --git a/application/controllers/api/v1/education/Anwesenheit.php b/application/controllers/api/v1/education/Anwesenheit.php index 2e915f071..2403220e0 100644 --- a/application/controllers/api/v1/education/Anwesenheit.php +++ b/application/controllers/api/v1/education/Anwesenheit.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Anwesenheit extends APIv1_Controller +class Anwesenheit extends API_Controller { /** * Anwesenheit API constructor. diff --git a/application/controllers/api/v1/education/Beispiel.php b/application/controllers/api/v1/education/Beispiel.php index b2c06047b..4bcd6ac55 100644 --- a/application/controllers/api/v1/education/Beispiel.php +++ b/application/controllers/api/v1/education/Beispiel.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Beispiel extends APIv1_Controller +class Beispiel extends API_Controller { /** * Beispiel API constructor. diff --git a/application/controllers/api/v1/education/Betreuerart.php b/application/controllers/api/v1/education/Betreuerart.php index 43b4c51f6..b4cf34b7b 100644 --- a/application/controllers/api/v1/education/Betreuerart.php +++ b/application/controllers/api/v1/education/Betreuerart.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Betreuerart extends APIv1_Controller +class Betreuerart extends API_Controller { /** * Betreuerart API constructor. diff --git a/application/controllers/api/v1/education/Feedback.php b/application/controllers/api/v1/education/Feedback.php index abef22d77..8179181bc 100644 --- a/application/controllers/api/v1/education/Feedback.php +++ b/application/controllers/api/v1/education/Feedback.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Feedback extends APIv1_Controller +class Feedback extends API_Controller { /** * Feedback API constructor. diff --git a/application/controllers/api/v1/education/Legesamtnote.php b/application/controllers/api/v1/education/Legesamtnote.php index 96ff25c4f..c4f51b7ff 100644 --- a/application/controllers/api/v1/education/Legesamtnote.php +++ b/application/controllers/api/v1/education/Legesamtnote.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Legesamtnote extends APIv1_Controller +class Legesamtnote extends API_Controller { /** * Legesamtnote API constructor. diff --git a/application/controllers/api/v1/education/Lehreinheit.php b/application/controllers/api/v1/education/Lehreinheit.php index f229de846..05741b6c7 100644 --- a/application/controllers/api/v1/education/Lehreinheit.php +++ b/application/controllers/api/v1/education/Lehreinheit.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Lehreinheit extends APIv1_Controller +class Lehreinheit extends API_Controller { /** * Lehreinheit API constructor. diff --git a/application/controllers/api/v1/education/Lehreinheitgruppe.php b/application/controllers/api/v1/education/Lehreinheitgruppe.php index 6ef949d3e..a8d996c4e 100644 --- a/application/controllers/api/v1/education/Lehreinheitgruppe.php +++ b/application/controllers/api/v1/education/Lehreinheitgruppe.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Lehreinheitgruppe extends APIv1_Controller +class Lehreinheitgruppe extends API_Controller { /** * Lehreinheitgruppe API constructor. diff --git a/application/controllers/api/v1/education/Lehreinheitmitarbeiter.php b/application/controllers/api/v1/education/Lehreinheitmitarbeiter.php index 5237ca849..6861c7b77 100644 --- a/application/controllers/api/v1/education/Lehreinheitmitarbeiter.php +++ b/application/controllers/api/v1/education/Lehreinheitmitarbeiter.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Lehreinheitmitarbeiter extends APIv1_Controller +class Lehreinheitmitarbeiter extends API_Controller { /** * Lehreinheitmitarbeiter API constructor. diff --git a/application/controllers/api/v1/education/Lehrfach.php b/application/controllers/api/v1/education/Lehrfach.php index 81ce519e1..e65776e08 100644 --- a/application/controllers/api/v1/education/Lehrfach.php +++ b/application/controllers/api/v1/education/Lehrfach.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Lehrfach extends APIv1_Controller +class Lehrfach extends API_Controller { /** * Lehrfach API constructor. diff --git a/application/controllers/api/v1/education/Lehrfunktion.php b/application/controllers/api/v1/education/Lehrfunktion.php index e29f1227d..93f504fa7 100644 --- a/application/controllers/api/v1/education/Lehrfunktion.php +++ b/application/controllers/api/v1/education/Lehrfunktion.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Lehrfunktion extends APIv1_Controller +class Lehrfunktion extends API_Controller { /** * Lehrfunktion API constructor. diff --git a/application/controllers/api/v1/education/Lehrtyp.php b/application/controllers/api/v1/education/Lehrtyp.php index dfcfd3033..bd73d14c4 100644 --- a/application/controllers/api/v1/education/Lehrtyp.php +++ b/application/controllers/api/v1/education/Lehrtyp.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Lehrtyp extends APIv1_Controller +class Lehrtyp extends API_Controller { /** * Lehrtyp API constructor. diff --git a/application/controllers/api/v1/education/Lehrveranstaltung.php b/application/controllers/api/v1/education/Lehrveranstaltung.php index 2e2fffb66..676b6478d 100644 --- a/application/controllers/api/v1/education/Lehrveranstaltung.php +++ b/application/controllers/api/v1/education/Lehrveranstaltung.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Lehrveranstaltung extends APIv1_Controller +class Lehrveranstaltung extends API_Controller { /** * Lehrveranstaltung API constructor. diff --git a/application/controllers/api/v1/education/Lenotenschluessel.php b/application/controllers/api/v1/education/Lenotenschluessel.php index 9477172a3..980258859 100644 --- a/application/controllers/api/v1/education/Lenotenschluessel.php +++ b/application/controllers/api/v1/education/Lenotenschluessel.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Lenotenschluessel extends APIv1_Controller +class Lenotenschluessel extends API_Controller { /** * LeNotenschluessel API constructor. diff --git a/application/controllers/api/v1/education/Lepruefung.php b/application/controllers/api/v1/education/Lepruefung.php index 52e1d81b6..3234a30c0 100644 --- a/application/controllers/api/v1/education/Lepruefung.php +++ b/application/controllers/api/v1/education/Lepruefung.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Lepruefung extends APIv1_Controller +class Lepruefung extends API_Controller { /** * LePruefung API constructor. diff --git a/application/controllers/api/v1/education/Lvangebot.php b/application/controllers/api/v1/education/Lvangebot.php index ecd917233..1a364bea3 100644 --- a/application/controllers/api/v1/education/Lvangebot.php +++ b/application/controllers/api/v1/education/Lvangebot.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Lvangebot extends APIv1_Controller +class Lvangebot extends API_Controller { /** * Lvangebot API constructor. diff --git a/application/controllers/api/v1/education/Lvgesamtnote.php b/application/controllers/api/v1/education/Lvgesamtnote.php index 464ef99a9..10c5c8577 100644 --- a/application/controllers/api/v1/education/Lvgesamtnote.php +++ b/application/controllers/api/v1/education/Lvgesamtnote.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Lvgesamtnote extends APIv1_Controller +class Lvgesamtnote extends API_Controller { /** * Lvgesamtnote API constructor. diff --git a/application/controllers/api/v1/education/Lvinfo.php b/application/controllers/api/v1/education/Lvinfo.php index 8631583b9..d0cdb637b 100644 --- a/application/controllers/api/v1/education/Lvinfo.php +++ b/application/controllers/api/v1/education/Lvinfo.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Lvinfo extends APIv1_Controller +class Lvinfo extends API_Controller { /** * Lvinfo API constructor. diff --git a/application/controllers/api/v1/education/Lvregel.php b/application/controllers/api/v1/education/Lvregel.php index 33410cb88..0334c8ff2 100644 --- a/application/controllers/api/v1/education/Lvregel.php +++ b/application/controllers/api/v1/education/Lvregel.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Lvregel extends APIv1_Controller +class Lvregel extends API_Controller { /** * Lvregel API constructor. diff --git a/application/controllers/api/v1/education/Lvregeltyp.php b/application/controllers/api/v1/education/Lvregeltyp.php index 22fe0a9ff..9e7b90f22 100644 --- a/application/controllers/api/v1/education/Lvregeltyp.php +++ b/application/controllers/api/v1/education/Lvregeltyp.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Lvregeltyp extends APIv1_Controller +class Lvregeltyp extends API_Controller { /** * Lvregeltyp API constructor. diff --git a/application/controllers/api/v1/education/Notenschluessel.php b/application/controllers/api/v1/education/Notenschluessel.php index 91c7c513e..415a6c252 100644 --- a/application/controllers/api/v1/education/Notenschluessel.php +++ b/application/controllers/api/v1/education/Notenschluessel.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Notenschluessel extends APIv1_Controller +class Notenschluessel extends API_Controller { /** * Notenschluessel API constructor. diff --git a/application/controllers/api/v1/education/Notenschluesselaufteilung.php b/application/controllers/api/v1/education/Notenschluesselaufteilung.php index 1e4b168ef..11d325183 100644 --- a/application/controllers/api/v1/education/Notenschluesselaufteilung.php +++ b/application/controllers/api/v1/education/Notenschluesselaufteilung.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Notenschluesselaufteilung extends APIv1_Controller +class Notenschluesselaufteilung extends API_Controller { /** * Notenschluesselaufteilung API constructor. diff --git a/application/controllers/api/v1/education/Notenschluesseluebung.php b/application/controllers/api/v1/education/Notenschluesseluebung.php index bb907f4ff..c1f13633e 100644 --- a/application/controllers/api/v1/education/Notenschluesseluebung.php +++ b/application/controllers/api/v1/education/Notenschluesseluebung.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Notenschluesseluebung extends APIv1_Controller +class Notenschluesseluebung extends API_Controller { /** * Notenschluesseluebung API constructor. diff --git a/application/controllers/api/v1/education/Notenschluesselzuordnung.php b/application/controllers/api/v1/education/Notenschluesselzuordnung.php index a4e7d757a..af4295fcd 100644 --- a/application/controllers/api/v1/education/Notenschluesselzuordnung.php +++ b/application/controllers/api/v1/education/Notenschluesselzuordnung.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Notenschluesselzuordnung extends APIv1_Controller +class Notenschluesselzuordnung extends API_Controller { /** * Notenschluesselzuordnung API constructor. diff --git a/application/controllers/api/v1/education/Paabgabe.php b/application/controllers/api/v1/education/Paabgabe.php index 87e9c2ec7..716fb7574 100644 --- a/application/controllers/api/v1/education/Paabgabe.php +++ b/application/controllers/api/v1/education/Paabgabe.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Paabgabe extends APIv1_Controller +class Paabgabe extends API_Controller { /** * Paabgabe API constructor. diff --git a/application/controllers/api/v1/education/Paabgabetyp.php b/application/controllers/api/v1/education/Paabgabetyp.php index 999cbd57b..117c4ffd1 100644 --- a/application/controllers/api/v1/education/Paabgabetyp.php +++ b/application/controllers/api/v1/education/Paabgabetyp.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Paabgabetyp extends APIv1_Controller +class Paabgabetyp extends API_Controller { /** * Paabgabetyp API constructor. diff --git a/application/controllers/api/v1/education/Projektarbeit.php b/application/controllers/api/v1/education/Projektarbeit.php index 1b09fa4e7..0a77a9e64 100644 --- a/application/controllers/api/v1/education/Projektarbeit.php +++ b/application/controllers/api/v1/education/Projektarbeit.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Projektarbeit extends APIv1_Controller +class Projektarbeit extends API_Controller { /** * Projektarbeit API constructor. diff --git a/application/controllers/api/v1/education/Projektbetreuer.php b/application/controllers/api/v1/education/Projektbetreuer.php index b395b7e5f..e0a078a51 100644 --- a/application/controllers/api/v1/education/Projektbetreuer.php +++ b/application/controllers/api/v1/education/Projektbetreuer.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Projektbetreuer extends APIv1_Controller +class Projektbetreuer extends API_Controller { /** * Projektbetreuer API constructor. diff --git a/application/controllers/api/v1/education/Projekttyp.php b/application/controllers/api/v1/education/Projekttyp.php index bf4c5d73a..f75fd6477 100644 --- a/application/controllers/api/v1/education/Projekttyp.php +++ b/application/controllers/api/v1/education/Projekttyp.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Projekttyp extends APIv1_Controller +class Projekttyp extends API_Controller { /** * Projekttyp API constructor. diff --git a/application/controllers/api/v1/education/Pruefung.php b/application/controllers/api/v1/education/Pruefung.php index 23fc97c8d..8218b63b0 100644 --- a/application/controllers/api/v1/education/Pruefung.php +++ b/application/controllers/api/v1/education/Pruefung.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Pruefung extends APIv1_Controller +class Pruefung extends API_Controller { /** * Pruefung API constructor. diff --git a/application/controllers/api/v1/education/Pruefungsanmeldung.php b/application/controllers/api/v1/education/Pruefungsanmeldung.php index d65ded0b4..8ffbbc0cf 100644 --- a/application/controllers/api/v1/education/Pruefungsanmeldung.php +++ b/application/controllers/api/v1/education/Pruefungsanmeldung.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Pruefungsanmeldung extends APIv1_Controller +class Pruefungsanmeldung extends API_Controller { /** * Pruefungsanmeldung API constructor. diff --git a/application/controllers/api/v1/education/Pruefungsfenster.php b/application/controllers/api/v1/education/Pruefungsfenster.php index 50d13cff5..8e4c3af99 100644 --- a/application/controllers/api/v1/education/Pruefungsfenster.php +++ b/application/controllers/api/v1/education/Pruefungsfenster.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Pruefungsfenster extends APIv1_Controller +class Pruefungsfenster extends API_Controller { /** * Pruefungsfenster API constructor. diff --git a/application/controllers/api/v1/education/Pruefungsstatus.php b/application/controllers/api/v1/education/Pruefungsstatus.php index cbfbfb044..c2bfe6f9b 100644 --- a/application/controllers/api/v1/education/Pruefungsstatus.php +++ b/application/controllers/api/v1/education/Pruefungsstatus.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Pruefungsstatus extends APIv1_Controller +class Pruefungsstatus extends API_Controller { /** * Pruefungsstatus API constructor. diff --git a/application/controllers/api/v1/education/Pruefungstermin.php b/application/controllers/api/v1/education/Pruefungstermin.php index fd16159dc..d6b61e7f7 100644 --- a/application/controllers/api/v1/education/Pruefungstermin.php +++ b/application/controllers/api/v1/education/Pruefungstermin.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Pruefungstermin extends APIv1_Controller +class Pruefungstermin extends API_Controller { /** * Pruefungstermin API constructor. diff --git a/application/controllers/api/v1/education/Pruefungstyp.php b/application/controllers/api/v1/education/Pruefungstyp.php index 4c460d5cd..7e0707c17 100644 --- a/application/controllers/api/v1/education/Pruefungstyp.php +++ b/application/controllers/api/v1/education/Pruefungstyp.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Pruefungstyp extends APIv1_Controller +class Pruefungstyp extends API_Controller { /** * Pruefungstyp API constructor. diff --git a/application/controllers/api/v1/education/Studentbeispiel.php b/application/controllers/api/v1/education/Studentbeispiel.php index 45012231a..504614334 100644 --- a/application/controllers/api/v1/education/Studentbeispiel.php +++ b/application/controllers/api/v1/education/Studentbeispiel.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Studentbeispiel extends APIv1_Controller +class Studentbeispiel extends API_Controller { /** * Studentbeispiel API constructor. diff --git a/application/controllers/api/v1/education/Studentlehrverband.php b/application/controllers/api/v1/education/Studentlehrverband.php index 4793b0b1b..7bae1e375 100644 --- a/application/controllers/api/v1/education/Studentlehrverband.php +++ b/application/controllers/api/v1/education/Studentlehrverband.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Studentlehrverband extends APIv1_Controller +class Studentlehrverband extends API_Controller { /** * Studentlehrverband API constructor. diff --git a/application/controllers/api/v1/education/Studentuebung.php b/application/controllers/api/v1/education/Studentuebung.php index 2a086610c..e36add29e 100644 --- a/application/controllers/api/v1/education/Studentuebung.php +++ b/application/controllers/api/v1/education/Studentuebung.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Studentuebung extends APIv1_Controller +class Studentuebung extends API_Controller { /** * Studentuebung API constructor. diff --git a/application/controllers/api/v1/education/Uebung.php b/application/controllers/api/v1/education/Uebung.php index 41d8f8448..e6e27560d 100644 --- a/application/controllers/api/v1/education/Uebung.php +++ b/application/controllers/api/v1/education/Uebung.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Uebung extends APIv1_Controller +class Uebung extends API_Controller { /** * Uebung API constructor. diff --git a/application/controllers/api/v1/education/Zeugnis.php b/application/controllers/api/v1/education/Zeugnis.php index 86af07284..a58eadcce 100644 --- a/application/controllers/api/v1/education/Zeugnis.php +++ b/application/controllers/api/v1/education/Zeugnis.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Zeugnis extends APIv1_Controller +class Zeugnis extends API_Controller { /** * Zeugnis API constructor. diff --git a/application/controllers/api/v1/education/Zeugnisnote.php b/application/controllers/api/v1/education/Zeugnisnote.php index 10083865e..9a00e0c23 100644 --- a/application/controllers/api/v1/education/Zeugnisnote.php +++ b/application/controllers/api/v1/education/Zeugnisnote.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Zeugnisnote extends APIv1_Controller +class Zeugnisnote extends API_Controller { /** * Zeugnisnote API constructor. diff --git a/application/controllers/api/v1/organisation/Erhalter.php b/application/controllers/api/v1/organisation/Erhalter.php index 0098f7fcc..e4b2532de 100644 --- a/application/controllers/api/v1/organisation/Erhalter.php +++ b/application/controllers/api/v1/organisation/Erhalter.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Erhalter extends APIv1_Controller +class Erhalter extends API_Controller { /** * Erhalter API constructor. diff --git a/application/controllers/api/v1/organisation/Fachbereich2.php b/application/controllers/api/v1/organisation/Fachbereich2.php index a2d3d3838..dc6af4253 100644 --- a/application/controllers/api/v1/organisation/Fachbereich2.php +++ b/application/controllers/api/v1/organisation/Fachbereich2.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Fachbereich2 extends APIv1_Controller +class Fachbereich2 extends API_Controller { /** * Fachbereich API constructor. diff --git a/application/controllers/api/v1/organisation/Ferien.php b/application/controllers/api/v1/organisation/Ferien.php index e943a7e66..f74ab37c1 100644 --- a/application/controllers/api/v1/organisation/Ferien.php +++ b/application/controllers/api/v1/organisation/Ferien.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Ferien extends APIv1_Controller +class Ferien extends API_Controller { /** * Ferien API constructor. diff --git a/application/controllers/api/v1/organisation/Geschaeftsjahr2.php b/application/controllers/api/v1/organisation/Geschaeftsjahr2.php index 2dfa9f400..9284f7d47 100644 --- a/application/controllers/api/v1/organisation/Geschaeftsjahr2.php +++ b/application/controllers/api/v1/organisation/Geschaeftsjahr2.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Geschaeftsjahr2 extends APIv1_Controller +class Geschaeftsjahr2 extends API_Controller { /** * Geschaeftsjahr API constructor. diff --git a/application/controllers/api/v1/organisation/Gruppe.php b/application/controllers/api/v1/organisation/Gruppe.php index e3ef92fa4..41727dfcf 100644 --- a/application/controllers/api/v1/organisation/Gruppe.php +++ b/application/controllers/api/v1/organisation/Gruppe.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Gruppe extends APIv1_Controller +class Gruppe extends API_Controller { /** * Gruppe API constructor. diff --git a/application/controllers/api/v1/organisation/Lehrverband.php b/application/controllers/api/v1/organisation/Lehrverband.php index 9b12dcf90..b9981a1cd 100644 --- a/application/controllers/api/v1/organisation/Lehrverband.php +++ b/application/controllers/api/v1/organisation/Lehrverband.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Lehrverband extends APIv1_Controller +class Lehrverband extends API_Controller { /** * Lehrverband API constructor. diff --git a/application/controllers/api/v1/organisation/Organisationseinheit2.php b/application/controllers/api/v1/organisation/Organisationseinheit2.php index 3f62bbdf1..a828da0ae 100644 --- a/application/controllers/api/v1/organisation/Organisationseinheit2.php +++ b/application/controllers/api/v1/organisation/Organisationseinheit2.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Organisationseinheit2 extends APIv1_Controller +class Organisationseinheit2 extends API_Controller { /** * Organisationseinheit API constructor. diff --git a/application/controllers/api/v1/organisation/Organisationseinheittyp.php b/application/controllers/api/v1/organisation/Organisationseinheittyp.php index 62a723b1e..3f5925f63 100644 --- a/application/controllers/api/v1/organisation/Organisationseinheittyp.php +++ b/application/controllers/api/v1/organisation/Organisationseinheittyp.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Organisationseinheittyp extends APIv1_Controller +class Organisationseinheittyp extends API_Controller { /** * Organisationseinheittyp API constructor. diff --git a/application/controllers/api/v1/organisation/Semesterwochen.php b/application/controllers/api/v1/organisation/Semesterwochen.php index 2dbd26ab0..0bab990bd 100644 --- a/application/controllers/api/v1/organisation/Semesterwochen.php +++ b/application/controllers/api/v1/organisation/Semesterwochen.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Semesterwochen extends APIv1_Controller +class Semesterwochen extends API_Controller { /** * Semesterwochen API constructor. diff --git a/application/controllers/api/v1/organisation/Service.php b/application/controllers/api/v1/organisation/Service.php index 4d1988430..80c971ba4 100644 --- a/application/controllers/api/v1/organisation/Service.php +++ b/application/controllers/api/v1/organisation/Service.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Service extends APIv1_Controller +class Service extends API_Controller { /** * Service API constructor. diff --git a/application/controllers/api/v1/organisation/Standort.php b/application/controllers/api/v1/organisation/Standort.php index 16c206401..a9b7a76ec 100644 --- a/application/controllers/api/v1/organisation/Standort.php +++ b/application/controllers/api/v1/organisation/Standort.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Standort extends APIv1_Controller +class Standort extends API_Controller { /** * Standort API constructor. diff --git a/application/controllers/api/v1/organisation/Statistik.php b/application/controllers/api/v1/organisation/Statistik.php index b85c27f42..0c0cbe133 100644 --- a/application/controllers/api/v1/organisation/Statistik.php +++ b/application/controllers/api/v1/organisation/Statistik.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Statistik extends APIv1_Controller +class Statistik extends API_Controller { /** * Statistik API constructor. diff --git a/application/controllers/api/v1/organisation/Studiengang2.php b/application/controllers/api/v1/organisation/Studiengang2.php index 2e1b549ff..5e8ddfe9e 100644 --- a/application/controllers/api/v1/organisation/Studiengang2.php +++ b/application/controllers/api/v1/organisation/Studiengang2.php @@ -13,7 +13,7 @@ // ------------------------------------------------------------------------ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Studiengang2 extends APIv1_Controller +class Studiengang2 extends API_Controller { /** * diff --git a/application/controllers/api/v1/organisation/Studiengangstyp.php b/application/controllers/api/v1/organisation/Studiengangstyp.php index b10811636..e637e0c9d 100644 --- a/application/controllers/api/v1/organisation/Studiengangstyp.php +++ b/application/controllers/api/v1/organisation/Studiengangstyp.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Studiengangstyp extends APIv1_Controller +class Studiengangstyp extends API_Controller { /** * Studiengangstyp API constructor. diff --git a/application/controllers/api/v1/organisation/Studienjahr.php b/application/controllers/api/v1/organisation/Studienjahr.php index eb7c38847..b681e8864 100644 --- a/application/controllers/api/v1/organisation/Studienjahr.php +++ b/application/controllers/api/v1/organisation/Studienjahr.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Studienjahr extends APIv1_Controller +class Studienjahr extends API_Controller { /** * Studienjahr API constructor. diff --git a/application/controllers/api/v1/organisation/Studienordnung.php b/application/controllers/api/v1/organisation/Studienordnung.php index 122c8f099..541eccbf2 100644 --- a/application/controllers/api/v1/organisation/Studienordnung.php +++ b/application/controllers/api/v1/organisation/Studienordnung.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Studienordnung extends APIv1_Controller +class Studienordnung extends API_Controller { /** * Studienordnung API constructor. diff --git a/application/controllers/api/v1/organisation/Studienordnungstatus.php b/application/controllers/api/v1/organisation/Studienordnungstatus.php index 30d38c4ad..8de5cf126 100644 --- a/application/controllers/api/v1/organisation/Studienordnungstatus.php +++ b/application/controllers/api/v1/organisation/Studienordnungstatus.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Studienordnungstatus extends APIv1_Controller +class Studienordnungstatus extends API_Controller { /** * Studienordnungstatus API constructor. diff --git a/application/controllers/api/v1/organisation/Studienplan.php b/application/controllers/api/v1/organisation/Studienplan.php index 05d8d7837..f461565d3 100644 --- a/application/controllers/api/v1/organisation/Studienplan.php +++ b/application/controllers/api/v1/organisation/Studienplan.php @@ -14,7 +14,7 @@ if (!defined("BASEPATH")) exit("No direct script access allowed"); -class Studienplan extends APIv1_Controller +class Studienplan extends API_Controller { /** * Course API constructor. diff --git a/application/controllers/api/v1/organisation/Studienplatz.php b/application/controllers/api/v1/organisation/Studienplatz.php index 88ce6a12d..217fa40a7 100644 --- a/application/controllers/api/v1/organisation/Studienplatz.php +++ b/application/controllers/api/v1/organisation/Studienplatz.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Studienplatz extends APIv1_Controller +class Studienplatz extends API_Controller { /** * Studienplatz API constructor. diff --git a/application/controllers/api/v1/organisation/Studiensemester.php b/application/controllers/api/v1/organisation/Studiensemester.php index f714214d9..619bc2dba 100644 --- a/application/controllers/api/v1/organisation/Studiensemester.php +++ b/application/controllers/api/v1/organisation/Studiensemester.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Studiensemester extends APIv1_Controller +class Studiensemester extends API_Controller { /** * Studiensemester API constructor. diff --git a/application/controllers/api/v1/person/Adresse.php b/application/controllers/api/v1/person/Adresse.php index ddbbfe554..153423ac0 100644 --- a/application/controllers/api/v1/person/Adresse.php +++ b/application/controllers/api/v1/person/Adresse.php @@ -15,7 +15,7 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); -class Adresse extends APIv1_Controller +class Adresse extends API_Controller { /** * Person API constructor. diff --git a/application/controllers/api/v1/person/Bankverbindung.php b/application/controllers/api/v1/person/Bankverbindung.php index 06f6b040d..2c524e0ab 100644 --- a/application/controllers/api/v1/person/Bankverbindung.php +++ b/application/controllers/api/v1/person/Bankverbindung.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Bankverbindung extends APIv1_Controller +class Bankverbindung extends API_Controller { /** * Bankverbindung API constructor. diff --git a/application/controllers/api/v1/person/Benutzer.php b/application/controllers/api/v1/person/Benutzer.php index f1ea4f149..d983103c8 100644 --- a/application/controllers/api/v1/person/Benutzer.php +++ b/application/controllers/api/v1/person/Benutzer.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Benutzer extends APIv1_Controller +class Benutzer extends API_Controller { /** * Benutzer API constructor. diff --git a/application/controllers/api/v1/person/Benutzerfunktion.php b/application/controllers/api/v1/person/Benutzerfunktion.php index 98fd8654a..75b338df0 100644 --- a/application/controllers/api/v1/person/Benutzerfunktion.php +++ b/application/controllers/api/v1/person/Benutzerfunktion.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Benutzerfunktion extends APIv1_Controller +class Benutzerfunktion extends API_Controller { /** * Benutzerfunktion API constructor. diff --git a/application/controllers/api/v1/person/Benutzergruppe.php b/application/controllers/api/v1/person/Benutzergruppe.php index 0adc8c73a..cf14d6d5a 100644 --- a/application/controllers/api/v1/person/Benutzergruppe.php +++ b/application/controllers/api/v1/person/Benutzergruppe.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Benutzergruppe extends APIv1_Controller +class Benutzergruppe extends API_Controller { /** * Benutzergruppe API constructor. diff --git a/application/controllers/api/v1/person/Fotostatus.php b/application/controllers/api/v1/person/Fotostatus.php index acd1ef5b6..1b64f43f7 100644 --- a/application/controllers/api/v1/person/Fotostatus.php +++ b/application/controllers/api/v1/person/Fotostatus.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Fotostatus extends APIv1_Controller +class Fotostatus extends API_Controller { /** * Fotostatus API constructor. diff --git a/application/controllers/api/v1/person/Freebusy.php b/application/controllers/api/v1/person/Freebusy.php index eb1651c00..435073d2f 100644 --- a/application/controllers/api/v1/person/Freebusy.php +++ b/application/controllers/api/v1/person/Freebusy.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Freebusy extends APIv1_Controller +class Freebusy extends API_Controller { /** * Freebusy API constructor. diff --git a/application/controllers/api/v1/person/Freebusytyp.php b/application/controllers/api/v1/person/Freebusytyp.php index 0187035d1..a05c4d142 100644 --- a/application/controllers/api/v1/person/Freebusytyp.php +++ b/application/controllers/api/v1/person/Freebusytyp.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Freebusytyp extends APIv1_Controller +class Freebusytyp extends API_Controller { /** * Freebusytyp API constructor. diff --git a/application/controllers/api/v1/person/Kontakt.php b/application/controllers/api/v1/person/Kontakt.php index fceeaaeaf..0d925b7ac 100644 --- a/application/controllers/api/v1/person/Kontakt.php +++ b/application/controllers/api/v1/person/Kontakt.php @@ -15,7 +15,7 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); -class Kontakt extends APIv1_Controller +class Kontakt extends API_Controller { /** * Person API constructor. diff --git a/application/controllers/api/v1/person/Kontaktmedium.php b/application/controllers/api/v1/person/Kontaktmedium.php index b732d6eee..bfda0d7fe 100644 --- a/application/controllers/api/v1/person/Kontaktmedium.php +++ b/application/controllers/api/v1/person/Kontaktmedium.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Kontaktmedium extends APIv1_Controller +class Kontaktmedium extends API_Controller { /** * Kontaktmedium API constructor. diff --git a/application/controllers/api/v1/person/Kontakttyp.php b/application/controllers/api/v1/person/Kontakttyp.php index c3d2b6e94..f4951e09a 100644 --- a/application/controllers/api/v1/person/Kontakttyp.php +++ b/application/controllers/api/v1/person/Kontakttyp.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Kontakttyp extends APIv1_Controller +class Kontakttyp extends API_Controller { /** * Kontakttyp API constructor. diff --git a/application/controllers/api/v1/person/Notiz.php b/application/controllers/api/v1/person/Notiz.php index 29755d7d3..96a527c93 100644 --- a/application/controllers/api/v1/person/Notiz.php +++ b/application/controllers/api/v1/person/Notiz.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Notiz extends APIv1_Controller +class Notiz extends API_Controller { /** * Notiz API constructor. diff --git a/application/controllers/api/v1/person/Notizzuordnung.php b/application/controllers/api/v1/person/Notizzuordnung.php index da185e20f..39b388a3a 100644 --- a/application/controllers/api/v1/person/Notizzuordnung.php +++ b/application/controllers/api/v1/person/Notizzuordnung.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Notizzuordnung extends APIv1_Controller +class Notizzuordnung extends API_Controller { /** * Notizzuordnung API constructor. diff --git a/application/controllers/api/v1/person/Person.php b/application/controllers/api/v1/person/Person.php index ca8a66bea..a686f6060 100644 --- a/application/controllers/api/v1/person/Person.php +++ b/application/controllers/api/v1/person/Person.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Person extends APIv1_Controller +class Person extends API_Controller { /** * Person API constructor. diff --git a/application/controllers/api/v1/project/Aktivitaet.php b/application/controllers/api/v1/project/Aktivitaet.php index 7aa647058..f188448a5 100644 --- a/application/controllers/api/v1/project/Aktivitaet.php +++ b/application/controllers/api/v1/project/Aktivitaet.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Aktivitaet extends APIv1_Controller +class Aktivitaet extends API_Controller { /** * Aktivitaet API constructor. diff --git a/application/controllers/api/v1/project/Aufwandstyp.php b/application/controllers/api/v1/project/Aufwandstyp.php index 96be6ab55..ee2df5b29 100644 --- a/application/controllers/api/v1/project/Aufwandstyp.php +++ b/application/controllers/api/v1/project/Aufwandstyp.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Aufwandstyp extends APIv1_Controller +class Aufwandstyp extends API_Controller { /** * Aufwandstyp API constructor. diff --git a/application/controllers/api/v1/project/Projekt.php b/application/controllers/api/v1/project/Projekt.php index 64533f36f..370876ed3 100644 --- a/application/controllers/api/v1/project/Projekt.php +++ b/application/controllers/api/v1/project/Projekt.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Projekt extends APIv1_Controller +class Projekt extends API_Controller { /** * Projekt API constructor. diff --git a/application/controllers/api/v1/project/Projekt_ressource.php b/application/controllers/api/v1/project/Projekt_ressource.php index 2869f935a..030a7f73c 100644 --- a/application/controllers/api/v1/project/Projekt_ressource.php +++ b/application/controllers/api/v1/project/Projekt_ressource.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Projekt_ressource extends APIv1_Controller +class Projekt_ressource extends API_Controller { /** * Projekt_ressource API constructor. diff --git a/application/controllers/api/v1/project/Projektphase.php b/application/controllers/api/v1/project/Projektphase.php index c48893948..d4754fccb 100644 --- a/application/controllers/api/v1/project/Projektphase.php +++ b/application/controllers/api/v1/project/Projektphase.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Projektphase extends APIv1_Controller +class Projektphase extends API_Controller { /** * Projektphase API constructor. diff --git a/application/controllers/api/v1/project/Projekttask.php b/application/controllers/api/v1/project/Projekttask.php index 5793c85a1..048c7f9fd 100644 --- a/application/controllers/api/v1/project/Projekttask.php +++ b/application/controllers/api/v1/project/Projekttask.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Projekttask extends APIv1_Controller +class Projekttask extends API_Controller { /** * Projekttask API constructor. diff --git a/application/controllers/api/v1/project/Ressource.php b/application/controllers/api/v1/project/Ressource.php index fddf77c57..45ebe2089 100644 --- a/application/controllers/api/v1/project/Ressource.php +++ b/application/controllers/api/v1/project/Ressource.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Ressource extends APIv1_Controller +class Ressource extends API_Controller { /** * Ressource API constructor. diff --git a/application/controllers/api/v1/project/Scrumsprint.php b/application/controllers/api/v1/project/Scrumsprint.php index ff0e75b09..6be2ba152 100644 --- a/application/controllers/api/v1/project/Scrumsprint.php +++ b/application/controllers/api/v1/project/Scrumsprint.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Scrumsprint extends APIv1_Controller +class Scrumsprint extends API_Controller { /** * Scrumsprint API constructor. diff --git a/application/controllers/api/v1/ressource/Betriebsmittel.php b/application/controllers/api/v1/ressource/Betriebsmittel.php index 63e003cfd..3f7306167 100644 --- a/application/controllers/api/v1/ressource/Betriebsmittel.php +++ b/application/controllers/api/v1/ressource/Betriebsmittel.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Betriebsmittel extends APIv1_Controller +class Betriebsmittel extends API_Controller { /** * Betriebsmittel API constructor. diff --git a/application/controllers/api/v1/ressource/Betriebsmittelperson2.php b/application/controllers/api/v1/ressource/Betriebsmittelperson2.php index 71b5af77a..ba3a304c4 100644 --- a/application/controllers/api/v1/ressource/Betriebsmittelperson2.php +++ b/application/controllers/api/v1/ressource/Betriebsmittelperson2.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Betriebsmittelperson2 extends APIv1_Controller +class Betriebsmittelperson2 extends API_Controller { /** * Betriebsmittelperson API constructor. diff --git a/application/controllers/api/v1/ressource/Betriebsmittelstatus.php b/application/controllers/api/v1/ressource/Betriebsmittelstatus.php index 8dcfad8c6..11b485f97 100644 --- a/application/controllers/api/v1/ressource/Betriebsmittelstatus.php +++ b/application/controllers/api/v1/ressource/Betriebsmittelstatus.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Betriebsmittelstatus extends APIv1_Controller +class Betriebsmittelstatus extends API_Controller { /** * Betriebsmittelstatus API constructor. diff --git a/application/controllers/api/v1/ressource/Betriebsmitteltyp.php b/application/controllers/api/v1/ressource/Betriebsmitteltyp.php index 9902ec032..bc383fd9c 100644 --- a/application/controllers/api/v1/ressource/Betriebsmitteltyp.php +++ b/application/controllers/api/v1/ressource/Betriebsmitteltyp.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Betriebsmitteltyp extends APIv1_Controller +class Betriebsmitteltyp extends API_Controller { /** * Betriebsmitteltyp API constructor. diff --git a/application/controllers/api/v1/ressource/Coodle.php b/application/controllers/api/v1/ressource/Coodle.php index bd7cfcf7f..b9c92e1bb 100644 --- a/application/controllers/api/v1/ressource/Coodle.php +++ b/application/controllers/api/v1/ressource/Coodle.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Coodle extends APIv1_Controller +class Coodle extends API_Controller { /** * Coodle API constructor. diff --git a/application/controllers/api/v1/ressource/Erreichbarkeit.php b/application/controllers/api/v1/ressource/Erreichbarkeit.php index 291451faf..080ac258c 100644 --- a/application/controllers/api/v1/ressource/Erreichbarkeit.php +++ b/application/controllers/api/v1/ressource/Erreichbarkeit.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Erreichbarkeit extends APIv1_Controller +class Erreichbarkeit extends API_Controller { /** * Erreichbarkeit API constructor. diff --git a/application/controllers/api/v1/ressource/Firma.php b/application/controllers/api/v1/ressource/Firma.php index 159d63642..e18799253 100644 --- a/application/controllers/api/v1/ressource/Firma.php +++ b/application/controllers/api/v1/ressource/Firma.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Firma extends APIv1_Controller +class Firma extends API_Controller { /** * Firma API constructor. diff --git a/application/controllers/api/v1/ressource/Firmatag.php b/application/controllers/api/v1/ressource/Firmatag.php index b9df31896..e2e98d7a8 100644 --- a/application/controllers/api/v1/ressource/Firmatag.php +++ b/application/controllers/api/v1/ressource/Firmatag.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Firmatag extends APIv1_Controller +class Firmatag extends API_Controller { /** * Firmatag API constructor. diff --git a/application/controllers/api/v1/ressource/Firmentyp.php b/application/controllers/api/v1/ressource/Firmentyp.php index 2d13ae845..268428f40 100644 --- a/application/controllers/api/v1/ressource/Firmentyp.php +++ b/application/controllers/api/v1/ressource/Firmentyp.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Firmentyp extends APIv1_Controller +class Firmentyp extends API_Controller { /** * Firmentyp API constructor. diff --git a/application/controllers/api/v1/ressource/Funktion.php b/application/controllers/api/v1/ressource/Funktion.php index 0ff059d2a..0f18b7649 100644 --- a/application/controllers/api/v1/ressource/Funktion.php +++ b/application/controllers/api/v1/ressource/Funktion.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Funktion extends APIv1_Controller +class Funktion extends API_Controller { /** * Funktion API constructor. diff --git a/application/controllers/api/v1/ressource/Lehrmittel.php b/application/controllers/api/v1/ressource/Lehrmittel.php index 36d0d7a2f..6cb5ea9bb 100644 --- a/application/controllers/api/v1/ressource/Lehrmittel.php +++ b/application/controllers/api/v1/ressource/Lehrmittel.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Lehrmittel extends APIv1_Controller +class Lehrmittel extends API_Controller { /** * Lehrmittel API constructor. diff --git a/application/controllers/api/v1/ressource/Mitarbeiter.php b/application/controllers/api/v1/ressource/Mitarbeiter.php index 70f4b441c..359088074 100644 --- a/application/controllers/api/v1/ressource/Mitarbeiter.php +++ b/application/controllers/api/v1/ressource/Mitarbeiter.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Mitarbeiter extends APIv1_Controller +class Mitarbeiter extends API_Controller { /** * Mitarbeiter API constructor. diff --git a/application/controllers/api/v1/ressource/Ort.php b/application/controllers/api/v1/ressource/Ort.php index a49bbe2fb..7937c3816 100644 --- a/application/controllers/api/v1/ressource/Ort.php +++ b/application/controllers/api/v1/ressource/Ort.php @@ -14,7 +14,7 @@ if (!defined("BASEPATH")) exit("No direct script access allowed"); -class Ort extends APIv1_Controller +class Ort extends API_Controller { /** * Ort API constructor. diff --git a/application/controllers/api/v1/ressource/Ortraumtyp.php b/application/controllers/api/v1/ressource/Ortraumtyp.php index cbf9c3d9b..fe3c628b6 100644 --- a/application/controllers/api/v1/ressource/Ortraumtyp.php +++ b/application/controllers/api/v1/ressource/Ortraumtyp.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Ortraumtyp extends APIv1_Controller +class Ortraumtyp extends API_Controller { /** * Ortraumtyp API constructor. diff --git a/application/controllers/api/v1/ressource/Personfunktionstandort.php b/application/controllers/api/v1/ressource/Personfunktionstandort.php index 1c7551984..251d2c7ae 100644 --- a/application/controllers/api/v1/ressource/Personfunktionstandort.php +++ b/application/controllers/api/v1/ressource/Personfunktionstandort.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Personfunktionstandort extends APIv1_Controller +class Personfunktionstandort extends API_Controller { /** * Personfunktionstandort API constructor. diff --git a/application/controllers/api/v1/ressource/Raumtyp.php b/application/controllers/api/v1/ressource/Raumtyp.php index 71b7bf5d8..7ff7b5ccd 100644 --- a/application/controllers/api/v1/ressource/Raumtyp.php +++ b/application/controllers/api/v1/ressource/Raumtyp.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Raumtyp extends APIv1_Controller +class Raumtyp extends API_Controller { /** * Raumtyp API constructor. diff --git a/application/controllers/api/v1/ressource/Reservierung.php b/application/controllers/api/v1/ressource/Reservierung.php index 633f61036..50a0528c7 100644 --- a/application/controllers/api/v1/ressource/Reservierung.php +++ b/application/controllers/api/v1/ressource/Reservierung.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Reservierung extends APIv1_Controller +class Reservierung extends API_Controller { /** * Reservierung API constructor. diff --git a/application/controllers/api/v1/ressource/Stunde.php b/application/controllers/api/v1/ressource/Stunde.php index 5d2f37049..2844860f4 100644 --- a/application/controllers/api/v1/ressource/Stunde.php +++ b/application/controllers/api/v1/ressource/Stunde.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Stunde extends APIv1_Controller +class Stunde extends API_Controller { /** * Stunde API constructor. diff --git a/application/controllers/api/v1/ressource/Stundenplan.php b/application/controllers/api/v1/ressource/Stundenplan.php index 2d4b3c705..9a6614f21 100644 --- a/application/controllers/api/v1/ressource/Stundenplan.php +++ b/application/controllers/api/v1/ressource/Stundenplan.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Stundenplan extends APIv1_Controller +class Stundenplan extends API_Controller { /** * Stundenplan API constructor. diff --git a/application/controllers/api/v1/ressource/Stundenplandev.php b/application/controllers/api/v1/ressource/Stundenplandev.php index 385f2bf9e..fa6e788c3 100644 --- a/application/controllers/api/v1/ressource/Stundenplandev.php +++ b/application/controllers/api/v1/ressource/Stundenplandev.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Stundenplandev extends APIv1_Controller +class Stundenplandev extends API_Controller { /** * Stundenplandev API constructor. diff --git a/application/controllers/api/v1/ressource/Zeitaufzeichnung.php b/application/controllers/api/v1/ressource/Zeitaufzeichnung.php index 8c30390e6..74290898d 100644 --- a/application/controllers/api/v1/ressource/Zeitaufzeichnung.php +++ b/application/controllers/api/v1/ressource/Zeitaufzeichnung.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Zeitaufzeichnung extends APIv1_Controller +class Zeitaufzeichnung extends API_Controller { /** * Zeitaufzeichnung API constructor. diff --git a/application/controllers/api/v1/ressource/Zeitfenster.php b/application/controllers/api/v1/ressource/Zeitfenster.php index e180d0d75..d2dd864cc 100644 --- a/application/controllers/api/v1/ressource/Zeitfenster.php +++ b/application/controllers/api/v1/ressource/Zeitfenster.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Zeitfenster extends APIv1_Controller +class Zeitfenster extends API_Controller { /** * Zeitfenster API constructor. diff --git a/application/controllers/api/v1/ressource/Zeitsperre.php b/application/controllers/api/v1/ressource/Zeitsperre.php index 626a88d79..a3eafd525 100644 --- a/application/controllers/api/v1/ressource/Zeitsperre.php +++ b/application/controllers/api/v1/ressource/Zeitsperre.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Zeitsperre extends APIv1_Controller +class Zeitsperre extends API_Controller { /** * Zeitsperre API constructor. diff --git a/application/controllers/api/v1/ressource/Zeitsperretyp.php b/application/controllers/api/v1/ressource/Zeitsperretyp.php index c70a9b2f4..aaa8ad656 100644 --- a/application/controllers/api/v1/ressource/Zeitsperretyp.php +++ b/application/controllers/api/v1/ressource/Zeitsperretyp.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Zeitsperretyp extends APIv1_Controller +class Zeitsperretyp extends API_Controller { /** * Zeitsperretyp API constructor. diff --git a/application/controllers/api/v1/ressource/Zeitwunsch.php b/application/controllers/api/v1/ressource/Zeitwunsch.php index 8d9646edc..08f031eef 100644 --- a/application/controllers/api/v1/ressource/Zeitwunsch.php +++ b/application/controllers/api/v1/ressource/Zeitwunsch.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Zeitwunsch extends APIv1_Controller +class Zeitwunsch extends API_Controller { /** * Zeitwunsch API constructor. diff --git a/application/controllers/api/v1/system/Appdaten.php b/application/controllers/api/v1/system/Appdaten.php index 3395ec9b6..34b53524b 100644 --- a/application/controllers/api/v1/system/Appdaten.php +++ b/application/controllers/api/v1/system/Appdaten.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Appdaten extends APIv1_Controller +class Appdaten extends API_Controller { /** * Appdaten API constructor. diff --git a/application/controllers/api/v1/system/Benutzerrolle.php b/application/controllers/api/v1/system/Benutzerrolle.php index 99ec3d79e..4ad4d0c25 100644 --- a/application/controllers/api/v1/system/Benutzerrolle.php +++ b/application/controllers/api/v1/system/Benutzerrolle.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Benutzerrolle extends APIv1_Controller +class Benutzerrolle extends API_Controller { /** * Benutzerrolle API constructor. diff --git a/application/controllers/api/v1/system/Berechtigung.php b/application/controllers/api/v1/system/Berechtigung.php index e94bf30f3..f88c01731 100644 --- a/application/controllers/api/v1/system/Berechtigung.php +++ b/application/controllers/api/v1/system/Berechtigung.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Berechtigung extends APIv1_Controller +class Berechtigung extends API_Controller { /** * Berechtigung API constructor. diff --git a/application/controllers/api/v1/system/Cronjob.php b/application/controllers/api/v1/system/Cronjob.php index 4b3bcba82..12ebe62d7 100644 --- a/application/controllers/api/v1/system/Cronjob.php +++ b/application/controllers/api/v1/system/Cronjob.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Cronjob extends APIv1_Controller +class Cronjob extends API_Controller { /** * Cronjob API constructor. diff --git a/application/controllers/api/v1/system/Filter.php b/application/controllers/api/v1/system/Filter.php index bc217d385..eb611da64 100644 --- a/application/controllers/api/v1/system/Filter.php +++ b/application/controllers/api/v1/system/Filter.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Filter extends APIv1_Controller +class Filter extends API_Controller { /** * Filter API constructor. diff --git a/application/controllers/api/v1/system/Log.php b/application/controllers/api/v1/system/Log.php index c270922c5..7dbee8f38 100644 --- a/application/controllers/api/v1/system/Log.php +++ b/application/controllers/api/v1/system/Log.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Log extends APIv1_Controller +class Log extends API_Controller { /** * Log API constructor. diff --git a/application/controllers/api/v1/system/Message.php b/application/controllers/api/v1/system/Message.php index 1825b7db9..59d6a0b2c 100644 --- a/application/controllers/api/v1/system/Message.php +++ b/application/controllers/api/v1/system/Message.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Message extends APIv1_Controller +class Message extends API_Controller { /** * Message API constructor. diff --git a/application/controllers/api/v1/system/Phrase.php b/application/controllers/api/v1/system/Phrase.php index 1a7846cb5..ff64dbce3 100644 --- a/application/controllers/api/v1/system/Phrase.php +++ b/application/controllers/api/v1/system/Phrase.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Phrase extends APIv1_Controller +class Phrase extends API_Controller { /** * Phrase API constructor. diff --git a/application/controllers/api/v1/system/Rolle.php b/application/controllers/api/v1/system/Rolle.php index ba257145f..e5344539e 100644 --- a/application/controllers/api/v1/system/Rolle.php +++ b/application/controllers/api/v1/system/Rolle.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Rolle extends APIv1_Controller +class Rolle extends API_Controller { /** * Rolle API constructor. diff --git a/application/controllers/api/v1/system/Rolleberechtigung.php b/application/controllers/api/v1/system/Rolleberechtigung.php index 3838dc6de..9fca1509f 100644 --- a/application/controllers/api/v1/system/Rolleberechtigung.php +++ b/application/controllers/api/v1/system/Rolleberechtigung.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Rolleberechtigung extends APIv1_Controller +class Rolleberechtigung extends API_Controller { /** * Rolleberechtigung API constructor. diff --git a/application/controllers/api/v1/system/Server.php b/application/controllers/api/v1/system/Server.php index 0f3c76655..fe6a175f1 100644 --- a/application/controllers/api/v1/system/Server.php +++ b/application/controllers/api/v1/system/Server.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Server extends APIv1_Controller +class Server extends API_Controller { /** * Server API constructor. diff --git a/application/controllers/api/v1/system/Sprache2.php b/application/controllers/api/v1/system/Sprache2.php index 3a3b7e6de..f84d9070b 100644 --- a/application/controllers/api/v1/system/Sprache2.php +++ b/application/controllers/api/v1/system/Sprache2.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Sprache2 extends APIv1_Controller +class Sprache2 extends API_Controller { /** * Sprache API constructor. diff --git a/application/controllers/api/v1/system/Tag.php b/application/controllers/api/v1/system/Tag.php index 2bcb2dec2..7ce375217 100644 --- a/application/controllers/api/v1/system/Tag.php +++ b/application/controllers/api/v1/system/Tag.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Tag extends APIv1_Controller +class Tag extends API_Controller { /** * Tag API constructor. diff --git a/application/controllers/api/v1/system/UDF.php b/application/controllers/api/v1/system/UDF.php index 57d22600c..566a4c5bc 100644 --- a/application/controllers/api/v1/system/UDF.php +++ b/application/controllers/api/v1/system/UDF.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class UDF extends APIv1_Controller +class UDF extends API_Controller { /** * UDF API constructor. diff --git a/application/controllers/api/v1/system/Variable.php b/application/controllers/api/v1/system/Variable.php index 8a4e196dc..b84888b7e 100644 --- a/application/controllers/api/v1/system/Variable.php +++ b/application/controllers/api/v1/system/Variable.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Variable extends APIv1_Controller +class Variable extends API_Controller { /** * Variable API constructor. diff --git a/application/controllers/api/v1/system/Vorlage.php b/application/controllers/api/v1/system/Vorlage.php index 48a73ac4f..24db38570 100644 --- a/application/controllers/api/v1/system/Vorlage.php +++ b/application/controllers/api/v1/system/Vorlage.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Vorlage extends APIv1_Controller +class Vorlage extends API_Controller { /** * Vorlage API constructor. diff --git a/application/controllers/api/v1/system/Vorlagestudiengang.php b/application/controllers/api/v1/system/Vorlagestudiengang.php index dbbe23e1e..e28533f99 100644 --- a/application/controllers/api/v1/system/Vorlagestudiengang.php +++ b/application/controllers/api/v1/system/Vorlagestudiengang.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Vorlagestudiengang extends APIv1_Controller +class Vorlagestudiengang extends API_Controller { /** * Vorlagestudiengang API constructor. diff --git a/application/controllers/api/v1/system/Webservicelog.php b/application/controllers/api/v1/system/Webservicelog.php index ece2e2ff6..cb7882ad6 100644 --- a/application/controllers/api/v1/system/Webservicelog.php +++ b/application/controllers/api/v1/system/Webservicelog.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Webservicelog extends APIv1_Controller +class Webservicelog extends API_Controller { /** * Webservicelog API constructor. diff --git a/application/controllers/api/v1/system/Webservicerecht.php b/application/controllers/api/v1/system/Webservicerecht.php index 4f281edaa..0031675ce 100644 --- a/application/controllers/api/v1/system/Webservicerecht.php +++ b/application/controllers/api/v1/system/Webservicerecht.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Webservicerecht extends APIv1_Controller +class Webservicerecht extends API_Controller { /** * Webservicerecht API constructor. diff --git a/application/controllers/api/v1/system/Webservicetyp.php b/application/controllers/api/v1/system/Webservicetyp.php index 09303c87c..c77745319 100644 --- a/application/controllers/api/v1/system/Webservicetyp.php +++ b/application/controllers/api/v1/system/Webservicetyp.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Webservicetyp extends APIv1_Controller +class Webservicetyp extends API_Controller { /** * Webservicetyp API constructor. diff --git a/application/controllers/api/v1/testtool/Ablauf.php b/application/controllers/api/v1/testtool/Ablauf.php index f2e7d9d63..9d5ae9a8d 100644 --- a/application/controllers/api/v1/testtool/Ablauf.php +++ b/application/controllers/api/v1/testtool/Ablauf.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Ablauf extends APIv1_Controller +class Ablauf extends API_Controller { /** * Ablauf API constructor. diff --git a/application/controllers/api/v1/testtool/Antwort.php b/application/controllers/api/v1/testtool/Antwort.php index 7730dd3e9..db7d970a5 100644 --- a/application/controllers/api/v1/testtool/Antwort.php +++ b/application/controllers/api/v1/testtool/Antwort.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Antwort extends APIv1_Controller +class Antwort extends API_Controller { /** * Antwort API constructor. diff --git a/application/controllers/api/v1/testtool/Frage.php b/application/controllers/api/v1/testtool/Frage.php index 83989956a..e6f7a7ea7 100644 --- a/application/controllers/api/v1/testtool/Frage.php +++ b/application/controllers/api/v1/testtool/Frage.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Frage extends APIv1_Controller +class Frage extends API_Controller { /** * Frage API constructor. diff --git a/application/controllers/api/v1/testtool/Gebiet.php b/application/controllers/api/v1/testtool/Gebiet.php index 12cba24ab..dda2b98a1 100644 --- a/application/controllers/api/v1/testtool/Gebiet.php +++ b/application/controllers/api/v1/testtool/Gebiet.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Gebiet extends APIv1_Controller +class Gebiet extends API_Controller { /** * Gebiet API constructor. diff --git a/application/controllers/api/v1/testtool/Kategorie.php b/application/controllers/api/v1/testtool/Kategorie.php index 5058ac76d..c0e84a61b 100644 --- a/application/controllers/api/v1/testtool/Kategorie.php +++ b/application/controllers/api/v1/testtool/Kategorie.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Kategorie extends APIv1_Controller +class Kategorie extends API_Controller { /** * Kategorie API constructor. diff --git a/application/controllers/api/v1/testtool/Kriterien.php b/application/controllers/api/v1/testtool/Kriterien.php index 2420dcb62..e00932afe 100644 --- a/application/controllers/api/v1/testtool/Kriterien.php +++ b/application/controllers/api/v1/testtool/Kriterien.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Kriterien extends APIv1_Controller +class Kriterien extends API_Controller { /** * Kriterien API constructor. diff --git a/application/controllers/api/v1/testtool/Pruefling.php b/application/controllers/api/v1/testtool/Pruefling.php index 3a471035e..626bb2760 100644 --- a/application/controllers/api/v1/testtool/Pruefling.php +++ b/application/controllers/api/v1/testtool/Pruefling.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Pruefling extends APIv1_Controller +class Pruefling extends API_Controller { /** * Pruefling API constructor. diff --git a/application/controllers/api/v1/testtool/Vorschlag.php b/application/controllers/api/v1/testtool/Vorschlag.php index 0874b384a..5392c8aa2 100644 --- a/application/controllers/api/v1/testtool/Vorschlag.php +++ b/application/controllers/api/v1/testtool/Vorschlag.php @@ -14,7 +14,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); -class Vorschlag extends APIv1_Controller +class Vorschlag extends API_Controller { /** * Vorschlag API constructor. diff --git a/application/controllers/crm/Statusgrund.php b/application/controllers/crm/Statusgrund.php index 344ac06dc..3c7e43736 100644 --- a/application/controllers/crm/Statusgrund.php +++ b/application/controllers/crm/Statusgrund.php @@ -129,6 +129,7 @@ class Statusgrund extends Auth_Controller $aktiv = $this->input->post("aktiv") != null && $this->input->post("aktiv") == "on" ? true : false; $bezeichnung_mehrsprachig = $this->input->post("bezeichnung_mehrsprachig"); $beschreibung = $this->input->post("beschreibung"); + $statusgrund_kurzbz = $this->input->post("statusgrund_kurzbz"); for ($i = 0; $i < count($bezeichnung_mehrsprachig); $i++) { @@ -177,7 +178,8 @@ class Statusgrund extends Auth_Controller $data = array( "aktiv" => $aktiv, "bezeichnung_mehrsprachig" => $bezeichnung_mehrsprachig, - "beschreibung" => $beschreibung + "beschreibung" => $beschreibung, + "statusgrund_kurzbz" => $statusgrund_kurzbz ); $statusgrund = $this->StatusgrundModel->update($statusgrund_id, $data); @@ -196,6 +198,7 @@ class Statusgrund extends Auth_Controller $bezeichnung_mehrsprachig = $this->input->post("bezeichnung_mehrsprachig"); $beschreibung = $this->input->post("beschreibung"); $status_kurzbz = $this->input->post("status_kurzbz"); + $statusgrund_kurzbz = $this->input->post("statusgrund_kurzbz"); for ($i = 0; $i < count($bezeichnung_mehrsprachig); $i++) { @@ -245,7 +248,8 @@ class Statusgrund extends Auth_Controller "status_kurzbz" => $status_kurzbz, "aktiv" => $aktiv, "bezeichnung_mehrsprachig" => $bezeichnung_mehrsprachig, - "beschreibung" => $beschreibung + "beschreibung" => $beschreibung, + "statusgrund_kurzbz" => $statusgrund_kurzbz ); $statusgrund = $this->StatusgrundModel->insert($data); diff --git a/application/controllers/jobs/AnrechnungJob.php b/application/controllers/jobs/AnrechnungJob.php index 2868a8052..f92410dbc 100644 --- a/application/controllers/jobs/AnrechnungJob.php +++ b/application/controllers/jobs/AnrechnungJob.php @@ -15,6 +15,11 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); class AnrechnungJob extends JOB_Controller { + const APPROVE_ANRECHNUNG_URI = '/lehre/anrechnung/ApproveAnrechnungUebersicht'; + + const ANRECHNUNGSTATUS_APPROVED = 'approved'; + const ANRECHNUNGSTATUS_REJECTED = 'rejected'; + const ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_STGL = 'AnrechnungNotizSTGL'; /** * Constructor @@ -23,6 +28,11 @@ class AnrechnungJob extends JOB_Controller { parent::__construct(); $this->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel'); + $this->load->model('education/Anrechnung_model', 'AnrechnungModel'); + $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); + + $this->load->helper('url'); + $this->load->helper('hlp_sancho_helper'); } /** @@ -84,4 +94,320 @@ class AnrechnungJob extends JOB_Controller } $this->logInfo('End Anrechnung Grades Job', array('Number of Grades added'=>$cnt)); } + + /** + * Deletes Zeugnisnoten 'angerechnet', when Anrechnung is rejected afterwards. + * E.g., when STGL first accepts, then withdraws and finally rejects the approvement. + */ + public function deleteAnrechnungGrades() + { + $this->logInfo('Start AnrechnungJob to delete Grades'); + + // Get all Zeungisnoten, + // WHERE note is angerechnet + // AND Anrechnung was rejected AFTER the Zeugnisnote was created + $qry = ' + SELECT DISTINCT ON (status.anrechnung_id) anrechnung_id, + status.status_kurzbz AS "last_anrechnungstatus", + status.insertamum AS "last_anrechnungstatus_insertamum", + zeugnisnote.insertamum AS "zeugnisdatum_insertamum", + student.student_uid, + zeugnisnote.lehrveranstaltung_id, + zeugnisnote.studiensemester_kurzbz, + note + FROM lehre.tbl_zeugnisnote zeugnisnote + JOIN public.tbl_student student USING (student_uid) + JOIN lehre.tbl_anrechnung anrechnung + ON (zeugnisnote.lehrveranstaltung_id = anrechnung.lehrveranstaltung_id) + AND (student.prestudent_id = anrechnung.prestudent_id) + AND (zeugnisnote.studiensemester_kurzbz = anrechnung.studiensemester_kurzbz) + JOIN lehre.tbl_anrechnung_anrechnungstatus status USING (anrechnung_id) + WHERE note = 6 + AND status.insertamum > zeugnisnote.insertamum + AND status.status_kurzbz = '. $this->db->escape(self::ANRECHNUNGSTATUS_REJECTED). ' + ORDER BY status.anrechnung_id, status.insertamum DESC + '; + + $db = new DB_Model(); + $result = $db->execReadOnlyQuery($qry); + $cnt = 0; + + if (hasData($result)) + { + $this->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel'); + + foreach (getData($result) as $row) + { + // Delete Zeugnisnote + $this->ZeugnisnoteModel->delete(array( + 'lehrveranstaltung_id' => $row->lehrveranstaltung_id, + 'student_uid' => $row->student_uid, + 'studiensemester_kurzbz' => $row->studiensemester_kurzbz + )); + + // Count up + $cnt++; + } + } + + $this->logInfo('End AnrechnungJob to delete Grades', array('Number of Grades deleted: ' => $cnt)); + } + + // Send Sancho mail to STGL with yesterdays new Anrechnungen + public function sendMailToSTGL() + { + $this->logInfo('Start AnrechnungJob to send emails to STGL about yesterdays new Anrechnungen.'); + + // Get all yesterdays Anrechnungen, that did not process further than first status + // (If Anrechnung is new, but STGL already started the process yesterday, + // he does not need to be informed about this new Anrechnung anymore) + $this->AnrechnungModel->addSelect('anrechnung_id, studiensemester_kurzbz, lv.studiengang_kz, lv.bezeichnung, vorname, nachname'); + $this->AnrechnungModel->addJoin('lehre.tbl_lehrveranstaltung lv', 'lehrveranstaltung_id'); + $this->AnrechnungModel->addJoin('public.tbl_student student', 'prestudent_id'); + $this->AnrechnungModel->addJoin('public.tbl_benutzer benutzer', 'ON (benutzer.uid = student.student_uid)'); + $this->AnrechnungModel->addJoin('public.tbl_person person', 'person_id'); + $this->AnrechnungModel->addOrder('lv.studiengang_kz, lv.bezeichnung'); + + $result = $this->AnrechnungModel->loadWhere( + '(lehre.tbl_anrechnung.insertamum)::date = (NOW() - INTERVAL \'24 HOURS\')::DATE + AND 1 = (SELECT COUNT(*) FROM lehre.tbl_anrechnung_anrechnungstatus status WHERE status.anrechnung_id = tbl_anrechnung.anrechnung_id)' + ); + + // Exit if there are no Anrechnungen + if (!$anrechnungen = getData($result)) { + $this->logInfo('ABORTED: Sending emails to STGL about yesterdays new Anrechnungen aborted - No new Anrechnungen found.'); + exit; + } + + $unique_studiengang_kz_arr = array_unique(array_column($anrechnungen, 'studiengang_kz')); + + foreach ($unique_studiengang_kz_arr as $studiengang_kz) + { + // Get STG bezeichnung + $this->StudiengangModel->addSelect('UPPER( typ || kurzbz ) AS "stg_bezeichnung"'); + $studiengang_bezeichnung = $this->StudiengangModel->load($studiengang_kz)->retval[0]->stg_bezeichnung; + + // Get STGL mail address + list ($to, $vorname) = self::_getSTGLMailAddress($studiengang_kz); + + // Get HTML table with new Anrechnungen of that STG plus amount of them + list ($anrechnungen_amount, $anrechnungen_table) = self::_getSTGLMailDataTable($studiengang_kz, $anrechnungen); + + // Link to Antrag genehmigen dashboard + $url = + CIS_ROOT. 'cis/index.php?menu='. + CIS_ROOT. 'cis/menu.php?content_id=&content='. + CIS_ROOT. index_page(). self::APPROVE_ANRECHNUNG_URI; + + // Prepare mail content + $body_fields = array( + 'vorname' => $vorname, + 'studiengang' => $studiengang_bezeichnung, + 'anzahl' => $anrechnungen_amount, + 'datentabelle' => $anrechnungen_table, + 'link' => anchor($url, 'Anrechnungsanträge Übersicht') + ); + + // Send mail + sendSanchoMail( + 'AnrechnungAntragStellen', + $body_fields, + $to, + 'Anerkennung nachgewiesener Kenntnisse: Neuer Antrag wurde gestellt' + ); + } + + $this->logInfo('SUCCEDED: Sending emails to STGL about yesterdays new Anrechnungen succeded.'); + } + + /** + * Send Sancho mail to students, whose Anrechnungen were approved 24 hours ago. + */ + public function sendMailApproved(){ + + $this->logInfo('Start AnrechnungJob to send emails to students, whose Anrechnungen were approved.'); + + // Get all yesterdays approvements + $this->AnrechnungModel->addSelect('student.student_uid, vorname, nachname, geschlecht, lv.bezeichnung'); + $this->AnrechnungModel->addJoin('lehre.tbl_anrechnung_anrechnungstatus status', 'anrechnung_id'); + $this->AnrechnungModel->addJoin('lehre.tbl_lehrveranstaltung lv', 'lehrveranstaltung_id'); + $this->AnrechnungModel->addJoin('public.tbl_student student', 'prestudent_id'); + $this->AnrechnungModel->addJoin('public.tbl_benutzer benutzer', 'ON (benutzer.uid = student.student_uid)'); + $this->AnrechnungModel->addJoin('public.tbl_person person', 'person_id'); + + $result = $this->AnrechnungModel->loadWhere( + '(status.insertamum)::date = (NOW() - INTERVAL \'24 HOURS\')::DATE AND + status.status_kurzbz = '. $this->db->escape(self::ANRECHNUNGSTATUS_APPROVED) + ); + + // Exit if there are no approved Anrechnungen + if (!hasData($result)) + { + $this->logInfo('ABORTED sending emails to students, whose Anrechnungen were approved. No new approvements found.'); + exit; + } + + // Loop through students + foreach ($result->retval as $student) + { + $to = $student->student_uid. '@'. DOMAIN; + + $anrede = $student->geschlecht == 'w' ? 'Sehr geehrte Frau ' : 'Sehr geehrter Herr '; + + $text = 'Ihrem Antrag auf Anerkennung nachgewiesener Kenntnisse der Lehrveranstaltung "'. + $student->bezeichnung. '" wurde stattgegeben.'; + + // Prepare mail content + $body_fields = array( + 'anrede_name' => $anrede. $student->vorname. ' '. $student->nachname, + 'text' => $text + ); + + // Send mail + sendSanchoMail( + 'AnrechnungGenehmigen', + $body_fields, + $to, + 'Anerkennung nachgewiesener Kenntnisse: Ihr Antrag ist abgeschlossen' + ); + } + } + + /** + * Send Sancho mail to students, whose Anrechnungen were rejected 24 hours ago. + */ + public function sendMailRejected(){ + + $this->logInfo('Start AnrechnungJob to send emails to students, whose Anrechnungen were rejected.'); + + $qry = ' + SELECT + student.student_uid, vorname, nachname, geschlecht, lv.bezeichnung, + (SELECT text FROM public.tbl_notizzuordnung JOIN public.tbl_notiz USING(notiz_id) + WHERE tbl_notizzuordnung.anrechnung_id=tbl_anrechnung.anrechnung_id + AND tbl_notiz.titel='. $this->db->escape(self::ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_STGL).' + ORDER BY tbl_notiz.insertamum DESC LIMIT 1) as text + FROM lehre.tbl_anrechnung + JOIN lehre.tbl_lehrveranstaltung lv USING(lehrveranstaltung_id) + JOIN public.tbl_student student USING(prestudent_id) + JOIN public.tbl_benutzer benutzer ON (benutzer.uid = student.student_uid) + JOIN public.tbl_person person USING(person_id) + + WHERE EXISTS(SELECT 1 FROM lehre.tbl_anrechnung_anrechnungstatus status WHERE + anrechnung_id=tbl_anrechnung.anrechnung_id AND + (status.insertamum)::date = (NOW() - INTERVAL \'24 HOURS\')::DATE AND + status_kurzbz = '. $this->db->escape(self::ANRECHNUNGSTATUS_REJECTED). ') + '; + + $db = new DB_Model(); + $result = $db->execReadOnlyQuery($qry); + + // Exit if there are no rejected Anrechnungen + if (!hasData($result)) + { + $this->logInfo('ABORTED sending emails to students, whose Anrechnungen were rejected. No new rejectments found.'); + exit; + } + + // Loop through students + foreach ($result->retval as $student) + { + $to = $student->student_uid. '@'. DOMAIN; + + $anrede = $student->geschlecht == 'w' ? 'Sehr geehrte Frau ' : 'Sehr geehrter Herr '; + + $text = <<bezeichnung" leider nicht anrechnen, weil die Gleichwertigkeit nicht festgestellt werden konnte.

+ Begründung: $student->text +html; + + // Prepare mail content + $body_fields = array( + 'anrede_name' => $anrede. $student->vorname. ' '. $student->nachname, + 'text' => $text + ); + + // Send mail + sendSanchoMail( + 'AnrechnungGenehmigen', + $body_fields, + $to, + 'Anerkennung nachgewiesener Kenntnisse: Ihr Antrag ist abgeschlossen' + ); + } + + } + + // Get STGL mail address + private function _getSTGLMailAddress($studiengang_kz) + { + $result = $this->StudiengangModel->getLeitung($studiengang_kz); + + // Get STGL mail address + if (hasData($result)) + { + return array( + $result->retval[0]->uid. '@'. DOMAIN, + $result->retval[0]->vorname + ); + } + // If not available, get assistance mail address + else + { + $result = $this->StudiengangModel->load($studiengang_kz); + + if (hasData($result)) + { + return array( + $result->retval[0]->email, + '' + ); + } + } + } + + // Build HTML table with yesterdays new Anrechnungen of the given STG + private function _getSTGLMailDataTable($studiengang_kz, $anrechnungen) + { + $html = ''; + $lv_bezeichnung = ''; + + // Filter Anrechnungen of given STG + $anrechnungen = array_filter( + $anrechnungen, + function ($anrechnung) use (&$studiengang_kz) { + return $anrechnung->studiengang_kz == $studiengang_kz; + }); + + // Amount of Anrechnungen + $amount = count($anrechnungen); + + // HTML table body + $html .= ' + + + '; + + foreach ($anrechnungen as $anrechnung) + { + // Head line for each LV bezeichnung + if ($anrechnung->bezeichnung != $lv_bezeichnung) + { + $html .= ''; + } + + $lv_bezeichnung = $anrechnung->bezeichnung; + + // Row for each Anrechnung / student + $html .= ''; + } + + $html .= ' + +
' . $anrechnung->bezeichnung . '
'. $anrechnung->vorname. ' '. $anrechnung->nachname. '
+ '; + + return array($amount, $html); + } } diff --git a/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php b/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php index c5e4b94d8..d76c0d79b 100644 --- a/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php +++ b/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php @@ -1,6 +1,6 @@ 'lehre/anrechnung_genehmigen:rw', 'approve' => 'lehre/anrechnung_genehmigen:rw', 'reject' => 'lehre/anrechnung_genehmigen:rw', - 'requestRecommendation' => 'lehre/anrechnung_genehmigen:rw' + 'requestRecommendation' => 'lehre/anrechnung_genehmigen:rw', + 'withdraw' => 'lehre/anrechnung_genehmigen:rw', + 'withdrawRequestRecommendation' => 'lehre/anrechnung_genehmigen:rw', + 'saveEmpfehlungsNotiz' => 'lehre/anrechnung_genehmigen:rw' ) ); @@ -80,29 +84,23 @@ class approveAnrechnungDetail extends Auth_Controller self::_checkIfEntitledToReadAnrechnung($anrechnung_id); // Get Anrechung data - if (!$anrechnungData = getData($this->anrechnunglib->getAnrechnungData($anrechnung_id))) - { - show_error('Missing data for Anrechnung.'); - } + $anrechnungData = $this->anrechnunglib->getAnrechnungData($anrechnung_id); + + // Get Antrag data + $antragData = $this->anrechnunglib->getAntragData( + $anrechnungData->prestudent_id, + $anrechnungData->studiensemester_kurzbz, + $anrechnungData->lehrveranstaltung_id + ); // Get Empfehlung data - if(!$empfehlungData = getData($this->anrechnunglib->getEmpfehlungData($anrechnung_id))) - { - show_error('Missing data for recommendation'); - } + $empfehlungData = $this->anrechnunglib->getEmpfehlungData($anrechnung_id); // Get Genehmigung data - if(!$genehmigungData = getData($this->anrechnunglib->getGenehmigungData($anrechnung_id))) - { - show_error('Missing data for recommendation'); - } - + $genehmigungData = $this->anrechnunglib->getGenehmigungData($anrechnung_id); + $viewData = array( - 'antragData' => $this->anrechnunglib->getAntragData( - $student_uid = $this->StudentModel->getUID($anrechnungData->prestudent_id), - $anrechnungData->studiensemester_kurzbz, - $anrechnungData->lehrveranstaltung_id - ), + 'antragData' => $antragData, 'anrechnungData' => $anrechnungData, 'empfehlungData' => $empfehlungData, 'genehmigungData' => $genehmigungData @@ -118,40 +116,30 @@ class approveAnrechnungDetail extends Auth_Controller { $data = $this->input->post('data'); - if(isEmptyArray($data)) + // Validate data + if (isEmptyArray($data)) { return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - - // Get statusbezeichnung for 'approved' - $this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig'); - $approved = getData($this->AnrechnungstatusModel->load('approved'))[0]; - $approved = getUserLanguage() == 'German' - ? $approved->bezeichnung_mehrsprachig[0] - : $approved->bezeichnung_mehrsprachig[1]; - + + // Get STGLs person data if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0]) { show_error('Failed retrieving person data'); } - + + // Approve Anrechnung foreach ($data as $item) { - // Approve Anrechnung - if(getData($this->anrechnunglib->approveAnrechnung($item['anrechnung_id']))) + if ($this->anrechnunglib->approveAnrechnung($item['anrechnung_id'])) { $json[]= array( 'anrechnung_id' => $item['anrechnung_id'], 'status_kurzbz' => self::ANRECHNUNGSTATUS_APPROVED, - 'status_bezeichnung' => $approved, - 'abgeschlossen_am' => (new DateTime())->format('d.m.Y'), - 'abgeschlossen_von' => $person->vorname. ' '. $person->nachname + 'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_APPROVED), + 'abgeschlossen_am' => (new DateTime())->format('d.m.Y'), + 'abgeschlossen_von' => $person->vorname. ' '. $person->nachname ); - - if(!$this->_sendSanchoMailToStudent($item['anrechnung_id'], self::ANRECHNUNGSTATUS_APPROVED)) - { - show_error('Failed sending mail'); - } } } @@ -173,40 +161,30 @@ class approveAnrechnungDetail extends Auth_Controller { $data = $this->input->post('data'); - if(isEmptyArray($data)) + // Validate data + if (isEmptyArray($data)) { return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - - // Get statusbezeichnung for 'rejected' - $this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig'); - $rejected = getData($this->AnrechnungstatusModel->load('rejected'))[0]; - $rejected = getUserLanguage() == 'German' - ? $rejected->bezeichnung_mehrsprachig[0] - : $rejected->bezeichnung_mehrsprachig[1]; - + + // Get STGLs person data if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0]) { show_error('Failed retrieving person data'); } - + + // Reject Anrechnung foreach ($data as $item) { - // Reject Anrechnung - if(getData($this->anrechnunglib->rejectAnrechnung($item['anrechnung_id'], $item['begruendung']))) + if ($this->anrechnunglib->rejectAnrechnung($item['anrechnung_id'], $item['begruendung'])) { $json[]= array( 'anrechnung_id' => $item['anrechnung_id'], 'status_kurzbz' => self::ANRECHNUNGSTATUS_REJECTED, - 'status_bezeichnung' => $rejected, + 'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_REJECTED), 'abgeschlossen_am' => (new DateTime())->format('d.m.Y'), 'abgeschlossen_von' => $person->vorname. ' '. $person->nachname ); - - if(!$this->_sendSanchoMailToStudent($item['anrechnung_id'], self::ANRECHNUNGSTATUS_REJECTED)) - { - show_error('Failed sending mail'); - } } } @@ -217,7 +195,7 @@ class approveAnrechnungDetail extends Auth_Controller } else { - return $this->outputJsonError('Es wurden keine Anrechnungen genehmigt.'); + return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt')); } } @@ -232,48 +210,166 @@ class approveAnrechnungDetail extends Auth_Controller { return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - - // Get statusbezeichnung for 'inProgressLektor' - $this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig'); - $inProgressLektor = getData($this->AnrechnungstatusModel->load('inProgressLektor'))[0]; - $inProgressLektor = getUserLanguage() == 'German' - ? $inProgressLektor->bezeichnung_mehrsprachig[0] - : $inProgressLektor->bezeichnung_mehrsprachig[1]; - + + $retval = array(); + $counter = 0; + foreach ($data as $item) { - // Approve Anrechnung - if(getData($this->anrechnunglib->requestRecommendation($item['anrechnung_id']))) + // Check if Anrechnungs-LV has lector + if (!$this->anrechnunglib->LVhasLector($item['anrechnung_id'])) { - $json[]= array( + // Count up LV with no lector + $counter++; + + // Break, if LV has no lector + break; + } + + // Get full name of LV Leitung. + // If LV Leitung is not present, get full name of LV lectors. + $lector_arr = $this->anrechnunglib->getLectors($item['anrechnung_id']); + $empfehlungsanfrage_an = !isEmptyArray($lector_arr) + ? implode(', ', array_column($lector_arr, 'fullname')) + : ''; + + // Request Recommendation + if($this->anrechnunglib->requestRecommendation($item['anrechnung_id'])) + { + $retval[]= array( 'anrechnung_id' => $item['anrechnung_id'], 'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR, - 'status_bezeichnung' => $inProgressLektor, + 'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR), 'empfehlung_anrechnung' => null, - 'empfehlung_angefordert_am' => (new DateTime())->format('d.m.Y') + 'empfehlungsanfrageAm' => (new DateTime())->format('d.m.Y'), + 'empfehlungsanfrageAn' => $empfehlungsanfrage_an ); } } - + + /** + * Send mails to lectors + * NOTE: mails are sent at the end to ensure sending only ONE mail to each LV-Leitung or lector + * even if they are required for more recommendations + * */ + if (!isEmptyArray($retval)) + { + self::_sendSanchoMailToLectors($retval); + + // Output json to ajax + return $this->outputJsonSuccess($retval); + } + // Output json to ajax - if (isset($json) && !isEmptyArray($json)) + if (isEmptyArray($retval) && $counter > 0) { - /** - * Send mails to lectors - * NOTE: mails are sent at the end to ensure sending only ONE mail to each LV-Leitung or lector - * even if they are required for more recommendations - * */ - if (!$this->_sendSanchoMailToLectors($json)) - { - show_error('Failed sending emails'); - } + return $this->outputJsonError( + "Empfehlung wurde nicht angefordert,\nDer LV sind keine LektorInnen zugeteilt." + ); + } + + return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt')); + } + + /** + * Withdraw approved / rejected Anrechnung and reset to 'inProgressDP'. + */ + public function withdraw() + { + $anrechnung_id = $this->input->post('anrechnung_id'); + + if (!is_numeric($anrechnung_id)) + { + $this->terminateWithJsonError($this->p->t('ui', 'errorFelderFehlen')); + } + + // Delete last status approved / rejected. + // If last status is 'approved', Genehmigung is resetted. + $result = $this->AnrechnungModel->withdrawApprovement($anrechnung_id); - return $this->outputJsonSuccess($json); - } - else + if (isError($result)) { - return $this->outputJsonError('Es wurden keine Empfehlungen angefordert'); + $this->terminateWithJsonError(getError($result)); } + + // Success output to AJAX + $this->outputJsonSuccess(array( + 'status_bezeichnung' => $this->anrechnunglib->getLastAnrechnungstatus($anrechnung_id)) + ); + } + + /** + * Withdraw request for reommendation and reset to 'inProgressDP'. + * This is only possible if the lector has not provided a recommendation yet. + */ + public function withdrawRequestRecommendation() + { + $anrechnung_id = $this->input->post('anrechnung_id'); + + if (!is_numeric($anrechnung_id)) + { + show_error('Wrong parameter.'); + } + + // Get boolean empfehlung of given Anrechnung + if (!$result = getData($this->AnrechnungModel->load($anrechnung_id))[0]) + { + show_error('Failed loading Anrechnung'); + } + + $empfehlung = $result->empfehlung_anrechnung; + + // Get last Anrechnungstatus + if (!$result = getData($this->AnrechnungModel->getLastAnrechnungstatus($anrechnung_id))[0]) + { + show_error('Failed loading last Anrechnungstatus'); + } + + $last_status = $result->status_kurzbz; + $anrechnungstatus_id = $result->anrechnungstatus_id; + + // Return if Anrechnung was not waiting for recommendation or if Anrechnung has already been recommended + if ($last_status != self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR && !is_null($empfehlung)) + { + return $this->outputJsonError('No recommendation to withdraw.'); + } + + // Reset status to 'inProgressDP' + $result = $this->AnrechnungModel->deleteAnrechnungstatus($anrechnungstatus_id); + + if (isError($result)) + { + return $this->outputJsonError('Could not withdraw this application.'); + } + + // Success output to AJAX + return $this->outputJsonSuccess(array( + 'status_bezeichnung' => $this->anrechnunglib->getLastAnrechnungstatus($anrechnung_id)) + ); + } + + public function saveEmpfehlungsNotiz() + { + $anrechnung_id = $this->input->post('anrechnung_id'); + $notiz_id = $this->input->post('notiz_id'); + $empfehlungstext = $this->input->post('empfehlung_text'); + + // Validate data + if (isEmptyString($anrechnung_id)) + { + $this->terminateWithJsonError($this->p->t('ui', 'systemFehler')); + } + + // Save Empfehlungstext + $result = self::_saveEmpfehlungsNotiz($anrechnung_id, $empfehlungstext, $notiz_id); + + if (isError($result)) + { + $this->terminateWithJsonError($this->p->t('ui', 'fehlerBeimSpeichern')); + } + + // Output success message + $this->outputJsonSuccess($this->p->t('ui', 'gespeichert')); } /** @@ -290,8 +386,12 @@ class approveAnrechnungDetail extends Auth_Controller // Check if user is entitled to read dms doc self::_checkIfEntitledToReadDMSDoc($dms_id); - - $this->dmslib->download($dms_id); + + // Set filename to be used on downlaod + $filename = $this->anrechnunglib->setFilenameOnDownload($dms_id); + + // Download file + $this->dmslib->download($dms_id, $filename); } /** @@ -375,42 +475,7 @@ class approveAnrechnungDetail extends Auth_Controller show_error('You are not entitled to read this document'); } - - /** - * Send mail to student to inform if Anrechnung was approved or rejected - * @param $mail_params - */ - private function _sendSanchoMailToStudent($anrechnung_id, $status_kurzbz) - { - $result = getData($this->anrechnunglib->getStudentData($anrechnung_id))[0]; - - // Get student name and mail address - $to = $result->uid. '@'. DOMAIN; - - $anrede = $result->geschlecht == 'w' ? 'Sehr geehrte Frau ' : 'Sehr geehrter Herr '; - - $text = $status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED - ? 'Ihrem Antrag auf Anerkennung nachgewiesener Kenntnisse der Lehrveranstaltung "'. - $result->lv_bezeichnung. '" wurde stattgegeben.' - : 'wir haben Ihren Antrag auf Anerkennung nachgewiesener Kenntnisse geprüft und können die Lehrveranstaltung "'. - $result->lv_bezeichnung. '" leider nicht anrechnen, weil die Gleichwertigkeit nicht festgestellt werden konnte.'; - - // Prepare mail content - $body_fields = array( - 'anrede_name' => $anrede. $result->vorname. ' '. $result->nachname, - 'text' => $text - ); - - sendSanchoMail( - 'AnrechnungGenehmigen', - $body_fields, - $to, - 'Anerkennung nachgewiesener Kenntnisse: Ihr Antrag ist abgeschlossen' - ); - - return true; - } - + /** * Send mail to lectors asking for recommendation. (first to LV-Leitung, if not present to all lectors of lv) * @param $mail_params @@ -438,6 +503,8 @@ class approveAnrechnungDetail extends Auth_Controller * Anyway this function will receive a unique array to avoid sending more mails to one and the same lector. * **/ $lector_arr = $this->_getLectors($anrechnung_arr); + + // Send mail to lectors foreach ($lector_arr as $lector) @@ -476,8 +543,8 @@ class approveAnrechnungDetail extends Auth_Controller } /** - * 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. + * Get unique array of LV lectors. + * Only get LV Leitung if present, otherwise all lectors of LV. * @param $anrechnung_arr * @return array */ @@ -521,11 +588,37 @@ class approveAnrechnungDetail extends Auth_Controller unset($lector->lvleiter); } - // Now make the lector array aka mail receivers unique + // Make the lector array unique $lector_arr = array_unique($lector_arr, SORT_REGULAR); return $lector_arr; } + + private function _saveEmpfehlungsNotiz($anrechnung_id, $empfehlungstext, $notiz_id) + { + $this->load->model('person/Notiz_model', 'NotizModel'); + + if (!isEmptyString($notiz_id)) + { + return $this->NotizModel->update( + $notiz_id, + array( + 'text' => $empfehlungstext, + 'updateamum' => (new DateTime())->format('Y-m-d H:i:s'), + 'updatevon' => $this->_uid + ) + ); + } + + return $this->NotizModel->addNotizForAnrechnung( + $anrechnung_id, + self::ANRECHNUNG_NOTIZTITEL_EMPFEHLUNGSNOTIZ_BY_STGL, + trim($empfehlungstext), + $this->_uid + ); + + + } } diff --git a/application/controllers/lehre/anrechnung/ApproveAnrechnungUebersicht.php b/application/controllers/lehre/anrechnung/ApproveAnrechnungUebersicht.php index b2d09fbe1..d59d97514 100644 --- a/application/controllers/lehre/anrechnung/ApproveAnrechnungUebersicht.php +++ b/application/controllers/lehre/anrechnung/ApproveAnrechnungUebersicht.php @@ -62,27 +62,21 @@ class approveAnrechnungUebersicht extends Auth_Controller public function index() { + // Get study semester $studiensemester_kurzbz = $this->input->get('studiensemester'); - // Retrieve studiengaenge the user is entitled for + 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)) { show_error(getError($studiengang_kz_arr)); } - if (!is_string($studiensemester_kurzbz)) - { - $studiensemester = $this->StudiensemesterModel->getNearest(); - if (hasData($studiensemester)) - { - $studiensemester_kurzbz = $studiensemester->retval[0]->studiensemester_kurzbz; - } - elseif (isError($studiensemester)) - { - show_error(getError($studiensemester)); - } - } - $viewData = array( 'studiensemester_selected' => $studiensemester_kurzbz, 'studiengaenge_entitled' => $studiengang_kz_arr @@ -98,33 +92,22 @@ class approveAnrechnungUebersicht extends Auth_Controller { $data = $this->input->post('data'); - if(isEmptyArray($data)) + // Validate data + if (isEmptyArray($data)) { return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - // Get statusbezeichnung for 'approved' - $this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig'); - $approved = getData($this->AnrechnungstatusModel->load('approved'))[0]; - $approved = getUserLanguage() == 'German' - ? $approved->bezeichnung_mehrsprachig[0] - : $approved->bezeichnung_mehrsprachig[1]; - + // Approve Anrechnung foreach ($data as $item) { - // Approve Anrechnung - if(getData($this->anrechnunglib->approveAnrechnung($item['anrechnung_id']))) + if ($this->anrechnunglib->approveAnrechnung($item['anrechnung_id'])) { $json[]= array( 'anrechnung_id' => $item['anrechnung_id'], 'status_kurzbz' => self::ANRECHNUNGSTATUS_APPROVED, - 'status_bezeichnung' => $approved + 'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_APPROVED) ); - - if(!$this->_sendSanchoMailToStudent($item['anrechnung_id'], self::ANRECHNUNGSTATUS_APPROVED)) - { - show_error('Failed sending mail'); - } } } @@ -146,33 +129,22 @@ class approveAnrechnungUebersicht extends Auth_Controller { $data = $this->input->post('data'); - if(isEmptyArray($data)) + // Validate data + if (isEmptyArray($data)) { return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - // Get statusbezeichnung for 'rejected' - $this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig'); - $rejected = getData($this->AnrechnungstatusModel->load('rejected'))[0]; - $rejected = getUserLanguage() == 'German' - ? $rejected->bezeichnung_mehrsprachig[0] - : $rejected->bezeichnung_mehrsprachig[1]; - + // Reject Anrechnung foreach ($data as $item) { - // Reject Anrechnung - if(getData($this->anrechnunglib->rejectAnrechnung($item['anrechnung_id'], $item['begruendung']))) + if ($this->anrechnunglib->rejectAnrechnung($item['anrechnung_id'], $item['begruendung'])) { $json[]= array( 'anrechnung_id' => $item['anrechnung_id'], 'status_kurzbz' => self::ANRECHNUNGSTATUS_REJECTED, - 'status_bezeichnung' => $rejected + 'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_REJECTED) ); - - if(!$this->_sendSanchoMailToStudent($item['anrechnung_id'], self::ANRECHNUNGSTATUS_REJECTED)) - { - show_error('Failed sending mail'); - } } } @@ -199,46 +171,59 @@ class approveAnrechnungUebersicht extends Auth_Controller return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - // Get statusbezeichnung for 'inProgressLektor' - $this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig'); - $inProgressLektor = getData($this->AnrechnungstatusModel->load('inProgressLektor'))[0]; - $inProgressLektor = getUserLanguage() == 'German' - ? $inProgressLektor->bezeichnung_mehrsprachig[0] - : $inProgressLektor->bezeichnung_mehrsprachig[1]; + $retval = array(); + $counter = 0; foreach ($data as $item) { - // Approve Anrechnung - if(getData($this->anrechnunglib->requestRecommendation($item['anrechnung_id']))) + // Check if Anrechnungs-LV has lector + if (!$this->anrechnunglib->LVhasLector($item['anrechnung_id'])) { - $json[]= array( + // Count up LV with no lector + $counter++; + + // Continue loop, if LV has no lector + continue; + } + + // Request Recommendation + if($this->anrechnunglib->requestRecommendation($item['anrechnung_id'])) + { + // Get full name of LV Leitung. + // If LV Leitung is not present, get full name of LV lectors. + $lector_arr = $this->anrechnunglib->getLectors($item['anrechnung_id']); + $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, - 'status_bezeichnung' => $inProgressLektor, - 'empfehlung_anrechnung' => null + 'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR), + 'empfehlung_anrechnung' => null, + 'empfehlungsanfrageAm' => (new DateTime())->format('Y-m-d H:i:s'), + 'empfehlungsanfrageAn' => $empfehlungsanfrage_an ); } } - // Output json to ajax - if (isset($json) && !isEmptyArray($json)) + /** + * Send mails to lectors + * NOTE: mails are sent at the end to ensure sending only ONE mail to each LV-Leitung or lector + * even if they are required for more recommendations + * */ + if (!isEmptyArray($retval)) { - /** - * Send mails to lectors - * NOTE: mails are sent at the end to ensure sending only ONE mail to each LV-Leitung or lector - * even if they are required for more recommendations - * */ - if (!$this->_sendSanchoMailToLectors($json)) - { - show_error('Failed sending emails'); - } - - return $this->outputJsonSuccess($json); + self::_sendSanchoMailToLectors($retval); } - else + + // Output json to ajax + if (isEmptyArray($retval) && $counter == 0) { return $this->outputJsonError('Es wurden keine Empfehlungen angefordert'); } + + return $this->outputJsonSuccess($retval); } /** @@ -256,7 +241,11 @@ class approveAnrechnungUebersicht extends Auth_Controller // Check if user is entitled to read dms doc self::_checkIfEntitledToReadDMSDoc($dms_id); - $this->dmslib->download($dms_id); + // Set filename to be used on downlaod + $filename = $this->anrechnunglib->setFilenameOnDownload($dms_id); + + // Download file + $this->dmslib->download($dms_id, $filename); } @@ -307,41 +296,6 @@ class approveAnrechnungUebersicht extends Auth_Controller show_error('You are not entitled to read this document'); } - /** - * Send mail to student to inform if Anrechnung was approved or rejected - * @param $mail_params - */ - private function _sendSanchoMailToStudent($anrechnung_id, $status_kurzbz) - { - $result = getData($this->anrechnunglib->getStudentData($anrechnung_id))[0]; - - // Get student name and mail address - $to = $result->uid. '@'. DOMAIN; - - $anrede = $result->geschlecht == 'w' ? 'Sehr geehrte Frau ' : 'Sehr geehrter Herr '; - - $text = $status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED - ? 'Ihrem Antrag auf Anerkennung nachgewiesener Kenntnisse der Lehrveranstaltung "'. - $result->lv_bezeichnung. '" wurde stattgegeben.' - : 'wir haben Ihren Antrag auf Anerkennung nachgewiesener Kenntnisse geprüft und können die Lehrveranstaltung "'. - $result->lv_bezeichnung. '" leider nicht anrechnen, weil die Gleichwertigkeit nicht festgestellt werden konnte.'; - - // Prepare mail content - $body_fields = array( - 'anrede_name' => $anrede. $result->vorname. ' '. $result->nachname, - 'text' => $text - ); - - sendSanchoMail( - 'AnrechnungGenehmigen', - $body_fields, - $to, - 'Anerkennung nachgewiesener Kenntnisse: Ihr Antrag ist abgeschlossen' - ); - - return true; - } - /** * Send mail to lectors asking for recommendation. (first to LV-Leitung, if not present to all lectors of lv) * @param $mail_params @@ -456,6 +410,5 @@ class approveAnrechnungUebersicht extends Auth_Controller $lector_arr = array_unique($lector_arr, SORT_REGULAR); return $lector_arr; - } } \ No newline at end of file diff --git a/application/controllers/lehre/anrechnung/CreateAnrechnung.php b/application/controllers/lehre/anrechnung/CreateAnrechnung.php new file mode 100644 index 000000000..bc594371d --- /dev/null +++ b/application/controllers/lehre/anrechnung/CreateAnrechnung.php @@ -0,0 +1,271 @@ + 'lehre/anrechnung_anlegen:r', + 'getLVsByStudent' => 'lehre/anrechnung_anlegen:r', + 'create' => 'lehre/anrechnung_anlegen:rw' + ) + ); + + // Load models + $this->load->model('education/Anrechnung_model', 'AnrechnungModel'); + $this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel'); + $this->load->model('content/DmsVersion_model', 'DmsVersionModel'); + $this->load->model('crm/Student_model', 'StudentModel'); + $this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel'); + + // 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'); + + // Load language phrases + $this->loadPhrases( + array( + 'global', + 'ui', + 'anrechnung', + 'person', + 'lehre' + ) + ); + + // Load configs + $this->load->config('anrechnung'); + + $this->_setAuthUID(); + + $this->setControllerId(); + } + + public function index() + { + // Get Studiensemester + $studiensemester_kurzbz = $this->input->get('studiensemester'); + + // If no Studiensemester is given + if (isEmptyString($studiensemester_kurzbz)) + { + //...use the nearest Studiensemester + $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_ANLEGEN)) + { + show_error('Failed retrieving Studiengaenge'); + } + + // Get Anrechnungsbegruendungen + $this->load->model('education/Anrechnungbegruendung_model', 'AnrechnungbegruendungModel'); + $begruendung_arr = getData($this->AnrechnungbegruendungModel->load()); + + $viewData = array( + 'studiensemester_selected' => $studiensemester_kurzbz, + 'studiengaenge_entitled' => $studiengang_kz_arr, + 'begruendungen' => $begruendung_arr + ); + + $this->load->view('lehre/anrechnung/createAnrechnung.php', $viewData); + } + + /** + * Get Lehrveranstaltungen from Student. + */ + public function getLVsByStudent() + { + $prestudent_id = $this->input->post('prestudent_id'); + $studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz'); + + // Get Student UID + $student_uid = $this->StudentModel->getUID($prestudent_id); + + // Retrieve Lehrveranstaltungen from student + $result = $this->LehrveranstaltungModel->getLvsByStudent($student_uid, $studiensemester_kurzbz); + + // Exit, if student has no Lehrveranstaltungen + if (!hasData($result)) + { + $this->terminateWithJsonError($this->p->t('ui', 'keineLVzugeteilt')); + } + + // Success response to AJAX + $this->outputJsonSuccess(getData($result)); + } + + /** + * Create Anrechnungsantrag. + * + * Saves Anrechnung and Anrechnungstatus. + * Also saves Nachweisdokument to DMS. + */ + public function create() + { + $prestudent_id = $this->input->post('prestudent_id'); + $studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz'); + $lehrveranstaltung_id = $this->input->post('lehrveranstaltung_id'); + $begruendung_id = $this->input->post('begruendung_id'); + $herkunftKenntnisse = $this->input->post('herkunftKenntnisse'); + + // Validate upload file + if (empty($_FILES['uploadfile']['name'])) + { + $this->terminateWithJsonError($this->p->t('ui', 'errorUploadFehlt')); + } + + // Validate required data + if (isEmptyString($begruendung_id) || isEmptyString($lehrveranstaltung_id)) + { + $this->terminateWithJsonError($this->p->t('ui', 'errorFelderFehlen')); + } + + // Exit if application already exists + if (self::_applicationExists($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id)) + { + $this->terminateWithJsonError($this->p->t('global', 'antragBereitsGestellt')); + } + + // Exit if Lehrveranstaltung was already graded with application blocking grades + if (self::_LVhasBlockingGrades($studiensemester_kurzbz, $lehrveranstaltung_id, $prestudent_id)) + { + $this->terminateWithJsonError($this->p->t('anrechnung', 'antragBenotungBlockiert')); + } + + // Upload document + $result = self::_uploadFile(); + + if (isError($result)) + { + $this->terminateWithJsonError($result->retval); + } + + // Hold just inserted DMS ID + $lastInsert_dms_id = $result->retval['dms_id']; + + // Save Anrechnung and Anrechnungstatus + $result = $this->AnrechnungModel->createAnrechnungsantrag( + $prestudent_id, + $studiensemester_kurzbz, + $lehrveranstaltung_id, + $begruendung_id, + $lastInsert_dms_id, + $herkunftKenntnisse + ); + + if (isError($result)) + { + $this->terminateWithJsonError(getError($result)); + } + + $lastInsert_anrechnung_id = getData($result); + + // Success response to AJAX + $this->outputJsonSuccess(array( + 'anrechnung_id' => $lastInsert_anrechnung_id, + 'msg' => $this->p->t('global', 'antragWurdeAngelegt') + )); + } + + + /** + * 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 application already exists. + * + * @param $lehrveranstaltung_id + * @param $studiensemester_kurzbz + * @param $prestudent_id + * @return bool + */ + private function _applicationExists($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id) + { + $result = $this->AnrechnungModel->loadWhere(array( + 'lehrveranstaltung_id' => $lehrveranstaltung_id, + 'studiensemester_kurzbz' => $studiensemester_kurzbz, + 'prestudent_id' => $prestudent_id + )); + + if (isError($result)) + { + show_error(getError($result)); + } + + return hasData($result); + } + + /** + * Upload file via DMS library. + * + * @return mixed + * @throws Exception + */ + private function _uploadFile() + { + $dms = array( + 'kategorie_kurzbz' => 'anrechnung', + 'version' => 0, + 'name' => $_FILES['uploadfile']['name'], + 'mimetype' => $_FILES['uploadfile']['type'], + 'insertamum' => (new DateTime())->format('Y-m-d H:i:s'), + 'insertvon' => $this->_uid + ); + + // Upload document + return $this->dmslib->upload($dms, 'uploadfile', array('pdf')); + } + + private function _LVhasBlockingGrades($studiensemester_kurzbz, $lehrveranstaltung_id, $prestudent_id) + { + // Get Student UID + $student_uid = $this->StudentModel->getUID($prestudent_id); + + // Get Note of Lehrveranstaltung + $this->load->model('education/Lvgesamtnote_model', 'LvgesamtnoteModel'); + $result = $this->LvgesamtnoteModel->load(array( + 'student_uid' => $student_uid, + 'studiensemester_kurzbz' => $studiensemester_kurzbz, + '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'))) + { + return true; + } + } + return false; + } + +} \ No newline at end of file diff --git a/application/controllers/lehre/anrechnung/RequestAnrechnung.php b/application/controllers/lehre/anrechnung/RequestAnrechnung.php index 4f589e5f5..45a770cf5 100644 --- a/application/controllers/lehre/anrechnung/RequestAnrechnung.php +++ b/application/controllers/lehre/anrechnung/RequestAnrechnung.php @@ -6,15 +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'; - - const DEADLINE_INTERVAL_NACH_SEMESTERSTART = 'P1M'; // Deadline for application - + public function __construct() { // Set required permissions @@ -25,22 +23,25 @@ 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'); + // Load language phrases $this->loadPhrases( array( @@ -51,63 +52,59 @@ class requestAnrechnung extends Auth_Controller 'lehre' ) ); - + $this->_setAuthUID(); - + $this->setControllerId(); } - + public function index() { $studiensemester_kurzbz = $this->input->get('studiensemester'); $lehrveranstaltung_id = $this->input->get('lv_id'); - - if (!is_numeric($lehrveranstaltung_id) || !is_string($studiensemester_kurzbz)) + + if (isEmptyString($lehrveranstaltung_id) || isEmptyString($studiensemester_kurzbz)) { show_error('Missing correct parameter'); } - + + // Exit if user is not a student + $result = $this->StudentModel->load(array('student_uid' => $this->_uid)); + + if (!hasData($result)) + { + show_error('Cant load user'); + } + + // Get Prestudent ID + $prestudent_id = getData($result)[0]->prestudent_id; + // Check if application deadline is expired - // $is_expired = $this->_checkAntragDeadline($studiensemester_kurzbz); - $is_expired = false; // Set to false until Deadline is defined - - $student = $this->StudentModel->load(array('student_uid' => $this->_uid)); - if (isSuccess($student) && hasData($student)) - { - $prestudent_id = getData($student)[0]->prestudent_id; - } - else - show_error('Cant load User'); - + $is_expired = self::_checkAntragDeadline( + $this->config->item('submit_application_start'), + $this->config->item('submit_application_end'), + $studiensemester_kurzbz + ); + + // Check if Lehrveranstaltung was already graded with application blocking grades + $is_blocked = self::_LVhasBlockingGrades($studiensemester_kurzbz, $lehrveranstaltung_id); + // Get Anrechung data - $result = $this->anrechnunglib->getAnrechnungDataByLv($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id); - if (!$anrechnungData = getData($result)) - { - show_error(getError($anrechnungData)); - } - - // Dont show who is progressing the application to the student - if ($anrechnungData->status_kurzbz == self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL || - $anrechnungData->status_kurzbz == self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR || - $anrechnungData->status_kurzbz == self::ANRECHNUNGSTATUS_PROGRESSED_BY_KF) - { - $anrechnungData->status = getUserLanguage() == 'German' ? 'in Bearbeitung' : 'in process'; - } - - $antragData = $this->anrechnunglib->getAntragData($this->_uid, $studiensemester_kurzbz, $lehrveranstaltung_id); + $anrechnungData = $this->anrechnunglib->getAnrechnungDataByLv($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id); + // Get Antrag data + $antragData = $this->anrechnunglib->getAntragData($prestudent_id, $studiensemester_kurzbz, $lehrveranstaltung_id); + $viewData = array( 'antragData' => $antragData, 'anrechnungData' => $anrechnungData, 'is_expired' => $is_expired, - 'disabled' => $is_expired && empty($anrechnungData->anrechnung_id) || !empty($anrechnungData->anrechnung_id) - ? 'disabled' - : '' + 'is_blocked' => $is_blocked ); - + $this->load->view('lehre/anrechnung/requestAnrechnung.php', $viewData); } - + /** * Apply Anrechnungsantrag and send to STGL */ @@ -117,104 +114,82 @@ class requestAnrechnung extends Auth_Controller $begruendung_id = $this->input->post('begruendung'); $lehrveranstaltung_id = $this->input->post('lv_id'); $studiensemester_kurzbz = $this->input->post('studiensemester'); + $bestaetigung = $this->input->post('bestaetigung'); + // Validate data if (empty($_FILES['uploadfile']['name'])) { - show_error('Missing upload file'); + return $this->outputJsonError($this->p->t('ui', 'errorUploadFehlt')); } - if (!is_numeric($begruendung_id) || !is_numeric($lehrveranstaltung_id) || !is_string($studiensemester_kurzbz)) + if (isEmptyString($begruendung_id) || + isEmptyString($anmerkung) || + isEmptyString($lehrveranstaltung_id) || + isEmptyString($studiensemester_kurzbz)) { - show_error('Missing correct parameter'); + return $this->outputJsonError($this->p->t('ui', 'errorFelderFehlen')); } - - $student = $this->StudentModel->load(array('student_uid' => $this->_uid)); - if (isSuccess($student) && hasData($student)) + + if (isEmptyString($bestaetigung)) { - $prestudent_id = getData($student)[0]->prestudent_id; + return $this->outputJsonError($this->p->t('ui', 'errorBestaetigungFehlt')); } - else - show_error('Cant load User'); - - $result = $this->_getAnrechnung($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id); - if (hasData($result)) + + // Exit if user is not a student + $result = $this->StudentModel->load(array('student_uid' => $this->_uid)); + + if (!hasData($result)) { - show_error('Der Antrag wurde bereits gestellt'); + return $this->outputJsonError('Cant load user'); } - - // Start DB transaction - $this->db->trans_start(false); - + + // Get Prestudent ID + $prestudent_id = getData($result)[0]->prestudent_id; + + // Exit if application already exists + if (self::_applicationExists($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id)) + { + return $this->outputJsonError($this->p->t('anrechnung', 'antragBereitsGestellt')); + } + + // Exit if application is not for actual studysemester + if (!self::_applicationIsForActualSS($studiensemester_kurzbz)) + { + return $this->outputJsonError($this->p->t('anrechnung', 'antragNurImAktSS')); + } + // Upload document - $dms = array( - 'kategorie_kurzbz' => 'anrechnung', - 'version' => 0, - 'name' => $_FILES['uploadfile']['name'], - 'mimetype' => $_FILES['uploadfile']['type'], - 'insertamum' => (new DateTime())->format('Y-m-d H:i:s'), - 'insertvon' => $this->_uid + $result = self::_uploadFile(); + + if (isError($result)) + { + return $this->outputJsonError($result->retval); + } + + // Hold just inserted DMS ID + $lastInsert_dms_id = $result->retval['dms_id']; + + // Save Anrechnung and Anrechnungstatus + $result = $this->AnrechnungModel->createAnrechnungsantrag( + $prestudent_id, + $studiensemester_kurzbz, + $lehrveranstaltung_id, + $begruendung_id, + $lastInsert_dms_id, + $anmerkung ); - - if(isError($uploaddata = $this->dmslib->upload($dms, array('pdf')))) + + if (isError($result)) { - show_error(getError($uploaddata)); + $this->terminateWithJsonError(getError($result)); } - - // Get PrestudentID - $result = $this->_loadPrestudent($this->_uid, $studiensemester_kurzbz); - - if (!$prestudent = getData($result)[0]) - { - show_error('Failed retrieving prestudent'); - } - - // Save Anrechnung - $result = $this->AnrechnungModel->insert(array( - 'prestudent_id' => $prestudent->prestudent_id, - 'lehrveranstaltung_id' => $lehrveranstaltung_id, - 'begruendung_id' => $begruendung_id, - 'dms_id' => $uploaddata->retval['dms_id'], - 'studiensemester_kurzbz' => $studiensemester_kurzbz, - 'anmerkung_student' => $anmerkung, - 'insertvon' => $this->_uid + + // Output to AJAX + $this->outputJsonSuccess(array( + 'antragdatum' => (new DateTime())->format('d.m.Y'), + 'dms_id' => $lastInsert_dms_id, + 'filename' => $_FILES['uploadfile']['name'] )); - - if (isError($result)) - { - show_error('Failed inserting Anrechnung'); - } - - // Save Anrechnungstatus 'inProgressSTGL' - $result = $this->AnrechnungModel->saveAnrechnungstatus($result->retval, self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL); - - if (isError($result)) - { - show_error('Failed saving Anrechnungstatus'); - } - - // Transaction complete! - $this->db->trans_complete(); - - if ($this->db->trans_status() === false || isError($result)) - { - $this->db->trans_rollback(); - show_error($result->msg, EXIT_ERROR); - } - - // Send mail to STGL - $mail_params = array( - 'studiengang_kz' => $prestudent->studiengang_kz, - 'lehrveranstaltung_id' => $lehrveranstaltung_id - ); - - if(!$this->_sendSanchoMail($mail_params)) - { - show_error('Failed sending mail'); - } - else - { - redirect(site_url(). self::REQUEST_ANRECHNUNG_URI. '?studiensemester='. $studiensemester_kurzbz. '&lv_id='. $lehrveranstaltung_id); - } } /** @@ -241,53 +216,50 @@ class requestAnrechnung extends Auth_Controller private function _setAuthUID() { $this->_uid = getAuthUID(); - + if (!$this->_uid) show_error('User authentification failed'); } - - /** - * Load Prestudent by uid and Studiensemester. - * @param $uid - * @param $studiensemester_kurzbz - * @return mixed - */ - private function _loadPrestudent($uid, $studiensemester_kurzbz) - { - $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); - $this->load->model('crm/Student_model', 'StudentModel'); - - $this->PrestudentstatusModel->addJoin('public.tbl_student', 'prestudent_id'); - return $this->PrestudentstatusModel->loadWhere(array( - 'student_uid' => $uid, - 'studiensemester_kurzbz' => $studiensemester_kurzbz - ) - ); - } - + /** * Check if application deadline is expired. + * + * @param $start Start date for application submission. + * @param $ende End date for application submission. * @param $studiensemester_kurzbz - * @return bool True if semester start is more then 1 week ago + * @return bool True if today is not during the start- and ending deadlines (= if is expired) * @throws Exception */ - private function _checkAntragDeadline($studiensemester_kurzbz) + private function _checkAntragDeadline($start, $ende, $studiensemester_kurzbz) { $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); - $this->StudiensemesterModel->addSelect('start'); - if (!$start = getData($this->StudiensemesterModel->load($studiensemester_kurzbz))) + + // If start is not given, set to Semesterstart. + if (!isset($start) || isEmptyString($start)) { - show_error(getError($start)); + $this->StudiensemesterModel->addSelect('start'); + $result = $this->StudiensemesterModel->load($studiensemester_kurzbz); + $start = getData($result)[0]->start; } - - $start = new DateTime($start[0]->start); + + // If ende is not given, set to Semesterende. + if (!isset($ende) || isEmptyString($ende)) + { + $this->StudiensemesterModel->addSelect('ende'); + $result = $this->StudiensemesterModel->load($studiensemester_kurzbz); + $ende = getData($result)[0]->ende; + } + $today = new DateTime('today midnight'); - - // True if today > application deadline - return ($today > $start->add((new DateInterval(self::DEADLINE_INTERVAL_NACH_SEMESTERSTART)))); + $start = new DateTime($start); + $ende = new DateTime($ende); + + // True if today is not during the start- and ending deadlines (= if is expired) + return ($today <= $start || $today >= $ende); } - + /** - * Check if user is entitled to read dms doc + * Check if user is entitled to read dms doc. + * * @param $dms_id */ private function _checkIfEntitledToReadDMSDoc($dms_id) @@ -298,7 +270,7 @@ class requestAnrechnung extends Auth_Controller } $result = $this->AnrechnungModel->loadWhere(array('dms_id' => $dms_id)); - + if($result = getData($result)[0]) { if ($result->prestudent_id == $student->prestudent_id) @@ -306,104 +278,92 @@ class requestAnrechnung extends Auth_Controller return; } } - + show_error('You are not entitled to read this document'); } - + /** - * Get Anrechnung by Lehrveranstaltung + * Check if application already exists. + * * @param $lehrveranstaltung_id - * @return mixed + * @param $studiensemester_kurzbz + * @param $prestudent_id + * @return bool */ - private function _getAnrechnung($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id) + private function _applicationExists($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id) { $result = $this->AnrechnungModel->loadWhere(array( 'lehrveranstaltung_id' => $lehrveranstaltung_id, 'studiensemester_kurzbz' => $studiensemester_kurzbz, 'prestudent_id' => $prestudent_id )); - + if (isError($result)) { show_error(getError($result)); } - - return $result; + + return hasData($result); } - + /** - * Send mail to STGL (if not available, send to STGL assistance) - * @param $mail_params + * Check if applications' study semester is actual study semester. + * + * @param $studiensemester_kurzbz + * @return bool */ - private function _sendSanchoMail($mail_params) + private function _applicationIsForActualSS($studiensemester_kurzbz) { - // Get STGL mail address, if available, otherwise get assistance mail address - list ($to, $vorname) = $this->_getSTGLMailAddress($mail_params['studiengang_kz']); - - // Get full name of student - $this->load->model('person/Person_model', 'PersonModel'); - if (!$student_name = getData($this->PersonModel->getFullName($this->_uid))) - { - show_error ('Failed retrieving person'); - } - - // Get lehrveranstaltung bezeichnung - $this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel'); - if (!$lehrveranstaltung = getData($this->LehrveranstaltungModel->load($mail_params['lehrveranstaltung_id']))[0]) - { - 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::APPROVE_ANRECHNUNG_URI; - - // Prepare mail content - $body_fields = array( - 'vorname' => $vorname, - 'student_name' => $student_name, - 'lehrveranstaltung_bezeichnung' => $lehrveranstaltung->bezeichnung, - 'link' => anchor($url, 'Anrechnungsanträge Übersicht') - ); - - sendSanchoMail( - 'AnrechnungAntragStellen', - $body_fields, - $to, - 'Anerkennung nachgewiesener Kenntnisse: Neuer Antrag wurde gestellt' - ); - - return true; + $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); + $result = $this->StudiensemesterModel->getNearest(); + $actual_ss = getData($result)[0]->studiensemester_kurzbz; + + return $studiensemester_kurzbz == $actual_ss; } - - // Get STGL mail address, if available, otherwise get assistance mail address - private function _getSTGLMailAddress($stg_kz) + + private function _LVhasBlockingGrades($studiensemester_kurzbz, $lehrveranstaltung_id) { - $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); - $result = $this->StudiengangModel->getLeitung($stg_kz); - - // Get STGL mail address, if available + // Get Note of Lehrveranstaltung + $this->load->model('education/Lvgesamtnote_model', 'LvgesamtnoteModel'); + $result = $this->LvgesamtnoteModel->load(array( + 'student_uid' => $this->_uid, + 'studiensemester_kurzbz' => $studiensemester_kurzbz, + 'lehrveranstaltung_id' => $lehrveranstaltung_id + ) + ); + + // If Lehrveranstaltung has Note if (hasData($result)) { - return array( - $result->retval[0]->uid. '@'. DOMAIN, - $result->retval[0]->vorname - ); - } - // ...otherwise get assistance mail address - else - { - $result = $this->StudiengangModel->load($stg_kz); - - 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'))) { - return array( - $result->retval[0]->email, - '' - ); + return true; } } + return false; } -} + + /** + * Upload file via DMS library. + * + * @return mixed + * @throws Exception + */ + private function _uploadFile() + { + $dms = array( + 'kategorie_kurzbz' => 'anrechnung', + 'version' => 0, + 'name' => $_FILES['uploadfile']['name'], + 'mimetype' => $_FILES['uploadfile']['type'], + 'insertamum' => (new DateTime())->format('Y-m-d H:i:s'), + 'insertvon' => $this->_uid + ); + + // Upload document + return $this->dmslib->upload($dms, 'uploadfile', array('pdf')); + } +} \ No newline at end of file diff --git a/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php b/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php index b9c723eee..78175f4e6 100644 --- a/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php +++ b/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php @@ -1,6 +1,6 @@ anrechnunglib->getAnrechnungData($anrechnung_id))) - { - show_error('Missing data for Anrechnung.'); - } + $anrechnungData = $this->anrechnunglib->getAnrechnungData($anrechnung_id); + + // Get Antrag data + $antragData = $this->anrechnunglib->getAntragData( + $anrechnungData->prestudent_id, + $anrechnungData->studiensemester_kurzbz, + $anrechnungData->lehrveranstaltung_id + ); // Get Empfehlung data - if(!$empfehlungData = getData($this->anrechnunglib->getEmpfehlungData($anrechnung_id))) - { - show_error('Missing data for recommendation'); - } + $empfehlungData = $this->anrechnunglib->getEmpfehlungData($anrechnung_id); $viewData = array( - 'antragData' => $this->anrechnunglib->getAntragData( - $student_uid = $this->StudentModel->getUID($anrechnungData->prestudent_id), - $anrechnungData->studiensemester_kurzbz, - $anrechnungData->lehrveranstaltung_id - ), + 'antragData' => $antragData, 'anrechnungData' => $anrechnungData, 'empfehlungData' => $empfehlungData ); @@ -113,29 +110,23 @@ class reviewAnrechnungDetail extends Auth_Controller { return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - - // Get statusbezeichnung for 'inProgressDP' - $this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig'); - $inProgressDP = getData($this->AnrechnungstatusModel->load('inProgressDP'))[0]; - $inProgressDP = getUserLanguage() == 'German' - ? $inProgressDP->bezeichnung_mehrsprachig[0] - : $inProgressDP->bezeichnung_mehrsprachig[1]; - + + // Get lectors person data if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0]) { - show_error('Failed retrieving person data'); + return $this->outputJsonError('Failed retrieving person data'); } foreach ($data as $item) { // Approve Anrechnung - if(getData($this->anrechnunglib->recommendAnrechnung($item['anrechnung_id']))) + if($this->anrechnunglib->recommendAnrechnung($item['anrechnung_id'])) { $json[]= array( 'anrechnung_id' => $item['anrechnung_id'], 'empfehlung_anrechnung' => 'true', 'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL, - 'status_bezeichnung' => $inProgressDP, + 'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL), 'empfehlung_am' => (new DateTime())->format('d.m.Y'), 'empfehlung_von' => $person->vorname. ' '. $person->nachname ); @@ -151,14 +142,14 @@ class reviewAnrechnungDetail extends Auth_Controller * */ if (!$this->_sendSanchoMails($json, true)) { - show_error('Failed sending emails'); + return $this->outputJsonError('Failed sending emails'); } return $this->outputJsonSuccess($json); } else { - return $this->outputJsonError('Empfehlungen wurden nicht durchgeführt'); + return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt')); } } @@ -174,29 +165,23 @@ class reviewAnrechnungDetail extends Auth_Controller return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - // Get statusbezeichnung for 'inProgressDP' - $this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig'); - $inProgressDP = getData($this->AnrechnungstatusModel->load('inProgressDP'))[0]; - $inProgressDP = getUserLanguage() == 'German' - ? $inProgressDP->bezeichnung_mehrsprachig[0] - : $inProgressDP->bezeichnung_mehrsprachig[1]; - + // Get lectors person data if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0]) { - show_error('Failed retrieving person data'); + return $this->outputJsonError('Failed retrieving person data'); } foreach ($data as $item) { // Approve Anrechnung - if(getData($this->anrechnunglib->dontRecommendAnrechnung($item['anrechnung_id'], $item['begruendung']))) + if($this->anrechnunglib->dontRecommendAnrechnung($item['anrechnung_id'], $item['begruendung'])) { $json[]= array( 'anrechnung_id' => $item['anrechnung_id'], 'empfehlung_anrechnung' => 'false', 'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL, - 'status_bezeichnung' => $inProgressDP, - 'empfehlumg_am' => (new DateTime())->format('d.m.Y'), + 'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL), + 'empfehlung_am' => (new DateTime())->format('d.m.Y'), 'empfehlung_von' => $person->vorname. ' '. $person->nachname ); } @@ -208,14 +193,14 @@ class reviewAnrechnungDetail extends Auth_Controller // Send mails to STGL (if not present STGL, send to STGL assistance) if (!$this->_sendSanchoMails($json, false)) { - show_error('Failed sending emails'); + return $this->outputJsonError('Failed sending emails'); } return $this->outputJsonSuccess($json); } else { - return $this->outputJsonError('Empfehlungen wurden nicht durchgeführt'); + return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt')); } } @@ -233,8 +218,12 @@ class reviewAnrechnungDetail extends Auth_Controller // Check if user is entitled to read dms doc self::_checkIfEntitledToReadDMSDoc($dms_id); - - $this->dmslib->download($dms_id); + + // Set filename to be used on downlaod + $filename = $this->anrechnunglib->setFilenameOnDownload($dms_id); + + // Download file + $this->dmslib->download($dms_id, $filename); } diff --git a/application/controllers/lehre/anrechnung/ReviewAnrechnungUebersicht.php b/application/controllers/lehre/anrechnung/ReviewAnrechnungUebersicht.php index 005cde97a..cd0b7afaf 100644 --- a/application/controllers/lehre/anrechnung/ReviewAnrechnungUebersicht.php +++ b/application/controllers/lehre/anrechnung/ReviewAnrechnungUebersicht.php @@ -62,19 +62,13 @@ class reviewAnrechnungUebersicht extends Auth_Controller public function index() { + // Get study semester $studiensemester_kurzbz = $this->input->get('studiensemester'); - if (!is_string($studiensemester_kurzbz)) + if (isEmptyString($studiensemester_kurzbz)) { - $studiensemester = $this->StudiensemesterModel->getNearest(); - if (hasData($studiensemester)) - { - $studiensemester_kurzbz = $studiensemester->retval[0]->studiensemester_kurzbz; - } - elseif (isError($studiensemester)) - { - show_error(getError($studiensemester)); - } + $result = $this->StudiensemesterModel->getNearest(); + $studiensemester_kurzbz = getData($result)[0]->studiensemester_kurzbz; } $viewData = array( @@ -95,24 +89,17 @@ class reviewAnrechnungUebersicht extends Auth_Controller { return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - - // Get statusbezeichnung for 'inProgressDP' - $this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig'); - $inProgressDP = getData($this->AnrechnungstatusModel->load('inProgressDP'))[0]; - $inProgressDP = getUserLanguage() == 'German' - ? $inProgressDP->bezeichnung_mehrsprachig[0] - : $inProgressDP->bezeichnung_mehrsprachig[1]; foreach ($data as $item) { // Approve Anrechnung - if(getData($this->anrechnunglib->recommendAnrechnung($item['anrechnung_id']))) + if($this->anrechnunglib->recommendAnrechnung($item['anrechnung_id'])) { $json[]= array( 'anrechnung_id' => $item['anrechnung_id'], 'empfehlung_anrechnung' => 'true', 'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL, - 'status_bezeichnung' => $inProgressDP + 'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL) ); } } @@ -133,7 +120,7 @@ class reviewAnrechnungUebersicht extends Auth_Controller } else { - return $this->outputJsonError('Empfehlungen wurden nicht durchgeführt'); + return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt')); } } @@ -149,24 +136,16 @@ class reviewAnrechnungUebersicht extends Auth_Controller return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - // Get statusbezeichnung for 'inProgressDP' - $this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig'); - $inProgressDP = getData($this->AnrechnungstatusModel->load('inProgressDP'))[0]; - $inProgressDP = getUserLanguage() == 'German' - ? $inProgressDP->bezeichnung_mehrsprachig[0] - : $inProgressDP->bezeichnung_mehrsprachig[1]; - foreach ($data as $item) { // Approve Anrechnung - if(getData($this->anrechnunglib - ->dontRecommendAnrechnung($item['anrechnung_id'], $item['begruendung']))) + if($this->anrechnunglib->dontRecommendAnrechnung($item['anrechnung_id'], $item['begruendung'])) { $json[]= array( 'anrechnung_id' => $item['anrechnung_id'], 'empfehlung_anrechnung' => 'false', 'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL, - 'status_bezeichnung' => $inProgressDP + 'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL) ); } } @@ -184,7 +163,7 @@ class reviewAnrechnungUebersicht extends Auth_Controller } else { - return $this->outputJsonError('Empfehlungen wurden nicht durchgeführt'); + return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt')); } } @@ -203,7 +182,11 @@ class reviewAnrechnungUebersicht extends Auth_Controller // Check if user is entitled to read dms doc self::_checkIfEntitledToReadDMSDoc($dms_id); - $this->dmslib->download($dms_id); + // Set filename to be used on downlaod + $filename = $this->anrechnunglib->setFilenameOnDownload($dms_id); + + // Download file + $this->dmslib->download($dms_id, $filename); } diff --git a/application/controllers/system/Variables.php b/application/controllers/system/Variables.php index 20303118b..c56407416 100644 --- a/application/controllers/system/Variables.php +++ b/application/controllers/system/Variables.php @@ -20,7 +20,8 @@ class Variables extends Auth_Controller array( 'setVar' => 'basis/variable:rw', 'getVar' => 'basis/variable:rw', - 'changeStudiensemesterVar' => 'basis/variable:rw' + 'changeStudiensemesterVar' => 'basis/variable:rw', + 'changeStudengangsTypVar' => 'basis/variable:rw' ) ); @@ -50,7 +51,9 @@ class Variables extends Auth_Controller public function getVar() { $name = $this->input->get('name'); - $this->outputJson($this->VariableModel->getVariables($this->_uid, array($name))); + $typ = $this->input->get('typ'); + + $this->outputJson($this->VariableModel->getVariables($this->_uid, array($name, $typ))); } /** @@ -66,6 +69,15 @@ class Variables extends Auth_Controller $this->outputJson($result); } + public function changeStudengangsTypVar() + { + $name = $this->input->post('name'); + $change = $this->input->post('change'); + + $result = $this->variablelib->changeStudengangsTypVar($this->_uid, $name, $change); + $this->outputJson($result); + } + /** * Retrieve the UID of the logged user and checks if it is valid */ diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index 7d36690e7..44a1cf327 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -12,12 +12,17 @@ class InfoCenter extends Auth_Controller const APP = 'infocenter'; const TAETIGKEIT = 'bewerbung'; const FREIGABE_MAIL_VORLAGE = 'InfocenterMailFreigabeAssistenz'; + const ZGVPRUEFUNG_MAIL_VORLAGE = 'InfocenterMailZgvUeberpruefung'; + const ZGVPRUEFUNG_MAIL_VORLAGE_MASTER = 'InfocenterMailZgvUeberpruefungM'; const INFOCENTER_URI = 'system/infocenter/InfoCenter'; // URL prefix for this controller + const ZGV_UEBERPRUEFUNG_URI = 'system/infocenter/ZGVUeberpruefung'; const INDEX_PAGE = 'index'; const FREIGEGEBEN_PAGE = 'freigegeben'; const REIHUNGSTESTABSOLVIERT_PAGE = 'reihungstestAbsolviert'; const SHOW_DETAILS_PAGE = 'showDetails'; + const SHOW_ZGV_DETAILS_PAGE = 'showZGVDetails'; + const ZGV_UBERPRUEFUNG_PAGE = 'ZGVUeberpruefung'; const NAVIGATION_PAGE = 'navigation_page'; const ORIGIN_PAGE = 'origin_page'; @@ -63,7 +68,25 @@ class InfoCenter extends Auth_Controller 'name' => 'Note updated', 'message' => 'Note with title %s was updated', 'success' => null - ) + ), + 'updatezgv' => array( + 'logtype' => 'Action', + 'name' => 'ZGV pruefung updated', + 'message' => 'ZGV with the ID %s was updated to %s', + 'success' => null + ), + 'newzgv' => array( + 'logtype' => 'Action', + 'name' => 'ZGV pruefung added', + 'message' => 'ZGV with the ID %s was added', + 'success' => null + ), + 'updatedoctyp' => array( + 'logtype' => 'Action', + 'name' => 'Document type updated', + 'message' => 'Type of Document %s was updated, set to %s', + 'success' => null + ), ); // Name of Interessentenstatus @@ -86,13 +109,18 @@ class InfoCenter extends Auth_Controller 'freigegeben' => 'infocenter:r', 'reihungstestAbsolviert' => 'infocenter:r', 'showDetails' => 'infocenter:r', + 'showZGVDetails' => 'lehre/zgvpruefung:r', 'unlockPerson' => 'infocenter:rw', 'saveFormalGeprueft' => 'infocenter:rw', + 'saveDocTyp' => 'infocenter:rw', + 'saveNachreichung' => 'infocenter:rw', 'getPrestudentData' => 'infocenter:r', 'getLastPrestudentWithZgvJson' => 'infocenter:r', 'getZgvInfoForPrestudent' => 'infocenter:r', 'saveBewPriorisierung' => 'infocenter:rw', 'saveZgvPruefung' => 'infocenter:rw', + 'zgvRueckfragen' => 'infocenter:rw', + 'zgvStatusUpdate' => 'lehre/zgvpruefung:rw', 'saveAbsage' => 'infocenter:rw', 'saveFreigabe' => 'infocenter:rw', 'getNotiz' => 'infocenter:r', @@ -100,6 +128,7 @@ class InfoCenter extends Auth_Controller 'updateNotiz' => 'infocenter:rw', 'reloadZgvPruefungen' => 'infocenter:r', 'reloadMessages' => 'infocenter:r', + 'reloadDoks' => 'infocenter:r', 'reloadNotizen' => 'infocenter:r', 'reloadLogs' => 'infocenter:r', 'outputAkteContent' => 'infocenter:r', @@ -117,9 +146,12 @@ class InfoCenter extends Auth_Controller // Loads models $this->load->model('crm/Akte_model', 'AkteModel'); + $this->load->model('crm/Dokument_model', 'DokumentModel'); $this->load->model('crm/Prestudent_model', 'PrestudentModel'); $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); $this->load->model('crm/Statusgrund_model', 'StatusgrundModel'); + $this->load->model('crm/ZGVPruefung_model', 'ZGVPruefungModel'); + $this->load->model('crm/ZGVPruefungStatus_model', 'ZGVPruefungStatusModel'); $this->load->model('person/Notiz_model', 'NotizModel'); $this->load->model('person/Person_model', 'PersonModel'); $this->load->model('system/Message_model', 'MessageModel'); @@ -181,6 +213,59 @@ class InfoCenter extends Auth_Controller $this->load->view('system/infocenter/infocenterReihungstestAbsolviert.php'); } + /** + * Prestudenten/ZGV übersicht + * Holt sich die Informationen zu den ZGV vom Prestudenten und zeigt die dann an + */ + public function showZGVDetails() + { + $this->_setNavigationMenuShowDetails(self::SHOW_ZGV_DETAILS_PAGE); + + $prestudent_id = $this->input->get('prestudent_id'); + + if (!is_numeric($prestudent_id)) + show_error('prestudent id is not numeric!'); + + $prestudentexists = $this->PrestudentModel->load($prestudent_id); + + if (isError($prestudentexists)) + show_error(getError($prestudentexists)); + + if (!hasData($prestudentexists)) + show_error('Prestudent does not exist!'); + + $zgv = $this->ZGVPruefungStatusModel->getZgvStatusByPrestudent($prestudent_id); + + if (isError($zgv)) + show_error(getError($zgv)); + + if (!hasData($zgv)) + show_error('ZGV has no status.'); + + $persondata = $this->_loadPersonData(getData($prestudentexists)[0]->person_id); + $prestudent_id = array('prestudent_id' => $prestudent_id); + $status = array('status' => getData($zgv)[0]->status); + $prestudent_data = $this->_getPersonAndStudiengangFromPrestudent($prestudent_id); + + $this->DokumentModel->addOrder('bezeichnung'); + $dokumentdata = array('dokumententypen' => (getData($this->DokumentModel->load()))); + + $data = array_merge( + $persondata, + $prestudent_id, + $status, + $dokumentdata, + $prestudent_data + ); + + $origin_page = $this->input->get(self::ORIGIN_PAGE); + + $data[self::FHC_CONTROLLER_ID] = $this->getControllerId(); + $data[self::ORIGIN_PAGE] = $origin_page; + $data[self::PREV_FILTER_ID] = $this->input->get(self::PREV_FILTER_ID); + + $this->load->view('system/infocenter/infocenterZgvDetails.php', $data); + } /** * Personal details page of the InfoCenter tool * Initialization function, gets person and prestudent data and loads the view with the data @@ -214,9 +299,13 @@ class InfoCenter extends Auth_Controller $persondata = $this->_loadPersonData($person_id); $prestudentdata = $this->_loadPrestudentData($person_id); + $this->DokumentModel->addOrder('bezeichnung'); + $dokumentdata = array('dokumententypen' => (getData($this->DokumentModel->load()))); + $data = array_merge( $persondata, - $prestudentdata + $prestudentdata, + $dokumentdata ); $data[self::FHC_CONTROLLER_ID] = $this->getControllerId(); @@ -377,12 +466,18 @@ class InfoCenter extends Auth_Controller $zgvdatum = isEmptyString($zgvdatum) ? null : date_format(date_create($zgvdatum), 'Y-m-d'); $zgvnation_code = $this->input->post('zgvnation') === 'null' ? null : $this->input->post('zgvnation'); - // zgvmasterdata - $zgvmas_code = $this->input->post('zgvmas') === 'null' ? null : $this->input->post('zgvmas'); - $zgvmaort = $this->input->post('zgvmaort'); - $zgvmadatum = $this->input->post('zgvmadatum'); - $zgvmadatum = isEmptyString($zgvmadatum) ? null : date_format(date_create($zgvmadatum), 'Y-m-d'); - $zgvmanation_code = $this->input->post('zgvmanation') === 'null' ? null : $this->input->post('zgvmanation'); + $prestudent = $this->PrestudentModel->getPrestudentWithZgv($prestudent_id); + $prestudentdata = getData($prestudent); + + if ($prestudentdata->studiengangtyp === 'm') + { + // zgvmasterdata + $zgvmas_code = $this->input->post('zgvmas') === 'null' ? null : $this->input->post('zgvmas'); + $zgvmaort = $this->input->post('zgvmaort'); + $zgvmadatum = $this->input->post('zgvmadatum'); + $zgvmadatum = isEmptyString($zgvmadatum) ? null : date_format(date_create($zgvmadatum), 'Y-m-d'); + $zgvmanation_code = $this->input->post('zgvmanation') === 'null' ? null : $this->input->post('zgvmanation'); + } $lastStatus = $this->PrestudentstatusModel->getLastStatus($prestudent_id, '', self::INTERESSENTSTATUS); @@ -398,19 +493,29 @@ class InfoCenter extends Auth_Controller ); } - $prestresult = $this->PrestudentModel->update( - $prestudent_id, - array( - 'zgv_code' => $zgv_code, - 'zgvort' => $zgvort, - 'zgvdatum' => $zgvdatum, - 'zgvnation' => $zgvnation_code, + $updateArray = array( + 'zgv_code' => $zgv_code, + 'zgvort' => $zgvort, + 'zgvdatum' => $zgvdatum, + 'zgvnation' => $zgvnation_code, + 'updateamum' => date('Y-m-d H:i:s') + ); + + if ($prestudentdata->studiengangtyp === 'm') + { + $updateMasterArray = array( 'zgvmas_code' => $zgvmas_code, 'zgvmaort' => $zgvmaort, 'zgvmadatum' => $zgvmadatum, - 'zgvmanation' => $zgvmanation_code, - 'updateamum' => date('Y-m-d H:i:s') - ) + 'zgvmanation' => $zgvmanation_code + ); + + $updateArray = array_merge($updateArray, $updateMasterArray); + } + + $prestresult = $this->PrestudentModel->update( + $prestudent_id, + $updateArray ); if (isError($prestresult)) @@ -432,6 +537,183 @@ class InfoCenter extends Auth_Controller $this->outputJson($json); } + /** + * Sendet bei einer neuen ZGV Prüfung die Mail raus an den Studiengang + */ + private function sendZgvMail($mail, $typ){ + $data = array( + 'link' => site_url('system/infocenter/ZGVUeberpruefung') + ); + + $this->load->helper('hlp_sancho'); + + sendSanchoMail( + ($typ === 'm' ? self::ZGVPRUEFUNG_MAIL_VORLAGE_MASTER : self::ZGVPRUEFUNG_MAIL_VORLAGE), + $data, + $mail, + 'ZGV Ueberpruefung', + 'sancho_header_min_bw.jpg', + 'sancho_footer_min_bw.jpg' + ); + } + + /** + * Der Status von den ZGV wird geupdated + */ + public function zgvStatusUpdate() + { + $prestudent_id = $this->input->post('prestudent_id'); + $person_id = $this->input->post('person_id'); + $status = $this->input->post('status'); + + if (isEmptyString($prestudent_id) || isEmptyString($person_id) || isEmptyString($status)) + $this->terminateWithJsonError('Some data is missing'); + + $personInfos = $this->PrestudentModel->getPrestudentWithZgv($prestudent_id); + + if (!hasData($personInfos)) + $this->terminateWithJsonError('Person id nicht gefunden'); + + $personInfos = getData($personInfos); + + $zgv = $this->ZGVPruefungStatusModel->getZgvStatusByPrestudent($prestudent_id); + + if (!hasData($zgv)) + $this->terminateWithJsonError('ZGV-Status nicht gefunden'); + + $zgv = getData($zgv); + + if ($zgv[0]->status === 'rejected' && $status === 'rejected') + $this->terminateWithJsonError('Bereits abgelehnt worden'); + elseif ($zgv[0]->status === 'accepted' && $status === 'accepted') + $this->terminateWithJsonError('Bereits akzeptiert worden'); + + $insert = $this->ZGVPruefungStatusModel->insert( + array( + 'zgvpruefung_id' => $zgv[0]->zgvpruefung_id, + 'status' => $status + ) + ); + + $update = $this->ZGVPruefungModel->update( + $zgv[0]->zgvpruefung_id, + array( + 'updateamum' => date('Y-m-d H:i:s'), + 'updatevon' => $this->_uid + ) + ); + + if (isError($insert) || isError($update)) + $this->terminateWithJsonError('Fehler beim Speichern'); + + $allZgvs = $this->ZGVPruefungStatusModel->getOpenZgvByPerson($personInfos->person_id, array('pruefung_stg')); + $openZgv = false; + + if (hasData($allZgvs)) + $openZgv = true; + + $this->_log($person_id, 'updatezgv', array($zgv[0]->zgvpruefung_id, $status)); + + $this->outputJsonSuccess( + array + ( + 'msg' => 'Erfolgreich gespeichert', + 'person_id' => $personInfos->person_id, + 'openZgv' => $openZgv + ) + ); + + } + + /** + * Fügt einen neuen ZGV Status hinzu oder updated einen bestehenden + * Falls es erfolgreich war, sendet er die Mail raus + */ + public function zgvRueckfragen() + { + $prestudent_id = $this->input->post('prestudent_id'); + $person_id = $this->input->post('person_id'); + + if (isEmptyString($prestudent_id) || isEmptyString($person_id)) + $this->terminateWithJsonError('Prestudentid OR/AND Personid missing'); + + $zgv = $this->ZGVPruefungStatusModel->getZgvStatusByPrestudent($prestudent_id); + + $data = $this->_getPersonAndStudiengangFromPrestudent($prestudent_id); + $mail = $data['studiengang_mail']; + $typ = $data['studiengang_typ']; + + if (hasData($zgv)) + { + $zgv = getData($zgv); + + if ($zgv[0]->status === 'pruefung_stg') + $this->terminateWithJsonError('Bereits in Prüfung'); + + $insert = $this->ZGVPruefungStatusModel->insert( + array( + 'zgvpruefung_id' => $zgv[0]->zgvpruefung_id, + 'status' => 'pruefung_stg' + ) + ); + + $this->ZGVPruefungModel->update( + $zgv[0]->zgvpruefung_id, + array( + 'updateamum' => date('Y-m-d H:i:s'), + 'updatevon' => $this->_uid + ) + ); + + $this->_log($person_id, 'updatezgv', array($zgv[0]->zgvpruefung_id, 'pruefung_stg')); + + if (isSuccess($insert)) + $this->sendZgvMail($mail, $typ); + elseif (isError($insert)) + $this->terminateWithJsonError('Fehler beim Speichern'); + }else + { + $insert = $this->ZGVPruefungModel->insert( + array( + 'prestudent_id' => $prestudent_id, + 'insertamum' => date('Y-m-d H:i:s'), + 'insertvon' => $this->_uid + ) + ); + + if (isSuccess($insert)) + { + $zgvpruefung_id = $this->ZGVPruefungModel->db->insert_id(); + $result = $this->ZGVPruefungStatusModel->insert( + array( + 'zgvpruefung_id' => $zgvpruefung_id, + 'status' => 'pruefung_stg' + ) + ); + + $this->_log($person_id, 'newzgv', array($zgvpruefung_id)); + + if (isSuccess($result)) + $this->sendZgvMail($mail, $typ); + elseif (isError($result)) + $this->terminateWithJsonError('Fehler beim Speichern'); + } + } + + $hold = false; + if ($this->personloglib->getOnHoldDate($person_id) !== null) + $hold = true; + + $this->outputJsonSuccess( + array + ( + 'msg' => 'Erfolgreich gespeichert', + 'person_id' => $data['person_id'], + 'hold' => $hold + ) + ); + } + /** * Saves Absage for Prestudent including the reason for the Absage (statusgrund). * inserts Studiensemester and Ausbildungssemester for the new Absage of (chronologically) last status. @@ -752,6 +1034,13 @@ class InfoCenter extends Auth_Controller $this->load->view('system/infocenter/logs.php', array('logs' => $logs)); } + public function reloadDoks($person_id) + { + $dokumente_nachgereicht = $this->AkteModel->getAktenWithDokInfo($person_id, null, true); + + $this->load->view('system/infocenter/dokNachzureichend.php', array('dokumente_nachgereicht' => $dokumente_nachgereicht->retval)); + } + /** * Outputs content of an Akte, sends appropriate headers (so the document can be downloaded) * @param $akte_id @@ -906,6 +1195,117 @@ class InfoCenter extends Auth_Controller $this->outputJsonSuccess('success'); } + public function saveDocTyp($person_id) + { + $akte_id = $this->input->post('akte_id'); + $typ = $this->input->post('typ'); + + if (!isset($akte_id) || !isset($typ) || !isset($person_id)) + $this->terminateWithJsonError("Nicht alle sind Parameter übergeben worden"); + + $akte = $this->AkteModel->load($akte_id); + + if (!hasData($akte)) + $this->terminateWithJsonError("Fehler beim Laden der Akte"); + + $result = $this->AkteModel->update($akte_id, array('dokument_kurzbz' => $typ)); + + if (!isSuccess($result)) + $this->terminateWithJsonError("Fehler beim Update aufgetreten"); + + $dokument = $this->DokumentModel->load($akte->retval[0]->dokument_kurzbz); + + if (!hasData($dokument)) + $this->terminateWithJsonError("Fehler beim Laden des Dokumententypes"); + + $this->_log( + $person_id, + 'updatedoctyp', + array( + isEmptyString($akte->retval[0]->titel) ? $akte->retval[0]->bezeichnung : $akte->retval[0]->titel, + isEmptyString($dokument->retval[0]->bezeichnung) ? $dokument->retval[0]->dokument_kurbz : $dokument->retval[0]->bezeichnung + ) + ); + + $this->outputJsonSuccess('success'); + } + + public function saveNachreichung($person_id) + { + $nachreichungAm = $this->input->post('nachreichungAm'); + $nachreichungAnmerkung = empty($this->input->post('nachreichungAnmerkung')) ? NULL : $this->input->post('nachreichungAnmerkung'); + $typ = $this->input->post('typ'); + + $allowedTypes = [ + 'VorlSpB2' => 'SprachB2', + 'ZgvBaPre' => 'zgv_bakk', + 'ZgvMaPre' => 'zgv_mast' + ]; + + if (!in_array($typ, array_keys($allowedTypes))) + $this->terminateWithJsonError($this->p->t('ui', 'fehlerBeimSpeichern')); + + if (empty($nachreichungAm)) + $this->terminateWithJsonError($this->p->t('infocenter', 'datumUngueltig')); + + if (!preg_match('/^\d{2}\.\d{2}\.(\d{2}|\d{4})$/ ', $nachreichungAm)) + { + $this->terminateWithJsonError($this->p->t('infocenter', 'datumUngueltig')); + } + else + { + $ds = explode('.', $nachreichungAm); + if (! checkdate($ds[1], $ds[0], $ds[2])) + { + $this->terminateWithJsonError($this->p->t('infocenter', 'datumUngueltig')); + } + } + + $nachreichungAm = (date_format(date_create($nachreichungAm), 'Y-m-d')); + + $today = date('Y-m-d H:i:s'); + + if($nachreichungAm < $today) + $this->terminateWithJsonError($this->p->t('infocenter', 'nachreichDatumNichtVergangenheit')); + + + $akte = $this->AkteModel->loadWhere(array('person_id' => $person_id, 'dokument_kurzbz' => $allowedTypes[$typ])); + + if (hasData($akte)) { + $akte = getData($akte)[0]; + $this->AkteModel->update( + $akte->akte_id, + array( + 'anmerkung' => $nachreichungAnmerkung, + 'updateamum' => $today, + 'updatevon' => get_uid(), + 'nachgereicht' => true, + 'nachgereicht_am' => $nachreichungAm + ) + ); + } + else + { + $this->AkteModel->insert( + array( + 'dokument_kurzbz' => $allowedTypes[$typ], + 'person_id' => $person_id, + 'erstelltam' => NULL, + 'gedruckt' => false, + 'anmerkung' => $nachreichungAnmerkung, + 'updateamum' => $today, + 'updatevon' => get_uid(), + 'insertamum' => $today, + 'insertvon' => get_uid(), + 'uid' => NULL, + 'nachgereicht' => true, + 'nachgereicht_am' => $nachreichungAm + ) + ); + } + + $this->outputJsonSuccess("Done!"); + } // ----------------------------------------------------------------------------------------------------------------- // Private methods @@ -1066,9 +1466,9 @@ class InfoCenter extends Auth_Controller /** * Define the navigation menu for the showDetails page */ - private function _setNavigationMenuShowDetails() + private function _setNavigationMenuShowDetails($page = self::SHOW_DETAILS_PAGE) { - $this->load->library('NavigationLib', array(self::NAVIGATION_PAGE => self::INFOCENTER_URI.'/'.self::SHOW_DETAILS_PAGE)); + $this->load->library('NavigationLib', array(self::NAVIGATION_PAGE => self::INFOCENTER_URI.'/'.$page)); $origin_page = $this->input->get(self::ORIGIN_PAGE); @@ -1081,6 +1481,8 @@ class InfoCenter extends Auth_Controller { $link = site_url(self::INFOCENTER_URI.'/'.self::REIHUNGSTESTABSOLVIERT_PAGE); } + if ($origin_page === self::ZGV_UBERPRUEFUNG_PAGE) + $link = site_url(self::ZGV_UEBERPRUEFUNG_URI); $prevFilterId = $this->input->get(self::PREV_FILTER_ID); if (isset($prevFilterId)) @@ -1431,8 +1833,20 @@ class InfoCenter extends Auth_Controller $zgvpruefung->changedown = $this->PrestudentModel->checkPrioChange($zgvpruefung->prestudent_id, $studiensemester, 1); } } + $zgvExist = $this->ZGVPruefungModel->loadWhere(array('prestudent_id' => $zgvpruefung->prestudent_id)); - $zgvpruefungen[] = $zgvpruefung; + if (isSuccess($zgvExist) && hasData($zgvExist)) + { + $this->ZGVPruefungStatusModel->addOrder('datum', 'DESC'); + $this->ZGVPruefungStatusModel->addLimit(1); + + $statusZGV = $this->ZGVPruefungStatusModel->loadWhere(array('zgvpruefung_id' => $zgvExist->retval[0]->zgvpruefung_id)); + + if (isSuccess($statusZGV) && hasData($statusZGV)) + $zgvpruefung->statusZGV = $statusZGV->retval[0]->status; + } + + $zgvpruefungen[] = $zgvpruefung; } $this->_sortPrestudents($zgvpruefungen); @@ -1555,8 +1969,10 @@ class InfoCenter extends Auth_Controller $person_id = $prestudentdata->person_id; $studiengang_kurzbz = $prestudentdata->studiengang; $studiengang_bezeichnung = $prestudentdata->studiengangbezeichnung; + $studiengang_mail = $prestudentdata->studiengangmail; + $studiengang_typ = $prestudentdata->studiengangtyp; - return array('person_id' => $person_id, 'studiengang_kurzbz' => $studiengang_kurzbz, 'studiengang_bezeichnung' => $studiengang_bezeichnung); + return array('person_id' => $person_id, 'studiengang_kurzbz' => $studiengang_kurzbz, 'studiengang_bezeichnung' => $studiengang_bezeichnung, 'studiengang_mail' => $studiengang_mail, 'studiengang_typ' => $studiengang_typ); } /** diff --git a/application/controllers/system/infocenter/ZGVUeberpruefung.php b/application/controllers/system/infocenter/ZGVUeberpruefung.php new file mode 100644 index 000000000..bb0c36b66 --- /dev/null +++ b/application/controllers/system/infocenter/ZGVUeberpruefung.php @@ -0,0 +1,55 @@ + 'lehre/zgvpruefung:r', + 'getZgvStatusByPrestudent' => 'lehre/zgvpruefung:r' + ) + ); + $this->load->model('crm/ZGVPruefungStatus_model', 'ZGVPruefungStatusModel'); + $this->load->model('crm/ZGVPruefung_model', 'ZGVPruefungModel'); + + $this->load->library('WidgetLib'); + + $this->setControllerId(); + $this->loadPhrases( + array( + 'infocenter' + ) + ); + } + + public function index() + { + $this->load->view('system/infocenter/infocenterZgvUeberpruefung.php'); + } + + public function getZgvStatusByPrestudent() + { + $prestudent_id = $this->input->get('prestudent_id'); + + $zgvExist = $this->ZGVPruefungModel->loadWhere(array('prestudent_id' => $prestudent_id)); + + if (!hasData($zgvExist)) + $this->terminateWithJsonError('no ZGV exist'); + + $status = $this->ZGVPruefungStatusModel->getZgvStatus(getData($zgvExist)[0]->zgvpruefung_id); + + if (!hasData($status)) + $this->terminateWithJsonError('No status'); + + $status = getData($status)[0]->status; + + $this->outputJsonSuccess($status); + } +} \ No newline at end of file diff --git a/application/controllers/widgets/Filters.php b/application/controllers/widgets/Filters.php index 748272f09..e87b2d331 100644 --- a/application/controllers/widgets/Filters.php +++ b/application/controllers/widgets/Filters.php @@ -211,7 +211,7 @@ class Filters extends FHC_Controller public function setNavigationMenu() { // Generates the filters structure array - $filterMenu = $this->filterwidgetlib->generateFilterMenu($this->input->get(FilterWidgetLib::NAVIGATION_PAGE)); + $this->filterwidgetlib->generateFilterMenu($this->input->get(FilterWidgetLib::NAVIGATION_PAGE)); $this->outputJsonSuccess('Success'); } @@ -271,3 +271,4 @@ class Filters extends FHC_Controller } } } + diff --git a/application/core/API_Controller.php b/application/core/API_Controller.php new file mode 100644 index 000000000..db78ac6ad --- /dev/null +++ b/application/core/API_Controller.php @@ -0,0 +1,124 @@ +_requiredPermissions = $requiredPermissions; + + // Loads LogLib with different debug trace levels to get data of the job that extends this class + // It also specify parameters to set database fields + $this->load->library('LogLib', array( + 'classIndex' => 5, + 'functionIndex' => 5, + 'lineIndex' => 4, + 'dbLogType' => 'API', // required + 'dbExecuteUser' => 'RESTful API' + )); + } + + /** + * This method is automatically called by CodeIgniter after the execution of the constructor is completed + * - Cheks if the Authlib was loaded, if not it means that the authentication failed + * - Loads the permsission lib and calls permissionlib->isEntitled + * - Checks if the caller is allowed to access to this content with the given permissions + * if it is not allowed will set the HTTP header with code 401 + * - Calls the parent (REST_Controller) _remap method to performs other checks + * NOTE: this methods override the parent method!!! + */ + public function _remap($object_called, $arguments = []) + { + if (isset($this->authlib)) // if set then the authentication is ok + { + // Loads permission lib + $this->load->library('PermissionLib'); + + // Cheks if the user has the permission to call a method + if (!$this->permissionlib->isEntitled($this->_requiredPermissions, $this->router->method)) + { + // If not... + $this->response(error('You are not allowed to access to this content'), REST_Controller::HTTP_UNAUTHORIZED); + } + } + + // Finally calls the parent _remap to perform other checks + parent::_remap($object_called, $arguments); + } + + //------------------------------------------------------------------------------------------------------------------ + // Protected methods + + /** + * Writes a REST call info log + */ + protected function logInfo($response, $parameters = null) + { + $this->_log(LogLib::INFO, 'RESTful API info', $response, $parameters); + } + + /** + * Writes a REST call debug log + */ + protected function logDebug($response, $parameters = null) + { + $this->_log(LogLib::DEBUG, 'RESTful API debug', $response, $parameters); + } + + /** + * Writes a REST call warning log + */ + protected function logWarning($response, $parameters = null) + { + $this->_log(LogLib::WARNING, 'RESTful API warning', $response, $parameters); + } + + /** + * Writes a REST call error log + */ + protected function logError($response, $parameters = null) + { + $this->_log(LogLib::ERROR, 'RESTful API error', $response, $parameters); + } + + //------------------------------------------------------------------------------------------------------------------ + // Private methods + + /** + * Writes a log to database + */ + private function _log($level, $requestId, $response, $parameters) + { + $data = new stdClass(); + + $data->response = $response; + if ($parameters != null) $data->parameters = $parameters; + + switch($level) + { + case LogLib::INFO: + $this->loglib->logInfoDB($requestId, json_encode(success($data, LogLib::INFO))); + break; + case LogLib::DEBUG: + $this->loglib->logDebugDB($requestId, json_encode(success($data, LogLib::DEBUG))); + break; + case LogLib::WARNING: + $this->loglib->logWarningDB($requestId, json_encode(error($data, LogLib::WARNING))); + break; + case LogLib::ERROR: + $this->loglib->logErrorDB($requestId, json_encode(error($data, LogLib::ERROR))); + break; + } + } +} diff --git a/application/core/APIv1_Controller.php b/application/core/APIv1_Controller.php deleted file mode 100644 index 14b4b626d..000000000 --- a/application/core/APIv1_Controller.php +++ /dev/null @@ -1,51 +0,0 @@ -_requiredPermissions = $requiredPermissions; - - log_message('debug', 'Called API: '.$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']); - } - - /** - * This method is automatically called by CodeIgniter after the execution of the constructor is completed - * - Cheks if the Authlib was loaded, if not it means that the authentication failed - * - Loads the permsission lib and calls permissionlib->isEntitled - * - Checks if the caller is allowed to access to this content with the given permissions - * if it is not allowed will set the HTTP header with code 401 - * - Calls the parent (REST_Controller) _remap method to performs other checks - * NOTE: this methods override the parent method!!! - */ - public function _remap($object_called, $arguments = []) - { - if (isset($this->authlib)) // if set then the authentication is ok - { - // Loads permission lib - $this->load->library('PermissionLib'); - - // Cheks if the user has the permission to call a method - if (!$this->permissionlib->isEntitled($this->_requiredPermissions, $this->router->method)) - { - // If not... - $this->response(error('You are not allowed to access to this content'), REST_Controller::HTTP_UNAUTHORIZED); - } - } - - // Finally calls the parent _remap to perform other checks - parent::_remap($object_called, $arguments); - } -} diff --git a/application/core/FHC_Controller.php b/application/core/FHC_Controller.php index 93c324b21..ce8748c5a 100644 --- a/application/core/FHC_Controller.php +++ b/application/core/FHC_Controller.php @@ -132,6 +132,32 @@ abstract class FHC_Controller extends CI_Controller { $this->output->set_content_type('application/json')->set_output(json_encode($mixed)); } + + protected function outputFile($fileObj) + { + if (file_exists($fileObj->file)) + { + $finfo = new finfo(FILEINFO_MIME); + + header('Content-Description: File Transfer'); + header('Content-Type: '. $finfo->file($fileObj->file)); + 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')) + { + header('Content-Disposition: '. $fileObj->disposition. '; filename="'. $fileObj->name. '"'); + } + + readfile($fileObj->file); + + exit; + } + + return false; + } //------------------------------------------------------------------------------------------------------------------ // Private methods diff --git a/application/core/JQW_Controller.php b/application/core/JQW_Controller.php index 1b78a2a70..361efd998 100644 --- a/application/core/JQW_Controller.php +++ b/application/core/JQW_Controller.php @@ -49,10 +49,20 @@ abstract class JQW_Controller extends JOB_Controller /** * To get the oldest added job using the given job type + * NOTE: just a wrapper */ protected function getOldestJob($type) { - $jobs = $this->jobsqueuelib->getOldestJob($type); + return $this->getOldestJobs($type, 1); + } + + /** + * To get the oldest added jobs using the given job type + * It is eventually specify the maximum amount of jobs to be retrieved + */ + protected function getOldestJobs($type, $maxAmount) + { + $jobs = $this->jobsqueuelib->getOldestJobs($type, $maxAmount); // If an error occurred then log it in database if (isError($jobs)) $this->logError(getError($jobs), $type); @@ -131,12 +141,7 @@ abstract class JQW_Controller extends JOB_Controller */ protected function generateJobs($status, $input) { - $job = new stdClass(); - - $job->{JobsQueueLib::PROPERTY_STATUS} = $status; - $job->{JobsQueueLib::PROPERTY_INPUT} = $input; - - return array($job); + return JobsQueueLib::generateJobs($status, $input); } } diff --git a/application/libraries/AnrechnungLib.php b/application/libraries/AnrechnungLib.php index c32b8a91c..3bec62dce 100644 --- a/application/libraries/AnrechnungLib.php +++ b/application/libraries/AnrechnungLib.php @@ -12,6 +12,7 @@ class AnrechnungLib const ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_LEKTOR = 'AnrechnungNotizLektor'; const ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_STGL = 'AnrechnungNotizSTGL'; + const ANRECHNUNG_NOTIZTITEL_EMPFEHLUNGSNOTIZ_BY_STGL = 'AnrechnungEmpfehlungsnotizSTGL'; public function __construct() { @@ -23,6 +24,10 @@ class AnrechnungLib $this->ci->load->model('organisation/Studiengang_model', 'StudiengangModel'); $this->ci->load->model('crm/Student_model', 'StudentModel'); $this->ci->load->model('content/DmsVersion_model', 'DmsVersionModel'); + $this->ci->load->model('crm/Prestudent_model', 'PrestudentModel'); + $this->ci->load->model('person/Notiz_model', 'NotizModel'); + + $this->ci->load->library('DmsLib'); } /** @@ -32,16 +37,19 @@ class AnrechnungLib * @param $lv_id * @return StdClass */ - public function getAntragData($uid, $studiensemester_kurzbz, $lv_id) + public function getAntragData($prestudent_id, $studiensemester_kurzbz, $lv_id) { $antrag_data = new StdClass(); - + + // Get students UID. + $uid = $this->ci->StudentModel->getUID($prestudent_id); + // Get lehrveranstaltung data. Break, if course is not assigned to student. if(!$lv = getData($this->ci->LehrveranstaltungModel->getLvByStudent($uid, $studiensemester_kurzbz, $lv_id))[0]) { show_error('You are not assigned to this course yet.'); } - + // Get the students personal data if (!$person = getData($this->ci->PersonModel->getByUid($uid))[0]) { @@ -61,12 +69,18 @@ class AnrechnungLib } // Get lectors of lehrveranstaltung - $antrag_data->lektoren = array(); - if (!$lv_lektoren = getData($this->ci->LehrveranstaltungModel->getLecturersByLv($studiensemester_kurzbz, $lv_id))) + $result = $this->ci->LehrveranstaltungModel->getLecturersByLv($studiensemester_kurzbz, $lv_id); + if (isError($result)) { show_error('Failed loading course lectors.'); } - + + $lv_lektoren_arr = hasData($result) ? getData($result) : array(); + + // Get latest ZGV + $result = $this->ci->PrestudentModel->getLatestZGVBezeichnung($prestudent_id); + $latest_zgv_bezeichnung = hasData($result) ? getData($result)[0]->bezeichnung : ''; + // Set the given studiensemester $antrag_data->lv_id = $lv_id; $antrag_data->lv_bezeichnung = $lv->bezeichnung; @@ -76,7 +90,8 @@ class AnrechnungLib $antrag_data->nachname = $person->nachname; $antrag_data->matrikelnr = $student->matrikelnr; $antrag_data->stg_bezeichnung = $studiengang->bezeichnung; - $antrag_data->lektoren = $lv_lektoren; + $antrag_data->lektoren = $lv_lektoren_arr; + $antrag_data->zgv = $latest_zgv_bezeichnung; return $antrag_data; } @@ -107,8 +122,12 @@ class AnrechnungLib { $anrechnung_data = $this->_setAnrechnungDataObject($anrechnung); } + else + { + show_error('No Anrechnung with this anrechnung_id.'); + } - return success($anrechnung_data); + return $anrechnung_data; } @@ -153,7 +172,7 @@ class AnrechnungLib $anrechnung_data = $this->_setAnrechnungDataObject($anrechnung); } - return success($anrechnung_data); + return $anrechnung_data; } /** @@ -171,8 +190,8 @@ class AnrechnungLib $this->ci->AnrechnungModel->addSelect('tbl_benutzer.uid, tbl_prestudent.prestudent_id, tbl_person.person_id, tbl_anrechnung.studiensemester_kurzbz, vorname, nachname, geschlecht, tbl_lehrveranstaltung.bezeichnung AS "lv_bezeichnung"'); $this->ci->AnrechnungModel->addJoin('public.tbl_prestudent', 'prestudent_id'); $this->ci->AnrechnungModel->addJoin('public.tbl_student', 'prestudent_id'); - $this->ci->AnrechnungModel->addJoin('public.tbl_benutzer', 'uid=student_uid'); - $this->ci->AnrechnungModel->addJoin('public.tbl_person', 'tbl_benutzer.person_id=tbl_person.person_id'); + $this->ci->AnrechnungModel->addJoin('public.tbl_benutzer', 'uid = student_uid'); + $this->ci->AnrechnungModel->addJoin('public.tbl_person', 'tbl_benutzer.person_id = tbl_person.person_id'); $this->ci->AnrechnungModel->addJoin('lehre.tbl_lehrveranstaltung', 'lehrveranstaltung_id'); $result = $this->ci->AnrechnungModel->load($anrechnung_id); @@ -207,28 +226,53 @@ class AnrechnungLib $empfehlung_data->empfehlung = null; $empfehlung_data->empfehlung_von = '-'; $empfehlung_data->empfehlung_am = '-'; - $empfehlung_data->empfehlung_angefordert_am = '-'; - $empfehlung_data->notiz = ''; // Begruendung, if not recommended - + $empfehlung_data->empfehlungsanfrageAm = '-'; + $empfehlung_data->empfehlungsanfrageAn = '-'; + $empfehlung_data->begruendung = '-'; // Begruendung, if not recommended + $empfehlung_data->notiz_id = ''; // Empfehlungsnotiz from STGL + $empfehlung_data->notiz = ''; // Empfehlungsnotiz from STGL + if(!$anrechnung = getData($this->ci->AnrechnungModel->load($anrechnung_id))[0]) { show_error('Failed loading Anrechnung'); } + + // Get Empfehlungsnotiz + $result = $this->ci->NotizModel->getNotizByAnrechnung( + $anrechnung_id, + self::ANRECHNUNG_NOTIZTITEL_EMPFEHLUNGSNOTIZ_BY_STGL + ); + + if ($notiz = getData($result)[0]) + { + $empfehlung_data->notiz_id = $notiz->notiz_id; + $empfehlung_data->notiz = $notiz->text; + } // Get date, where recommendation was last requested $result = $this->ci->AnrechnungModel->getLastAnrechnungstatus( $anrechnung_id, self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR // when STLG asks for recommendation, status is set to in progress lektor ); - if ($result = getData($result)[0]) + + // If request for recommendation exists + if (hasData($result)) { - $empfehlung_data->empfehlung_angefordert_am = (new DateTime($result->insertamum))->format('d.m.Y'); + $empfehlung_data->empfehlungsanfrageAm = (new DateTime($result->retval[0]->insertamum))->format('d.m.Y'); + + // Get lectors who received request for recommendation + $lector_arr = self::getLectors($anrechnung_id); + + if (!isEmptyArray($lector_arr)) + { + $empfehlung_data->empfehlungsanfrageAn = implode(', ', array_column($lector_arr, 'fullname')); + } } if (is_null($anrechnung->empfehlung_anrechnung)) { - return success($empfehlung_data); + return $empfehlung_data; } // If Empfehlung is true or false @@ -260,15 +304,14 @@ class AnrechnungLib if (!$anrechnung->empfehlung_anrechnung) { // Get Ablehnungsbegruendung (only set, if Anrechnung was not recommended yet) - $this->ci->load->model('person/Notiz_model', 'NotizModel'); $result = $this->ci->NotizModel->getNotizByAnrechnung($anrechnung_id, self::ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_LEKTOR); if ($notiz = getData($result)[0]) { - $empfehlung_data->notiz = $notiz->text; + $empfehlung_data->begruendung = $notiz->text; } } - return success($empfehlung_data); + return $empfehlung_data; } @@ -300,9 +343,10 @@ class AnrechnungLib // Get date of approvement or rejection $result = $this->ci->AnrechnungModel->getApprovedOrRejected($anrechnung_id); + // If no approved or rejected Anrechnung exist, return basic genehmigung data object if (!$result = getData($result)[0]) { - return success($genehmigung_data); + return $genehmigung_data; } @@ -331,9 +375,30 @@ class AnrechnungLib } } - return success($genehmigung_data); + return $genehmigung_data; } + + /** + * Get Anrechnungstatusbezeichnung of given status_kurzbz in users language. + * + * @param $status_kurzbz + * @return mixed + */ + public function getStatusbezeichnung ($status_kurzbz) + { + $this->ci->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig'); + $result = $this->ci->AnrechnungstatusModel->load($status_kurzbz); + + if (!hasData($result)) + { + show_error('Failed retrieving Anrechnungstatusbezeichung'); + } + + return getUserLanguage() == 'German' + ? $result->retval[0]->bezeichnung_mehrsprachig[0] + : $result->retval[0]->bezeichnung_mehrsprachig[1]; + } /** * Get last Anrechnungstatusbezeichnung in users language. @@ -370,7 +435,7 @@ class AnrechnungLib // Exit if already approved or rejected if ($status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED || $status_kurzbz == self::ANRECHNUNGSTATUS_REJECTED) { - return success(false); // dont approve + return false; // dont approve } // Start DB transaction @@ -395,10 +460,10 @@ class AnrechnungLib if ($this->ci->db->trans_status() === false) { $this->ci->db->trans_rollback(); - return error($result->msg, EXIT_ERROR); + return false; } - return success(true); // approved + return true; // approved } /** @@ -419,16 +484,14 @@ class AnrechnungLib // Exit if already approved or rejected if ($status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED || $status_kurzbz == self::ANRECHNUNGSTATUS_REJECTED) { - return success(false); // dont reject + return false; // dont reject } + + // Start DB transaction + $this->ci->db->trans_start(false); // Insert new status rejected - $result = $this->ci->AnrechnungModel->saveAnrechnungstatus($anrechnung_id, self::ANRECHNUNGSTATUS_REJECTED); - - if (isError($result)) - { - show_error(getError($result)); - } + $this->ci->AnrechnungModel->saveAnrechnungstatus($anrechnung_id, self::ANRECHNUNGSTATUS_REJECTED); // Add begruendung as notiz $this->ci->load->model('person/Notiz_model', 'NotizModel'); @@ -438,8 +501,17 @@ class AnrechnungLib $begruendung, getAuthUID() ); + + // Transaction complete + $this->ci->db->trans_complete(); + + if ($this->ci->db->trans_status() === false) + { + $this->ci->db->trans_rollback(); + return false; + } - return success(true); // rejected + return true; // rejected } /** @@ -462,7 +534,7 @@ class AnrechnungLib || $status_kurzbz == self::ANRECHNUNGSTATUS_REJECTED || $status_kurzbz == self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR) { - return success(false); // dont ask for recommendation + return false; // dont ask for recommendation } // Start DB transaction @@ -492,7 +564,7 @@ class AnrechnungLib return error($result->msg, EXIT_ERROR); } - return success(true); // recommended + return true; // recommended } /** @@ -537,10 +609,10 @@ class AnrechnungLib if ($this->ci->db->trans_status() === false) { $this->ci->db->trans_rollback(); - return error($result->msg, EXIT_ERROR); + return false; } - return success(true); // recommended + return true; // recommended } /** @@ -562,7 +634,7 @@ class AnrechnungLib // Exit if already approved or rejected if ($status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED || $status_kurzbz == self::ANRECHNUNGSTATUS_REJECTED) { - return success(false); // dont approve + return false; // dont approve } // Start DB transaction @@ -596,10 +668,125 @@ class AnrechnungLib if ($this->ci->db->trans_status() === false) { $this->ci->db->trans_rollback(); - return error($result->msg, EXIT_ERROR); + return false; } - return success(true); // recommended + return true; // recommended + } + + /** + * Set Filename that should be used on download + * @param $dms_id + * @return string|null + */ + public function setFilenameOnDownload($dms_id) + { + // Load Anrechnung + $result = $this->ci->AnrechnungModel->loadWhere(array('dms_id' => $dms_id)); + + // Return null if no data found + if (!hasData($result)) + { + return null; + } + + $prestudent_id = $result->retval[0]->prestudent_id; + $lehrveranstaltung_id = $result->retval[0]->lehrveranstaltung_id; + + // Get LV OrgForm + $this->ci->LehrveranstaltungModel->addSelect('stg.orgform_kurzbz'); + $this->ci->LehrveranstaltungModel->addJoin('public.tbl_studiengang AS stg', 'studiengang_kz'); + $result = $this->ci->LehrveranstaltungModel->load($lehrveranstaltung_id); + $orgform_kurzbz = hasData($result) ? '_'. $result->retval[0]->orgform_kurzbz : ''; + + // Get full name of student + $this->ci->load->model('crm/Prestudent_model', 'PrestudentModel'); + $this->ci->PrestudentModel->addSelect('vorname, nachname'); + $this->ci->PrestudentModel->addJoin('public.tbl_person', 'person_id'); + $result = $this->ci->PrestudentModel->load($prestudent_id); + $fullname = hasData($result) ? $result->retval[0]->vorname. $result->retval[0]->nachname : ''; + + // Return filename + return 'Anrechnungsantrag'. $orgform_kurzbz .'_LV-'. $lehrveranstaltung_id. '_'. $fullname; + } + + public function LVhasLector($anrechnung_id) + { + $result = $this->ci->AnrechnungModel->load($anrechnung_id); + if (!hasData($result)) + { + showError('Anrechnung existiert nicht'); + } + + // Get lectors of lehrveranstaltung + $result = $this->ci->LehrveranstaltungModel->getLecturersByLv( + $result->retval[0]->studiensemester_kurzbz, + $result->retval[0]->lehrveranstaltung_id + ); + + // Continue, if LV has no lector (there is no one to ask for recommendation) + return hasData($result) ? true : false; + } + + /** + * Get LV Leitung. If not present, get all LV lectors. + * + * @param $anrechnung_id + * @return array|bool + */ + public function getLectors($anrechnung_id) + { + $this->ci->AnrechnungModel->addSelect('lehrveranstaltung_id, studiensemester_kurzbz'); + $result = $this->ci->AnrechnungModel->load($anrechnung_id); + + if (!hasData($result)) + { + return false; + } + + $lehrveranstaltung_id = getData($result)[0]->lehrveranstaltung_id; + $studiensemester_kurzbz = getData($result)[0]->studiensemester_kurzbz; + + // Get lectors + $lector_arr = array(); + + $this->ci->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel'); + $result = $this->ci->LehrveranstaltungModel->getLecturersByLv($studiensemester_kurzbz, $lehrveranstaltung_id); + + if (!$result = getData($result)) + { + return false; + } + + // Check if lv has LV-Leitung + $key = array_search(true, array_column($result, 'lvleiter')); + + // If lv has LV-Leitung, keep only the one + if ($key !== false) + { + $lector_arr[]= $result[$key]; + } + // ...otherwise keep all lectors + else + { + $lector_arr = array_merge($lector_arr, $result); + } + + /** + * 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. + * But we wish to send only one email by to that one person) + * **/ + foreach ($lector_arr as $lector) + { + unset($lector->lvleiter); + $lector->fullname = $lector->vorname. ' '. $lector->nachname; + } + + // Now make the lector array aka mail receivers unique + $lector_arr = array_unique($lector_arr, SORT_REGULAR); + + return $lector_arr; } // Return an object with Anrechnungdata @@ -631,12 +818,7 @@ class AnrechnungLib $this->ci->DmsVersionModel->addSelect('name'); $result = $this->ci->DmsVersionModel->loadWhere(array('dms_id' => $anrechnung->dms_id)); - if (isError($result)) - { - show_error(getError($result)); - } - - $anrechnung_data->dokumentname = $result->retval[0]->name; + $anrechnung_data->dokumentname = hasData($result) ? getData($result)[0]->name : ''; return $anrechnung_data; } diff --git a/application/libraries/AuthLDAPLib.php b/application/libraries/AuthLDAPLib.php new file mode 100644 index 000000000..711b7f5b9 --- /dev/null +++ b/application/libraries/AuthLDAPLib.php @@ -0,0 +1,309 @@ +_ci =& get_instance(); + + // Loads the LogLib + $this->_ci->load->library('LogLib'); + } + + //------------------------------------------------------------------------------------------------------------------ + // Public methods + + /** + * Checks if the given credentials are valid on one of the configured LDAP servers + */ + public function checkUsernamePassword($username, $password) + { + $authenticated = false; + + if (isEmptyString($username) || isEmptyString($password)) return error('Wrong username and password'); + + $ldapConfigArrays = $this->_loadConfig(); // NOTE: always the last to be called! + + // For each configured LDAP server + foreach ($ldapConfigArrays as $ldapConfigs) + { + // Check if the LDAP server is up and running + if (!$this->_servicePing($ldapConfigs)) + { + // If not available log debug and skip to the next configured server + $this->_ci->loglib->logError('This LDAP server is not available: '.$ldapConfigs[self::SERVER]); + continue; + } + + // Connection without username and passoword _or_ with the configured username and password + $noCredentialsConnectResult = $this->_connect($ldapConfigs); + if (isError($noCredentialsConnectResult)) // If an error occurred + { + // If the error is due to invalid credentials or + // the LDAP server does not support anonymous authentication + if (getCode($noCredentialsConnectResult) == AUTH_INVALID_CREDENTIALS) + { + $this->_ci->loglib->logDebug(getError($noCredentialsConnectResult).' on server '.$ldapConfigs[self::SERVER]); + } + else // otherwise if it was due to a fatal error + { + $this->_ci->loglib->logError(getError($noCredentialsConnectResult).' on server '.$ldapConfigs[self::SERVER]); + } + + continue; // anyway skip to the next configured server + } + + // If it is a success + $noCredentialsConnection = getData($noCredentialsConnectResult); + + // Check if the user exists on this LDAP server + $userDNResult = $this->_getUserDN( + $noCredentialsConnection, + $ldapConfigs[self::BASEDN], + $ldapConfigs[self::USF], + $username + ); + // If an error occurred or the user was not found or many users were found + if (isError($userDNResult)) + { + // Log debug and skip to the next configured server + // If the error is due to invalid credentials or + // the LDAP server does not support anonymous authentication + if (getCode($userDNResult) == self::LDAP_NO_USER_DN) + { + $this->_ci->loglib->logDebug(getError($userDNResult).' on server '.$ldapConfigs[self::SERVER]); + } + elseif (getCode($userDNResult) == self::LDAP_TOO_MANY_USER_DN) + { + $this->_ci->loglib->logDebug(getError($userDNResult).' on server '.$ldapConfigs[self::SERVER]); + } + else // otherwise if it was due to a fatal error + { + $this->_ci->loglib->logError(getError($userDNResult).' on server '.$ldapConfigs[self::SERVER]); + } + + $this->_close($noCredentialsConnection); // Close the current LDAP connection + continue; // anyway skip to the next configured server + } + + $this->_close($noCredentialsConnection); // Close the current LDAP connection + + // Connect to LDAP with the userDN and password + $credentialsConnectResult = $this->_connect($ldapConfigs, getData($userDNResult), $password); + if (isError($credentialsConnectResult)) // If an error occurred + { + // Log debug and skip to the next configured server + $this->_ci->loglib->logError(getError($credentialsConnectResult).' on server '.$ldapConfigs[self::SERVER]); + continue; + } + else // otherwise the user is authenticated + { + $this->_close(getData($credentialsConnectResult)); + $authenticated = true; + break; + } + } + + return $authenticated; + } + + //------------------------------------------------------------------------------------------------------------------ + // Private methods + + /** + * Loads the LDAP configuration file and returns the LDAP configuration array + */ + private function _loadConfig() + { + // Tries to require the LDAP configuration file... + // ...first in the ENVIRONMENT subdirectory... + if (file_exists(APPPATH.'config/'.ENVIRONMENT.'/'.self::LDAP_CONF_FILE.'.php')) + { + require_once(APPPATH.'config/'.ENVIRONMENT.'/'.self::LDAP_CONF_FILE.'.php'); + } + else // ...then in the default config directory + { + require_once(APPPATH.'config/'.self::LDAP_CONF_FILE.'.php'); + } + + return $ldap[$ldap_active_group]; + } + + /** + * Establish a connection to LDAP with the given LDAP configuration array and eventually with + * with a given username and password + */ + private function _connect($ldapConfigs, $username = null, $password = null) + { + // Checks if the LDAP configuraion is empty + if (isEmptyArray($ldapConfigs)) return error('Wrong parameters given'); + + // LDAP connection + $ldapConnection = @ldap_connect($ldapConfigs[self::SERVER].':'.$ldapConfigs[self::PORT]); + if ($ldapConnection) // if success + { + // Sets the LDAP protocol version + if (!@ldap_set_option($ldapConnection, LDAP_OPT_PROTOCOL_VERSION, self::LDAP_PROTOCOL_VERSION)) + { + return error('Was not possible to set the protocol version using LDAP sever '.$ldapConfigs[self::SERVER]); + } + + // Enable/disable the LDAP referrals + if (!@ldap_set_option($ldapConnection, LDAP_OPT_REFERRALS, self::LDAP_REFERRALS)) + { + return error('Was not possible to enable referrals using LDAP sever '.$ldapConfigs[self::SERVER]); + } + + // Starts TLS if required + if ($ldapConfigs[self::STARTTLS] === true && !@ldap_start_tls($ldapConnection)) + { + return error('Was not possible to enable TLS using LDAP sever '.$ldapConfigs[self::SERVER]); + } + + // If username or password are not provided... + if (isEmptyString($username) || isEmptyString($password)) + { + // ...use those provided by the configuration + $username = $ldapConfigs[self::USERNAME]; + $password = $ldapConfigs[self::PASSWORD]; + } + + // Binds to LDAP directory + if (!@ldap_bind($ldapConnection, $username, $password)) + { + // Wrong username and/or password + if (ldap_errno($ldapConnection) == self::LDAP_INVALID_CREDENTIALS) + { + return error('Invalid credentials', AUTH_INVALID_CREDENTIALS); + } + else // Error + { + return error('Was not possible to bind to the LDAP sever '.$ldapConfigs[self::SERVER]); + } + } + + return success($ldapConnection); // connected!!! + } + else // Connection error + { + return error('An error occurred while connecting to the LDAP server '.$ldapConfigs[self::SERVER]); + } + } + + /** + * Check if the network service is up and running + */ + private function _servicePing($ldapConfigs) + { + // Set the default timeout + $timeout = self::LDAP_DEFAULT_TIMEOUT; + + // If a timeout was configured for this server then use it + if (isset($ldapConfigs[self::TIMEOUT])) $timeout = $ldapConfigs[self::TIMEOUT]; + + // The LDAP server name or URL + $host = $ldapConfigs[self::SERVER]; + + // If it is a URL + if (strpos($ldapConfigs[self::SERVER], 'ldap://') !== false + || strpos($ldapConfigs[self::SERVER], 'ldaps://') !== false) + { + // Get the host from the URL + $host = parse_url($ldapConfigs[self::SERVER], PHP_URL_HOST); + } + + // Check if the given host answers on the given port using the given timeout + if ($op = @fsockopen($host, $ldapConfigs[self::PORT], $errno, $errstr, $timeout)) + { + // If it works then close the socket connection + fclose($op); + return true; + } + + return false; // otherwise this server is not up or LDAP service is not running on the given port + } + + /** + * Close the current connection to LDAP if present + */ + private function _close($connection) + { + @ldap_unbind($connection); + } + + /** + * Get the user DN from LDAP using the given username + */ + private function _getUserDN($connection, $baseDN, $usf, $username) + { + $userDN = error('AuthLDAPLib->_getUserDN() failed'); + + // Tries to search for a user DN using the given username + $searchResultIdentifier = @ldap_search( + $connection, + $baseDN, + $usf.'='.$username + ); + if (!$searchResultIdentifier) // Error + { + $userDN = error(ldap_error($connection)); + } + + // Counts the number of found entries + $countEntries = @ldap_count_entries($connection, $searchResultIdentifier); + if ($countEntries === false) // Error + { + $userDN = error(ldap_error($connection)); + } + elseif ($countEntries == 0) + { + $userDN = error('No user DN were found with username: '.$username, self::LDAP_NO_USER_DN); + } + elseif ($countEntries > 1) + { + $userDN = error('Too many users DN were found with username: '.$username, self::LDAP_TOO_MANY_USER_DN); + } + else // One entry was found + { + $entries = @ldap_get_entries($connection, $searchResultIdentifier); + if (!$entries) // Error + { + $userDN = error(ldap_error($connection)); + } + else + { + $userDN = success($entries[0][self::DN]); + } + } + + return $userDN; + } +} + diff --git a/application/libraries/AuthLib.php b/application/libraries/AuthLib.php index 67a527655..ae30d41fa 100644 --- a/application/libraries/AuthLib.php +++ b/application/libraries/AuthLib.php @@ -385,7 +385,7 @@ class AuthLib // Invalid credentials // NOTE: this is a corner case because of the HTTP basic authentication if (getCode($hta) == AUTH_NOT_AUTHENTICATED || getCode($hta) == AUTH_INVALID_CREDENTIALS - || getCode($hta) == LDAP_NO_USER_DN || getCode($hta) == LDAP_TOO_MANY_USER_DN) + || getCode($hta) == AuthLDAPLib::LDAP_NO_USER_DN || getCode($hta) == AuthLDAPLib::LDAP_TOO_MANY_USER_DN) { $this->_showInvalidAuthentication(); // this also stop the execution } @@ -404,37 +404,12 @@ class AuthLib { $ldap = error('Not authenticated', AUTH_NOT_AUTHENTICATED); // by default is NOT authenticated - $this->_ci->load->library('LDAPLib'); // Loads the LDAP library + $this->_ci->load->library('AuthLDAPLib'); // Loads the LDAP library - $ldapConnection = $this->_ci->ldaplib->anonymousConnect(); // connect anonymously! - if (isSuccess($ldapConnection)) // connected!! + // If it is possible to authenticate on LDAP with the given username and password + if ($this->_ci->authldaplib->checkUsernamePassword($username, $password) === true) { - // Get the user DN from LDAP - $userDN = $this->_ci->ldaplib->getUserDN($username); - if (isSuccess($userDN)) // got it! - { - $this->_ci->ldaplib->close(); // close the previous LDAP anonymous connection - - // Connects to LDAP using the last working configuration + the retrieved user DN + the provided password - $ldapConnection = $this->_ci->ldaplib->connectUsernamePassword(getData($userDN), $password); - if (isSuccess($ldapConnection)) // connected! - { - $this->_ci->ldaplib->close(); // close the previous connection - $ldap = success('Authenticated', AUTH_SUCCESS); // authenticated! - } - else // blocking error - { - $ldap = $ldapConnection; - } - } - else // blocking error - { - $ldap = $userDN; - } - } - else // blocking error - { - $ldap = $ldapConnection; + $ldap = success('Authenticated', AUTH_SUCCESS); // authenticated! } return $ldap; diff --git a/application/libraries/DmsLib.php b/application/libraries/DmsLib.php index da0dd84b6..eae1a9ac4 100644 --- a/application/libraries/DmsLib.php +++ b/application/libraries/DmsLib.php @@ -2,11 +2,10 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); -class DmsLib +class DmsLib extends FHC_Controller { const FILE_CONTENT_PROPERTY = 'file_content'; - - const FILE_INPUT_NAME = 'uploadfile'; // name of the HTML input tag containing the uploaded file + private $UPLOAD_PATH = DMS_PATH; // temporary directory to store the upload file /** @@ -21,6 +20,34 @@ class DmsLib $this->ci->load->model('content/DmsVersion_model', 'DmsVersionModel'); $this->ci->load->model('content/DmsFS_model', 'DmsFSModel'); } + + /** + * Load a DMS Document. + * If no version is particularly given, the latest version is loaded. + * + * @param $dms_id + * @param integer $version + * @return array + */ + public function load($dms_id, $version = null) + { + 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); + + if (!is_numeric($version)) + { + return $this->ci->DmsModel->load($dms_id); + } + else + { + return $this->ci->DmsModel->loadWhere(array('dms_id' => $dms_id, 'version' => $version)); + } + } + return error('The parameter DMS ID must be a number'); + } /** * Read a DMS Document from the Filesystem @@ -95,19 +122,20 @@ class DmsLib return $result; } - + /** * Uploads a document and saves it to DMS * @param $dms DMS assoc array - * @param array $allowed_types Default: all. Param example: array(jpg, pdf) + * @param $field_name Name of the HTML uploadfile input name attribute + * @param array $allowed_types Default: all. Param example: array(jpg, pdf) * @return array */ - public function upload($dms, $allowed_types = array('*')) + public function upload($dms, $field_name, $allowed_types = array('*')) { // Init upload configs $this->_loadUploadLibrary($allowed_types); - if (!$this->ci->upload->do_upload(DmsLib::FILE_INPUT_NAME)) + if (!$this->ci->upload->do_upload($field_name)) { return error($this->ci->upload->display_errors()); } @@ -132,46 +160,80 @@ class DmsLib // return result of uploaded data return success($upload_data); // data about the uploaded file } - + /** - * Download a document + * Download a document. + * * @param $dms_id + * @param string $filename $filename If String is given, it will be used as filename on download + * @param string $disposition [inline | attachment] + * Inline opens doc in new tab. Attachment displays download dialog box. */ - public function download($dms_id) + public function download($dms_id, $filename = null, $disposition = 'inline') { - if (!is_numeric($dms_id)) - { - show_error('Wrong parameter'); - } - - $this->ci->DmsVersionModel->addSelect('filename'); - $result = $this->ci->DmsVersionModel->loadWhere(array('dms_id' => $dms_id)); - + $result = $this->getFileInfo($dms_id); + if (isError($result)) { - show_error(getError($result)); + return error(getError($result)); } - $filename = $result->retval[0]->filename; - $file = DMS_PATH. $filename; - - if (file_exists($file)) + $fileObj = getData($result); + + // Change filename, if filename is provided + if (is_string($filename)) { - $finfo = new finfo(FILEINFO_MIME); - - header('Content-Description: File Transfer'); - header('Content-Type: '.$finfo->file($file)); - header('Expires: 0'); - header('Cache-Control: must-revalidate'); - header('Pragma: public'); - header('Content-Length: ' . filesize($file)); - readfile($file); - exit; + $fileObj->name = $filename; + } + + // Add file disposition + if ($disposition == 'attachment') + { + $fileObj->disposition = 'attachment'; } else { - show_error('File does not exist'); + $fileObj->disposition = 'inline'; } + + // Output file + if(!$this->outputFile($fileObj)) + { + return error('Error on file output'); + } + } + + /** + * Get file information. + * + * @param $dms_id + * @param integer $version + * @return array with File Object. + */ + public function getFileInfo($dms_id, $version = null) + { + if (!is_numeric($dms_id)) + { + return error('Wrong parameter'); + } + + // Load file + $result = $this->load($dms_id, $version); + + if (isError($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 users filename + $fileObj->mimetype = DMS_PATH. getData($result)[0]->mimetype; + + return success($fileObj); + } /** diff --git a/application/libraries/FilterWidgetLib.php b/application/libraries/FilterWidgetLib.php index 0a4526680..cdf0cac3c 100644 --- a/application/libraries/FilterWidgetLib.php +++ b/application/libraries/FilterWidgetLib.php @@ -266,6 +266,7 @@ class FilterWidgetLib $whereParameters = array( 'app' => $app, 'dataset_name' => $datasetName, + 'person_id' => null, 'default_filter' => true ); @@ -738,8 +739,10 @@ class FilterWidgetLib $this->_ci->load->model('system/Filters_model', 'FiltersModel'); // Loads all the filters related to this page (same dataset_name and same app name) - $filters = $this->_ci->FiltersModel->getFiltersByAppDatasetName( - $session[self::APP], $session[self::DATASET_NAME] + $filters = $this->_ci->FiltersModel->getFiltersByAppDatasetNamePersonId( + $session[self::APP], + $session[self::DATASET_NAME], + getAuthPersonId() ); // If filters were loaded @@ -813,9 +816,6 @@ class FilterWidgetLib } } - //------------------------------------------------------------------------------------------------------------------ - // Private methods - /** * Return an unique string that identify this filter widget * NOTE: The default value is the URI where the FilterWidget is called @@ -857,6 +857,9 @@ class FilterWidgetLib $this->_filterUniqueId = $filterUniqueId; } + //------------------------------------------------------------------------------------------------------------------ + // Private methods + /** * Generates a condition for a SQL where clause using the given applied filter definition. * By default an empty string is returned. @@ -972,3 +975,4 @@ class FilterWidgetLib return $pos; } } + diff --git a/application/libraries/JobsQueueLib.php b/application/libraries/JobsQueueLib.php index a65bb0d29..d264f7119 100644 --- a/application/libraries/JobsQueueLib.php +++ b/application/libraries/JobsQueueLib.php @@ -58,13 +58,16 @@ class JobsQueueLib /** * To get the oldest added jobs using the given job type + * It is eventually specify the maximum amount of jobs to be retrieved */ - public function getOldestJob($type) + public function getOldestJobs($type, $maxAmount = null) { $this->_ci->JobsQueueModel->resetQuery(); $this->_ci->JobsQueueModel->addOrder('creationtime', 'ASC'); - $this->_ci->JobsQueueModel->addLimit('1'); + + // If the maximum amount of jobs to retrieve have been specified + if (is_numeric($maxAmount)) $this->_ci->JobsQueueModel->addLimit($maxAmount); return $this->_ci->JobsQueueModel->loadWhere(array('status' => self::STATUS_NEW, 'type' => $type)); } @@ -221,6 +224,23 @@ class JobsQueueLib return success($results); // otherwise return results in a success object } + //------------------------------------------------------------------------------------------------------------------ + // Public static methods + + /** + * Utility method to generate a job with the given parameters and return it inside an array + * ready to be used by addNewJobsToQueue and updateJobsQueue + */ + public static function generateJobs($status, $input) + { + $job = new stdClass(); + + $job->{self::PROPERTY_STATUS} = $status; + $job->{self::PROPERTY_INPUT} = $input; + + return array($job); + } + //------------------------------------------------------------------------------------------------------------------ // Private methods diff --git a/application/libraries/LDAPLib.php b/application/libraries/LDAPLib.php deleted file mode 100644 index 195dddc88..000000000 --- a/application/libraries/LDAPLib.php +++ /dev/null @@ -1,228 +0,0 @@ -_connection = null; - $this->_workingConfigArray = null; - $this->_ldapConfigArray = null; - - $this->_loadConfig(); // NOTE: always the last to be called! - } - - //------------------------------------------------------------------------------------------------------------------ - // Public methods - - /** - * Tries to connect to LDAP using configurations in property _ldapConfigArray - * The first that works is used and stored in property _workingConfigArray - * The LDAP connection link is stored in _connection - */ - public function anonymousConnect() - { - $connect = error('Did not found a working LDAP configuration'); - - // Loops through LDAP configurations - foreach ($this->_ldapConfigArray as $ldapConfigs) - { - // Tries to establish a connection - $connect = $this->_connect($ldapConfigs); - if (isSuccess($connect)) - { - break; // found a working LDAP configuration and successfully connected! - } - else - { - $this->close(); // close the eventually established connection - } - } - - return $connect; - } - - /** - * Tries to connect using the given username and password and the last working configuration with anonymous connection - */ - public function connectUsernamePassword($username, $password) - { - if (isEmptyString($username) || isEmptyString($password)) return error('Wrong username and password'); - - return $this->_connect($this->_workingConfigArray, $username, $password); - } - - /** - * Close the current connection to LDAP if present - */ - public function close() - { - if ($this->_connection != null) @ldap_unbind($this->_connection); - } - - /** - * Get the user DN from LDAP using the given username - */ - public function getUserDN($username) - { - $userDN = error('No user DN were found', LDAP_NO_USER_DN); - - // Tries to search for a user DN using the given username - $searchResultIdentifier = @ldap_search( - $this->_connection, - $this->_workingConfigArray[self::BASEDN], - $this->_workingConfigArray[self::USF].'='.$username - ); - if (!$searchResultIdentifier) // Error - { - $userDN = error(ldap_error($this->_connection)); - } - - // Counts the number of found entries - $countEntries = @ldap_count_entries($this->_connection, $searchResultIdentifier); - if ($countEntries === false) // Error - { - $userDN = error(ldap_error($this->_connection)); - } - elseif ($countEntries == 0) - { - $userDN = error('No user DN were found', LDAP_NO_USER_DN); - } - elseif ($countEntries > 1) - { - $userDN = error('Too many users DN were found', LDAP_TOO_MANY_USER_DN); - } - else // One entry was found - { - $entries = @ldap_get_entries($this->_connection, $searchResultIdentifier); - if (!$entries) // Error - { - $userDN = error(ldap_error($this->_connection)); - } - else - { - $userDN = success($entries[0][self::DN]); - } - } - - return $userDN; - } - - //------------------------------------------------------------------------------------------------------------------ - // Private methods - - /** - * Loads the LDAP configuration file and store the LDAP configuration array into _ldapConfigArray property - */ - private function _loadConfig() - { - // Tries to require the LDAP configuration file... - // ...first in the ENVIRONMENT subdirectory... - if (file_exists(APPPATH.'config/'.ENVIRONMENT.'/'.self::LDAP_CONF_FILE.'.php')) - { - require_once(APPPATH.'config/'.ENVIRONMENT.'/'.self::LDAP_CONF_FILE.'.php'); - } - else // ...then in the default config directory - { - require_once(APPPATH.'config/'.self::LDAP_CONF_FILE.'.php'); - } - - $this->_ldapConfigArray = $ldap[$ldap_active_group]; // store the active LDAP configuration array - } - - /** - * Establish a connection to LDAP with the given LDAP configuration array and eventually with - * with a given username and password - */ - private function _connect($ldapConfigs, $username = null, $password = null) - { - // Checks if the LDAP configuraion is empty - if (isEmptyArray($ldapConfigs)) - { - return error('Wrong parameters given'); - } - - // LDAP connection - $ldapConnection = @ldap_connect($ldapConfigs[self::SERVER].':'.$ldapConfigs[self::PORT]); - if ($ldapConnection) // if success - { - // Sets the LDAP protocol version - if (!@ldap_set_option($ldapConnection, LDAP_OPT_PROTOCOL_VERSION, self::LDAP_PROTOCOL_VERSION)) - { - return error(ldap_error($ldapConnection)); - } - - // Enable/disable the LDAP referrals - if (!@ldap_set_option($ldapConnection, LDAP_OPT_REFERRALS, self::LDAP_REFERRALS)) - { - return error(ldap_error($ldapConnection)); - } - - // Starts TLS if required - if ($ldapConfigs[self::STARTTLS] === true) - { - if (!@ldap_start_tls($ldapConnection)) - { - return error(ldap_error($ldapConnection)); - } - } - - // If username and password are not provided... - if ($username == null || $password == null) - { - // ...uses those provided by the configuration - $username = $ldapConfigs[self::USERNAME]; - $password = $ldapConfigs[self::PASSWORD]; - } - - // Binds to LDAP directory - if (!@ldap_bind($ldapConnection, $username, $password)) - { - // Wrong username and/or password - if (ldap_errno($ldapConnection) == self::LDAP_INVALID_CREDENTIALS) - { - return error('Invalid credentials', AUTH_INVALID_CREDENTIALS); - } - else // Error - { - return error(ldap_error($ldapConnection)); - } - } - - $this->_connection = $ldapConnection; // save the connection into _connection property - $this->_workingConfigArray = $ldapConfigs; // save the working LDAP configuration into _workingConfigArray property - - return success('Connected'); // connected!!! - } - else // Connection error - { - return error( - 'An error occurred while connecting to the LDAP server: '.$ldapConfigs[self::SERVER].':'.$ldapConfigs[self::PORT] - ); - } - } -} diff --git a/application/libraries/VariableLib.php b/application/libraries/VariableLib.php index 2f038531b..a503eb999 100644 --- a/application/libraries/VariableLib.php +++ b/application/libraries/VariableLib.php @@ -100,6 +100,18 @@ class VariableLib return $result; } + public function changeStudengangsTypVar($uid, $name, $change) + { + $result = error('error when setting variable!'); + + if (isEmptyString($uid) || isEmptyString($name) || isEmptyString($change)) + return $result; + + $result = $this->_ci->VariableModel->setVariable($uid, $name, $change); + $this->_setVariable($uid, $name); + return $result; + } + /** * "Refreshes" variable value with given name by retrieving current value from db and saving it. * @param $uid diff --git a/application/models/codex/Bisioaufenthaltfoerderung_model.php b/application/models/codex/Bisioaufenthaltfoerderung_model.php new file mode 100644 index 000000000..7a817d67c --- /dev/null +++ b/application/models/codex/Bisioaufenthaltfoerderung_model.php @@ -0,0 +1,15 @@ +dbTable = 'bis.tbl_bisio_aufenthaltfoerderung'; + $this->pk = array('bisio_id', 'aufenthaltfoerderung_code'); + $this->hasSequence = false; + } +} diff --git a/application/models/crm/Prestudent_model.php b/application/models/crm/Prestudent_model.php index 52ba4d9f3..2553fd5fa 100644 --- a/application/models/crm/Prestudent_model.php +++ b/application/models/crm/Prestudent_model.php @@ -581,6 +581,35 @@ class Prestudent_model extends DB_Model return $this->execQuery($query, array($person_id)); } + + /** + * Get latest ZGV Bezeichnung of Prestudent. + * + * @param $prestudent_id + */ + public function getLatestZGVBezeichnung($prestudent_id) + { + if (!is_numeric($prestudent_id)) + { + show_error('Prestudent_id is not numeric.'); + } + + $language_index = getUserLanguage() == 'German' ? 0 : 1; + + $this->addSelect(' + COALESCE( + array_to_json(zgvmaster.bezeichnung::varchar[])->>' . $language_index . ', + array_to_json(zgv.bezeichnung::varchar[])->>' . $language_index . ' + ) AS bezeichnung' + ); + + $this->addJoin('bis.tbl_zgv zgv', 'zgv_code', 'LEFT'); + $this->addJoin('bis.tbl_zgvmaster zgvmaster', 'zgvmas_code', 'LEFT'); + + return $this->loadWhere(array( + 'prestudent_id' => $prestudent_id + )); + } public function getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester) { diff --git a/application/models/crm/Statusgrund_model.php b/application/models/crm/Statusgrund_model.php index 7ab17a45b..d488e12d1 100644 --- a/application/models/crm/Statusgrund_model.php +++ b/application/models/crm/Statusgrund_model.php @@ -12,7 +12,7 @@ class Statusgrund_model extends DB_Model $this->pk = "statusgrund_id"; } - public function getStatus($status_kurzbz = null, $aktiv = null) + public function getStatus($status_kurzbz = null, $aktiv = null, $statusgrund_kurzbz = null) { $this->addOrder('bezeichnung_mehrsprachig'); $where = array(); @@ -20,6 +20,8 @@ class Statusgrund_model extends DB_Model $where['status_kurzbz'] = $status_kurzbz; if (!is_null($aktiv)) $where['aktiv'] = $aktiv; + if (!is_null($statusgrund_kurzbz)) + $where['statusgrund_kurzbz'] = $statusgrund_kurzbz; $status = $this->loadWhere($where); diff --git a/application/models/crm/ZGVPruefungStatus_model.php b/application/models/crm/ZGVPruefungStatus_model.php new file mode 100644 index 000000000..5c51e45d8 --- /dev/null +++ b/application/models/crm/ZGVPruefungStatus_model.php @@ -0,0 +1,50 @@ +dbTable = 'public.tbl_zgvpruefungstatus_status'; + $this->pk = 'zgv_pruefung_status_id'; + $this->hasSequence = true; + } + + public function getZgvStatus($zgvpruefung_id) + { + $this->addOrder('datum', 'DESC'); + $this->addLimit(1); + + return $this->loadWhere(array('zgvpruefung_id' => $zgvpruefung_id)); + } + + public function getZgvStatusByPrestudent($prestudent_id) + { + $this->addJoin('public.tbl_zgvpruefung', 'zgvpruefung_id'); + $this->addOrder($this->dbTable . '.datum', 'DESC'); + $this->addLimit(1); + return $this->loadWhere(array('prestudent_id' => $prestudent_id)); + } + + public function getOpenZgvByPerson($person_id, $status) + { + $query = 'SELECT status.zgvpruefung_id, status.datum, status.status + FROM public.tbl_zgvpruefungstatus_status status + INNER JOIN + ( + SELECT zgvpruefung_id, max(datum) as MaxDate + FROM public.tbl_zgvpruefungstatus_status + GROUP BY zgvpruefung_id + ) sub ON status.zgvpruefung_id = sub.zgvpruefung_id AND status.datum = sub.MaxDate + JOIN public.tbl_zgvpruefung ON status.zgvpruefung_id = public.tbl_zgvpruefung.zgvpruefung_id + JOIN public.tbl_prestudent USING (prestudent_id) + WHERE person_id = ? + AND status.status IN ?'; + + return $this->execQuery($query, array($person_id, $status)); + } +} \ No newline at end of file diff --git a/application/models/crm/ZGVPruefung_model.php b/application/models/crm/ZGVPruefung_model.php new file mode 100644 index 000000000..f8fd0a9ad --- /dev/null +++ b/application/models/crm/ZGVPruefung_model.php @@ -0,0 +1,17 @@ +dbTable = 'public.tbl_zgvpruefung'; + $this->pk = 'zgvpruefung_id'; + $this->hasSequence = true; + } + +} \ No newline at end of file diff --git a/application/models/education/Anrechnung_model.php b/application/models/education/Anrechnung_model.php index b4c7de835..ebecf4118 100644 --- a/application/models/education/Anrechnung_model.php +++ b/application/models/education/Anrechnung_model.php @@ -1,7 +1,11 @@ pk = 'anrechnung_id'; } + /** + * Creates new Anrechnungsantrag. + * Saves new Anrechnung and sets Anrechnungstatus for the new Anrechnung. + * + * @param $prestudent_id + * @param $studiensemester_kurzbz + * @param $lehrveranstaltung_id + * @param $begruendung_id + * @param $dms_id DMS ID of uploaded Nachweisdokument + * @param null $anmerkung_student = Herkunft der Kenntnisse + * @return array + */ + public function createAnrechnungsantrag( + $prestudent_id, $studiensemester_kurzbz, $lehrveranstaltung_id, + $begruendung_id, $dms_id, $anmerkung_student = null + ) + { + // Start DB transaction + $this->db->trans_start(false); + + // Save Anrechnung + $result = $this->AnrechnungModel->insert(array( + 'prestudent_id' => $prestudent_id, + 'lehrveranstaltung_id' => $lehrveranstaltung_id, + 'begruendung_id' => $begruendung_id, + 'dms_id' => $dms_id, + 'studiensemester_kurzbz' => $studiensemester_kurzbz, + 'anmerkung_student' => $anmerkung_student, + 'insertvon' => $this->_uid + )); + + // Store just inserted Anrechnung ID + $lastInsert_anrechnung_id = $result->retval; + + // Save Anrechnungstatus + $this->AnrechnungModel->saveAnrechnungstatus($lastInsert_anrechnung_id, self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL); + + // Transaction complete + $this->db->trans_complete(); + + if ($this->db->trans_status() === false) + { + $this->db->trans_rollback(); + return error('Failed inserting Anrechnung', EXIT_ERROR); + } + + return success($lastInsert_anrechnung_id); + } + /** * Save Anrechnungstatus. * @param $anrechnung_id @@ -83,4 +136,68 @@ class Anrechnung_model extends DB_Model return $this->execQuery($qry, array($anrechnung_id)); } + + /** + * Delete Anrechnungstatus. + * + * @param $anrechnungstatus_id + */ + public function deleteAnrechnungstatus($anrechnungstatus_id){ + + $qry = ' + DELETE FROM lehre.tbl_anrechnung_anrechnungstatus + WHERE anrechnungstatus_id = ? + '; + + return $this->execQuery($qry, array($anrechnungstatus_id)); + } + + /** + * Delete last status approved / rejected. + * If last status is 'approved', Genehmigung is resetted. + * + * @param $anrechnung_id + * @return array + */ + public function withdrawApprovement($anrechnung_id) + { + // Get last Anrechnungstatus + if (!$result = getData($this->AnrechnungModel->getLastAnrechnungstatus($anrechnung_id))[0]) + { + return error('Failed loading Anrechnung'); + } + + $last_status = $result->status_kurzbz; + $anrechnungstatus_id = $result->anrechnungstatus_id; + + // Exit, if last status is not approved / rejected + if ($last_status != self::ANRECHNUNGSTATUS_APPROVED && $last_status != self::ANRECHNUNGSTATUS_REJECTED) + { + return error('Nothing to withdraw. Application is still in progress'); + } + + // Start DB transaction + $this->db->trans_start(false); + + // If Anrechnung was approved + if ($last_status == self::ANRECHNUNGSTATUS_APPROVED) + { + // Reset Genehmigung + $this->AnrechnungModel->update($anrechnung_id, array('genehmigt_von' => NULL)); + } + + // Delete last status approved / rejected + $this->AnrechnungModel->deleteAnrechnungstatus($anrechnungstatus_id); + + // Transaction complete + $this->db->trans_complete(); + + if ($this->db->trans_status() === false) + { + $this->db->trans_rollback(); + return error('Failed withdrawing Genehmigung', EXIT_ERROR); + } + return success(); + + } } diff --git a/application/models/education/Anrechnungbegruendung_model.php b/application/models/education/Anrechnungbegruendung_model.php new file mode 100644 index 000000000..81f1ef614 --- /dev/null +++ b/application/models/education/Anrechnungbegruendung_model.php @@ -0,0 +1,15 @@ +dbTable = 'lehre.tbl_anrechnung_begruendung'; + $this->pk = 'begruendung_id'; + } +} diff --git a/application/models/organisation/Geschaeftsjahr_model.php b/application/models/organisation/Geschaeftsjahr_model.php index 9c856f40e..4f0d03b73 100644 --- a/application/models/organisation/Geschaeftsjahr_model.php +++ b/application/models/organisation/Geschaeftsjahr_model.php @@ -20,8 +20,8 @@ class Geschaeftsjahr_model extends DB_Model { $query = 'SELECT * FROM public.tbl_geschaeftsjahr - WHERE start <= now() - AND ende >= now() + WHERE start <= CURRENT_DATE + AND ende >= CURRENT_DATE ORDER BY start DESC LIMIT 1'; diff --git a/application/models/organisation/Studiengang_model.php b/application/models/organisation/Studiengang_model.php index 41bdabd11..6358ca81e 100644 --- a/application/models/organisation/Studiengang_model.php +++ b/application/models/organisation/Studiengang_model.php @@ -475,7 +475,7 @@ class Studiengang_model extends DB_Model funktion_kurzbz = \'Leitung\' AND ( datum_von <= NOW() OR datum_von IS NULL ) AND ( datum_bis >= NOW() OR datum_bis IS NULL ) - AND studiengang_kz = ' . $this->db->escape($studiengang_kz, FHC_INTEGER) + AND studiengang_kz = ' . $this->db->escape($studiengang_kz) ; } diff --git a/application/models/person/Notiz_model.php b/application/models/person/Notiz_model.php index 2e09875d8..fd08cc384 100644 --- a/application/models/person/Notiz_model.php +++ b/application/models/person/Notiz_model.php @@ -154,9 +154,11 @@ class Notiz_model extends DB_Model { // Join with the table public.tbl_notizzuordnung using notiz_id $this->addJoin('public.tbl_notizzuordnung', 'notiz_id'); - $this->addOrder('insertamum', 'DESC'); + $this->addJoin('public.tbl_prestudent', 'prestudent_id', 'LEFT'); + $this->addJoin('public.tbl_studiengang', 'studiengang_kz', 'LEFT'); + $this->addOrder('public.tbl_notiz.insertamum', 'DESC'); - return $this->loadWhere(array('person_id' => $person_id, 'titel LIKE' => $titel)); + return $this->loadWhere(array('public.tbl_notizzuordnung.person_id' => $person_id, 'titel LIKE' => $titel)); } /** diff --git a/application/models/system/Filters_model.php b/application/models/system/Filters_model.php index 20394b36d..581be65e1 100644 --- a/application/models/system/Filters_model.php +++ b/application/models/system/Filters_model.php @@ -57,19 +57,34 @@ class Filters_model extends DB_Model /** * Loads all filters by their app and dataset_name */ - public function getFiltersByAppDatasetName($app, $dataset_name) + public function getFiltersByAppDatasetNamePersonId($app, $dataset_name, $person_id) { - $this->resetQuery(); // reset any previous built query + $query = ' + ( + -- Global filters + SELECT gs.filter_id, + gs.person_id, + gs.description + FROM system.tbl_filters gs + WHERE gs.app = ? + AND gs.dataset_name = ? + AND gs.person_id IS NULL + ORDER BY gs.person_id DESC, gs.sort ASC + ) + UNION ALL + ( + -- Personal filters + SELECT ps.filter_id, + ps.person_id, + ps.description + FROM system.tbl_filters ps + WHERE ps.app = ? + AND ps.dataset_name = ? + AND ps.person_id = ? + ORDER BY ps.person_id DESC, ps.sort ASC + )'; - $this->addSelect('filter_id, person_id, description'); - $this->addOrder('person_id', 'DESC'); // sort descending on column person_id - $this->addOrder('sort', 'ASC'); // sort on column sort - - $filterParametersArray = array( - 'app' => $app, - 'dataset_name' => $dataset_name - ); - - return $this->loadWhere($filterParametersArray); + return $this->execQuery($query, array($app, $dataset_name, $app, $dataset_name, $person_id)); } } + diff --git a/application/models/system/Variablenname_model.php b/application/models/system/Variablenname_model.php index 7b2a2cf88..869a03275 100644 --- a/application/models/system/Variablenname_model.php +++ b/application/models/system/Variablenname_model.php @@ -11,7 +11,8 @@ class Variablenname_model extends DB_Model ORDER BY studienjahr_kurzbz, start ) sem WHERE start > now() - LIMIT 1;' + LIMIT 1;', + 'infocenter_studiensgangtyp' => 'SELECT infocenter_studiensgangtyp FROM public.tbl_variablenname LIMIT 1' ); /** diff --git a/application/views/crm/statusGrundList.php b/application/views/crm/statusGrundList.php index e128856d3..ab8f096bb 100644 --- a/application/views/crm/statusGrundList.php +++ b/application/views/crm/statusGrundList.php @@ -15,6 +15,7 @@ Aktiv Bezeichnung mehrsprachig Beschreibung + Statusgrund @@ -25,6 +26,7 @@ aktiv); ?> bezeichnung_mehrsprachig); ?> beschreibung); ?> + statusgrund_kurzbz); ?> Edit @@ -33,4 +35,4 @@ - \ No newline at end of file + diff --git a/application/views/crm/statusgrundEdit.php b/application/views/crm/statusgrundEdit.php index 9fa91b6d5..fc001d92a 100644 --- a/application/views/crm/statusgrundEdit.php +++ b/application/views/crm/statusgrundEdit.php @@ -81,6 +81,21 @@   + + + StatusGrund: + + + + +
+ + + + +   + + diff --git a/application/views/crm/statusgrundNew.php b/application/views/crm/statusgrundNew.php index ffcd18429..1c3a5f9e0 100644 --- a/application/views/crm/statusgrundNew.php +++ b/application/views/crm/statusgrundNew.php @@ -51,6 +51,16 @@   + + + StatusGrund: + + + + +
+ + diff --git a/application/views/lehre/anrechnung/approveAnrechnungDetail.php b/application/views/lehre/anrechnung/approveAnrechnungDetail.php index 75059ec69..4603708f4 100644 --- a/application/views/lehre/anrechnung/approveAnrechnungDetail.php +++ b/application/views/lehre/anrechnung/approveAnrechnungDetail.php @@ -12,7 +12,8 @@ $this->load->view( 'phrases' => array( 'global' => array( 'anerkennungNachgewiesenerKenntnisse', - 'antragStellen' + 'antragStellen', + 'begruendung' ), 'ui' => array( 'hilfeZuDieserSeite', @@ -36,7 +37,14 @@ $this->load->view( 'lehrveranstaltung', 'ects', 'lektor', - ) + ), + 'anrechnung' => array( + 'genehmigungAblehnungWirklichZuruecknehmen', + 'empfehlungsanforderungWirklichZuruecknehmen', + 'erfolgreichZurueckgenommen', + 'empfehlungPositivConfirmed', + 'empfehlungNegativConfirmed' + ) ), 'customCSSs' => array( 'public/css/Tabulator.css' @@ -53,7 +61,7 @@ $this->load->view(
- +
- + +
-
-
- - -
-
-
-
- p->t('anrechnung', 'antrag'); ?>  - - - - p->t('anrechnung', 'antragdatum'); ?>: anrechnung_id) ? $anrechnungData->insertamum : '-' ?> -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
p->t('person', 'student')); ?>vorname . ' ' . $antragData->nachname; ?>
p->t('person', 'personenkennzeichen'); ?>matrikelnr ?>
p->t('lehre', 'studiensemester')); ?>studiensemester_kurzbz ?>
p->t('lehre', 'studiengang')); ?>stg_bezeichnung ?>
p->t('lehre', 'lehrveranstaltung'); ?>lv_bezeichnung ?>
p->t('lehre', 'ects'); ?>ects ?>
p->t('lehre', 'lektorInnen'); ?> - lektoren) - 1 ?> - lektoren as $key => $lektor): ?> - vorname . ' ' . $lektor->nachname; - echo $key === $len ? '' : ', ' ?> - -
p->t('anrechnung', 'herkunftDerKenntnisse'); ?>anmerkung ?>
p->t('anrechnung', 'nachweisdokumente'); ?> - dokumentname) ?> -
-
-
-
- -
-
-
- -
- -
- p->t('anrechnung', 'empfehlung'); ?>  - - -p->t('anrechnung', 'empfehlungInfoTooltipText'); ?> - - -
- p->t('anrechnung', 'empfehlungVon'); ?>: - empfehlung_von ?> -  |  - p->t('anrechnung', 'empfehlungdatum'); ?>: - empfehlung_am ?> -
-
- -
- -
- p->t('anrechnung', 'keineEmpfehlungAngefordert'); ?> -
- -
- p->t('anrechnung', 'empfehlungAngefordertNochKeineEmpfehlung'); ?> - - empfehlung_angefordert_am ?> - . -
- -
- p->t('anrechnung', 'empfehlungPositivConfirmed'); ?> -
- -
-
- p->t('anrechnung', 'empfehlungNegativConfirmed'); ?> -
-
p->t('global', 'begruendung'); ?> - : - notiz) ?> -
-
-
-
-
-
- -
-
-
-

- -
-
- -
- -
- p->t('anrechnung', 'genehmigung'); ?>  - - -p->t('anrechnung', 'genehmigungInfoTooltipText'); ?> - - -
- p->t('anrechnung', 'abgeschlossenVon'); ?>: - abgeschlossen_von ?> -  |  - p->t('anrechnung', 'abschlussdatum'); ?>: - abgeschlossen_am ?> - -
-
- -
- -
- p->t('anrechnung', 'nochKeineGenehmigung'); ?> -
- -
- p->t('anrechnung', 'genehmigungPositiv'); ?> -
- -
-
- p->t('anrechnung', 'genehmigungNegativ'); ?> -
-
p->t('global', 'begruendung'); ?> - : - notiz) ?> -
-
-
-
-
- - - -
-
-
- -
-
- -
-
- -
- - -
- + +
+
+
+
+ p->t('anrechnung', 'antrag'); ?>  + + + + p->t('anrechnung', 'antragdatum'); ?>: anrechnung_id) ? $anrechnungData->insertamum : '-' ?> +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
p->t('person', 'studentIn')); ?>vorname . ' ' . $antragData->nachname; ?>
p->t('person', 'personenkennzeichen'); ?>matrikelnr ?>
p->t('lehre', 'studiensemester')); ?>studiensemester_kurzbz ?>
p->t('lehre', 'studiengang')); ?>stg_bezeichnung ?>
p->t('lehre', 'lehrveranstaltung'); ?>lv_bezeichnung ?>
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
p->t('lehre', 'ects'); ?>ects ?>
p->t('lehre', 'lektorInnen'); ?> + lektoren) - 1 ?> + lektoren as $key => $lektor): ?> + vorname . ' ' . $lektor->nachname; + echo $key === $len ? '' : ', ' ?> + +
p->t('global', 'zgv')); ?>zgv ?>
p->t('anrechnung', 'herkunftDerKenntnisse'); ?>anmerkung ?>
p->t('anrechnung', 'nachweisdokumente'); ?> + dokumentname) ?> +
+
+
+
+
+
+
+ +
+
+
+
+ p->t('anrechnung', 'empfehlung'); ?>  +
+ p->t('anrechnung', 'empfehlungVon'); ?>: + empfehlung_von ?> +  |  + p->t('anrechnung', 'empfehlungdatum'); ?>: + empfehlung_am ?> +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
p->t('anrechnung', 'empfehlungsanfrageAm')); ?> + empfehlungsanfrageAm; ?> +
p->t('anrechnung', 'empfehlungsanfrageAn'); ?> + empfehlungsanfrageAn; ?> +
p->t('anrechnung', 'empfehlungAm')); ?>empfehlung_am ?>
p->t('anrechnung', 'empfehlungVon')); ?>empfehlung_von ?>
p->t('anrechnung', 'empfehlung'); ?>
p->t('global', 'begruendung'); ?> + begruendung) ?> +
+
+
+
+
+ + +
+ + +
+ +
+
+
+
+
+ +
+ + +
+
+
+

+ +
+
+
+
+ p->t('anrechnung', 'genehmigung'); ?>  +
+ p->t('anrechnung', 'abgeschlossenVon'); ?>: + abgeschlossen_von ?> +  |  + p->t('anrechnung', 'abschlussdatum'); ?>: + abgeschlossen_am ?> +
+
+
+ +
+ p->t('anrechnung', 'nochKeineGenehmigung'); ?> +
+ +
+ p->t('anrechnung', 'genehmigungPositiv'); ?> +
+ +
+
+ p->t('anrechnung', 'genehmigungNegativ'); ?> +
+
p->t('global', 'begruendung'); ?> + : + notiz) ?> +
+
+ +
+ + + + + +
+
+
+ +
+ + + +
+
+
+



+
- Status: - status; ?>

+ load->view('lehre/anrechnung/reviewAnrechnungInfo'); ?>
-
-
+ + load->view('templates/FHC-Footer'); ?> diff --git a/application/views/lehre/anrechnung/approveAnrechnungUebersicht.php b/application/views/lehre/anrechnung/approveAnrechnungUebersicht.php index 91d821fde..850affeea 100644 --- a/application/views/lehre/anrechnung/approveAnrechnungUebersicht.php +++ b/application/views/lehre/anrechnung/approveAnrechnungUebersicht.php @@ -13,11 +13,14 @@ $this->load->view( 'tablewidget' => true, 'phrases' => array( 'global' => array( - 'begruendung' + 'begruendung', + 'zgv' ), 'anrechnung' => array( 'nachweisdokumente', 'empfehlung', + 'empfehlungsanfrageAn', + 'empfehlungsanfrageAm', 'confirmTextAntragHatBereitsEmpfehlung', 'herkunft' ), @@ -43,6 +46,7 @@ $this->load->view( 'bitteMindEinenAntragWaehlen', 'bitteBegruendungAngeben', 'empfehlungWurdeAngefordert', + 'empfehlungWurdeAngefordertAusnahmeWoKeineLektoren', 'anrechnungenWurdenGenehmigt', 'anrechnungenWurdenAbgelehnt' ), @@ -155,11 +159,12 @@ $this->load->view(
-
@@ -173,11 +178,12 @@ $this->load->view(
-
@@ -186,7 +192,7 @@ $this->load->view(
-
+
+ ' target='_blank'> + p->t('global', 'antragAnlegen'); ?> + +
-
+
+ class="btn btn-default btn-w200 btn-mr50" type="button"> + p->t('anrechnung', 'empfehlungAnfordern')); ?> + class="btn btn-danger btn-w200" type="button"> + p->t('global', 'ablehnen')); ?> + class="btn btn-primary btn-w200" type="button"> + p->t('global', 'genehmigen')); ?>
diff --git a/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php b/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php index 0ee3fdc57..31e848481 100644 --- a/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php +++ b/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php @@ -1,4 +1,7 @@ >' . $LANGUAGE_INDEX . ', + array_to_json(zgv.bezeichnung::varchar[])->>' . $LANGUAGE_INDEX . ' + ) AS zgv + FROM public.tbl_prestudent + LEFT JOIN bis.tbl_zgv zgv USING (zgv_code) + LEFT JOIN bis.tbl_zgvmaster zgvmaster USING (zgvmas_code) + WHERE prestudent_id = anrechnung.prestudent_id + ) AS zgv, + anrechnung.insertamum::date AS "antragsdatum", empfehlung_anrechnung, (SELECT status_kurzbz FROM lehre.tbl_anrechnungstatus @@ -33,13 +52,47 @@ $query = ' JOIN public.tbl_person AS person USING (person_id) JOIN public.tbl_studiengang AS stg USING (studiengang_kz) JOIN lehre.tbl_lehrveranstaltung AS lv USING (lehrveranstaltung_id) - JOIN campus.tbl_dms_version AS dmsversion USING (dms_id) + 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) ) SELECT anrechnungen.*, - array_to_json(anrechnungstatus.bezeichnung_mehrsprachig::varchar[])->>' . $LANGUAGE_INDEX . ' AS "status_bezeichnung" + 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" FROM anrechnungen JOIN lehre.tbl_anrechnungstatus as anrechnungstatus ON (anrechnungstatus.status_kurzbz = anrechnungen.status_kurzbz) WHERE studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\' @@ -59,21 +112,28 @@ $filterWidgetArray = array( 'studiensemester_kurzbz', 'studiengang_kz', ucfirst($this->p->t('lehre', 'studiengang')), + ucfirst($this->p->t('lehre', 'organisationsform')), + 'Semester', ucfirst($this->p->t('lehre', 'lehrveranstaltung')), 'ECTS', ucfirst($this->p->t('person', 'studentIn')), ucfirst($this->p->t('global', 'begruendung')), ucfirst($this->p->t('anrechnung', 'nachweisdokumente')), ucfirst($this->p->t('anrechnung', 'herkunft')), + ucfirst($this->p->t('global', 'zgv')), + ucfirst($this->p->t('anrechnung', 'antragdatum')), ucfirst($this->p->t('anrechnung', 'empfehlung')), 'status_kurzbz', - 'Status' + 'Status', + ucfirst($this->p->t('anrechnung', 'empfehlungsanfrageAm')), + ucfirst($this->p->t('anrechnung', 'empfehlungsanfrageAn')) ), 'datasetRepOptions' => '{ height: func_height(this), layout: "fitColumns", // fit columns to width of table persistentLayout:true, persistentSort:true, + persistentFilter:true, autoResize: false, // prevent auto resizing of table (false to allow adapting table size when cols are (de-)activated headerFilterPlaceholder: " ", index: "anrechnung_id", // assign specific column as unique id (important for row indexing) @@ -100,26 +160,32 @@ $filterWidgetArray = array( } }', // tabulator properties 'datasetRepFieldsDefs' => '{ - anrechnung_id: {visible: false}, - lehrveranstaltung_id: {visible: false}, - begruendung_id: {visible: false}, - dms_id: {visible: false}, - studiensemester_kurzbz: {visible: false}, - studiengang_kz: {visible: false}, + anrechnung_id: {visible: false, headerFilter:"input"}, + lehrveranstaltung_id: {visible: false, headerFilter:"input"}, + begruendung_id: {visible: false, headerFilter:"input"}, + dms_id: {visible: false, headerFilter:"input"}, + studiensemester_kurzbz: {visible: false, headerFilter:"input"}, + studiengang_kz: {visible: false, headerFilter:"input"}, stg_bezeichnung: {headerFilter:"input"}, + orgform_kurzbz: {headerFilter:"input"}, + ausbildungssemester: {headerFilter:"input"}, lv_bezeichnung: {headerFilter:"input"}, ects: {headerFilter:"input", align:"center"}, student: {headerFilter:"input"}, begruendung: {headerFilter:"input"}, + zgv: {visible: false, headerFilter:"input"}, dokument_bezeichnung: {headerFilter:"input", formatter:"link", formatterParams:{ labelField:"dokument_bezeichnung", url:function(cell){return "'. current_url() .'/download?dms_id=" + cell.getData().dms_id}, target:"_blank" }}, anmerkung_student: {headerFilter:"input"}, + antragsdatum: {align:"center", headerFilter:"input", mutator: mut_formatStringDate}, empfehlung_anrechnung: {headerFilter:"input", align:"center", formatter: format_empfehlung_anrechnung, headerFilterFunc: hf_filterTrueFalse}, - status_kurzbz: {visible: false}, - status_bezeichnung: {headerFilter:"input"} + status_kurzbz: {visible: false, headerFilter:"input"}, + status_bezeichnung: {headerFilter:"input"}, + empfehlungsanfrageAm: {visible: false, align:"center", headerFilter:"input", mutator: mut_formatStringDate}, + empfehlungsanfrageAn: {visible: false, headerFilter:"input"} }', // col properties ); diff --git a/application/views/lehre/anrechnung/createAnrechnung.php b/application/views/lehre/anrechnung/createAnrechnung.php new file mode 100644 index 000000000..58b0757b9 --- /dev/null +++ b/application/views/lehre/anrechnung/createAnrechnung.php @@ -0,0 +1,173 @@ +load->view( + 'templates/FHC-Header', + array( + 'title' => $this->p->t('anrechnung', 'neueAnrechnung'), + 'jquery' => true, + 'jqueryui' => true, + 'bootstrap' => true, + 'fontawesome' => true, + 'ajaxlib' => true, + 'dialoglib' => true, + 'tabulator' => true, + 'tablewidget' => true, + 'phrases' => array( + 'global' => array( + 'anerkennungNachgewiesenerKenntnisse', + 'antragWurdeGestellt', + 'antragBereitsGestellt', + 'antragBearbeiten' + ), + 'ui' => array( + 'hochladen' + ), + 'lehre' => array( + 'studiensemester', + 'studiengang', + 'lehrveranstaltung' + ) + ), + 'customJSs' => array( + 'public/js/bootstrapper.js', + 'public/js/lehre/anrechnung/createAnrechnung.js' + ), + 'customCSSs' => array( + 'public/css/lehre/anrechnung.css' + ) + ) +); +?> + + +
+
+ + +
+ +
+ + +
+
+
+
+ widgetlib->widget( + 'Studiensemester_widget', + array( + DropdownWidget::SELECTED_ELEMENT => $studiensemester_selected + ), + array( + 'name' => 'studiensemester', + 'id' => 'studiensemester' + ) + ); + ?> +
+ +
+
+
+ + +
+
+ load->view('lehre/anrechnung/createAnrechnungData.php'); ?> +
+
+

+ +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
p->t('lehre', 'lehrveranstaltung'); ?> * + +
p->t('global', 'begruendung'); ?> * + +
p->t('anrechnung', 'herkunftDerKenntnisse'); ?> + 'herkunftKenntnisse', + 'rows' => 1 + )); ?> +
p->t('anrechnung', 'nachweisdokumente'); ?> * +
'uploadfile', + 'accept' => '.pdf', + 'size' => '50', + 'required' => 'required', + 'enctype' => "multipart/form-data" + )); ?> +
+ +
+
+
+ +
+
+ + + + +
+
+ +
+ + +
+
+ diff --git a/application/views/lehre/anrechnung/createAnrechnungData.php b/application/views/lehre/anrechnung/createAnrechnungData.php new file mode 100644 index 000000000..643c64626 --- /dev/null +++ b/application/views/lehre/anrechnung/createAnrechnungData.php @@ -0,0 +1,84 @@ +>' . $LANGUAGE_INDEX . ', + array_to_json(zgv.bezeichnung::varchar[])->>' . $LANGUAGE_INDEX . ' + ) AS zgv + FROM public.tbl_prestudent + LEFT JOIN bis.tbl_zgv zgv USING (zgv_code) + LEFT JOIN bis.tbl_zgvmaster zgvmaster USING (zgvmas_code) + WHERE prestudent_id = pst.prestudent_id + ) AS zgv + FROM public.tbl_prestudent pst + JOIN public.tbl_prestudentstatus pststatus USING (prestudent_id) + JOIN public.tbl_person person USING (person_id) + JOIN public.tbl_student student USING (prestudent_id) + JOIN public.tbl_benutzer benutzer ON benutzer.uid = student.student_uid + JOIN public.tbl_studiengang stg ON stg.studiengang_kz = pst.studiengang_kz + WHERE pststatus.studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\' + AND pst.studiengang_kz IN (' . $STUDIENGAENGE_ENTITLED . ') + AND benutzer.aktiv = true + AND pststatus.status_kurzbz = \'Student\' + ORDER BY "stg_bezeichnung", ausbildungssemester, nachname +'; + +$filterWidgetArray = array( + 'query' => $query, + 'tableUniqueId' => 'createAnrechnung', + 'requiredPermissions' => 'lehre/anrechnung_anlegen', + 'datasetRepresentation' => 'tabulator', + 'columnsAliases' => array( + 'prestudent_id', + 'person_id', + 'studienplan_id', + 'studiengang_kz', + ucfirst($this->p->t('lehre', 'studiengang')), + 'Semester', + ucfirst($this->p->t('person', 'nachname')), + ucfirst($this->p->t('person', 'vorname')), + ucfirst($this->p->t('global', 'zgv')) + ), + 'datasetRepOptions' => '{ + height: 300, + layout: "fitColumns", // fit columns to width of table + persistentLayout:true, + autoResize: false, // prevent auto resizing of table (false to allow adapting table size when cols are (de-)activated + headerFilterPlaceholder: " ", + index: "prestudent_id", // assign specific column as unique id (important for row indexing) + selectable: 1, // allow row selection + selectablePersistence:false, // deselect previously selected rows when table is filtered, sorted or paginated + rowSelected: function(row) { + func_rowSelected(row); + }, + rowSelectionChanged:function(data, rows){ + func_rowSelectionChanged(data, rows); + }, + tableWidgetHeader: false + }', + 'datasetRepFieldsDefs' => '{ + prestudent_id: {visible: false, headerFilter:"input"}, + person_id: {visible: false, headerFilter:"input"}, + studienplan_id: {visible: false, headerFilter:"input"}, + studiengang_kz: {visible: false, headerFilter:"input"}, + stg_bezeichnung: {headerFilter:"input"}, + ausbildungssemester: {headerFilter:"input"}, + nachname: {headerFilter:"input"}, + vorname: {headerFilter:"input"}, + zgv: {headerFilter:"input"} + }' +); + +echo $this->widgetlib->widget('TableWidget', $filterWidgetArray); \ No newline at end of file diff --git a/application/views/lehre/anrechnung/requestAnrechnung.php b/application/views/lehre/anrechnung/requestAnrechnung.php index 5d6fa9a16..e507d3846 100644 --- a/application/views/lehre/anrechnung/requestAnrechnung.php +++ b/application/views/lehre/anrechnung/requestAnrechnung.php @@ -1,9 +1,12 @@ load->view( 'templates/FHC-Header', array( 'title' => $this->p->t('anrechnung', 'antragStellen'), 'jquery' => true, + 'jqueryui' => true, 'bootstrap' => true, 'fontawesome' => true, 'ajaxlib' => true, @@ -11,11 +14,23 @@ $this->load->view( 'phrases' => array( 'global' => array( 'anerkennungNachgewiesenerKenntnisse', - 'antragStellen' + 'antragStellen', + 'antragWurdeGestellt', + 'antragBereitsGestellt', + 'bearbeitungGesperrt' ), 'ui' => array( 'hilfeZuDieserSeite', - 'hochladen' + 'hochladen', + 'inBearbeitung', + 'neu', + 'maxZeichen', + 'errorBestaetigungFehlt', + 'systemfehler' + ), + 'anrechnung' => array( + 'deadlineUeberschritten', + 'benotungDerLV' ), 'person' => array( 'student', @@ -47,7 +62,7 @@ $this->load->view(
- +
- - 'requestAnrechnung-form'], - ['lv_id' => $antragData->lv_id, 'studiensemester' => $antragData->studiensemester_kurzbz] - ); ?> + +
-
-
- -
-
- -
-
-
-
- p->t('anrechnung', 'antrag'); ?>  - - - - p->t('anrechnung', 'antragdatum'); ?>: anrechnung_id) ? $anrechnungData->insertamum : '-' ?> -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
p->t('person', 'student')); ?>vorname . ' ' . $antragData->nachname; ?>
p->t('person', 'personenkennzeichen'); ?>matrikelnr ?>
p->t('lehre', 'studiensemester')); ?>studiensemester_kurzbz ?>
p->t('lehre', 'studiengang')); ?>stg_bezeichnung ?>
p->t('lehre', 'lehrveranstaltung'); ?>lv_bezeichnung ?>
p->t('lehre', 'ects'); ?>ects ?>
p->t('lehre', 'lektor')); ?> - lektoren) - 1 ?> - lektoren as $key => $lektor): ?> - vorname . ' ' . $lektor->nachname; - echo $key === $len ? '' : ', ' ?> - -
-
-
-
- -
-
-
- p->t('anrechnung', 'antragStellenText'); ?>  -
- -
-
- -
-
-
-
- -
-
-
-
- p->t('anrechnung', 'nachweisdokumente'); ?>  - - - -
-
-
- > -
- - - - dms_id)): ?> - dokumentname) ?> - -
-
-
-
- -
-
-
-
-
-
- p->t('anrechnung', 'herkunftDerKenntnisse'); ?>  - - - -
-
- -
-
-
-
-
-
- -
- > -
-
-
-
-
+ +
+
+
+ + + +
+
+
+
+ p->t('anrechnung', 'antrag'); ?>  + + + + p->t('anrechnung', 'antragdatum'); ?>: anrechnung_id) ? $anrechnungData->insertamum : '-' ?> +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
p->t('person', 'studentIn')); ?>vorname . ' ' . $antragData->nachname; ?>
p->t('person', 'personenkennzeichen'); ?>matrikelnr ?>
p->t('lehre', 'studiensemester')); ?>studiensemester_kurzbz ?>
p->t('lehre', 'studiengang')); ?>stg_bezeichnung ?>
p->t('lehre', 'lehrveranstaltung'); ?>lv_bezeichnung ?>
p->t('lehre', 'ects'); ?>ects ?>
p->t('lehre', 'lektorInnen')); ?> + lektoren) - 1 ?> + lektoren as $key => $lektor): ?> + vorname . ' ' . $lektor->nachname; + echo $key === $len ? '' : ', ' ?> + +
+
+
+
+ +
+
+
+ p->t('anrechnung', 'antragStellenText'); ?>  +
+ +
+
+ +
+
+
+
+ +
+
+
+
+ p->t('anrechnung', 'nachweisdokumente'); ?>  + + + +
+
+
+ +
+ + + + dokumentname) ?> + +
+
+
+
+ +
+
+
+
+
+
+ p->t('anrechnung', 'herkunftDerKenntnisse'); ?>  + + + +
+
+ + p->t('ui', 'maxZeichen'); ?> : +
+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+ +
+
+
+
+



-
- Status: - +
Status: status; ?> -
- -
- p->t('global', 'bearbeitungGesperrt'); ?> - anrechnung_id) ? ': ' . $this->p->t('anrechnung', 'deadlineUeberschritten') : ''; ?> -
- +
+ +
load->view('lehre/anrechnung/requestAnrechnungImportant'); ?>
-
diff --git a/application/views/lehre/anrechnung/reviewAnrechnungDetail.php b/application/views/lehre/anrechnung/reviewAnrechnungDetail.php index 455c31e65..18c70e5af 100644 --- a/application/views/lehre/anrechnung/reviewAnrechnungDetail.php +++ b/application/views/lehre/anrechnung/reviewAnrechnungDetail.php @@ -34,7 +34,11 @@ $this->load->view( 'lehrveranstaltung', 'ects', 'lektor', - ) + ), + 'anrechnung' => array( + 'empfehlungPositivConfirmed', + 'empfehlungNegativConfirmed' + ) ), 'customCSSs' => array( 'public/css/Tabulator.css' @@ -63,199 +67,240 @@ $this->load->view(
-
-
+ +
+
+
+
+ p->t('anrechnung', 'antrag'); ?> +   + + + + p->t('anrechnung', 'antragdatum'); ?>: anrechnung_id) ? $anrechnungData->insertamum : '-' ?> +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
p->t('person', 'studentIn')); ?>vorname . ' ' . $antragData->nachname; ?>
p->t('person', 'personenkennzeichen'); ?>matrikelnr ?>
p->t('lehre', 'studiensemester')); ?>studiensemester_kurzbz ?>
p->t('lehre', 'studiengang')); ?>stg_bezeichnung ?>
p->t('lehre', 'lehrveranstaltung'); ?>lv_bezeichnung ?>
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
p->t('lehre', 'ects'); ?>ects ?>
p->t('lehre', 'lektorInnen'); ?> + lektoren) - 1 ?> + lektoren as $key => $lektor): ?> + vorname . ' ' . $lektor->nachname; + echo $key === $len ? '' : ', ' ?> + +
p->t('global', 'zgv')); ?>zgv ?>
p->t('anrechnung', 'herkunftDerKenntnisse'); ?>anmerkung ?>
p->t('anrechnung', 'nachweisdokumente'); ?> + dokumentname) ?> +
- -
-
-
-
- p->t('anrechnung', 'antrag'); ?> -   - - - - p->t('anrechnung', 'antragdatum'); ?>: anrechnung_id) ? $anrechnungData->insertamum : '-' ?> -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
p->t('person', 'student')); ?>vorname . ' ' . $antragData->nachname; ?>
p->t('person', 'personenkennzeichen'); ?>matrikelnr ?>
p->t('lehre', 'studiensemester')); ?>studiensemester_kurzbz ?>
p->t('lehre', 'studiengang')); ?>stg_bezeichnung ?>
p->t('lehre', 'lehrveranstaltung'); ?>lv_bezeichnung ?>
p->t('lehre', 'ects'); ?>ects ?>
p->t('lehre', 'lektorInnen'); ?> - lektoren) - 1 ?> - lektoren as $key => $lektor): ?> - vorname . ' ' . $lektor->nachname; - echo $key === $len ? '' : ', ' ?> - -
p->t('anrechnung', 'herkunftDerKenntnisse'); ?>anmerkung ?>
p->t('anrechnung', 'nachweisdokumente'); ?> - dokumentname) ?> -
-
-
-
- -
-
-
-
- p->t('anrechnung', 'empfehlung'); ?> -
- p->t('anrechnung', 'empfehlungVon'); ?>: - empfehlung_von ?> -  |  - p->t('anrechnung', 'empfehlungdatum'); ?>: - empfehlung_am ?> +
+
+
+
+
+
+ +
+
+
+
+ p->t('anrechnung', 'empfehlung'); ?> +
+ p->t('anrechnung', 'empfehlungVon'); ?>: + empfehlung_von ?> +  |  + p->t('anrechnung', 'empfehlungdatum'); ?>: + empfehlung_am ?> -
-
-
- -
- p->t('anrechnung', 'nochKeineEmpfehlung'); ?> -
- -
- p->t('anrechnung', 'empfehlungPositivConfirmed'); ?> -
- -
-
- p->t('anrechnung', 'empfehlungNegativConfirmed'); ?> -
-
p->t('global', 'begruendung'); ?> - : - notiz) ?> -
-
-
-
-
- - - -
-
-
-
-
-
-
- -
- - -
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
p->t('anrechnung', 'empfehlungsanfrageAm')); ?> + empfehlungsanfrageAm; ?> +
p->t('anrechnung', 'empfehlungsanfrageAn'); ?> + empfehlungsanfrageAn; ?> +
p->t('anrechnung', 'empfehlungAm')); ?> + empfehlung_am ?> +
p->t('anrechnung', 'empfehlungVon')); ?> + empfehlung_von ?> +
p->t('anrechnung', 'empfehlung'); ?>
p->t('global', 'begruendung'); ?> + begruendung) ?> +
+
+
+
+ + +
+
+
+
+
+ + + + + +
+
+ +
+ + +
+
+
diff --git a/application/views/lehre/anrechnung/reviewAnrechnungInfo.php b/application/views/lehre/anrechnung/reviewAnrechnungInfo.php index a89c9c987..4b899d4dc 100644 --- a/application/views/lehre/anrechnung/reviewAnrechnungInfo.php +++ b/application/views/lehre/anrechnung/reviewAnrechnungInfo.php @@ -25,7 +25,7 @@
-
+
p->t('anrechnung', 'reviewAnrechnungInfoAntragVoraussetungenBody'); ?>
diff --git a/application/views/lehre/anrechnung/reviewAnrechnungUebersicht.php b/application/views/lehre/anrechnung/reviewAnrechnungUebersicht.php index 55c82b4e3..54d0b49d1 100644 --- a/application/views/lehre/anrechnung/reviewAnrechnungUebersicht.php +++ b/application/views/lehre/anrechnung/reviewAnrechnungUebersicht.php @@ -13,7 +13,8 @@ $this->load->view( 'tablewidget' => true, 'phrases' => array( 'global' => array( - 'begruendung' + 'begruendung', + 'zgv' ), 'anrechnung' => array( 'nachweisdokumente', @@ -154,11 +155,12 @@ $this->load->view(
-
@@ -172,11 +174,12 @@ $this->load->view(
-
@@ -222,9 +225,11 @@ $this->load->view(
+ class="btn btn-danger btn-w200" type="button"> + p->t('anrechnung', 'nichtEmpfehlen')); ?> + class="btn btn-primary btn-w200" type="button"> + p->t('anrechnung', 'empfehlen')); ?>
diff --git a/application/views/lehre/anrechnung/reviewAnrechnungUebersichtData.php b/application/views/lehre/anrechnung/reviewAnrechnungUebersichtData.php index 7382df85b..89b3ba70f 100644 --- a/application/views/lehre/anrechnung/reviewAnrechnungUebersichtData.php +++ b/application/views/lehre/anrechnung/reviewAnrechnungUebersichtData.php @@ -20,6 +20,16 @@ $query = ' begruendung.bezeichnung AS "begruendung", dmsversion.name AS "dokument_bezeichnung", anrechnung.anmerkung_student, + (SELECT COALESCE( + array_to_json(zgvmaster.bezeichnung::varchar[])->>' . $LANGUAGE_INDEX . ', + array_to_json(zgv.bezeichnung::varchar[])->>' . $LANGUAGE_INDEX . ' + ) AS zgv + FROM public.tbl_prestudent + LEFT JOIN bis.tbl_zgv zgv USING (zgv_code) + LEFT JOIN bis.tbl_zgvmaster zgvmaster USING (zgvmas_code) + WHERE prestudent_id = anrechnung.prestudent_id + ) AS zgv, + anrechnung.insertamum::date AS "antragsdatum", empfehlung_anrechnung, (SELECT status_kurzbz FROM lehre.tbl_anrechnungstatus @@ -33,7 +43,7 @@ $query = ' JOIN public.tbl_person AS person USING (person_id) JOIN public.tbl_studiengang AS stg USING (studiengang_kz) JOIN lehre.tbl_lehrveranstaltung AS lv USING (lehrveranstaltung_id) - JOIN campus.tbl_dms_version AS dmsversion USING (dms_id) + 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) ) @@ -75,6 +85,8 @@ $filterWidgetArray = array( ucfirst($this->p->t('global', 'begruendung')), ucfirst($this->p->t('anrechnung', 'nachweisdokumente')), ucfirst($this->p->t('anrechnung', 'herkunft')), + ucfirst($this->p->t('global', 'zgv')), + ucfirst($this->p->t('anrechnung', 'antragdatum')), ucfirst($this->p->t('anrechnung', 'empfehlung')), 'status_kurzbz', 'Status' @@ -110,25 +122,27 @@ $filterWidgetArray = array( } }', // tabulator properties 'datasetRepFieldsDefs' => '{ - anrechnung_id: {visible: false}, - lehrveranstaltung_id: {visible: false}, - begruendung_id: {visible: false}, - dms_id: {visible: false}, - studiensemester_kurzbz: {visible: false}, - studiengang_kz: {visible: false}, + anrechnung_id: {visible: false, headerFilter:"input"}, + lehrveranstaltung_id: {visible: false, headerFilter:"input"}, + begruendung_id: {visible: false, headerFilter:"input"}, + dms_id: {visible: false, headerFilter:"input"}, + studiensemester_kurzbz: {visible: false, headerFilter:"input"}, + studiengang_kz: {visible: false, headerFilter:"input"}, stg_bezeichnung: {headerFilter:"input"}, lv_bezeichnung: {headerFilter:"input"}, ects: {headerFilter:"input", align:"center"}, student: {headerFilter:"input"}, begruendung: {headerFilter:"input"}, + zgv: {visible: false, headerFilter:"input"}, dokument_bezeichnung: {headerFilter:"input", formatter:"link", formatterParams:{ labelField:"dokument_bezeichnung", url:function(cell){return "'. current_url() .'/download?dms_id=" + cell.getData().dms_id}, target:"_blank" }}, anmerkung_student: {headerFilter:"input"}, + antragsdatum: {align:"center", headerFilter:"input", mutator: mut_formatStringDate}, empfehlung_anrechnung: {headerFilter:"input", align:"center", formatter: format_empfehlung_anrechnung, headerFilterFunc: hf_filterTrueFalse}, - status_kurzbz: {visible: false}, + status_kurzbz: {visible: false, headerFilter:"input"}, status_bezeichnung: {headerFilter:"input"} }', // col properties ); diff --git a/application/views/organisation/reihungstest/ReihungstestUebersichtData.php b/application/views/organisation/reihungstest/ReihungstestUebersichtData.php index 931a09d80..be41e06c7 100644 --- a/application/views/organisation/reihungstest/ReihungstestUebersichtData.php +++ b/application/views/organisation/reihungstest/ReihungstestUebersichtData.php @@ -106,7 +106,7 @@ public.tbl_reihungstest LEFT JOIN public.tbl_studiengang using(studiengang_kz) WHERE - datum>now()-'5 months'::interval + datum>now()-'12 months'::interval ORDER BY datum desc ) data ", diff --git a/application/views/system/infocenter/anmerkungenZurBewerbung.php b/application/views/system/infocenter/anmerkungenZurBewerbung.php index 85682d2a4..508f041de 100644 --- a/application/views/system/infocenter/anmerkungenZurBewerbung.php +++ b/application/views/system/infocenter/anmerkungenZurBewerbung.php @@ -15,6 +15,7 @@ insertamum), 'd.m.Y H:i:s') ?> + kurzbzlang)) ?: print_r('(' . nl2br($notiz->kurzbzlang) . ') - ') ?> text) ?> diff --git a/application/views/system/infocenter/dokNachzureichend.php b/application/views/system/infocenter/dokNachzureichend.php new file mode 100644 index 000000000..7a3b3aa03 --- /dev/null +++ b/application/views/system/infocenter/dokNachzureichend.php @@ -0,0 +1,32 @@ + 0): ?> +
+

p->t('infocenter','nachzureichendeDokumente')) ?>

+ + + + + + + + + + + + + + + + + + + +
p->t('global','typ')) ?>p->t('infocenter','nachzureichenAm')) ?>p->t('infocenter','ausstellungsnation')) ?>p->t('global','anmerkung')) ?>
dokument_bezeichnung ?> + nachgereicht_am) ? date_format(date_create($dokument->nachgereicht_am), 'd.m.Y') : ''; ?> + + langtext ?> + + anmerkung; ?> +
+ \ No newline at end of file diff --git a/application/views/system/infocenter/dokpruefung.php b/application/views/system/infocenter/dokpruefung.php index 7c431fc46..95e383569 100644 --- a/application/views/system/infocenter/dokpruefung.php +++ b/application/views/system/infocenter/dokpruefung.php @@ -6,7 +6,10 @@ p->t('global','typ')) ?> p->t('global','uploaddatum')) ?> p->t('infocenter','ausstellungsnation')) ?> - p->t('infocenter','formalGeprueft')) ?> + " . ucfirst($this->p->t('infocenter','formalGeprueft')) . "" + ?> @@ -18,50 +21,59 @@ titel) ? $dokument->bezeichnung : $dokument->titel ?> - dokument_bezeichnung ?> + + + +
+ +
+ + + + + erstelltam), 'd.m.Y') ?> langtext ?> - - > - - formal_geprueft_amum) ? date_format(date_create($dokument->formal_geprueft_amum), 'd.m.Y') : ''; ?> - - + + + > + + formal_geprueft_amum) ? date_format(date_create($dokument->formal_geprueft_amum), 'd.m.Y') : ''; ?> + + + -
- 0): ?> -
-

p->t('infocenter','nachzureichendeDokumente')) ?>

- - - - - - - - - - - - - - - - - - - -
p->t('global','typ')) ?>p->t('infocenter','nachzureichenAm')) ?>p->t('infocenter','ausstellungsnation')) ?>p->t('global','anmerkung')) ?>
dokument_bezeichnung ?> - nachgereicht_am) ? date_format(date_create($dokument->nachgereicht_am), 'd.m.Y') : ''; ?> - - langtext ?> - - anmerkung; ?> -
- +
\ No newline at end of file diff --git a/application/views/system/infocenter/infocenterData.php b/application/views/system/infocenter/infocenterData.php index 0c7030059..4dd897f7f 100644 --- a/application/views/system/infocenter/infocenterData.php +++ b/application/views/system/infocenter/infocenterData.php @@ -1,16 +1,17 @@ config->load('infocenter'); $APP = '\'infocenter\''; $REJECTED_STATUS = '\'Abgewiesener\''; $INTERESSENT_STATUS = '\'Interessent\''; - $STUDIENGANG_TYP = '\'b\''; + $STUDIENGANG_TYP = '\''.$this->variablelib->getVar('infocenter_studiensgangtyp').'\''; $TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\''; $LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'New application\', \'Interessent rejected\''; $LOGDATA_NAME_PARKED = '\'Parked\''; $LOGDATA_NAME_ONHOLD = '\'Onhold\''; $LOGTYPE_KURZBZ = '\'Processstate\''; $STATUS_KURZBZ = '\'Wartender\', \'Bewerber\', \'Aufgenommener\', \'Student\''; - $ADDITIONAL_STG = '10021,10027'; + $ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz'); $AKTE_TYP = '\'identity\', \'zgv_bakk\''; $STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\''; @@ -213,7 +214,31 @@ WHERE ps.person_id = p.person_id ORDER BY ps.zgvnation DESC NULLS LAST, ps.prestudent_id DESC LIMIT 1 - ) AS "ZGVNation" + ) AS "ZGVNation", + ( + SELECT ps.zgvmanation + FROM public.tbl_prestudent ps + WHERE ps.person_id = p.person_id + ORDER BY ps.zgvmanation DESC NULLS LAST, ps.prestudent_id DESC + LIMIT 1 + ) AS "ZGVMNation", + ( + SELECT tbl_organisationseinheit.bezeichnung + FROM public.tbl_benutzerfunktion + JOIN public.tbl_organisationseinheit USING(oe_kurzbz) + WHERE (tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von <= now()) + AND (tbl_benutzerfunktion.datum_bis IS NULL OR tbl_benutzerfunktion.datum_bis >= now()) + AND tbl_benutzerfunktion.uid = ( + SELECT l.insertvon + FROM system.tbl_log l + WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.') + AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') + AND l.person_id = p.person_id + ORDER BY l.zeitpunkt DESC + LIMIT 1 + ) + LIMIT 1 + ) AS "InfoCenterMitarbeiter" FROM public.tbl_person p LEFT JOIN ( SELECT tpl.person_id, @@ -298,7 +323,9 @@ ucfirst($this->p->t('lehre', 'studiengang')).' ('.$this->p->t('global', 'gesendet').')', ucfirst($this->p->t('lehre', 'studiengang')).' ('.$this->p->t('global', 'nichtGesendet').')', ucfirst($this->p->t('lehre', 'studiengang')).' ('.$this->p->t('global', 'aktiv').')', - 'ZGV Nation' + 'ZGV Nation BA', + 'ZGV Nation MA', + 'InfoCenter Mitarbeiter' ), 'formatRow' => function($datasetRaw) { @@ -380,6 +407,20 @@ $datasetRaw->{'ZGVNation'} = '-'; } + if ($datasetRaw->{'ZGVMNation'} == null) + { + $datasetRaw->{'ZGVMNation'} = '-'; + } + + if ($datasetRaw->{'InfoCenterMitarbeiter'} === 'InfoCenter') + { + $datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja'; + } + else + { + $datasetRaw->{'InfoCenterMitarbeiter'} = 'Nein'; + } + return $datasetRaw; }, 'markRow' => function($datasetRaw) { diff --git a/application/views/system/infocenter/infocenterDetails.php b/application/views/system/infocenter/infocenterDetails.php index d8e7c21d2..30acb8617 100644 --- a/application/views/system/infocenter/infocenterDetails.php +++ b/application/views/system/infocenter/infocenterDetails.php @@ -25,7 +25,9 @@ 'public/js/bootstrapper.js', 'public/js/tablesort/tablesort.js', 'public/js/infocenter/messageList.js', - 'public/js/infocenter/infocenterDetails.js' + 'public/js/infocenter/infocenterDetails.js', + 'public/js/infocenter/zgvUeberpruefung.js', + 'public/js/infocenter/docUeberpruefung.js' ), 'phrases' => array( 'infocenter' => array( @@ -43,7 +45,13 @@ 'nichtsZumEntfernen', 'fehlerBeimEntfernen', 'rueckstelldatumUeberschritten', - 'parkenZurueckstellenInfo' + 'parkenZurueckstellenInfo', + 'zgvInPruefung', + 'zgvErfuellt', + 'zgvNichtErfuellt', + 'zgvErfuelltPruefung', + 'datumUngueltig', + 'nachreichDatumNichtVergangenheit' ), 'ui' => array( 'gespeichert', @@ -121,6 +129,9 @@
load->view('system/infocenter/dokpruefung.php'); ?> +
+ load->view('system/infocenter/dokNachzureichend.php'); ?> +
diff --git a/application/views/system/infocenter/infocenterFreigegebenData.php b/application/views/system/infocenter/infocenterFreigegebenData.php index 3e14e7323..26c30d718 100644 --- a/application/views/system/infocenter/infocenterFreigegebenData.php +++ b/application/views/system/infocenter/infocenterFreigegebenData.php @@ -1,12 +1,13 @@ config->load('infocenter'); $APP = '\'infocenter\''; $INTERESSENT_STATUS = '\'Interessent\''; - $STUDIENGANG_TYP = '\'b\''; + $STUDIENGANG_TYP = '\''.$this->variablelib->getVar('infocenter_studiensgangtyp').'\''; $TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\''; $LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'New application\''; $REJECTED_STATUS = '\'Abgewiesener\''; - $ADDITIONAL_STG = '10021,10027,10002'; + $ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz'); $STATUS_KURZBZ = '\'Wartender\', \'Bewerber\', \'Aufgenommener\', \'Student\''; $STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\''; @@ -216,7 +217,31 @@ WHERE ps.person_id = p.person_id ORDER BY ps.zgvnation DESC NULLS LAST, ps.prestudent_id DESC LIMIT 1 - ) AS "ZGVNation" + ) AS "ZGVNation", + ( + SELECT ps.zgvmanation + FROM public.tbl_prestudent ps + WHERE ps.person_id = p.person_id + ORDER BY ps.zgvmanation DESC NULLS LAST, ps.prestudent_id DESC + LIMIT 1 + ) AS "ZGVMNation", + ( + SELECT tbl_organisationseinheit.bezeichnung + FROM public.tbl_benutzerfunktion + JOIN public.tbl_organisationseinheit USING(oe_kurzbz) + WHERE (tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von <= now()) + AND (tbl_benutzerfunktion.datum_bis IS NULL OR tbl_benutzerfunktion.datum_bis >= now()) + AND tbl_benutzerfunktion.uid = ( + SELECT l.insertvon + FROM system.tbl_log l + WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.') + AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') + AND l.person_id = p.person_id + ORDER BY l.zeitpunkt DESC + LIMIT 1 + ) + LIMIT 1 + ) AS "InfoCenterMitarbeiter" FROM public.tbl_person p LEFT JOIN ( SELECT tpl.person_id, @@ -284,7 +309,9 @@ 'Reihungstest angetreten', 'Reihungstest angemeldet', 'Reihungstest date', - 'ZGV Nation' + 'ZGV Nation BA', + 'ZGV Nation MA', + 'InfoCenter Mitarbeiter' ), 'formatRow' => function($datasetRaw) { @@ -377,6 +404,21 @@ { $datasetRaw->{'ZGVNation'} = '-'; } + + if ($datasetRaw->{'ZGVMNation'} == null) + { + $datasetRaw->{'ZGVMNation'} = '-'; + } + + if ($datasetRaw->{'InfoCenterMitarbeiter'} === 'InfoCenter') + { + $datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja'; + } + else + { + $datasetRaw->{'InfoCenterMitarbeiter'} = 'Nein'; + } + return $datasetRaw; }, 'markRow' => function($datasetRaw) { diff --git a/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php b/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php index beb4887ae..81ddd2594 100644 --- a/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php +++ b/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php @@ -1,11 +1,12 @@ config->load('infocenter'); $APP = '\'infocenter\''; $INTERESSENT_STATUS = '\'Interessent\''; - $STUDIENGANG_TYP = '\'b\''; + $STUDIENGANG_TYP = '\''.$this->variablelib->getVar('infocenter_studiensgangtyp').'\''; $TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\''; $LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'New application\''; - $ADDITIONAL_STG = '10021,10027'; + $ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz'); $STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\''; $query = ' @@ -167,7 +168,31 @@ WHERE ps.person_id = p.person_id ORDER BY ps.zgvnation DESC NULLS LAST, ps.prestudent_id DESC LIMIT 1 - ) AS "ZGVNation" + ) AS "ZGVNation", + ( + SELECT ps.zgvmanation + FROM public.tbl_prestudent ps + WHERE ps.person_id = p.person_id + ORDER BY ps.zgvmanation DESC NULLS LAST, ps.prestudent_id DESC + LIMIT 1 + ) AS "ZGVMNation", + ( + SELECT tbl_organisationseinheit.bezeichnung + FROM public.tbl_benutzerfunktion + JOIN public.tbl_organisationseinheit USING(oe_kurzbz) + WHERE (tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von <= now()) + AND (tbl_benutzerfunktion.datum_bis IS NULL OR tbl_benutzerfunktion.datum_bis >= now()) + AND tbl_benutzerfunktion.uid = ( + SELECT l.insertvon + FROM system.tbl_log l + WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.') + AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') + AND l.person_id = p.person_id + ORDER BY l.zeitpunkt DESC + LIMIT 1 + ) + LIMIT 1 + ) AS "InfoCenterMitarbeiter" FROM public.tbl_person p LEFT JOIN ( SELECT tpl.person_id, @@ -226,7 +251,9 @@ 'Reihungstest angetreten', 'Reihungstest angemeldet', 'Reihungstest Datum', - 'ZGV Nation' + 'ZGV Nation BA', + 'ZGV Nation MA', + 'InfoCenter Mitarbeiter' ), 'formatRow' => function($datasetRaw) { @@ -314,6 +341,21 @@ { $datasetRaw->{'ZGVNation'} = '-'; } + + if ($datasetRaw->{'ZGVMNation'} == null) + { + $datasetRaw->{'ZGVMNation'} = '-'; + } + + if ($datasetRaw->{'InfoCenterMitarbeiter'} === 'InfoCenter') + { + $datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja'; + } + else + { + $datasetRaw->{'InfoCenterMitarbeiter'} = 'Nein'; + } + return $datasetRaw; }, 'markRow' => function($datasetRaw) { diff --git a/application/views/system/infocenter/infocenterZgvDetails.php b/application/views/system/infocenter/infocenterZgvDetails.php new file mode 100644 index 000000000..62fefbec8 --- /dev/null +++ b/application/views/system/infocenter/infocenterZgvDetails.php @@ -0,0 +1,245 @@ +load->view( + 'templates/FHC-Header', + array( + 'title' => 'InfocenterZgvDetails', + 'jquery' => true, + 'bootstrap' => true, + 'fontawesome' => true, + 'jqueryui' => true, + 'dialoglib' => true, + 'ajaxlib' => true, + 'tablesorter' => true, + 'tinymce' => true, + 'sbadmintemplate' => true, + 'addons' => true, + 'navigationwidget' => true, + 'udfs' => true, + 'widgets' => true, + 'customCSSs' => array( + 'public/css/sbadmin2/admintemplate.css', + 'public/css/sbadmin2/tablesort_bootstrap.css', + 'public/css/infocenter/infocenterDetails.css' + ), + 'customJSs' => array( + 'public/js/bootstrapper.js', + 'public/js/tablesort/tablesort.js', + 'public/js/infocenter/messageList.js', + 'public/js/infocenter/infocenterDetails.js', + 'public/js/infocenter/zgvUeberpruefung.js' + ), + 'phrases' => array( + 'infocenter' => array( + 'notizHinzufuegen', + 'notizAendern', + 'nichtsZumEntfernen', + 'fehlerBeimEntfernen', + 'zgvInPruefung', + 'zgvErfuellt', + 'zgvNichtErfuellt', + 'zgvErfuelltPruefung' + ), + 'ui' => array( + 'gespeichert', + 'fehlerBeimSpeichern' + ), + 'global' => array( + 'bis', + 'zeilen' + ) + ) + ) + ); +?> + +
+ + widgetlib->widget('NavigationWidget'); ?> + +
+
+ + +
+
+ +
+
+
+ p->t('global', 'wirdBearbeitetVon').': '; + echo $lockedby; + if ($origin_page == 'index'): + $unlockpath = 'unlockPerson/'.$stammdaten->person_id; + $unlockpath .= '?fhc_controller_id='.$fhc_controller_id; + $unlockpath .= '&filter_id='.$prev_filter_id; + ?> +    + +  p->t('ui', 'freigeben')) ?> + + + +   + +
+
+
+
+
+
+
+
+
+

p->t('global', 'stammdaten')) ?>

+
+
+ load->view('system/infocenter/stammdaten.php'); ?> + load->view('system/infocenter/anmerkungenZurBewerbung.php'); ?> +
+
+
+
+
+
+
+
+
+ +
+

+ p->t('infocenter', 'dokumentenpruefung')) ?> +

+
+
+ load->view('system/infocenter/dokpruefung.php', array('formalReadonly' => true)); ?> +
+ load->view('system/infocenter/dokNachzureichend.php'); ?> +
+
+ +
+ + + + + + + +
+
+
+
+
+
+ +
+
+
+
+
+
+ +

+ p->t('global', 'nachrichten')) ?> +

+
+
+
+ load->view('system/infocenter/messageList.php', $messages); + ?> +
+
+
+
+
+
+
+
+
+
+
+ +

+ p->t('global', 'notizen'))?> +

+
+
+
+
+
+ load->view('system/infocenter/addNotiz.php'); ?> +
+
+ load->view('system/infocenter/notizen.php'); ?> +
+
+ +
+
+
+
+
+
+
+
+
+ + + +load->view('templates/FHC-Footer'); ?> diff --git a/application/views/system/infocenter/infocenterZgvUeberpruefung.php b/application/views/system/infocenter/infocenterZgvUeberpruefung.php new file mode 100644 index 000000000..e0b8f9eae --- /dev/null +++ b/application/views/system/infocenter/infocenterZgvUeberpruefung.php @@ -0,0 +1,49 @@ +load->view( + 'templates/FHC-Header', + array( + 'title' => 'Info Center', + 'jquery' => true, + 'jqueryui' => true, + 'jquerycheckboxes' => true, + 'bootstrap' => true, + 'fontawesome' => true, + 'sbadmintemplate' => true, + 'tablesorter' => true, + 'ajaxlib' => true, + 'filterwidget' => true, + 'navigationwidget' => true, + 'phrases' => array( + 'person' => array('vorname', 'nachname'), + 'global' => array('mailAnXversandt'), + 'ui' => array('bitteEintragWaehlen') + ), + 'customCSSs' => array('public/css/sbadmin2/tablesort_bootstrap.css', 'public/css/infocenter/infocenterZgv.css'), + 'customJSs' => array('public/js/bootstrapper.js') + ) +); +?> + + +
+ + widgetlib->widget('NavigationWidget'); ?> + +
+
+
+
+ +
+
+
+ load->view('system/infocenter/infocenterZgvUeberpruefungData.php'); ?> +
+
+
+
+ + +load->view('templates/FHC-Footer'); ?> diff --git a/application/views/system/infocenter/infocenterZgvUeberpruefungData.php b/application/views/system/infocenter/infocenterZgvUeberpruefungData.php new file mode 100644 index 000000000..6614e6b2a --- /dev/null +++ b/application/views/system/infocenter/infocenterZgvUeberpruefungData.php @@ -0,0 +1,75 @@ +getBerechtigungen($uid); +$oeKurz = $rechte->getOEkurzbz('lehre/zgvpruefung'); +$oeKurz = '\''. implode('\',\'', $oeKurz) . '\''; + +$query = ' + SELECT + ps.prestudent_id AS "PreStudentID", + p.vorname AS "Vorname", + p.nachname AS "Nachname", + sg.kurzbzlang AS "Studiengang", + zgvstatus.status as "Status" + FROM public.tbl_zgvpruefungstatus_status zgvstatus + JOIN public.tbl_zgvpruefung zgv USING (zgvpruefung_id) + JOIN public.tbl_prestudent ps USING (prestudent_id) + JOIN public.tbl_person p USING(person_id) + JOIN public.tbl_studiengang sg USING(studiengang_kz) + WHERE oe_kurzbz IN ('. $oeKurz .') + AND zgvstatus.datum IN ( + SELECT MAX(zgvstatus.datum) + FROM public.tbl_zgvpruefungstatus_status zgvstatus GROUP BY zgvstatus.zgvpruefung_id) + ORDER BY ps.prestudent_id + '; + +$filterWidgetArray = array( + 'query' => $query, + 'app' => 'infocenter', + 'datasetName' => 'zgvUeberpruefung', + 'filter_id' => $this->input->get('filter_id'), + 'requiredPermissions' => 'lehre/zgvpruefung', + 'datasetRepresentation' => 'tablesorter', + 'additionalColumns' => array('Details'), + 'hideOptions' => true, + 'columnsAliases' => array( + + ), + 'formatRow' => function($datasetRaw) { + + /* NOTE: Dont use $this here for PHP Version compatibility */ + $datasetRaw->{'Details'} = sprintf( + 'Details', + site_url('system/infocenter/InfoCenter/showZGVDetails'), + $datasetRaw->{'PreStudentID'}, + 'ZGVUeberpruefung', + (isset($_GET['fhc_controller_id']) ? $_GET['fhc_controller_id'] : ''), + (isset($_GET['filter_id']) ? $_GET['filter_id'] : '') + ); + + switch ($datasetRaw->{'Status'}) + { + case 'accepted' : + $datasetRaw->{'Status'} = $this->p->t('infocenter', 'zgvErfuellt'); + break; + case 'rejected' : + $datasetRaw->{'Status'} = $this->p->t('infocenter', 'zgvNichtErfuellt'); + break; + case 'accepted_pruefung' : + $datasetRaw->{'Status'} = $this->p->t('infocenter', 'zgvErfuelltPruefung'); + break; + } + + return $datasetRaw; + }, +); + +echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray); +?> diff --git a/application/views/system/infocenter/zgvpruefungen.php b/application/views/system/infocenter/zgvpruefungen.php index 2d00a789d..a2b2f8da8 100644 --- a/application/views/system/infocenter/zgvpruefungen.php +++ b/application/views/system/infocenter/zgvpruefungen.php @@ -259,7 +259,7 @@ echo $this->widgetlib->widget( 'Zgvmaster_widget', array(DropdownWidget::SELECTED_ELEMENT => $zgvpruefung->zgvmas_code), - array('name' => 'zgvmas', 'id' => 'zgvmas') + array('name' => 'zgvmas', 'id' => 'zgvmas_'.$zgvpruefung->prestudent_id) ); ?> @@ -272,7 +272,8 @@ ?> + name="zgvmaort" + id="zgvmaort_prestudent_id ?>"> @@ -288,7 +289,8 @@ + name="zgvmadatum" + id="zgvmadatum_prestudent_id ?>"> @@ -301,22 +303,31 @@ echo $this->widgetlib->widget( 'Nation_widget', array(DropdownWidget::SELECTED_ELEMENT => $zgvpruefung->zgvmanation_code), - array('name' => 'zgvmanation', 'id' => 'zgvmanation') + array('name' => 'zgvmanation', 'id' => 'zgvmanation_'.$zgvpruefung->prestudent_id) ); ?> + + statusZGV))) ?: print_r('data-info="need"')?>> + +
-
+
+ + statusZGV))) ?: print_r('data-info="need"')?>> +
-
+
@@ -378,86 +389,86 @@ $disabledTxt = $disabledStgTxt = $this->p->t('infocenter', 'bewerbungMussAbgeschickt'); } - if ($studiengangtyp !== 'b') + if ($studiengangtyp !== 'b' && $studiengangtyp !== 'm') { $disabled = 'disabled'; - $disabledTxt = $this->p->t('infocenter', 'nurBachelorFreigeben'); + $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', 'nurBachelorFreigeben'); + $disabledStgTxt = $this->p->t('infocenter', 'nurBachelorMasterFreigeben'); } } if (!$infoonly) : ?> -
-
-
- - +
+
+
+ + -
-
- -
+
+
+
- +
+
@@ -499,10 +510,7 @@
- - +
-
- - + echo '

Dokument Auswählen

+ + +
'; - echo ' - + echo '
+ + echo ' - + echo ' + +
'; // Link zu Admin-Oberfläche @@ -564,31 +575,31 @@ else echo '
    '; drawKategorieMenue($dms->result); echo '
'; - echo ''; - echo '
'; // Dokumente der Ausgewaehlten Kategorie laden und Anzeigen $dms = new dms(); @@ -714,7 +725,7 @@ else echo '&dpp='.$_GET['dpp']; } echo '&searching=true&searchstring='.$searchstring.'" method="POST" style="float:left">'; - echo '
+ echo ' - - + echo '"> + + Elemente pro Seite  + echo ' + Elemente pro Seite 
'; } else @@ -898,7 +909,7 @@ else echo '&dpp='.$_GET['dpp']; } echo '" method="POST" style="float:left">'; - echo '
+ echo ' + echo '"> Elemente pro Seite  + echo ' + Elemente pro Seite 
'; } else @@ -965,21 +976,21 @@ else } // drawFilesThumb($dms->result); - echo ' -
'; if ($rechte->isberechtigt('basis/dms', $kategorie->kategorie_oe_kurzbz, 'sui')) { - echo ' -
- Neue Datei hochladen -
- -

-
-
+ echo ' +
+ Neue Datei hochladen +
+ +

+
+
'; if (isset($_REQUEST['searching']) && $_REQUEST['searching'] == 'true') { @@ -989,13 +1000,13 @@ else { echo '
'; } - echo ' - - - - - - + echo ' + + +
Beschreibung
+ + + @@ -1003,17 +1014,17 @@ else - - - - - - -
Beschreibung
Schlagworte
(Semikolon getrennt)
CIS-Suche
- - - -
+ + + + + + + + + + +
'; $files = scandir(IMPORT_PATH); $files_count = count($files) - 2; // Minus zwei wegen "." und ".." @@ -1023,9 +1034,9 @@ else } if ($openupload) { - echo ''; } } @@ -1057,56 +1068,56 @@ function drawAllVersions($id) $dms = new dms(); $dms->getAllVersions($id); - echo ' - - - - - + echo ' +
VersionName
+ + + + - + - - - - + + + + '; foreach ($dms->result as $dms_help) { - echo ' - - + echo ' + + - + - - - - + + + + echo ' + + + '; } echo '
VersionName Beschreibung SchlagworteCIS-SucheCIS-Suche KategorieFilename internDatumUser
Filename internDatumUser
'.$dms_help->version.''.$dms_help->name.'
'.$dms_help->version.''.$dms_help->name.' '.$dms_help->beschreibung.' '.$dms_help->schlagworte.''.($dms_help->cis_suche == 'true'?'Ja':'Nein').''.($dms_help->cis_suche == 'true'?'Ja':'Nein').' '.$dms_help->kategorie_kurzbz.''.$dms_help->filename.''.$dms_help->insertamum.''.$dms_help->insertvon.' - '.$dms_help->filename.''.$dms_help->insertamum.''.$dms_help->insertvon.' +
    +
  • Erweitert +
    • Herunterladen
    • '; if ($rechte->isberechtigt('basis/dms', $kategorie->kategorie_oe_kurzbz, 'su')) echo '
    • Datei umbenennen
    • '; if ($rechte->isberechtigt('basis/dms', $kategorie->kategorie_oe_kurzbz, 'suid')) echo '
    • Löschen
    • '; - echo '
    -
  • -
-
'; @@ -1121,41 +1132,41 @@ function drawFilesFromImport() if ($handle = opendir(IMPORT_PATH)) { - echo ''; - echo '

Files im Import Ordner

- + echo '

Files im Import Ordner

+
'; while (false !== ($file = readdir($handle))) { if ($file != '.' && $file != '..') { - echo ' - - - + echo ' + + + '; } } - echo ' - - - - - + echo ' + + + + +
File
- '.$file.' - - Upload -
+ '.$file.' + + Upload +
'; closedir($handle); } @@ -1247,44 +1258,44 @@ function drawFilesList($rows) if (count($rows) > 0) { - echo ' - + echo ' + widgets: ["zebra"] + }); + }); + '; } - echo ' - - - - + echo ' +
Titel
+ + + '; if ($suche == true) { echo ''; } - echo ' - - + echo ' + + - - - - + + + + '; $i = 0; foreach ($rows as $row) @@ -1295,8 +1306,8 @@ function drawFilesList($rows) else $i++; - echo ' - + echo ' + '; $datum = new datum(); @@ -1335,10 +1346,10 @@ function drawFilesList($rows) echo ''; echo ''; @@ -1540,15 +1554,15 @@ function drawRenameForm($dms_id, $version, $page = NULL, $dpp = NULL, $searching echo '&dpp='.$dpp; echo '" method="POST">'; } - echo ' -
Titel VKategorie ID ID Beschreibung SchlagworteCIS-Suche
CIS-Suche
'; if (array_key_exists($row->mimetype, $mimetypes)) echo ''; @@ -1312,9 +1323,9 @@ function drawFilesList($rows) $newerVersionAlert = 'alert(\'Achtung!! Es gibt eine neuere Version dieses Dokuments. Es wird die aktuellste eingefügt.\');'; } - echo ' - - '.$newVersion.' '.$row->name.' + echo ' + + '.$newVersion.' '.$row->name.' '; // Upload einer neuen Version - echo '
    -
  • Erweitert -
      -
    • Auswählen
    • + echo '
        +
      • Erweitert +
          +
        • Auswählen
        • Herunterladen
        • '; if ($rechte->isberechtigt('basis/dms', $kategorie->kategorie_oe_kurzbz, 'sui')) { @@ -1348,7 +1359,10 @@ function drawFilesList($rows) $beschreibungstext = str_replace('"', "D4n7ührung", $beschreibungstext); $beschreibungstext = str_replace("\\", "6Sl4sh", $beschreibungstext); $beschreibungstext = str_replace("\r\n", "Ze1l3numxbr", $beschreibungstext); - echo $beschreibungstext.'\'); return upload(\''.$row->dms_id.'\',\''.$row->name.'\');" style="font-size:small">Neue Version hochladen'; + echo $beschreibungstext.'\'); + updateSchlagworte(\''.$row->schlagworte.'\'); + updateCisSuche(\''.$row->cis_suche.'\'); + return upload(\''.$row->dms_id.'\',\''.$row->name.'\');" style="font-size:small">Neue Version hochladen'; } if (isset($_REQUEST['searching']) && $_REQUEST['searching'] == 'true') { @@ -1490,9 +1504,9 @@ function drawFilesList($rows) if ($rechte->isberechtigt('basis/dms', $kategorie->kategorie_oe_kurzbz, 'suid')) echo '
        • Löschen
        • '; } - echo ' -
        -
      • + echo ' +
      +
    '; echo '
'.$row->dms_id.'
- - - - - - - + echo ' +
Dateiname:
Beschreibung:
+ + + + + + + @@ -1557,12 +1571,12 @@ function drawRenameForm($dms_id, $version, $page = NULL, $dpp = NULL, $searching - -
Dateiname:
Beschreibung:
Schlagworte
(Semikolon getrennt):
CIS-Suche: cis_suche == 'true'?'checked="checked"':'').'>
- - + + + + '; - echo ' + echo ' '; } else @@ -1603,8 +1617,8 @@ function drawChangeKategorie($dms_id, $page = NULL, $dpp = NULL) echo '&dpp='.$dpp; echo '" method="POST">'; } - echo ' - '; foreach ($allKategorien->result as $kategorienResult) @@ -1619,8 +1633,8 @@ function drawChangeKategorie($dms_id, $page = NULL, $dpp = NULL) echo ''; } - echo ' - + echo ' + '; if (! is_null($page)) echo ''; @@ -1629,6 +1643,6 @@ function drawChangeKategorie($dms_id, $page = NULL, $dpp = NULL) echo ''; } -?> - - +?> + + diff --git a/content/funktionen.js.php b/content/funktionen.js.php index e77c47548..ae9edd2af 100644 --- a/content/funktionen.js.php +++ b/content/funktionen.js.php @@ -270,7 +270,7 @@ function FunktionDelete() // **** // * Speichert die Daten // **** -function FunktionDetailSpeichern() +function FunktionDetailSpeichern(kopie) { var funktion_kurzbz = document.getElementById('funktion-menulist-funktion').value; var oe_kurzbz = document.getElementById('funktion-menulist-oe_kurzbz').value; @@ -283,6 +283,9 @@ function FunktionDetailSpeichern() var bezeichnung = document.getElementById('funktion-textbox-bezeichnung').value; var wochenstunden = document.getElementById('funktion-textbox-wochenstunden').value; + if(kopie == true) + var neu = true; + //Bei Mitarbeitern wird kein Studiengang mitgeschickt if(window.parent.document.getElementById('main-content-tabs').selectedItem==window.parent.document.getElementById('tab-mitarbeiter')) studiengang_kz_berecht=''; @@ -412,6 +415,7 @@ function FunktionDetailDisableFields(val) document.getElementById('funktion-menulist-semester').disabled=val; document.getElementById('funktion-menulist-funktion').disabled=val; document.getElementById('funktion-button-speichern').disabled=val; + document.getElementById('funktion-button-kopiespeichern').disabled=val; document.getElementById('funktion-box-datum_von').disabled=val; document.getElementById('funktion-box-datum_bis').disabled=val; document.getElementById('funktion-textbox-bezeichnung').disabled=val; diff --git a/content/funktionen.xul.php b/content/funktionen.xul.php index 9bbe10686..b80cdd455 100644 --- a/content/funktionen.xul.php +++ b/content/funktionen.xul.php @@ -289,7 +289,8 @@ else -  ' + infocenter_studiensemester + - ' '; @@ -70,9 +78,19 @@ var InfocenterPersonDataset = { // userdefined Semestervariable shown independently of personcount, // it is possible to change the semester $("#datasetActionsTop, #datasetActionsBottom").append( - "
"+ - "
"+studienSemesterHtml+"
"+ - "

"); + "
" + + "
" + auswahlStudienart + "
" + + "
" + studienSemesterHtml + "
" + + "
" + + "

" + ); + + InfocenterPersonDataset.selectStudiengangTyp(infocenter_studiengangstyp) + + $('.auswahlStudienArt').change(function() + { + InfocenterPersonDataset.changeStudengangsTyp($(this).find('option:selected').attr('data-id')); + }); $("#datasetActionsBottom").append( "
"+ @@ -160,6 +178,22 @@ var InfocenterPersonDataset = { ); }, + selectStudiengangTyp: function(typ) + { + switch (typ) + { + case 'b, m' : + $('.auswahlStudienArt [data-id="all"]').attr('selected', 'selected'); + break; + case 'b' : + $('.auswahlStudienArt [data-id="bachelor"]').attr('selected', 'selected'); + break; + case 'm' : + $('.auswahlStudienArt [data-id="master"]').attr('selected', 'selected'); + break; + } + }, + /** * sets functionality for the actions above and beneath the person table */ @@ -218,6 +252,45 @@ var InfocenterPersonDataset = { }); }, + changeStudengangsTyp: function($typ) + { + switch ($typ) + { + case 'all' : + var change = 'b\', \'m'; + break; + case 'bachelor' : + var change = 'b'; + break; + case 'master' : + var change = 'm'; + break; + } + + FHC_AjaxClient.showVeil(); + + FHC_AjaxClient.ajaxCallPost( + 'system/Variables/changeStudengangsTypVar', + { + 'name': InfocenterPersonDataset.infocenter_studienganstyp_variablename, + 'change': change, + }, + { + successCallback: function(data, textStatus, jqXHR) { + if (FHC_AjaxClient.hasData(data)) + { + // refresh filterwidget with page reload + FHC_FilterWidget.reloadDataset(); + } + }, + errorCallback: function(jqXHR, textStatus, errorThrown) { + FHC_AjaxClient.hideVeil(); + alert(textStatus); + } + } + ); + }, + /** * initializes change of the uservariable infocenter_studiensemesster, either * to next semester (change > 0) or previous semester (change < 0) @@ -325,7 +398,8 @@ var InfocenterPersonDataset = { FHC_AjaxClient.ajaxCallGet( 'system/Variables/getVar', { - 'name': InfocenterPersonDataset.infocenter_studiensemester_variablename + 'name' : InfocenterPersonDataset.infocenter_studiensemester_variablename, + 'typ' : InfocenterPersonDataset.infocenter_studienganstyp_variablename }, { successCallback: function(data, textStatus, jqXHR) { @@ -334,7 +408,7 @@ var InfocenterPersonDataset = { if (typeof callback === "function") { var infocenter_studiensemester = FHC_AjaxClient.getData(data); - callback(infocenter_studiensemester[InfocenterPersonDataset.infocenter_studiensemester_variablename]); + callback(infocenter_studiensemester[InfocenterPersonDataset.infocenter_studiensemester_variablename], infocenter_studiensemester[InfocenterPersonDataset.infocenter_studienganstyp_variablename]); } } }, diff --git a/public/js/infocenter/zgvUeberpruefung.js b/public/js/infocenter/zgvUeberpruefung.js new file mode 100644 index 000000000..6181083f2 --- /dev/null +++ b/public/js/infocenter/zgvUeberpruefung.js @@ -0,0 +1,196 @@ +$(document).ready(function () +{ + var personid = $("#hiddenpersonid").val(); + + var studiengang = $('#studiengangtyp').val(); + + zgvUeberpruefung.checkAfterReload(); + + $('.zgvRueckfragen').click(function () + { + var prestudentid = InfocenterDetails._getPrestudentIdFromElementId(this.id); + + var data = { + 'person_id' : personid, + 'prestudent_id' : prestudentid + } + zgvUeberpruefung.zgvRueckfragen(data); + }); + + $('.zgvAkzeptieren').click(function (){ + var prestudentid = InfocenterDetails._getPrestudentIdFromElementId(this.id); + + if (studiengang === 'b') + { + $('#inputStatus_' + prestudentid).val('accepted'); + $('#notizModal_' + prestudentid).modal('show'); + $('#notizModal_' + prestudentid + ' #inputNotizTitelModal').val('ZGV wurde erfüllt') + } + else + { + var data = { + 'person_id' : personid, + 'prestudent_id' : prestudentid, + 'status' : 'accepted' + } + zgvUeberpruefung.zgvStatusUpdate(data); + } + + }); + + $('.zgvAblehnen').click(function (){ + var prestudentid = InfocenterDetails._getPrestudentIdFromElementId(this.id); + $('#inputStatus_' + prestudentid).val('rejected'); + $('#notizModal_' + prestudentid).modal('show'); + $('#notizModal_' + prestudentid + ' #inputNotizTitelModal').val('ZGV wurde nicht erfüllt') + }); + + $('.zgvAkzeptierenPruefung').click(function (){ + var prestudentid = InfocenterDetails._getPrestudentIdFromElementId(this.id); + $('#inputStatus_' + prestudentid).val('accepted_pruefung'); + $('#notizModal_' + prestudentid).modal('show'); + $('#notizModal_' + prestudentid + ' #inputNotizTitelModal').val('ZGV mit Prüfungen erfüllt') + }); + + $('.saveZgvNotiz').click(function (){ + var prestudentid = InfocenterDetails._getPrestudentIdFromElementId(this.id); + + if ($('#inputNotizTitelModal').val() === '' || $('#inputNotizTextModal').val() === '') + return FHC_DialogLib.alertWarning('Please fill out all fields'); + + var data = { + 'person_id' : personid, + 'notiztitel' : $('#inputNotizTitelModal').val(), + 'notiz' : $('#inputNotizTextModal').val(), + 'prestudent_id' : prestudentid, + 'status' : $('#inputStatus_' + prestudentid).val() + } + + InfocenterDetails.saveNotiz(personid, data, zgvUeberpruefung.zgvStatusUpdate); + + $('#notizModal_' + prestudentid).modal('hide'); + }); +}); + +var zgvUeberpruefung = { + checkStatus: function(prestudent_id) + { + FHC_AjaxClient.ajaxCallGet( + "system/infocenter/ZGVUeberpruefung/getZgvStatusByPrestudent", + { + prestudent_id : prestudent_id + }, + { + successCallback: function(data, textStatus, jqXHR) { + if (FHC_AjaxClient.hasData(data)) + { + $('#zgvBearbeitungButtons_' + prestudent_id +' button').each(function() { + $(this).attr('disabled', false); + }); + + var status = FHC_AjaxClient.getData(data); + + switch (status) + { + case 'rejected' : + $('#zgvAblehnen_' + prestudent_id).attr('disabled', true); + $('#zgvStatusText_' + prestudent_id).text(FHC_PhrasesLib.t('infocenter', 'zgvNichtErfuellt')); + break; + case 'accepted' : + $('#zgvAkzeptieren_' + prestudent_id).attr('disabled', true); + $('#zgvStatusText_' + prestudent_id).text(FHC_PhrasesLib.t('infocenter', 'zgvErfuellt')); + break; + case 'accepted_pruefung' : + $('#zgvAkzeptierenPruefung_' + prestudent_id).attr('disabled', true); + $('#zgvStatusText_' + prestudent_id).text(FHC_PhrasesLib.t('infocenter', 'zgvErfuelltPruefung')); + break; + case 'pruefung_stg' : + $('#zgvRueckfragen_' + prestudent_id).attr('disabled', true); + $('#zgvStatusText_' + prestudent_id).text(FHC_PhrasesLib.t('infocenter', 'zgvInPruefung')); + break; + } + } + }, + errorCallback: function(data, textStatus, errorThrown) + { + FHC_DialogLib.alertError(data); + }, + veilTimeout: 0 + } + ); + }, + + zgvRueckfragen: function(data) + { + var prestudent_id = data.prestudent_id; + FHC_AjaxClient.ajaxCallPost( + CALLED_PATH + '/zgvRueckfragen', + data, + { + successCallback: function(data, textStatus, jqXHR) + { + if (FHC_AjaxClient.hasData(data)) + { + zgvUeberpruefung.checkStatus(prestudent_id); + + var response = FHC_AjaxClient.getData(data); + + if (response.hold === false) + { + var datum = new Date(); + datum.setDate(datum.getDate() + 14); + var formatedDate = $.datepicker.formatDate("mm/dd/yy", datum); + InfocenterDetails.setPersonOnHold(response.person_id, formatedDate); + } + + InfocenterDetails._refreshLog(); + FHC_DialogLib.alertSuccess(response.msg); + } else if(FHC_AjaxClient.isError(data)) + FHC_DialogLib.alertError(FHC_AjaxClient.getError(data)); + }, + errorCallback: function(jqXHR, textStatus, errorThrown) + { + FHC_DialogLib.alertError((jqXHR.responseText)); + } + } + ); + }, + + zgvStatusUpdate: function(data) + { + var prestudent_id = data.prestudent_id; + FHC_AjaxClient.ajaxCallPost( + CALLED_PATH + '/zgvStatusUpdate', + data, + { + successCallback: function(data, textStatus, jqXHR) + { + if (FHC_AjaxClient.hasData(data)) + { + zgvUeberpruefung.checkStatus(prestudent_id); + var response = FHC_AjaxClient.getData(data) + + if (response.openZgv === false) + InfocenterDetails.removePersonOnHold(response.person_id); + + FHC_DialogLib.alertSuccess(response.msg); + } else if (FHC_AjaxClient.isError(data)) + FHC_DialogLib.alertError(FHC_AjaxClient.getError(data)); + }, + errorCallback: function(jqXHR, textStatus, errorThrown) + { + FHC_DialogLib.alertError((jqXHR.responseText)); + } + } + ); + }, + + checkAfterReload: function() + { + $('.zgvStatusText').each(function() { + if ($(this).data('info')) { + zgvUeberpruefung.checkStatus(InfocenterDetails._getPrestudentIdFromElementId($(this).attr('id'))); + } + }); + } +} \ No newline at end of file diff --git a/public/js/lehre/anrechnung/approveAnrechnungDetail.js b/public/js/lehre/anrechnung/approveAnrechnungDetail.js index 3b80da205..c2c2899ee 100644 --- a/public/js/lehre/anrechnung/approveAnrechnungDetail.js +++ b/public/js/lehre/anrechnung/approveAnrechnungDetail.js @@ -24,6 +24,9 @@ $(function(){ // Set status alert color approveAnrechnungDetail.setStatusAlertColor(); + // Set Empfehlungstext + approveAnrechnungDetail.setEmpfehlungstext(); + // Init tooltips approveAnrechnungDetail.initTooltips(); @@ -34,14 +37,23 @@ $(function(){ if (genehmigung_panel.is(":hidden")) { - // Show begruendung panel if is hidden - genehmigung_panel.slideDown('slow'); + // Show genehmigung panel if is hidden + genehmigung_panel.css('display', 'block'); + genehmigung_panel.slideDown(400, function() { + $('html, body').animate({ + scrollTop: genehmigung_panel.offset().top // Move genehmigung panel bottom up to be visible within window screen + }, 400); + }); + return; } }); // Approve Anrechnungen - $("#approveAnrechnungDetail-approve-anrechnung-confirm").click(function(){ + $("#approveAnrechnungDetail-approve-anrechnung-confirm").click(function(e){ + + // Avoid bubbling click event to sibling break button + e.stopImmediatePropagation(); // Get form data let form_data = $('form').serializeArray(); @@ -93,13 +105,22 @@ $(function(){ if (begruendung_panel.is(":hidden")) { // Show begruendung panel if is hidden - begruendung_panel.slideDown('slow'); + begruendung_panel.css('display', 'block'); + begruendung_panel.slideDown(400, function() { + $('html, body').animate({ + scrollTop: begruendung_panel.offset().top // Move begruendung panel bottom up to be visible within window screen + }, 400); + }); + return; } }); // Reject Anrechnungen - $("#approveAnrechnungDetail-reject-anrechnung-confirm").click(function(){ + $("#approveAnrechnungDetail-reject-anrechnung-confirm").click(function(e){ + + // Avoid bubbling click event to sibling break button + e.stopImmediatePropagation(); let begruendung = $('#approveAnrechnungDetail-begruendung').val(); @@ -110,9 +131,6 @@ $(function(){ return; } - // Avoid form redirecting automatically - event.preventDefault(); - // Get form data let form_data = $('form').serializeArray(); @@ -158,10 +176,12 @@ $(function(){ }); // Request Recommendation for Anrechnungen - $("#approveAnrechnungDetail-request-recommendation").click(function(){ + $("#approveAnrechnungDetail-request-recommendation").click(function(e){ + + e.preventDefault(); // Get form data - let form_data = $('form').serializeArray(); + let form_data = $('#form-empfehlung').serializeArray(); // Prepare data object for ajax call @@ -186,8 +206,9 @@ $(function(){ if (!data.error && data.retval != null) { approveAnrechnungDetail.formatEmpfehlungIsRequested( - data.retval[0].empfehlung_angefordert_am, - data.retval[0].status_bezeichnung + data.retval[0].status_bezeichnung, + data.retval[0].empfehlungsanfrageAm, + data.retval[0].empfehlungsanfrageAn ); } }, @@ -199,6 +220,139 @@ $(function(){ ); }); + // Withdraw approvement or rejection + $("#approveAnrechnungDetail-withdraw-anrechnung-approvement").click(function(){ + + if(!confirm(FHC_PhrasesLib.t("anrechnung", "genehmigungAblehnungWirklichZuruecknehmen"))) + { + return; + } + + // Get form data + let form_data = $('form').serializeArray(); + + // Prepare data object for ajax call + let data = { + 'anrechnung_id' : form_data[0].value + }; + + FHC_AjaxClient.ajaxCallPost( + FHC_JS_DATA_STORAGE_OBJECT.called_path + "/withdraw", + data, + { + successCallback: function (data, textStatus, jqXHR) + { + console.log(data); + if (data.error && data.retval != null) + { + console.log('inside error'); + // Print error message + FHC_DialogLib.alertWarning(data.retval); + } + + if (!data.error && data.retval != null) + { + console.log('inside success'); + approveAnrechnungDetail.formatGenehmigungIsWithdrawed( + data.retval.status_bezeichnung + ); + + FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("anrechnung", "erfolgreichZurueckgenommen")); + + } + }, + errorCallback: function (jqXHR, textStatus, errorThrown) + { + FHC_DialogLib.alertError(FHC_PhrasesLib.t("ui", "systemfehler")); + } + } + ); + }); + + // Withdraw request for recommendation + $("#approveAnrechnungDetail-withdraw-request-recommedation").click(function(e){ + + e.preventDefault(); + + if(!confirm(FHC_PhrasesLib.t("anrechnung", "empfehlungsanforderungWirklichZuruecknehmen"))) + { + return; + } + + // Get form data + let form_data = $('#form-empfehlung').serializeArray(); + + // Prepare data object for ajax call + let data = { + 'anrechnung_id' : form_data[0].value + }; + + FHC_AjaxClient.ajaxCallPost( + FHC_JS_DATA_STORAGE_OBJECT.called_path + "/withdrawRequestRecommendation", + data, + { + successCallback: function (data, textStatus, jqXHR) + { + console.log(data); + if (data.error && data.retval != null) + { + // Print error message + FHC_DialogLib.alertWarning(data.retval); + } + + if (!data.error && data.retval != null) + { + approveAnrechnungDetail.formatEmpfehlungIsWithdrawed( + data.retval.status_bezeichnung + ); + + FHC_DialogLib.alertSuccess( + FHC_PhrasesLib.t("anrechnung", "erfolgreichZurueckgenommen") + ); + + } + }, + errorCallback: function (jqXHR, textStatus, errorThrown) + { + FHC_DialogLib.alertError(FHC_PhrasesLib.t("ui", "systemfehler")); + } + } + ); + }); + + $('#form-empfehlungNotiz').submit(function(e){ + + e.preventDefault(); + + FHC_AjaxClient.ajaxCallPost( + FHC_JS_DATA_STORAGE_OBJECT.called_path + "/saveEmpfehlungsNotiz", + { + anrechnung_id: this.anrechnung_id.value, + notiz_id: this.notiz_id.value, + empfehlung_text: this.empfehlungText.value + }, + { + successCallback: function (data){ + + if (FHC_AjaxClient.isError(data)){ + + // Print error message + FHC_DialogLib.alertWarning(FHC_AjaxClient.getError(data)); + } + + if (FHC_AjaxClient.hasData(data)){ + + // Print success message + FHC_DialogLib.alertSuccess((FHC_AjaxClient.getData(data))) + } + }, + errorCallback(){ + FHC_DialogLib.alertError(FHC_PhrasesLib.t("ui", "systemfehler")); + } + } + ) + }) + // Copy Begruendung into textarea $(".btn-copyIntoTextarea").click(function(){ approveAnrechnungDetail.copyIntoTextarea(this); @@ -212,7 +366,7 @@ $(function(){ // Break Begruendung abgeben $('#approveAnrechnungDetail-begruendung-abbrechen').click(function(){ - $('#approveAnrechnungDetail-begruendung').val(''); + begruendung_panel.slideUp('slow'); }) @@ -238,6 +392,24 @@ var approveAnrechnungDetail = { $('#approveAnrechnungDetail-status_kurzbz').closest('div').addClass('alert-warning'); } }, + setEmpfehlungstext: function () { + let empfehlung = $('#approveAnrechnungDetail-empfehlung').data('empfehlung'); + + switch (empfehlung) { + case true: + $('#approveAnrechnungDetail-empfehlungDetail-empfehlung') + .addClass('text-success') + .html(FHC_PhrasesLib.t("anrechnung", "empfehlungPositivConfirmed")); + break; + case false: + $('#approveAnrechnungDetail-empfehlungDetail-empfehlung') + .addClass('text-danger') + .html(FHC_PhrasesLib.t("anrechnung", "empfehlungNegativConfirmed")); + break; + default: + $('#approveAnrechnungDetail-empfehlungDetail-empfehlung').html('-'); + } + }, initTooltips: function (){ $('[data-toggle="tooltip"]').tooltip({ delay: { "show": 200, "hide": 200 }, @@ -250,20 +422,30 @@ var approveAnrechnungDetail = { // Find closest textarea let textarea = $(elem).closest('div').find('textarea'); - // Copy begruendung into textarea - textarea.val($.trim($(elem).parent().find('span:first').text())); + if (elem.id.length && elem.id == 'empfehlungstextUebernehmen') + { + // Copy Empfehlungstext into textarea + textarea.val($.trim($('#approveAnrechnungDetail-empfehlungDetail-begruendung').text())); + return; + } + else + { + // Copy begruendung into textarea + textarea.val($.trim($(elem).parent().find('span:first').text())); + } }, - formatEmpfehlungIsRequested: function(empfehlungAngefordertAm, statusBezeichnung) { - $('#approveAnrechnungDetail-empfehlungDetail').children().addClass('hidden'); - $('#approveAnrechnungDetail-empfehlungDetail-empfehlungIsAngefordert').removeClass('hidden'); - $('#approveAnrechnungDetail-empfehlungDetail-empfehlungAngefordertAm').text(empfehlungAngefordertAm); + formatEmpfehlungIsRequested: function(statusBezeichnung, empfehlungsanfrageAm, empfehlungsanfrageAn) { + $('#approveAnrechnungDetail-empfehlungDetail-empfehlungsanfrageAm').html(empfehlungsanfrageAm); + $('#approveAnrechnungDetail-empfehlungDetail-empfehlungsanfrageAn').html(empfehlungsanfrageAn); $('#approveAnrechnungDetail-status_kurzbz').text(statusBezeichnung); $('#approveAnrechnungDetail-request-recommendation').prop('disabled', true); $('#approveAnrechnungDetail-approve-anrechnung-ask').prop('disabled', true); $('#approveAnrechnungDetail-reject-anrechnung-ask').prop('disabled', true); + $('#approveAnrechnungDetail-withdraw-request-recommedation').removeClass('hidden'); }, formatGenehmigungIsPositiv: function(abgeschlossenAm, abgeschlossenVon, statusBezeichnung){ - $('#approveAnrechnungDetail-genehmigungDetail').children().addClass('hidden'); + $('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsNull').addClass('hidden'); + $('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsNegativ').addClass('hidden'); $('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsPositiv').removeClass('hidden'); $('#approveAnrechnungDetail-status_kurzbz').text(statusBezeichnung); $('#approveAnrechnungDetail-status_kurzbz').closest('div').removeClass('alert-warning').addClass('alert-success'); @@ -272,9 +454,13 @@ var approveAnrechnungDetail = { $('#approveAnrechnungDetail-request-recommendation').prop('disabled', true); $('#approveAnrechnungDetail-approve-anrechnung-ask').prop('disabled', true); $('#approveAnrechnungDetail-reject-anrechnung-ask').prop('disabled', true); + + // Show button to withdraw approval + $('#approveAnrechnungDetail-withdraw-anrechnung-approvement').removeClass('hidden'); }, formatGenehmigungIsNegativ: function(abgeschlossenAm, abgeschlossenVon, statusBezeichnung, begruendung){ - $('#approveAnrechnungDetail-genehmigungDetail').children().addClass('hidden'); + $('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsNull').addClass('hidden'); + $('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsPositiv').addClass('hidden'); $('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsNegativ').removeClass('hidden'); $('#approveAnrechnungDetail-status_kurzbz').text(statusBezeichnung); $('#approveAnrechnungDetail-status_kurzbz').closest('div').removeClass('alert-warning').addClass('alert-danger'); @@ -284,5 +470,45 @@ var approveAnrechnungDetail = { $('#approveAnrechnungDetail-request-recommendation').prop('disabled', true); $('#approveAnrechnungDetail-approve-anrechnung-ask').prop('disabled', true); $('#approveAnrechnungDetail-reject-anrechnung-ask').prop('disabled', true); + + // Show button to withdraw approval + $('#approveAnrechnungDetail-withdraw-anrechnung-approvement').removeClass('hidden'); + }, + formatGenehmigungIsWithdrawed: function (statusBezeichnung){ + let empfehlung = $('#approveAnrechnungDetail-empfehlung').data('empfehlung'); // null / false / true + + $('#approveAnrechnungDetail-status_kurzbz').text(statusBezeichnung); + $('#approveAnrechnungDetail-status_kurzbz').closest('div').removeClass('alert-danger').removeClass('alert-success'); + $('#approveAnrechnungDetail-status_kurzbz').closest('div').addClass('alert-warning'); + + $('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsNull').removeClass('hidden'); + $('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsPositiv').addClass('hidden'); + $('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsNegativ').addClass('hidden'); + + $('#approveAnrechnungDetail-abgeschlossenAm').text('-'); + $('#approveAnrechnungDetail-abgeschlossenVon').text('-'); + + // Only enable recommendation button again if no recommendation was submitted until now + if (empfehlung === null) + { + $('#approveAnrechnungDetail-request-recommendation').prop('disabled', false); + } + $('#approveAnrechnungDetail-approve-anrechnung-ask').prop('disabled', false); + $('#approveAnrechnungDetail-reject-anrechnung-ask').prop('disabled', false); + // Hide button to withdraw approval + $('#approveAnrechnungDetail-withdraw-anrechnung-approvement').addClass('hidden'); + }, + formatEmpfehlungIsWithdrawed: function (statusBezeichnung){ + $('#approveAnrechnungDetail-status_kurzbz').text(statusBezeichnung); + + $('#approveAnrechnungDetail-empfehlungDetail-empfehlungIsNull').removeClass('hidden'); + $('#approveAnrechnungDetail-empfehlungDetail-empfehlungsanfrageAm').html('-'); + $('#approveAnrechnungDetail-empfehlungDetail-empfehlungsanfrageAn').html('-'); + + $('#approveAnrechnungDetail-request-recommendation').prop('disabled', false); + $('#approveAnrechnungDetail-approve-anrechnung-ask').prop('disabled', false); + $('#approveAnrechnungDetail-reject-anrechnung-ask').prop('disabled', false); + // Hide button to withdraw approval + $('#approveAnrechnungDetail-withdraw-request-recommedation').addClass('hidden'); } } \ No newline at end of file diff --git a/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js b/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js index 28c3b74e1..ff3235e52 100644 --- a/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js +++ b/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js @@ -9,6 +9,20 @@ const ANRECHNUNGSTATUS_REJECTED = 'rejected'; const COLOR_LIGHTGREY = "#f5f5f5"; +// ----------------------------------------------------------------------------------------------------------------- +// Mutators - setter methods to manipulate table data when entering the tabulator +// ----------------------------------------------------------------------------------------------------------------- + +// Converts string date postgre style to string DD.MM.YYYY. +// This will allow correct filtering. +var mut_formatStringDate = function(value, data, type, params, component) { + if (value != null) + { + var d = new Date(value); + return ("0" + (d.getDate())).slice(-2) + "." + ("0" + (d.getMonth() + 1)).slice(-2) + "." + d.getFullYear(); + } +} + // TABULATOR FUNCTIONS // --------------------------------------------------------------------------------------------------------------------- // Returns relative height (depending on screen size) @@ -36,6 +50,7 @@ function hf_filterTrueFalse(headerValue, rowValue){ } // Adds column details +// Sets focus on filterbutton, if table starts with stored filter. function func_tableBuilt(table) { table.addColumn( { @@ -49,10 +64,16 @@ function func_tableBuilt(table) { url:function(cell){ return BASE_URL + "/" + APPROVE_ANRECHNUNG_DETAIL_URI + "?anrechnung_id=" + cell.getData().anrechnung_id }, - // target:"_blank" + target:"_blank" } }, false, "status" // place column after status ); + + // Set focus on filterbutton + let filters = table.getFilters(); + if (filters.length > 0){ + approveAnrechnung.focusFilterbuttonIfTableStartsWithStoredFilter(filters); + } } // Formats the rows @@ -156,6 +177,26 @@ $(function(){ ); }); + // Show only rows that are in progress by lector + $("#show-inProgressLektor").click(function(){ + $('#tableWidgetTabulator').tabulator('setFilter', + [ + {field: 'status_kurzbz', type: '=', value: ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR}, + {field: 'empfehlung_anrechnung', type: '=', value: null} + ] + ); + }); + + // Show only rows with empfohlene + noch nicht genehmigte/abgelehnte anrechnungen + $("#show-recommended").click(function(){ + $('#tableWidgetTabulator').tabulator('setFilter', + [ + {field: 'status_kurzbz', type: '=', value: ANRECHNUNGSTATUS_PROGRESSED_BY_STGL}, + {field: 'empfehlung_anrechnung', type: '=', value: 'true'} + ] + ); + }); + // Show only rows with nicht empfohlene + noch nicht genehmigte/abgelehnte anrechnungen $("#show-not-recommended").click(function(){ $('#tableWidgetTabulator').tabulator('setFilter', [ @@ -205,13 +246,21 @@ $(function(){ if (genehmigung_panel.is(":hidden")) { // Show begruendung panel if is hidden - genehmigung_panel.slideDown('slow'); + genehmigung_panel.slideDown(400, function() { + $('html, body').animate({ + scrollTop: genehmigung_panel.offset().top // Move genehmigung panel bottom up to be visible within window screen + }, 400); + }); + return; } }); // Approve Anrechnungen - $("#approveAnrechnungUebersicht-approve-anrechnungen-confirm").click(function(){ + $("#approveAnrechnungUebersicht-approve-anrechnungen-confirm").click(function(e){ + + // Avoid bubbling click event to sibling break button + e.stopImmediatePropagation(); // Get selected rows data let selected_data = $('#tableWidgetTabulator').tabulator('getSelectedData') @@ -274,13 +323,21 @@ $(function(){ if (begruendung_panel.is(":hidden")) { // Show begruendung panel if is hidden - begruendung_panel.slideDown('slow'); + begruendung_panel.slideDown(400, function() { + $('html, body').animate({ + scrollTop: begruendung_panel.offset().top // Move begruendung panel bottom up to be visible within window screen + }, 400); + }); + return; } }); // Reject Anrechnungen - $("#approveAnrechnungUebersicht-reject-anrechnungen-confirm").click(function(){ + $("#approveAnrechnungUebersicht-reject-anrechnungen-confirm").click(function(e){ + + // Avoid bubbling click event to sibling break button + e.stopImmediatePropagation(); let begruendung = $('#approveAnrechnungUebersicht-begruendung').val(); @@ -310,9 +367,6 @@ $(function(){ return; } - // Avoid form redirecting automatically - event.preventDefault(); - // Prepare data object for ajax call let data = { 'data': selected_data @@ -352,6 +406,7 @@ $(function(){ // Request Recommendation for Anrechnungen $("#approveAnrechnungUebersicht-request-recommendation").click(function(){ + // Get selected rows data let selected_data = $('#tableWidgetTabulator').tabulator('getSelectedData'); @@ -398,12 +453,23 @@ $(function(){ if (!data.error && data.retval != null) { - // Update status 'genehmigt' - $('#tableWidgetTabulator').tabulator('updateData', data.retval); - - // Print success message - FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("ui", "empfehlungWurdeAngefordert")); + // Print info message, if not all selected recommendations were requested + if (data.retval.length < selected_data.length){ + FHC_DialogLib.alertInfo( + FHC_PhrasesLib.t( + "ui", "empfehlungWurdeAngefordertAusnahmeWoKeineLektoren", + [selected_data.length, data.retval.length, selected_data.length - data.retval.length]) + ); + } + else + { + // Print success message + FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("ui", "empfehlungWurdeAngefordert")); + } } + + //Update status 'genehmigt' + $('#tableWidgetTabulator').tabulator('updateData', data.retval); }, errorCallback: function (jqXHR, textStatus, errorThrown) { @@ -421,7 +487,7 @@ $(function(){ // Break Ablehnung abgeben $('#approveAnrechnungUebersicht-begruendung-abbrechen').click(function(){ - $('#approveAnrechnungUebersicht-begruendung').val(''); + begruendung_panel.slideUp('slow'); }) @@ -458,5 +524,40 @@ var approveAnrechnung = { // Copy begruendung into textarea textarea.val($.trim($(elem).parent().text())); + }, + focusFilterbuttonIfTableStartsWithStoredFilter(filters){ + switch (filters[0].value) { + case ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR: + $("#show-inProgressLektor").addClass('active'); + break; + case ANRECHNUNGSTATUS_APPROVED: + $("#show-approved").addClass('active'); + break; + case ANRECHNUNGSTATUS_REJECTED: + $("#show-rejected").addClass('active'); + break; + case ANRECHNUNGSTATUS_PROGRESSED_BY_STGL: + if (filters.length > 1) + { + if (filters[1].field == 'empfehlung_anrechnung') + { + if (filters[1].value === 'true') + { + $("#show-recommended").addClass('active'); + } + else + { + $("#show-not-recommended").addClass('active'); + } + } + } + else + { + $("#show-inProgressDP").addClass('active'); + } + + break; + + } } } \ No newline at end of file diff --git a/public/js/lehre/anrechnung/createAnrechnung.js b/public/js/lehre/anrechnung/createAnrechnung.js new file mode 100644 index 000000000..176821f2c --- /dev/null +++ b/public/js/lehre/anrechnung/createAnrechnung.js @@ -0,0 +1,159 @@ +$(function () { + + // Disable all form fields by default + createAnrechnung.disableFormFields(); + + // Create Anrechnung on form submit + $('#createAnrechnung-form').submit(function(e){ + + e.preventDefault(); + + FHC_AjaxClient.ajaxCallPost( + FHC_JS_DATA_STORAGE_OBJECT.called_path + "/create", + { + prestudent_id: this.prestudent_id.value, + studiensemester_kurzbz: this.studiensemester_kurzbz.value, + lehrveranstaltung_id: this.lehrveranstaltung_id.value, + begruendung_id: this.begruendung_id.value, + herkunftKenntnisse: this.herkunftKenntnisse.value, + uploadfile: this.uploadfile.files + }, + { + successCallback: function (data, textStatus, jqXHR) + { + if (FHC_AjaxClient.isError(data)) + { + FHC_DialogLib.alertWarning(FHC_AjaxClient.getError(data)); + } + + if (FHC_AjaxClient.hasData(data)) + { + FHC_DialogLib.alertSuccess(FHC_AjaxClient.getData(data).msg); + + // Display button to open Anrechnung in new tab + createAnrechnung.displayButtonToOpenAnrechnung(FHC_AjaxClient.getData(data).anrechnung_id); + } + }, + errorCallback: function (jqXHR, textStatus, errorThrown) + { + FHC_DialogLib.alertError(FHC_PhrasesLib.t("ui", "systemfehler")); + } + } + ); + }); +}) + +// TABULATOR FUNCTIONS +// --------------------------------------------------------------------------------------------------------------------- +/** + * Set form fields and populate selectmenu with LVs of student + * on row selection. + * + * @param row + */ +function func_rowSelected(row){ + let studiensemester_kurzbz = $('#studiensemester_kurzbz').val(); + let prestudent_id = row.getData().prestudent_id; + let vorname = row.getData().vorname; + let nachname = row.getData().nachname; + + // Set hidden form field Prestudent ID + $('#prestudent_id').val(prestudent_id); + + // Set field StudentIn + $('#student').text(vorname + ' ' + nachname); + + // Populate Select with LVs of student + createAnrechnung.populateSelectWithStudentLVs(prestudent_id, studiensemester_kurzbz); + + // Enable all form fields + createAnrechnung.enableFormFields(); +} + +/** + * Empty and disable form fields + * when none row selected. + * + * @param data + * @param rows + */ +function func_rowSelectionChanged(data, rows){ + + // If no student is selected in the table + if (rows.length == 0) + { + // ...empty form fields + createAnrechnung.emptyFormFields(); + + // ...disable form fields + createAnrechnung.disableFormFields(); + } +} + +// --------------------------------------------------------------------------------------------------------------------- + +var createAnrechnung = { + emptyFormFields: function(){ + + // Empty field StudentIn + $('#student').text(''); + + // Empty form fields (except hidden ones) + $('#createAnrechnung-form :input:not([type=hidden])').val(''); + + // Hide eventually displayed button to open Anrechnung + $('#createAnrechnung-openAnrechnung').addClass('hidden'); + }, + disableFormFields: function(){ + let prestudent_id = $('#prestudent_id').data('prestudent_id'); + + if (prestudent_id == '') + { + // Disable all form elements + $("#createAnrechnung-form :input").prop("disabled", true); + } + }, + enableFormFields: function(){ + $("#createAnrechnung-form :input").prop("disabled", false); + }, + populateSelectWithStudentLVs: function(prestudent_id, studiensemester_kurzbz){ + FHC_AjaxClient.ajaxCallPost( + FHC_JS_DATA_STORAGE_OBJECT.called_path + "/getLVsByStudent", + {'prestudent_id': prestudent_id, 'studiensemester_kurzbz': studiensemester_kurzbz}, + { + successCallback: function (data, textStatus, jqXHR) + { + if (FHC_AjaxClient.isError(data)) + { + // Print error message + FHC_DialogLib.alertWarning(FHC_AjaxClient.getError(data)); + } + + if (FHC_AjaxClient.hasData(data)) + { + let lehrveranstaltungen = FHC_AjaxClient.getData(data); + + // Remove previous Lehrveranstaltungen + $('#select-lehrveranstaltung option').slice(1).remove(); // Leave first option 'Bitte wählen' + + // Append Lehrveranstaltungen + for (let lv of lehrveranstaltungen){ + $('#select-lehrveranstaltung').append(''); + } + } + }, + errorCallback: function (jqXHR, textStatus, errorThrown) + { + FHC_DialogLib.alertError(FHC_PhrasesLib.t("ui", "systemfehler")); + } + } + ); + }, + displayButtonToOpenAnrechnung: function(anrechnung_id){ + // Display button to open Anrechnung in new tab + $('#createAnrechnung-openAnrechnung') + .removeClass('hidden') + .attr('href', 'ApproveAnrechnungDetail/?anrechnung_id=' + anrechnung_id) + .html(' ' + FHC_PhrasesLib.t("global", "antragBearbeiten")); + } +} \ No newline at end of file diff --git a/public/js/lehre/anrechnung/requestAnrechnung.js b/public/js/lehre/anrechnung/requestAnrechnung.js index 1f9f8b51b..fa7d02de8 100644 --- a/public/js/lehre/anrechnung/requestAnrechnung.js +++ b/public/js/lehre/anrechnung/requestAnrechnung.js @@ -1,14 +1,65 @@ const ANRECHNUNGSTATUS_APPROVED = 'approved'; const ANRECHNUNGSTATUS_REJECTED = 'rejected'; +const HERKUNFT_DER_KENNTNISSE_MAX_LENGTH = 125; $(function(){ // Set status alert color requestAnrechnung.setStatusAlertColor(); + // Disable Form fields if Anrechnung was already applied + requestAnrechnung.disableFormFieldsIfAntragIsApplied(); + + // Check Bestaetigung checkbox if Anrechnung was already applied + requestAnrechnung.markAsBestaetigtIfAntragIsApplied(); + // Init tooltips requestAnrechnung.initTooltips(); + // Set chars counter for textarea 'Herkunft der Kenntnisse' + requestAnrechnung.setCharsCounter(); + // If Sperregrund exists: display Sperre panel, hide Status panel and disable all form elements + requestAnrechnung.displaySperreIfHasSperregrund(); + + $('#requestAnrechnung-form').submit(function(e){ + + // Avoid form redirecting automatically + e.preventDefault(); + + FHC_AjaxClient.ajaxCallPost( + FHC_JS_DATA_STORAGE_OBJECT.called_path + "/apply", + { + anmerkung: this.anmerkung.value, + begruendung: this.begruendung.value, + lv_id: this.lv_id.value, + studiensemester: this.studiensemester.value, + bestaetigung: this.bestaetigung.value, + uploadfile: this.uploadfile.files + }, + { + successCallback:function(data, textStatus, jqXHR){ + if (FHC_AjaxClient.isError(data)) + { + FHC_DialogLib.alertWarning(FHC_AjaxClient.getError(data)); + } + + if (FHC_AjaxClient.hasData(data)) + { + requestAnrechnung.formatAnrechnungIsApplied( + data.retval.antragdatum, + data.retval.dms_id, + data.retval.filename + ); + + FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("global", "antragWurdeGestellt")); + } + }, + errorCallback: function(jqXHR, textStatus, errorThrown){ + FHC_DialogLib.alertWarning(FHC_PhrasesLib.t("ui", "systemfehler")); + } + } + ); + }); }) var requestAnrechnung = { @@ -24,9 +75,62 @@ var requestAnrechnung = { break; case '': $('#requestAnrechnung-status_kurzbz').closest('div').addClass('alert-info'); + $('#requestAnrechnung-status_kurzbz').text(FHC_PhrasesLib.t("ui", "neu")); break; default: $('#requestAnrechnung-status_kurzbz').closest('div').addClass('alert-warning'); + $('#requestAnrechnung-status_kurzbz').text(FHC_PhrasesLib.t("ui", "inBearbeitung")); + } + }, + disableFormFieldsIfAntragIsApplied: function(){ + let status_kurzbz = $('#requestAnrechnung-status_kurzbz').data('status_kurzbz'); + + if (status_kurzbz != '') + { + // Disable all form elements + requestAnrechnung.disableFormFields(); + } + }, + markAsBestaetigtIfAntragIsApplied: function(){ + let status_kurzbz = $('#requestAnrechnung-status_kurzbz').data('status_kurzbz'); + + if (status_kurzbz != '') + { + $("#requestAnrechnung-form :input[name='bestaetigung']").prop('checked', true); + } + }, + disableFormFields(){ + // Disable all form elements + $("#requestAnrechnung-form :input").prop("disabled", true); + }, + displaySperreIfHasSperregrund: function(){ + const anrechnung_id = $('#requestAnrechnung-sperre').data('anrechnung_id'); + const is_expired = $('#requestAnrechnung-sperre').data('expired'); + const is_blocked = $('#requestAnrechnung-sperre').data('blocked'); + + // If Deadline is expired or is blocked by grades of LV, AND not already angerechnet + if ((is_expired || is_blocked) && anrechnung_id == '') + { + // Hide status panel + $('#requestAnrechnung-status').hide(); + + // Show sperre panel + $('#requestAnrechnung-sperre') + .removeClass('hidden') + .html(function(){ + let sperregrund = FHC_PhrasesLib.t('global', 'bearbeitungGesperrt') + ': '; + + if (is_expired) { + sperregrund += FHC_PhrasesLib.t('anrechnung', 'deadlineUeberschritten'); + } + else if (is_blocked){ + sperregrund += FHC_PhrasesLib.t('anrechnung', 'benotungDerLV'); + } + return ""+ sperregrund + ""; + }) + + // Disable all form elements + requestAnrechnung.disableFormFields(); } }, initTooltips: function (){ @@ -35,5 +139,27 @@ var requestAnrechnung = { html: true } ); + }, + setCharsCounter: function(){ + $('#requestAnrechnung-herkunftDerKenntnisse').keyup(function() { + + let length = HERKUNFT_DER_KENNTNISSE_MAX_LENGTH - $(this).val().length; + + $('#requestAnrechnung-herkunftDerKenntnisse-charCounter').text(length); + }); + }, + formatAnrechnungIsApplied: function (antragdatum, dms_id, filename){ + $('#requestAnrechnung-antragdatum').text(antragdatum); + $('#requestAnrechnung-status_kurzbz').text(FHC_PhrasesLib.t("ui", "inBearbeitung")); + $('#requestAnrechnung-status_kurzbz').closest('div').addClass('alert-warning'); + + // Display File-Downloadlink + $('#requestAnrechnung-downloadDocLink') + .removeClass('hidden') + .attr('href', 'RequestAnrechnung/download?dms_id=' + dms_id) + .html(filename); + + // Disable all form elements + $("#requestAnrechnung-form :input").prop("disabled", true); } } \ No newline at end of file diff --git a/public/js/lehre/anrechnung/reviewAnrechnungDetail.js b/public/js/lehre/anrechnung/reviewAnrechnungDetail.js index 705e6c440..fc26f4577 100644 --- a/public/js/lehre/anrechnung/reviewAnrechnungDetail.js +++ b/public/js/lehre/anrechnung/reviewAnrechnungDetail.js @@ -25,6 +25,9 @@ $(function(){ // Set status alert color reviewAnrechnung.setStatusAlertColor(); + // Set Empfehlungstext + reviewAnrechnung.setEmpfehlungstext(); + // Init tooltips reviewAnrechnung.initTooltips(); @@ -41,13 +44,20 @@ $(function(){ if (empfehlung_panel.is(":hidden")) { // Show begruendung panel if is hidden - empfehlung_panel.slideDown('slow'); + empfehlung_panel.slideDown(400, function() { + $('html, body').animate({ + scrollTop: empfehlung_panel.offset().top // Move empfehlung panel bottom up to be visible within window screen + }, 400); + }); return; } }); // Recommend Anrechnung - $("#reviewAnrechnungDetail-recommend-anrechnung-confirm").click(function(){ + $("#reviewAnrechnungDetail-recommend-anrechnung-confirm").click(function(e){ + + // Avoid bubbling click event to sibling break button + e.stopImmediatePropagation(); // Get form data let form_data = $('form').serializeArray(); @@ -99,13 +109,20 @@ $(function(){ if (begruendung_panel.is(":hidden")) { // Show begruendung panel if is hidden - begruendung_panel.slideDown('slow'); + begruendung_panel.slideDown(400, function() { + $('html, body').animate({ + scrollTop: begruendung_panel.offset().top // Move begruendung panel bottom up to be visible within window screen + }, 400); + }); return; } }); // Dont recommend Anrechnung - $("#reviewAnrechnungDetail-dont-recommend-anrechnung-confirm").click(function(){ + $("#reviewAnrechnungDetail-dont-recommend-anrechnung-confirm").click(function(e){ + + // Avoid bubbling click event to sibling break button + e.stopImmediatePropagation(); let begruendung = $('#reviewAnrechnungDetail-begruendung').val(); @@ -116,9 +133,6 @@ $(function(){ return; } - // Avoid form redirecting automatically - event.preventDefault(); - // Get form data let form_data = $('form').serializeArray(); @@ -171,7 +185,7 @@ $(function(){ // Break Begruendung abgeben $('#reviewAnrechnungDetail-begruendung-abbrechen').click(function(){ - $('#reviewAnrechnungDetail-begruendung').val(''); + begruendung_panel.slideUp('slow'); }) @@ -196,6 +210,24 @@ var reviewAnrechnung = { $('#reviewAnrechnungDetail-status_kurzbz').closest('div').addClass('alert-warning'); } }, + setEmpfehlungstext: function () { + let empfehlung = $('#reviewAnrechnungDetail-empfehlung').data('empfehlung'); + + switch (empfehlung) { + case true: + $('#reviewAnrechnungDetail-empfehlungDetail-empfehlung') + .addClass('text-success') + .html(FHC_PhrasesLib.t("anrechnung", "empfehlungPositivConfirmed")); + break; + case false: + $('#reviewAnrechnungDetail-empfehlungDetail-empfehlung') + .addClass('text-danger') + .html(FHC_PhrasesLib.t("anrechnung", "empfehlungNegativConfirmed")); + break; + default: + $('#reviewAnrechnungDetail-empfehlungDetail-empfehlung').html('-'); + } + }, initTooltips: function (){ $('[data-toggle="tooltip"]').tooltip({ delay: { "show": 200, "hide": 200 }, @@ -213,22 +245,28 @@ var reviewAnrechnung = { textarea.val($.trim($(elem).parent().find('span:first').text())); }, formatEmpfehlungIsTrue: function(empfehlungAm, emfehlungVon, statusBezeichnung){ - $('#reviewAnrechnungDetail-empfehlungDetail').children().addClass('hidden'); - $('#reviewAnrechnungDetail-empfehlungDetail-empfehlungIsTrue').removeClass('hidden'); $('#reviewAnrechnungDetail-status_kurzbz').text(statusBezeichnung); $('#reviewAnrechnungDetail-recommend-anrechnung-ask').prop('disabled', true); $('#reviewAnrechnungDetail-dont-recommend-anrechnung-ask').prop('disabled', true); $('#reviewAnrechnungDetail-empfehlungAm').text(empfehlungAm); $('#reviewAnrechnungDetail-empfehlungVon').text(emfehlungVon); + $('#reviewAnrechnungDetail-empfehlungDetail-empfehlung') + .addClass('text-success') + .html(FHC_PhrasesLib.t("anrechnung", "empfehlungPositivConfirmed")); + $('#reviewAnrechnungDetail-empfehlungDetail-empfehlungAm').html(empfehlungAm); + $('#reviewAnrechnungDetail-empfehlungDetail-empfehlungVon').html(emfehlungVon); }, formatEmpfehlungIsFalse: function(empfehlungAm, emfehlungVon, statusBezeichnung, begruendung){ - $('#reviewAnrechnungDetail-empfehlungDetail').children().addClass('hidden'); - $('#reviewAnrechnungDetail-empfehlungDetail-empfehlungIsFalse').removeClass('hidden'); $('#reviewAnrechnungDetail-status_kurzbz').text(statusBezeichnung); $('#reviewAnrechnungDetail-recommend-anrechnung-ask').prop('disabled', true); $('#reviewAnrechnungDetail-dont-recommend-anrechnung-ask').prop('disabled', true); $('#reviewAnrechnungDetail-empfehlungAm').text(empfehlungAm); $('#reviewAnrechnungDetail-empfehlungVon').text(emfehlungVon); + $('#reviewAnrechnungDetail-empfehlungDetail-empfehlung') + .addClass('text-danger') + .html(FHC_PhrasesLib.t("anrechnung", "empfehlungNegativConfirmed")); + $('#reviewAnrechnungDetail-empfehlungDetail-empfehlungAm').html(empfehlungAm); + $('#reviewAnrechnungDetail-empfehlungDetail-empfehlungVon').html(emfehlungVon); $('#reviewAnrechnungDetail-empfehlungDetail-begruendung').text(begruendung); } } \ No newline at end of file diff --git a/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js b/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js index f9bbbc310..2cf7c1623 100644 --- a/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js +++ b/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js @@ -9,6 +9,20 @@ const ANRECHNUNGSTATUS_REJECTED = 'rejected'; const COLOR_LIGHTGREY = "#f5f5f5"; +// ----------------------------------------------------------------------------------------------------------------- +// Mutators - setter methods to manipulate table data when entering the tabulator +// ----------------------------------------------------------------------------------------------------------------- + +// Converts string date postgre style to string DD.MM.YYYY. +// This will allow correct filtering. +var mut_formatStringDate = function(value, data, type, params, component) { + if (value != null) + { + var d = new Date(value); + return ("0" + (d.getDate())).slice(-2) + "." + ("0" + (d.getMonth() + 1)).slice(-2) + "." + d.getFullYear(); + } +} + // TABULATOR FUNCTIONS // --------------------------------------------------------------------------------------------------------------------- // Returns relative height (depending on screen size) @@ -48,8 +62,8 @@ function func_tableBuilt(table) { label:"Details", url:function(cell){ return BASE_URL + "/" + APPROVE_ANRECHNUNG_DETAIL_URI + "?anrechnung_id=" + cell.getData().anrechnung_id - } - // target:"_blank" + }, + target:"_blank" } }, false, "status" // place column after status ); @@ -213,13 +227,20 @@ $(function(){ if (empfehlung_panel.is(":hidden")) { // Show begruendung panel if is hidden - empfehlung_panel.slideDown('slow'); + empfehlung_panel.slideDown(400, function() { + $('html, body').animate({ + scrollTop: empfehlung_panel.offset().top // Move empfehlung panel bottom up to be visible within window screen + }, 400); + }); return; } }); // Recommend Anrechnungen - $("#reviewAnrechnungUebersicht-recommend-anrechnungen-confirm").click(function(){ + $("#reviewAnrechnungUebersicht-recommend-anrechnungen-confirm").click(function(e){ + + // Avoid bubbling click event to sibling break button + e.stopImmediatePropagation(); // Get selected rows data let selected_data = $('#tableWidgetTabulator').tabulator('getSelectedData') @@ -283,13 +304,20 @@ $(function(){ if (begruendung_panel.is(":hidden")) { // Show begruendung panel if is hidden - begruendung_panel.slideDown('slow'); + begruendung_panel.slideDown(400, function() { + $('html, body').animate({ + scrollTop: begruendung_panel.offset().top // Move genehmigung panel bottom up to be visible within window screen + }, 400); + }); return; } }); // Dont recommend Anrechnungen - $("#reviewAnrechnungUebersicht-dont-recommend-anrechnungen-confirm").click(function(){ + $("#reviewAnrechnungUebersicht-dont-recommend-anrechnungen-confirm").click(function(e){ + + // Avoid bubbling click event to sibling break button + e.stopImmediatePropagation(); let begruendung = $('#reviewAnrechnungUebersicht-begruendung').val(); @@ -319,9 +347,6 @@ $(function(){ return; } - // Avoid form redirecting automatically - event.preventDefault(); - // Prepare data object for ajax call let data = { 'data': selected_data @@ -367,7 +392,7 @@ $(function(){ // Break Begruendung abgeben $('#reviewAnrechnungUebersicht-begruendung-abbrechen').click(function(){ - $('#reviewAnrechnungUebersicht-begruendung').val(''); + begruendung_panel.slideUp('slow'); }) diff --git a/rdf/abschlusspruefung.rdf.php b/rdf/abschlusspruefung.rdf.php index f28319599..8c2764d86 100644 --- a/rdf/abschlusspruefung.rdf.php +++ b/rdf/abschlusspruefung.rdf.php @@ -129,7 +129,19 @@ function draw_content_xml($row) if($person->load($row->pruefer3)) $pruefer3 = trim($person->titelpre.' '.$person->vorname.' '.$person->nachname.' '.$person->titelpost); - $qry = "SELECT * FROM public.tbl_benutzerfunktion JOIN campus.vw_mitarbeiter USING(uid) WHERE funktion_kurzbz='rek'"; + $qry = "SELECT * + FROM PUBLIC.tbl_benutzerfunktion + JOIN campus.vw_mitarbeiter USING (uid) + WHERE funktion_kurzbz = 'rek' + AND ( + tbl_benutzerfunktion.datum_von <= now() + OR tbl_benutzerfunktion.datum_von IS NULL + ) + AND ( + tbl_benutzerfunktion.datum_bis >= now() + OR tbl_benutzerfunktion.datum_bis IS NULL + ) + ORDER BY tbl_benutzerfunktion.insertamum DESC LIMIT 1"; $rektor = ''; $db = new basis_db(); $db2 = new basis_db(); diff --git a/rdf/anrechnung.rdf.php b/rdf/anrechnung.rdf.php index 5d50c3161..14fc1fd1a 100644 --- a/rdf/anrechnung.rdf.php +++ b/rdf/anrechnung.rdf.php @@ -28,10 +28,27 @@ $anrechnung = new anrechnung(); if(is_numeric($anrechnung_id)) { $anrechnung->getAnrechnung($anrechnung_id); + + // Add last Anrechnungstatus + $anrechnungstatus = new Anrechnung(); + $anrechnungstatus->getLastAnrechnungstatus($anrechnung_id); + + $anrechnung->result[0]->status = $anrechnungstatus->result[0]->bezeichnung_mehrsprachig[DEFAULT_LANGUAGE]; } elseif(is_numeric($prestudent_id)) { $anrechnung->getAnrechnungPrestudent($prestudent_id); + + // Add last Anrechnungstatus to each Anrechnung of Prestudent + if(is_array($anrechnung->result)) + { + foreach ($anrechnung->result as $row) + { + $anrechnungstatus = new Anrechnung(); + $status = $anrechnungstatus->getLastAnrechnungstatus($row->anrechnung_id); + $row->status = $anrechnungstatus->result[0]->bezeichnung_mehrsprachig[DEFAULT_LANGUAGE]; + } + } } else { @@ -80,6 +97,7 @@ if(is_array($anrechnung->result)) insertvon.']]> updateamum.']]> updatevon.']]> + status.']]> '; @@ -88,4 +106,4 @@ if(is_array($anrechnung->result)) ?> - \ No newline at end of file + diff --git a/rdf/student.rdf.php b/rdf/student.rdf.php index 3771f7d5e..008289d94 100644 --- a/rdf/student.rdf.php +++ b/rdf/student.rdf.php @@ -61,8 +61,9 @@ function convdate($date) function checkfilter($row, $filter2, $buchungstyp = null) { - global $studiensemester_kurzbz, $kontofilterstg; + global $studiensemester_kurzbz, $kontofilterstg, $studiengang_kz; $db = new basis_db(); + $studstatusgrund = array(); if($filter2=='dokumente') { @@ -157,6 +158,21 @@ function checkfilter($row, $filter2, $buchungstyp = null) } } } + elseif ( preg_match('/^stud-statusgrund-([0-9]+)$/', $filter2, $studstatusgrund) ) + { + // Alle Studenten mit Statusgrund in tbl_prestudentstatus + $qry = "SELECT count(*) AS anzahl FROM public.tbl_prestudentstatus ps JOIN + public.tbl_prestudent p ON p.prestudent_id = ps.prestudent_id AND + ps. studiensemester_kurzbz=".$db->db_add_param($studiensemester_kurzbz)." AND + p. person_id=".$db->db_add_param($row->person_id, FHC_INTEGER)." AND + p.studiengang_kz=" . $db->db_add_param($studiengang_kz, FHC_INTEGER) . " AND + ps.statusgrund_id = " . $db->db_add_param($studstatusgrund[1], FHC_INTEGER); + //echo $qry . "\n"; + $filtered = ( $db->db_query($qry) && ($row_filter = $db->db_fetch_object()) && ($row_filter->anzahl > 0) ) + ? true + : false; + return $filtered; + } return true; } diff --git a/system/account_deaktivierung_mail.php b/system/account_deaktivierung_mail.php index 8668290d7..ede3f1f2f 100644 --- a/system/account_deaktivierung_mail.php +++ b/system/account_deaktivierung_mail.php @@ -1,5 +1,7 @@ and * Rudolf Hangl . */ -/* - * - Dieses Script versendet automatisch Mails an Accounts die Deaktiviert wurden. - * und informiert die Benutzer ueber die Folgen der Deaktivierung - * + +/** + * Dieses Script versendet automatisch Mails an Accounts die Deaktiviert wurden. + * und informiert die Benutzer ueber die Folgen der Deaktivierung */ -require_once('../config/vilesci.config.inc.php'); -require_once('../include/basis_db.class.php'); -require_once('../include/mail.class.php'); + +require_once(dirname(__FILE__).'/../config/vilesci.config.inc.php'); +require_once(dirname(__FILE__).'/../include/basis_db.class.php'); +require_once(dirname(__FILE__).'/../include/mail.class.php'); $db = new basis_db(); -$text=''; -$wochen_zum_entfernen=1; -echo ' - - - Account Deaktivierung - Infomails - - - -

Account Deaktivierung - Infomails

'; +$text = ''; +$wochen_zum_entfernen = 1; // Alle die vor einer Woche inaktiv gesetzt wurden darueber informieren -$qry = "SELECT uid, (SELECT mitarbeiter_uid FROM public.tbl_mitarbeiter WHERE mitarbeiter_uid=uid) as mitarbeiter FROM public.tbl_benutzer WHERE aktiv=false AND updateaktivam=CURRENT_DATE- interval '".$wochen_zum_entfernen." week'"; -if($result = $db->db_query($qry)) +$qry = "SELECT uid, + (SELECT mitarbeiter_uid FROM public.tbl_mitarbeiter WHERE mitarbeiter_uid = uid) as mitarbeiter + FROM public.tbl_benutzer + WHERE aktiv = false + AND updateaktivam = CURRENT_DATE - interval '".$wochen_zum_entfernen." week'"; + +if ($result = $db->db_query($qry)) { - while($row = $db->db_fetch_object($result)) + while ($row = $db->db_fetch_object($result)) { - if($row->mitarbeiter!='') + if ($row->mitarbeiter != '') { - //Mitarbeiter + // Mitarbeiter $message = "Dies ist eine automatische Nachricht!\n"; $message .= "\n"; - $message .= "Wir möchten Sie darauf aufmerksam machen, dass Ihr Benutzerdatensatz deaktiviert wurde. Durch diese Deaktivierung wurden Sie auch aus allen Email-Verteilern gelöscht. \n\n"; - $message .= "Sollte innerhalb von 12 Monaten nach der Deaktivierung keine neuerliche Aktivierung Ihres Benutzerdatensatzes erfolgen, dann werden automatisch auch\n"; + $message .= "Wir möchten Sie darauf aufmerksam machen, dass Ihr Benutzerdatensatz deaktiviert wurde. + Durch diese Deaktivierung wurden Sie auch aus allen Email-Verteilern gelöscht. \n\n"; + $message .= "Sollte innerhalb von 12 Monaten nach der Deaktivierung keine neuerliche Aktivierung Ihres + Benutzerdatensatzes erfolgen, dann werden automatisch auch\n"; $message .= " - Ihr Account, \n"; $message .= " - Ihre Mailbox (inkl. aller E-Mails) und\n"; $message .= " - Ihr Home-Verzeichnis (inkl. aller Dateien) gelöscht werden.\n"; $message .= "\n"; - $message .= "Falls es sich bei der Deaktivierung um einen Irrtum handelt, würden wir Sie bitten, sich umgehend mit den KollegInnen in der Personalabteilung in Verbindung zu setzen: "; + $message .= "Falls es sich bei der Deaktivierung um einen Irrtum handelt, würden wir Sie bitten, + sich umgehend mit den KollegInnen in der Personalabteilung in Verbindung zu setzen: "; $message .= "Frau Natalie König, natalie.koenig@technikum-wien.at\n"; $message .= "\n"; $message .= "Mit freundlichen Grüßen\n"; @@ -66,21 +69,25 @@ if($result = $db->db_query($qry)) $message .= "Höchstädtplatz 6\n"; $message .= "1200 Wien \n"; $message .= "\n"; - $message .= "Falls Sie weiterhin über Neuigkeiten an der FH Technikum Wien informiert werden wollen, können Sie unter www.technikum-wien.at/newsletter den kostenlosen Newsletter abonnieren."; + $message .= "Falls Sie weiterhin über Neuigkeiten an der FH Technikum Wien informiert werden wollen, + können Sie unter www.technikum-wien.at/newsletter den kostenlosen Newsletter abonnieren."; } else { - //Student + // Student $message = "Dies ist eine automatische Nachricht!\n"; $message .= "\n"; - $message .= "Wir möchten Sie darauf aufmerksam machen, dass Ihr Benutzerdatensatz deaktiviert wurde. Durch diese Deaktivierung wurden Sie auch aus allen Email-Verteilern gelöscht.\n"; + $message .= "Wir möchten Sie darauf aufmerksam machen, dass Ihr Benutzerdatensatz deaktiviert wurde. + Durch diese Deaktivierung wurden Sie auch aus allen Email-Verteilern gelöscht.\n"; $message .= "\n"; - $message .= "Sollte innerhalb von 6 Monaten (für Studierende) bzw. 3 Wochen (für AbbrecherInnen) nach der Deaktivierung keine neuerliche Aktivierung Ihres Benutzerdatensatzes erfolgen, dann werden automatisch auch\n"; + $message .= "Sollte innerhalb von 6 Monaten (für Studierende) bzw. 3 Wochen (für AbbrecherInnen) nach der + Deaktivierung keine neuerliche Aktivierung Ihres Benutzerdatensatzes erfolgen, dann werden automatisch auch\n"; $message .= " - Ihr Account,\n"; $message .= " - Ihre Mailbox (inkl. aller E-Mails) und\n"; $message .= " - Ihr Home-Verzeichnis (inkl. aller Dateien) gelöscht werden.\n"; $message .= "\n"; - $message .= "Falls es sich bei der Deaktivierung um einen Irrtum handelt, würden wir Sie bitten, sich umgehend mit Ihrer Studiengangsassistenz in Verbindung zu setzen.\n"; + $message .= "Falls es sich bei der Deaktivierung um einen Irrtum handelt, würden wir Sie bitten, + sich umgehend mit Ihrer Studiengangsassistenz in Verbindung zu setzen.\n"; $message .= "\n"; $message .= "Mit freundlichen Grüßen\n"; $message .= "\n"; @@ -88,35 +95,44 @@ if($result = $db->db_query($qry)) $message .= "Höchstädtplatz 6\n"; $message .= "1200 Wien\n"; $message .= "\n"; - $message .= "Falls Sie weiterhin über Neuigkeiten an der FH Technikum Wien informiert werden wollen, können Sie unter www.technikum-wien.at/newsletter den kostenlosen Newsletter abonnieren.\n"; + $message .= "Falls Sie weiterhin über Neuigkeiten an der FH Technikum Wien informiert werden wollen, + können Sie unter www.technikum-wien.at/newsletter den kostenlosen Newsletter abonnieren.\n"; } $to = $row->uid.'@'.DOMAIN; - $mail = new mail($to,'no-reply@'.DOMAIN,'Ihr Datensatz wurde deaktiviert! '.$row->uid, $message); - $mail->send(); - $text.= "Warnung zur Accountloeschung wurde an $row->uid verschickt\n"; + $mail = new mail($to, 'no-reply@'.DOMAIN, 'Ihr Datensatz wurde deaktiviert! '.$row->uid, $message); + if ($mail->send()) + $text .= "Warnung zur Accountloeschung wurde an $row->uid verschickt\n"; + else + $text .= "Fehler beim Senden des Mails an $to: ".$message; } } // Letzte Warnung vor Accountloeschung verschicken // Abbrecher -$qry = "SELECT uid FROM public.tbl_benutzer JOIN public.tbl_student ON(uid=student_uid) WHERE - aktiv=false AND updateaktivam=CURRENT_DATE- interval '".DEL_ABBRECHER_WEEKS." week' - AND get_rolle_prestudent (prestudent_id, NULL)='Abbrecher' "; -if($result = $db->db_query($qry)) +$qry = "SELECT uid + FROM public.tbl_benutzer + JOIN public.tbl_student ON(uid=student_uid) + WHERE aktiv = false + AND updateaktivam = CURRENT_DATE - interval '".DEL_ABBRECHER_WEEKS." week' + AND get_rolle_prestudent (prestudent_id, NULL) = 'Abbrecher'"; + +if ($result = $db->db_query($qry)) { - while($row = $db->db_fetch_object($result)) + while ($row = $db->db_fetch_object($result)) { $message = "Dies ist eine automatische Nachricht!\n"; $message .= "\n"; - $message .= "ACHTUNG: Ihr Benutzerdatensatz wurde vor ".(DEL_ABBRECHER_WEEKS > 1?DEL_ABBRECHER_WEEKS." Wochen ":"einer Woche ")."deaktiviert! Sollte innerhalb der nächsten Tage keine neuerliche Aktivierung Ihres Benutzerdatensatzes erfolgen, dann werden automatisch auch\n"; + $message .= "ACHTUNG: Ihr Benutzerdatensatz wurde vor ".(DEL_ABBRECHER_WEEKS > 1?DEL_ABBRECHER_WEEKS." Wochen ":"einer Woche ")."deaktiviert! + Sollte innerhalb der nächsten Tage keine neuerliche Aktivierung Ihres Benutzerdatensatzes erfolgen, dann werden automatisch auch\n"; $message .= " - Ihr Account,\n"; $message .= " - Ihre Mailbox (inkl. aller E-Mails) und\n"; $message .= " - Ihr Home-Verzeichnis (inkl. aller Dateien) gelöscht werden.\n"; $message .= "\n"; - $message .= "Falls es sich bei der Deaktivierung um einen Irrtum handelt, würden wir Sie bitten, sich umgehend mit Ihrer Studiengangsassistenz in Verbindung zu setzen.\n"; + $message .= "Falls es sich bei der Deaktivierung um einen Irrtum handelt, würden wir Sie bitten, sich umgehend mit Ihrer + Studiengangsassistenz in Verbindung zu setzen.\n"; $message .= "\n"; $message .= "Mit freundlichen Grüßen\n"; $message .= "\n"; @@ -124,61 +140,84 @@ if($result = $db->db_query($qry)) $message .= "Höchstädtplatz 6\n"; $message .= "1200 Wien \n"; $message .= "\n"; - $message .= "Falls Sie weiterhin über Neuigkeiten an der FH Technikum Wien informiert werden wollen, können Sie unter www.technikum-wien.at/newsletter den kostenlosen Newsletter abonnieren.\n"; + $message .= "Falls Sie weiterhin über Neuigkeiten an der FH Technikum Wien informiert werden wollen, + können Sie unter www.technikum-wien.at/newsletter den kostenlosen Newsletter abonnieren.\n"; $to = $row->uid.'@'.DOMAIN; - $mail = new mail($to,'no-reply@'.DOMAIN,'Ihr Datensatz wurde deaktiviert! Letzte Warnung '.$row->uid, $message); - $mail->send(); - $text.= "Letzte Warnung zur Accountloeschung wurde an $row->uid verschickt\n"; + $mail = new mail($to, 'no-reply@'.DOMAIN, 'Ihr Datensatz wurde deaktiviert! Letzte Warnung '.$row->uid, $message); + if ($mail->send()) + $text .= "Letzte Warnung zur Accountloeschung wurde an $row->uid verschickt\n"; + else + $text .= "Fehler beim Senden des Mails an $to: ".$message; } } - // Abbrecher an Bibliothek melden wenn diese inaktiv gesetzt wurden -$qry = "SELECT uid, vorname, nachname, titelpre, titelpost FROM public.tbl_benutzer JOIN public.tbl_student ON(uid=student_uid) JOIN public.tbl_person USING(person_id) WHERE - tbl_benutzer.aktiv=false AND tbl_benutzer.updateaktivam=(CURRENT_DATE - '1 day'::interval)::date - AND get_rolle_prestudent (prestudent_id, NULL)='Abbrecher' "; -if($result = $db->db_query($qry)) + +$qry = "SELECT uid, + vorname, + nachname, + titelpre, + titelpost + FROM public.tbl_benutzer + JOIN public.tbl_student ON (uid = student_uid) + JOIN public.tbl_person USING (person_id) + WHERE tbl_benutzer.aktiv = false + AND tbl_benutzer.updateaktivam = (CURRENT_DATE - '1 day'::interval)::date + AND get_rolle_prestudent (prestudent_id, NULL) = 'Abbrecher'"; + +if ($result = $db->db_query($qry)) { - if($db->db_num_rows($result)>0) + if ($db->db_num_rows($result) > 0) { $message = "Dies ist eine automatische Nachricht!\n\n"; - $message.= "Die folgenden Studierenden wurden als Abbrecher eingetragen:\n\n"; - while($row = $db->db_fetch_object($result)) + $message .= "Die folgenden Studierenden wurden als Abbrecher eingetragen:\n\n"; + + while ($row = $db->db_fetch_object($result)) { - $message.=trim($row->titelpre.' '.$row->vorname.' '.$row->nachname.' '.$row->titelpost).' ( '.$row->uid.'@'.DOMAIN." )\n"; + $message .= trim($row->titelpre.' '.$row->vorname.' '.$row->nachname.' '.$row->titelpost).' ( '.$row->uid.'@'.DOMAIN." )\n"; } + $message .= "\nMit freundlichen Grüßen\n"; $message .= "\n"; $message .= "Fachhochschule Technikum Wien\n"; $message .= "Höchstädtplatz 6\n"; $message .= "1200 Wien \n"; $to = 'wienerro@technikum-wien.at, astfaell@technikum-wien.at, olensky@technikum-wien.at'; - $mail = new mail($to,'no-reply@'.DOMAIN,'Abbrecher Information', $message); - if($mail->send()) - $text.="Abbrecher Infomail an $to verschickt\n"; + + $mail = new mail($to, 'no-reply@'.DOMAIN, 'Abbrecher Information', $message); + if ($mail->send()) + $text .= "Abbrecher Infomail an $to verschickt\n"; else - $text.="Fehler beim Versenden des Abbrecher Infomails an $to !\n"; + $text .= "Fehler beim Senden des Mails an $to: ".$message; } } // Studenten -$qry = "SELECT uid FROM public.tbl_benutzer JOIN public.tbl_student ON(uid=student_uid) WHERE - aktiv=false AND updateaktivam=CURRENT_DATE- interval '".DEL_STUDENT_WEEKS." week' - AND get_rolle_prestudent (prestudent_id, NULL)<>'Abbrecher'"; -if($result = $db->db_query($qry)) + +$qry = "SELECT uid + FROM public.tbl_benutzer + JOIN public.tbl_student ON (uid=student_uid) + WHERE aktiv = false + AND updateaktivam = CURRENT_DATE - interval '".DEL_STUDENT_WEEKS." week' + AND get_rolle_prestudent (prestudent_id, NULL) <> 'Abbrecher'"; + +if ($result = $db->db_query($qry)) { - while($row = $db->db_fetch_object($result)) + while ($row = $db->db_fetch_object($result)) { $message = "Dies ist eine automatische Nachricht!\n"; $message .= "\n"; - $message .= "ACHTUNG: Ihr Benutzerdatensatz wurde vor ".(DEL_STUDENT_WEEKS > 1?DEL_STUDENT_WEEKS." Wochen ":"einer Woche ")."deaktiviert! Sollte innerhalb der nächsten Tage keine neuerliche Aktivierung Ihres Benutzerdatensatzes erfolgen, dann werden automatisch auch\n"; + $message .= "ACHTUNG: Ihr Benutzerdatensatz wurde vor ".(DEL_STUDENT_WEEKS > 1?DEL_STUDENT_WEEKS." Wochen ":"einer Woche "). + "deaktiviert! Sollte innerhalb der nächsten Tage keine neuerliche Aktivierung Ihres Benutzerdatensatzes erfolgen, + dann werden automatisch auch\n"; $message .= " - Ihr Account,\n"; $message .= " - Ihre Mailbox (inkl. aller E-Mails) und\n"; $message .= " - Ihr Home-Verzeichnis (inkl. aller Dateien) gelöscht werden\n"; $message .= "\n"; - $message .= "Falls es sich bei der Deaktivierung um einen Irrtum handelt, würden wir Sie bitten, sich umgehend mit Ihrer Studiengangsassistenz in Verbindung zu setzen.\n"; + $message .= "Falls es sich bei der Deaktivierung um einen Irrtum handelt, würden wir Sie bitten, + sich umgehend mit Ihrer Studiengangsassistenz in Verbindung zu setzen.\n"; $message .= "\n"; $message .= "Mit freundlichen Grüßen\n"; $message .= "\n"; @@ -186,32 +225,42 @@ if($result = $db->db_query($qry)) $message .= "Höchstädtplatz 6\n"; $message .= "1200 Wien \n"; $message .= "\n"; - $message .= "Falls Sie weiterhin über Neuigkeiten an der FH Technikum Wien informiert werden wollen, können Sie unter www.technikum-wien.at/newsletter den kostenlosen Newsletter abonnieren.\n"; + $message .= "Falls Sie weiterhin über Neuigkeiten an der FH Technikum Wien informiert werden wollen, + können Sie unter www.technikum-wien.at/newsletter den kostenlosen Newsletter abonnieren.\n"; $to = $row->uid.'@'.DOMAIN; - $mail = new mail($to,'no-reply@'.DOMAIN,'Ihr Datensatz wurde deaktiviert! Letzte Warnung '.$row->uid, $message); - $mail->send(); - $text.= "Letzte Warnung zur Accountloeschung wurde an $row->uid verschickt\n"; + $mail = new mail($to, 'no-reply@'.DOMAIN, 'Ihr Datensatz wurde deaktiviert! Letzte Warnung '.$row->uid, $message); + if ($mail->send()) + $text .= "Letzte Warnung zur Accountloeschung wurde an $row->uid verschickt\n"; + else + $text .= "Fehler beim Versenden des Abbrecher Infomails an $to !\n"; } } // Mitarbeiter -$qry = "SELECT uid FROM public.tbl_benutzer JOIN public.tbl_mitarbeiter ON(uid=mitarbeiter_uid) WHERE - aktiv=false AND updateaktivam=CURRENT_DATE- interval '".DEL_MITARBEITER_WEEKS." week' "; -if($result = $db->db_query($qry)) +$qry = "SELECT uid + FROM public.tbl_benutzer + JOIN public.tbl_mitarbeiter ON (uid = mitarbeiter_uid) + WHERE aktiv = false + AND updateaktivam = CURRENT_DATE - interval '".DEL_MITARBEITER_WEEKS." week' "; + +if ($result = $db->db_query($qry)) { - while($row = $db->db_fetch_object($result)) + while ($row = $db->db_fetch_object($result)) { $message = "Dies ist eine automatische Nachricht!\n"; $message .= "\n"; - $message .= "ACHTUNG: Ihr Benutzerdatensatz wurde vor ".(DEL_MITARBEITER_WEEKS > 1?DEL_MITARBEITER_WEEKS." Wochen ":"einer Woche ")."deaktiviert! Sollte innerhalb der nächsten Tage keine neuerliche Aktivierung Ihres Benutzerdatensatzes erfolgen, dann werden automatisch auch\n"; + $message .= "ACHTUNG: Ihr Benutzerdatensatz wurde vor ".(DEL_MITARBEITER_WEEKS > 1?DEL_MITARBEITER_WEEKS." Wochen ":"einer Woche "). + "deaktiviert! Sollte innerhalb der nächsten Tage keine neuerliche Aktivierung Ihres Benutzerdatensatzes erfolgen, + dann werden automatisch auch\n"; $message .= " - Ihr Account,\n"; $message .= " - Ihre Mailbox (inkl. aller E-Mails) und\n"; $message .= " - Ihr Home-Verzeichnis (inkl. aller Dateien) gelöscht werden\n"; $message .= "\n"; - $message .= "Falls es sich bei der Deaktivierung um einen Irrtum handelt, würden wir Sie bitten, sich umgehend mit den KollegInnen in der Personalabteilung in Verbindung zu setzen: "; + $message .= "Falls es sich bei der Deaktivierung um einen Irrtum handelt, würden wir Sie bitten, + sich umgehend mit den KollegInnen in der Personalabteilung in Verbindung zu setzen: "; $message .= "Frau Natalie König, natalie.koenig@technikum-wien.at\n"; $message .= "\n"; $message .= "Mit freundlichen Grüßen\n"; @@ -220,22 +269,20 @@ if($result = $db->db_query($qry)) $message .= "Höchstädtplatz 6\n"; $message .= "1200 Wien \n"; $message .= "\n"; - $message .= "Falls Sie weiterhin über Neuigkeiten an der FH Technikum Wien informiert werden wollen, können Sie unter www.technikum-wien.at/newsletter den kostenlosen Newsletter abonnieren.\n"; + $message .= "Falls Sie weiterhin über Neuigkeiten an der FH Technikum Wien informiert werden wollen, + können Sie unter www.technikum-wien.at/newsletter den kostenlosen Newsletter abonnieren.\n"; $to = $row->uid.'@'.DOMAIN; - $mail = new mail($to,'no-reply@'.DOMAIN, 'Ihr Datensatz wurde deaktiviert! Letzte Warnung '.$row->uid, $message); - $mail->send(); - $text.= "Letzte Warnung zur Accountloeschung wurde an $row->uid verschickt\n"; + $mail = new mail($to, 'no-reply@'.DOMAIN, 'Ihr Datensatz wurde deaktiviert! Letzte Warnung '.$row->uid, $message); + if ($mail->send()) + $text .= "Letzte Warnung zur Accountloeschung wurde an $row->uid verschickt\n"; + else + $text .= "Fehler beim Versenden des Abbrecher Infomails an $to !\n"; } } -echo nl2br($text); -if($text!='') -{ - $mail = new mail(MAIL_IT.', vilesci@technikum-wien.at', 'vilesci@'.DOMAIN, 'Account Deaktivierung', "Dies ist eine automatische Mail!\nFolgende Warnungen zur Accountloeschung wurden versandt:\n\n".$text); - $mail->send(); -} +echo $text; -echo ''; ?> + diff --git a/system/ampel_erinnerungsmail.php b/system/ampel_erinnerungsmail.php index 02b882965..ae7efc3e1 100644 --- a/system/ampel_erinnerungsmail.php +++ b/system/ampel_erinnerungsmail.php @@ -43,6 +43,12 @@ foreach($ampel->result as $a) $uid = $row->uid; $mail = new mail($uid.'@'.DOMAIN, 'cis@'.DOMAIN, $subject, $message); + + // If message has HTML content + if($message != strip_tags($message)) { + $mail->setHTMLContent(sprintf('%s', $message)); + } + if($mail->send()) echo "Email an $uid versandt\n"; else diff --git a/system/check_neue_lektoren.php b/system/check_neue_lektoren.php index e84953998..43bb38bf5 100644 --- a/system/check_neue_lektoren.php +++ b/system/check_neue_lektoren.php @@ -1,5 +1,7 @@ and * Rudolf Hangl . */ -/* + +/** * Prueft ob am Vortag neue Lektoren einen Lehrauftrag bekommen haben * die vorher noch keinen hatten. * Diese werden dann an die Geschaeftsstelle gemeldet damit diese @@ -27,18 +30,19 @@ * Wenn kein aktuelles Studiensemester vorhanden ist, wird keine * Nachricht versendet. */ -require_once('../config/vilesci.config.inc.php'); -require_once('../include/studiensemester.class.php'); -require_once('../include/mail.class.php'); + +require_once(dirname(__FILE__).'/../config/vilesci.config.inc.php'); +require_once(dirname(__FILE__).'/../include/studiensemester.class.php'); +require_once(dirname(__FILE__).'/../include/mail.class.php'); $stsem = new studiensemester(); -if(!$studiensemester = $stsem->getakt()) +if (!$studiensemester = $stsem->getakt()) die('Es ist kein aktuelles Studiensemester vorhanden -> Versand nicht noetig'); $db = new basis_db(); -//Alle Lektoren holen die am Vortag zu einer Lehreinheit zugeteilt wurden -//und in diesem Studiensemester noch keinen Lehrauftrag haben. +// Alle Lektoren holen die am Vortag zu einer Lehreinheit zugeteilt wurden +// und in diesem Studiensemester noch keinen Lehrauftrag haben. $qry=" SELECT vorname, nachname, titelpre, titelpost, uid FROM public.tbl_person JOIN public.tbl_benutzer USING(person_id) @@ -56,29 +60,33 @@ WHERE uid IN( ) "; -if($result = $db->db_query($qry)) +if ($result = $db->db_query($qry)) { - if($db->db_num_rows($result)>0) + if ($db->db_num_rows($result) > 0) { - $mitarbeiter=''; - while($row = $db->db_fetch_object($result)) + $mitarbeiter = ''; + + while ($row = $db->db_fetch_object($result)) { $mitarbeiter .= trim($row->titelpre.' '.$row->vorname.' '.$row->nachname.' '.$row->titelpost)." ($row->uid)\n"; } + $message = "Dies ist eine automatische Mail!\n"; - $message.= "Folgende Lektoren haben in diesem Studiensemester zum ersten Mal einen Lehrauftrag erhalten:\n\n"; - $message.=$mitarbeiter; + $message .= "Folgende Lektoren haben in diesem Studiensemester zum ersten Mal einen Lehrauftrag erhalten:\n\n"; + $message .= $mitarbeiter; $to = MAIL_GST; - $mail = new mail($to,'vilesci@'.DOMAIN,'Neue Lektoren mit Lehrauftrag', $message); - if($mail->send()) - echo "Mail wurde an $to versandt:
".nl2br($message); + $mail = new mail($to, 'vilesci@'.DOMAIN, 'Neue Lektoren mit Lehrauftrag', $message); + if ($mail->send()) + echo "Mail wurde an $to versandt: ".$message; else - echo "Fehler beim Senden des Mails an $to:
".nl2br($message); + echo "Fehler beim Senden des Mails an $to: ".$message; } else { echo 'Es sind keine neuen Lektoren hinzugefuegt worden'; } } -?> \ No newline at end of file + +?> + diff --git a/system/check_studentlehrverband.php b/system/check_studentlehrverband.php index 60728ab6f..6546dc872 100644 --- a/system/check_studentlehrverband.php +++ b/system/check_studentlehrverband.php @@ -1,5 +1,7 @@ and * Gerald Simane-Sequens */ -// ************************************ -// * Script zur Pruefung und Korrektur -// * moeglicher Inkonsistenzen -// * -// * - Studenten ohne Prestudent_id werden korrigiert -// * - Inkonsistenzen der Tabellen tbl_studentlehrverband, tbl_student werden korrigiert -// ********************************** + +/** + * Script zur Pruefung und Korrektur + * moeglicher Inkonsistenzen + * + * - Studenten ohne Prestudent_id werden korrigiert + * - Inkonsistenzen der Tabellen tbl_studentlehrverband, tbl_student werden korrigiert + */ + require_once(dirname(__FILE__).'/../config/vilesci.config.inc.php'); require_once(dirname(__FILE__).'/../include/studiensemester.class.php'); require_once(dirname(__FILE__).'/../include/person.class.php'); @@ -38,34 +42,41 @@ require_once(dirname(__FILE__).'/../include/mail.class.php'); $db = new basis_db(); -$anzahl_neue_prestudent_id=0; -$anzahl_fehler_prestudent=0; -$anzahl_gruppenaenderung=0; -$anzahl_gruppenaenderung_fehler=0; -$text=''; -$statistik =''; -$abunterbrecher_verschoben_error=0; -$abunterbrecher_verschoben=0; +$anzahl_neue_prestudent_id = 0; +$anzahl_fehler_prestudent = 0; +$anzahl_gruppenaenderung = 0; +$anzahl_gruppenaenderung_fehler = 0; +$text = ''; +$statistik = ''; +$abunterbrecher_verschoben_error = 0; +$abunterbrecher_verschoben = 0; -// **** -// * Bei Studenten mit fehlener Prestudent_id wird die passende id ermittelt und Eingetragen -// **** -$qry = "SELECT student_uid, studiengang_kz FROM public.tbl_student WHERE prestudent_id is null"; -if($result = $db->db_query($qry)) +// Bei Studenten mit fehlener Prestudent_id wird die passende id ermittelt und Eingetragen +$qry = "SELECT student_uid, studiengang_kz FROM public.tbl_student WHERE prestudent_id IS NULL"; + +if ($result = $db->db_query($qry)) { - $text.="Suche Studenten mit fehlender Prestudent_id ...\n\n"; + $text .= "Suche Studenten mit fehlender Prestudent_id ...\n\n"; - while($row = $db->db_fetch_object($result)) + while ($row = $db->db_fetch_object($result)) { - $qry_id = "SELECT tbl_prestudent.prestudent_id FROM campus.vw_student JOIN public.tbl_prestudent USING(person_id) WHERE uid=".$db->db_add_param($row->student_uid)." AND tbl_prestudent.studiengang_kz=".$db->db_add_param($row->studiengang_kz); - if($result_id = $db->db_query($qry_id)) + $qry_id = "SELECT tbl_prestudent.prestudent_id + FROM campus.vw_student + JOIN public.tbl_prestudent USING(person_id) + WHERE uid = ".$db->db_add_param($row->student_uid)." + AND tbl_prestudent.studiengang_kz = ".$db->db_add_param($row->studiengang_kz); + + if ($result_id = $db->db_query($qry_id)) { - if($db->db_num_rows($result_id)==1) + if ($db->db_num_rows($result_id) == 1) { - if($row_id = $db->db_fetch_object($result_id)) + if ($row_id = $db->db_fetch_object($result_id)) { - $qry_upd = "UPDATE public.tbl_student SET prestudent_id=".$db->db_add_param($row_id->prestudent_id)." WHERE student_uid=".$db->db_add_param($row->student_uid); - if($db->db_query($qry_upd)) + $qry_upd = "UPDATE public.tbl_student + SET prestudent_id = ".$db->db_add_param($row_id->prestudent_id)." + WHERE student_uid = ".$db->db_add_param($row->student_uid); + + if ($db->db_query($qry_upd)) { $text .= "Prestudent_id von $row->student_uid wurde auf $row_id->prestudent_id gesetzt\n"; $anzahl_neue_prestudent_id++; @@ -77,12 +88,12 @@ if($result = $db->db_query($qry)) $anzahl_fehler_prestudent++; } } - elseif($db->db_num_rows($result_id)>1) + elseif ($db->db_num_rows($result_id) > 1) { $text .= "Student $row->student_uid hat keine Prestudent_id und MEHRERE passende Prestudenteintraege\n"; $anzahl_fehler_prestudent++; } - elseif($db->db_num_rows($result_id)==0) + elseif( $db->db_num_rows($result_id) == 0) { $text .= "Student $row->student_uid hat keine Prestudent_id und KEINE passenden Prestudenteintraege\n"; $anzahl_fehler_prestudent++; @@ -90,20 +101,18 @@ if($result = $db->db_query($qry)) } else { - $text.="Fehler bei Abfrage:".$db->db_last_error()."\n"; + $text .= "Fehler bei Abfrage:".$db->db_last_error()."\n"; $anzahl_fehler_prestudent++; } } } -// ***** -// * Gruppenzuteilung von Abbrechern und Unterbrechern korrigieren. -// * Abbrecher werden in die Gruppe 0A verschoben -// * Unterbrecher in die Gruppe 0B -// ***** -$text.="\n\nKorrigiere Gruppenzuteilungen von Ab-/Unterbrechern\n"; +// Gruppenzuteilung von Abbrechern und Unterbrechern korrigieren. +// Abbrecher werden in die Gruppe 0A verschoben +// Unterbrecher in die Gruppe 0B +$text .= "\n\nKorrigiere Gruppenzuteilungen von Ab-/Unterbrechern\n"; -//Alle Ab-/Unterbrecher holen die nicht im 0. Semester sind +// Alle Ab-/Unterbrecher holen die nicht im 0. Semester sind $qry = "SELECT student_uid, tbl_student.studiengang_kz, @@ -133,19 +142,19 @@ $qry = "SELECT ) "; -if($result = $db->db_query($qry)) +if ($result = $db->db_query($qry)) { - while($row = $db->db_fetch_object($result)) + while ($row = $db->db_fetch_object($result)) { - //Eintrag nur korrigieren wenn der Abbrecher/Unterbrecher Status der letzte in diesem Studiensemester ist + // Eintrag nur korrigieren wenn der Abbrecher/Unterbrecher Status der letzte in diesem Studiensemester ist $prestd = new prestudent(); $prestd->getLastStatus($row->prestudent_id, $row->studiensemester_kurzbz); - if($prestd->status_kurzbz=='Unterbrecher' || $prestd->status_kurzbz=='Abbrecher') + if ($prestd->status_kurzbz == 'Unterbrecher' || $prestd->status_kurzbz == 'Abbrecher') { - //Studentlehrverbandeintrag aktualisieren + // Studentlehrverbandeintrag aktualisieren $student = new student(); - if($student->studentlehrverband_exists($row->student_uid, $row->studiensemester_kurzbz)) + if ($student->studentlehrverband_exists($row->student_uid, $row->studiensemester_kurzbz)) $student->new = false; else { @@ -158,47 +167,45 @@ if($result = $db->db_query($qry)) $student->studiensemester_kurzbz=$row->studiensemester_kurzbz; $student->studiengang_kz = $row->studiengang_kz; $student->semester = '0'; - $student->verband = ($prestd->status_kurzbz=='Unterbrecher'?'B':'A'); + $student->verband = ($prestd->status_kurzbz == 'Unterbrecher' ? 'B' : 'A'); $student->gruppe = ' '; $student->updateamum = date('Y-m-d H:i:s'); $student->updatevon = 'chkstudentlvb'; - //Pruefen ob der Lehrverband exisitert, wenn nicht dann wird er angelegt + // Pruefen ob der Lehrverband exisitert, wenn nicht dann wird er angelegt $lehrverband = new lehrverband(); - if(!$lehrverband->exists($student->studiengang_kz, $student->semester, $student->verband, $student->gruppe)) + if (!$lehrverband->exists($student->studiengang_kz, $student->semester, $student->verband, $student->gruppe)) { $lehrverband->studiengang_kz = $student->studiengang_kz; $lehrverband->semester = $student->semester; $lehrverband->verband = $student->verband; $lehrverband->gruppe = $student->gruppe; - $lehrverband->bezeichnung = ($student->verband=='A'?'Abbrecher':'Unterbrecher'); + $lehrverband->bezeichnung = ($student->verband == 'A' ? 'Abbrecher' : 'Unterbrecher'); $lehrverband->save(true); } - if($student->save_studentlehrverband()) + if ($student->save_studentlehrverband()) { - $text.="Student $student->uid wurde im $row->studiensemester_kurzbz in die Gruppe $student->semester$student->verband verschoben\n"; + $text .= "Student $student->uid wurde im $row->studiensemester_kurzbz in die Gruppe $student->semester$student->verband verschoben\n"; $abunterbrecher_verschoben++; } else { - $text.="Fehler biem Speichern des Lehrverbandeintrages bei $student->student_uid:".$student->errormsg."\n"; + $text .= "Fehler biem Speichern des Lehrverbandeintrages bei $student->student_uid:".$student->errormsg."\n"; $abunterbrecher_verschoben_error++; } } } } -// ***** -// * Unterschiedliche Gruppenzuteilungen in tbl_studentlehrverband - tbl_student korrigieren -// ***** +// Unterschiedliche Gruppenzuteilungen in tbl_studentlehrverband - tbl_student korrigieren $stsem = new studiensemester(); $stsem = $stsem->getNearest(); -$text.="\n\nKorrigiere Inkonsitenzen in den Tabellen tbl_studentlehrverband, tbl_student (Verwendetes Studiensemester: $stsem)\n\n"; +$text .= "\n\nKorrigiere Inkonsitenzen in den Tabellen tbl_studentlehrverband, tbl_student (Verwendetes Studiensemester: $stsem)\n\n"; $qry = "SELECT tbl_student.studiengang_kz as studiengang_kz_old, @@ -221,25 +228,33 @@ $qry = "SELECT tbl_student.gruppe<>tbl_studentlehrverband.gruppe )"; -if($result = $db->db_query($qry)) +if ($result = $db->db_query($qry)) { - while($row = $db->db_fetch_object($result)) + while ($row = $db->db_fetch_object($result)) { - $qry = "UPDATE public.tbl_student SET studiengang_kz=".$db->db_add_param($row->studiengang_kz).", semester=".$db->db_add_param($row->semester).", verband=".$db->db_add_param($row->verband).", gruppe=".$db->db_add_param($row->gruppe)." WHERE student_uid=".$db->db_add_param($row->student_uid); - if($db->db_query($qry)) + $qry = "UPDATE public.tbl_student + SET studiengang_kz = ".$db->db_add_param($row->studiengang_kz).", + semester = ".$db->db_add_param($row->semester).", + verband = ".$db->db_add_param($row->verband).", + gruppe = ".$db->db_add_param($row->gruppe)." + WHERE student_uid = ".$db->db_add_param($row->student_uid); + + if ($db->db_query($qry)) { - $text .= "Bei Student $row->student_uid wurde die Gruppenzuordnung von $row->studiengang_kz_old/$row->semester_old/$row->verband_old/$row->gruppe_old auf $row->studiengang_kz/$row->semester/$row->verband/$row->gruppe geaendert\n"; + $text .= "Bei Student $row->student_uid wurde die Gruppenzuordnung + von $row->studiengang_kz_old/$row->semester_old/$row->verband_old/$row->gruppe_old + auf $row->studiengang_kz/$row->semester/$row->verband/$row->gruppe geaendert\n"; $anzahl_gruppenaenderung++; } else { - $text.="Fehler beim Aendern der Gruppe: ".$db->db_last_error()."\n"; + $text .= "Fehler beim Aendern der Gruppe: ".$db->db_last_error()."\n"; $anzahl_gruppenaenderung_fehler++; } } } else - $text.="Fehler bei Abfrage".$db->db_last_error(); + $text .= "Fehler bei Abfrage: ".$db->db_last_error(); $statistik .= "Prestudent_id wurde bei $anzahl_neue_prestudent_id Studenten korrigiert\n"; $statistik .= "$anzahl_fehler_prestudent Fehler sind bei der Korrektur der Prestudent_id aufgetreten\n"; @@ -250,11 +265,12 @@ $statistik .= "$anzahl_gruppenaenderung_fehler Fehler sind bei der Korrektur der $statistik .= "\n\n"; $mail = new mail(MAIL_ADMIN, 'vilesci@'.DOMAIN, 'CHECK Studentlehrverband', $statistik.$text); -if($mail->send()) +if ($mail->send()) echo 'Mail an '.MAIL_ADMIN.' wurde versandt'; else echo 'Fehler beim Versenden des Mails an '.MAIL_ADMIN; -echo nl2br("\n\n".$statistik.$text); +echo "\n\n".$statistik.$text; ?> + diff --git a/system/checkroles.php b/system/checkroles.php index 1f57857a1..e7365ef91 100644 --- a/system/checkroles.php +++ b/system/checkroles.php @@ -54,7 +54,7 @@ $data = array 'rolle_kurzbz' => 'admin', 'berechtigung' => array ( - 'admin', 'assistenz', 'basis/addon', 'basis/ampel', 'basis/ampeluebersicht', 'basis/benutzer', 'basis/berechtigung', 'basis/betriebsmittel', 'basis/cms', 'basis/cms_review', 'basis/cms_sperrfreigabe', 'basis/cronjob', 'basis/dms', 'basis/fas', 'basis/ferien', 'basis/fhausweis','basis/firma', 'basis/infoscreen', 'basis/moodle', 'basis/moodle','basis/news', 'basis/notiz', 'basis/organisationseinheit', 'basis/ort', 'basis/orgform', 'basis/person', 'basis/planner', 'basis/service', 'basis/statistik', 'basis/studiengang', 'basis/tempus', 'basis/testtool', 'basis/variable', 'basis/vilesci', 'buchung/typen', 'buchung/mitarbeiter', 'inout/incoming', 'inout/outgoing', 'inout/uebersicht', 'lehre', 'lehre/abgabetool', 'lehre/freifach', 'lehre/lehrfach', 'lehre/lehrveranstaltung', 'lehre/lvplan', 'lehre/lvinfo', 'lehre/pruefungsanmeldungAdmin', 'lehre/pruefungsbeurteilung', 'lehre/pruefungsbeurteilungAdmin', 'lehre/pruefungsterminAdmin', 'lehre/pruefungsfenster', 'lehre/reihungstest', 'lehre/reservierung', 'lehre/studienordnung', 'lehre/studienordnungInaktiv', 'lehre/studienplan', 'lehre/vorrueckung', 'lv-plan', 'lv-plan/gruppenentfernen', 'lv-plan/lektorentfernen', 'mitarbeiter', 'mitarbeiter/bankdaten', 'mitarbeiter/personalnummer', 'mitarbeiter/stammdaten', 'mitarbeiter/urlaube', 'mitarbeiter/zeitsperre', 'mitarbeiter/zeitwuensche', 'news', 'planner', 'preinteressent', 'raumres', 'reihungstest', 'sdTools', 'soap/lv', 'soap/lvplan', 'soap/mitarbeiter', 'soap/ort', 'soap/pruefungsfenster', 'soap/student', 'soap/studienordnung', 'soap/benutzer', 'soap/buchungen', 'student/bankdaten', 'student/anrechnung', 'student/anwesenheit', 'student/dokumente', 'student/noten', 'system/phrase', 'system/vorlage', 'system/vorlagestudiengang', 'student/stammdaten', 'student/vorrueckung', 'system/developer', 'system/loginasuser', 'user', 'veranstaltung', 'vertrag/mitarbeiter', 'vertrag/typen', 'wawi/berichte', 'wawi/bestellung', 'wawi/bestellung_advanced', 'wawi/budget', 'wawi/delete_advanced', 'wawi/firma', 'wawi/freigabe', 'wawi/freigabe_advanced', 'wawi/inventar', 'wawi/konto', 'wawi/kostenstelle', 'wawi/rechnung', 'wawi/rechnung_freigeben', 'wawi/rechnung_transfer', 'wawi/storno' + 'admin', 'assistenz', 'basis/addon', 'basis/ampel', 'basis/ampeluebersicht', 'basis/benutzer', 'basis/berechtigung', 'basis/betriebsmittel', 'basis/cms', 'basis/cms_review', 'basis/cms_sperrfreigabe', 'basis/cronjob', 'basis/dms', 'basis/fas', 'basis/ferien', 'basis/fhausweis','basis/firma', 'basis/infoscreen', 'basis/moodle', 'basis/moodle','basis/news', 'basis/notiz', 'basis/organisationseinheit', 'basis/ort', 'basis/orgform', 'basis/person', 'basis/planner', 'basis/service', 'basis/statistik', 'basis/studiengang', 'basis/tempus', 'basis/testtool', 'basis/variable', 'basis/vilesci', 'buchung/typen', 'buchung/mitarbeiter', 'inout/incoming', 'inout/outgoing', 'inout/uebersicht', 'lehre', 'lehre/abgabetool', 'lehre/freifach', 'lehre/lehrfach', 'lehre/lehrveranstaltung', 'lehre/lvplan', 'lehre/lvinfo', 'lehre/pruefungsanmeldungAdmin', 'lehre/pruefungsbeurteilung', 'lehre/pruefungsbeurteilungAdmin', 'lehre/pruefungsterminAdmin', 'lehre/pruefungsfenster', 'lehre/reihungstest', 'lehre/reservierung', 'lehre/studienordnung', 'lehre/studienordnungInaktiv', 'lehre/studienplan', 'lehre/vorrueckung', 'lehre/zgvpruefung', 'lv-plan', 'lv-plan/gruppenentfernen', 'lv-plan/lektorentfernen', 'mitarbeiter', 'mitarbeiter/bankdaten', 'mitarbeiter/personalnummer', 'mitarbeiter/stammdaten', 'mitarbeiter/urlaube', 'mitarbeiter/zeitsperre', 'mitarbeiter/zeitwuensche', 'news', 'planner', 'preinteressent', 'raumres', 'reihungstest', 'sdTools', 'soap/lv', 'soap/lvplan', 'soap/mitarbeiter', 'soap/ort', 'soap/pruefungsfenster', 'soap/student', 'soap/studienordnung', 'soap/benutzer', 'soap/buchungen', 'student/bankdaten', 'student/anrechnung', 'student/anwesenheit', 'student/dokumente', 'student/noten', 'system/phrase', 'system/vorlage', 'system/vorlagestudiengang', 'student/stammdaten', 'student/vorrueckung', 'system/developer', 'system/loginasuser', 'user', 'veranstaltung', 'vertrag/mitarbeiter', 'vertrag/typen', 'wawi/berichte', 'wawi/bestellung', 'wawi/bestellung_advanced', 'wawi/budget', 'wawi/delete_advanced', 'wawi/firma', 'wawi/freigabe', 'wawi/freigabe_advanced', 'wawi/inventar', 'wawi/konto', 'wawi/kostenstelle', 'wawi/rechnung', 'wawi/rechnung_freigeben', 'wawi/rechnung_transfer', 'wawi/storno' ) ) ); diff --git a/system/checksystem.php b/system/checksystem.php index 5f03a55ef..adc78eb5b 100644 --- a/system/checksystem.php +++ b/system/checksystem.php @@ -162,6 +162,7 @@ $berechtigungen = array( array('lehre/studienordnungInaktiv','Studienordnung Inaktiv'), array('lehre/studienplan','Studienplan'), array('lehre/vorrueckung','Lehreinheitenvorrückung'), + array('lehre/zgvpruefung','Berechtigung um ZGV Überprüfungen vorzunehmen'), array('lv-plan','Stundenplan'), array('lv-plan/gruppenentfernen','Erlaut das Entfernen von Gruppen aus LVPlan vom FAS aus'), array('lv-plan/lektorentfernen','Erlaut das Entfernen von Lektoren aus LVPlan vom FAS aus'), diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index b781e22fc..a1030fd15 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -532,6 +532,46 @@ if($result = @$db->db_query("SELECT 1 FROM lehre.tbl_note WHERE anmerkung = 'ue' } } +// Note "intern angerechnet" hinzufügen +if($result = @$db->db_query("SELECT 1 FROM lehre.tbl_note WHERE anmerkung = 'iar' AND (bezeichnung = 'intern angerechnet' OR bezeichnung = 'Intern angerechnet');")) +{ + if($db->db_num_rows($result) == 0) + { + $qry = " + INSERT INTO + lehre.tbl_note(note, bezeichnung, anmerkung, farbe, positiv, notenwert, aktiv, lehre, offiziell, bezeichnung_mehrsprachig, lkt_ueberschreibbar) + VALUES( + (SELECT max(note)+1 FROM lehre.tbl_note),'intern angerechnet', 'iar', NULL, TRUE, NULL, TRUE, FALSE, FALSE, '{\"intern angerechnet\",\"internally credited\"}', FALSE + ); + "; + + if(!$db->db_query($qry)) + echo 'lehre.tbl_note: '.$db->db_last_error().'
'; + else + echo '
lehre.tbl_note: Note intern angerechnet hinzugefuegt!
'; + } +} + +// Note "nicht zugelassen" hinzufügen +if($result = @$db->db_query("SELECT 1 FROM lehre.tbl_note WHERE anmerkung = 'nz' AND (bezeichnung = 'nicht zugelassen' OR bezeichnung = 'Nicht zugelassen');")) +{ + if($db->db_num_rows($result) == 0) + { + $qry = " + INSERT INTO + lehre.tbl_note(note, bezeichnung, anmerkung, farbe, positiv, notenwert, aktiv, lehre, offiziell, bezeichnung_mehrsprachig, lkt_ueberschreibbar) + VALUES( + (SELECT max(note)+1 FROM lehre.tbl_note), 'nicht zugelassen', 'nz', NULL, TRUE, NULL, TRUE, FALSE, FALSE, '{\"nicht zugelassen\",\"not admitted\"}', FALSE + ); + "; + + if(!$db->db_query($qry)) + echo 'lehre.tbl_note: '.$db->db_last_error().'
'; + else + echo '
lehre.tbl_note: Note nicht zugelassen hinzugefuegt!
'; + } +} + // Spalte offiziell in lehre.tbl_note if(!$result = @$db->db_query("SELECT offiziell FROM lehre.tbl_note LIMIT 1;")) { @@ -3265,6 +3305,20 @@ if(!@$db->db_query("SELECT 0 FROM public.tbl_variablenname WHERE 0 = 1")) echo '
Granted privileges to vilesci on public.tbl_variablenname'; } +// Add new name type in public.tbl_variablenname +if ($result = @$db->db_query("SELECT 1 FROM public.tbl_variablenname WHERE name = 'infocenter_studiensgangtyp';")) +{ + if ($db->db_num_rows($result) == 0) + { + $qry = "INSERT INTO public.tbl_variablenname(name, defaultwert) VALUES('infocenter_studiensgangtyp', 'b');"; + + if (!$db->db_query($qry)) + echo 'public.tbl_variablenname '.$db->db_last_error().'
'; + else + echo 'public.tbl_variablenname: Added name "infocenter_studiensgangtyp"
'; + } +} + // Add column projektphase_id to tbl_zeitaufzeichnung if(!$result = @$db->db_query("SELECT projektphase_id FROM campus.tbl_zeitaufzeichnung LIMIT 1")) { @@ -4623,7 +4677,7 @@ if ($result = @$db->db_query("SELECT 1 FROM campus.tbl_dms_kategorie_gruppe WHER } } -// Add table anrechnung_status +// Add table anrechnungstatus if(!$result = @$db->db_query("SELECT 1 FROM lehre.tbl_anrechnungstatus LIMIT 1;")) { $qry = " @@ -4651,42 +4705,6 @@ if(!$result = @$db->db_query("SELECT 1 FROM lehre.tbl_anrechnungstatus LIMIT 1;" echo ' lehre.tbl_anrechnungstatus: Tabelle hinzugefuegt
'; } -// GRANT INSERT, UPDATE, DELETE ON TABLE lehre.tbl_anrechnungstatus TO web; -$qry = 'GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE lehre.tbl_anrechnungstatus TO web;'; -if (!$db->db_query($qry)) - echo 'lehre.tbl_anrechnungstatus '.$db->db_last_error().'
'; -else - echo '
Granted privileges to web on lehre.tbl_anrechnungstatus'; - - -// SEQUENCE seq_anrechnungstatus_status_kurzbz -if ($result = $db->db_query("SELECT 0 FROM pg_class WHERE relname = 'seq_anrechnungstatus_status_kurzbz'")) -{ - if ($db->db_num_rows($result) == 0) - { - $qry = ' - CREATE SEQUENCE lehre.seq_anrechnungstatus_status_kurzbz - START WITH 1 - INCREMENT BY 1 - NO MAXVALUE - NO MINVALUE - CACHE 1; - '; - - if(!$db->db_query($qry)) - echo 'lehre.seq_anrechnungstatus_status_kurzbz '.$db->db_last_error().'
'; - else - echo '
Created sequence: lehre.seq_anrechnungstatus_status_kurzbz'; - - // GRANT SELECT, UPDATE ON SEQUENCE lehre.tbl_anrechnungstatus_status_kurzbz_seq to web; - $qry = 'GRANT SELECT, UPDATE ON SEQUENCE lehre.seq_anrechnungstatus_status_kurzbz TO web;'; - if (!$db->db_query($qry)) - echo 'lehre.seq_anrechnungstatus_status_kurzbz '.$db->db_last_error().'
'; - else - echo '
Granted privileges to vilesci on lehre.seq_anrechnungstatus_status_kurzbz'; - } -} - // Add table anrechnung_anrechnungstatus // Für bestehende genehmigte Anrechnungsanträge wird ein Eintrag mit dem Status 'approved' angelegt if(!$result = @$db->db_query("SELECT 1 FROM lehre.tbl_anrechnung_anrechnungstatus LIMIT 1;")) @@ -4716,9 +4734,10 @@ if(!$result = @$db->db_query("SELECT 1 FROM lehre.tbl_anrechnung_anrechnungstatu INSERT INTO lehre.tbl_anrechnung_anrechnungstatus(anrechnung_id, status_kurzbz) SELECT anrechnung_id, 'approved' as status_kurzbz FROM lehre.tbl_anrechnung WHERE genehmigt_von is not null; - GRANT SELECT ON lehre.tbl_anrechnung_anrechnungstatus TO web; + GRANT SELECT, UPDATE, INSERT, DELETE ON lehre.tbl_anrechnung_anrechnungstatus TO web; GRANT SELECT, UPDATE, INSERT, DELETE ON lehre.tbl_anrechnung_anrechnungstatus TO vilesci; GRANT SELECT, UPDATE ON lehre.seq_anrechnung_anrechnungstatus_anrechnungstatus_id TO vilesci; + GRANT SELECT, UPDATE ON lehre.seq_anrechnung_anrechnungstatus_anrechnungstatus_id TO web; "; if(!$db->db_query($qry)) @@ -4782,6 +4801,129 @@ if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berecht } } +// Add permission to create Anrechnung +if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berechtigung_kurzbz = 'lehre/anrechnung_anlegen';")) +{ + if($db->db_num_rows($result) == 0) + { + $qry = "INSERT INTO system.tbl_berechtigung(berechtigung_kurzbz, beschreibung) VALUES('lehre/anrechnung_anlegen', 'Anrechnung anlegen');"; + + if(!$db->db_query($qry)) + echo 'system.tbl_berechtigung '.$db->db_last_error().'
'; + else + echo ' system.tbl_berechtigung: Added permission for lehre/anrechnung_anlegen
'; + } +} + +// INSERT,DELETE,UPDATE Berechtigung für tbl_dokumentprestudent hinzufügen +if($result = @$db->db_query("SELECT * FROM information_schema.role_table_grants WHERE table_name='tbl_dokumentprestudent' AND table_schema='public' AND grantee='web' AND privilege_type in ('INSERT','DELETE','UPDATE')")) +{ + if($db->db_num_rows($result)==0) + { + $qry = "GRANT INSERT, DELETE, UPDATE ON public.tbl_dokumentprestudent TO web;"; + + if(!$db->db_query($qry)) + echo 'dokumentprestudent Berechtigungen: '.$db->db_last_error().'
'; + else + echo '
Granted privileges to public.tbl_dokumentprestudent'; + } +} + +// Add table zgvpruefungstatus +if(!$result = @$db->db_query("SELECT 1 FROM public.tbl_zgvpruefungstatus LIMIT 1;")) +{ + $qry = " + CREATE TABLE public.tbl_zgvpruefungstatus + ( + status_kurzbz character varying(32), + bezeichnung character varying(256) + ); + + ALTER TABLE public.tbl_zgvpruefungstatus ADD CONSTRAINT status_kurzbz PRIMARY KEY (status_kurzbz); + INSERT INTO public.tbl_zgvpruefungstatus(status_kurzbz, bezeichnung) VALUES('pruefung_stg', 'Wird vom Studiengang geprüft'); + INSERT INTO public.tbl_zgvpruefungstatus(status_kurzbz, bezeichnung) VALUES('rejected', 'Vom Studiengang abgelehnt'); + INSERT INTO public.tbl_zgvpruefungstatus(status_kurzbz, bezeichnung) VALUES('accepted', 'Vom Studiengang akzeptiert'); + INSERT INTO public.tbl_zgvpruefungstatus(status_kurzbz, bezeichnung) VALUES('accepted_pruefung', 'Vom Studiengang akzeptiert mit Prüfung'); + + GRANT SELECT, INSERT, UPDATE, DELETE ON public.tbl_zgvpruefungstatus TO vilesci; + GRANT SELECT ON public.tbl_zgvpruefungstatus TO web; + "; + + if(!$db->db_query($qry)) + echo 'public.tbl_zgvpruefungstatus: '.$db->db_last_error().'
'; + else + echo ' public.tbl_zgvpruefungstatus: Tabelle hinzugefuegt
'; +} + +// Add table zgvpruefung +if(!$result = @$db->db_query("SELECT 1 FROM public.tbl_zgvpruefung LIMIT 1;")) +{ + $qry = " + CREATE TABLE public.tbl_zgvpruefung + ( + zgvpruefung_id integer NOT NULL, + prestudent_id integer NOT NULL, + insertamum timestamp without time zone, + insertvon character varying(32), + updateamum timestamp without time zone, + updatevon character varying(32) + ); + + CREATE SEQUENCE public.tbl_zgvpruefung_id_seq + INCREMENT BY 1 + NO MAXVALUE + NO MINVALUE + CACHE 1; + ALTER TABLE public.tbl_zgvpruefung ADD CONSTRAINT pk_tbl_zgvpruefung PRIMARY KEY (zgvpruefung_id); + ALTER TABLE public.tbl_zgvpruefung ALTER COLUMN zgvpruefung_id SET DEFAULT nextval('public.tbl_zgvpruefung_id_seq'); + ALTER TABLE public.tbl_zgvpruefung ADD CONSTRAINT fk_tbl_zgvpruefung_student FOREIGN KEY (prestudent_id) REFERENCES public.tbl_prestudent (prestudent_id) ON DELETE RESTRICT ON UPDATE CASCADE; + + GRANT SELECT, UPDATE ON public.tbl_zgvpruefung_id_seq TO vilesci; + GRANT SELECT, INSERT, UPDATE, DELETE ON public.tbl_zgvpruefung TO vilesci; + GRANT SELECT ON public.tbl_zgvpruefung TO web; + + "; + + if(!$db->db_query($qry)) + echo 'public.tbl_zgvpruefung: '.$db->db_last_error().'
'; + else + echo ' public.tbl_zgvpruefung: Tabelle hinzugefuegt
'; +} + +// Add table zgvpruefungstatus_status +if(!$result = @$db->db_query("SELECT 1 FROM public.tbl_zgvpruefungstatus_status LIMIT 1;")) +{ + $qry = " + CREATE TABLE public.tbl_zgvpruefungstatus_status + ( + zgv_pruefung_status_id integer NOT NULL, + zgvpruefung_id integer NOT NULL, + status character varying(32), + datum timestamp without time zone DEFAULT now() + ); + + CREATE SEQUENCE public.tbl_zgvpruefungstatus_status_id_seq + INCREMENT BY 1 + NO MAXVALUE + NO MINVALUE + CACHE 1; + + ALTER TABLE public.tbl_zgvpruefungstatus_status ADD CONSTRAINT pk_tbl_zgvpruefungstatus_status PRIMARY KEY (zgv_pruefung_status_id); + ALTER TABLE public.tbl_zgvpruefungstatus_status ALTER COLUMN zgv_pruefung_status_id SET DEFAULT nextval('tbl_zgvpruefungstatus_status_id_seq'); + ALTER TABLE public.tbl_zgvpruefungstatus_status ADD CONSTRAINT fk_tbl_zgvpruefung_zgvpruefung FOREIGN KEY (zgvpruefung_id) REFERENCES public.tbl_zgvpruefung (zgvpruefung_id) ON DELETE RESTRICT ON UPDATE CASCADE; + ALTER TABLE public.tbl_zgvpruefungstatus_status ADD CONSTRAINT fk_tbl_zgvpruefung_status FOREIGN KEY (status) REFERENCES public.tbl_zgvpruefungstatus (status_kurzbz) ON DELETE RESTRICT ON UPDATE CASCADE; + + GRANT SELECT, UPDATE ON public.tbl_zgvpruefungstatus_status_id_seq TO vilesci; + GRANT SELECT, INSERT, UPDATE, DELETE ON public.tbl_zgvpruefungstatus_status TO vilesci; + GRANT SELECT ON public.tbl_zgvpruefungstatus_status TO web; + "; + + if(!$db->db_query($qry)) + echo 'public.tbl_zgvpruefungstatus_status: '.$db->db_last_error().'
'; + else + echo ' public.tbl_zgvpruefungstatus_status: Tabelle hinzugefuegt
'; +} + // Add index to system.tbl_log if ($result = $db->db_query("SELECT * FROM pg_class WHERE relname='idx_tbl_pruefung_student_uid'")) { @@ -4795,6 +4937,30 @@ if ($result = $db->db_query("SELECT * FROM pg_class WHERE relname='idx_tbl_pruef echo 'Index fuer lehre.pruefung.student_uid hinzugefuegt
'; } } +// Added Buchungstyp "ZuschussIO" +if ($result = @$db->db_query("SELECT 1 FROM public.tbl_buchungstyp WHERE buchungstyp_kurzbz = 'ZuschussIO';")) +{ + if ($db->db_num_rows($result) == 0) + { + $qry = "INSERT INTO public.tbl_buchungstyp (buchungstyp_kurzbz, beschreibung, standardtext) VALUES ('ZuschussIO', 'Zuschuss IO', 'Zuschuss Incoming Outgoing');"; + if (!$db->db_query($qry)) + echo 'public.tbl_buchungstyp '.$db->db_last_error().'
'; + else + echo ' public.tbl_buchungstyp: Added buchungstyp "ZuschussIO"
'; + } +} +//Add Column statusgrund_kurzbz to public.tbl_status_grund +if(!@$db->db_query("SELECT statusgrund_kurzbz FROM public.tbl_status_grund LIMIT 1")) +{ + $qry = "ALTER TABLE public.tbl_status_grund ADD COLUMN statusgrund_kurzbz varchar(32); + ALTER TABLE public.tbl_status_grund ADD CONSTRAINT uk_tbl_statusgrund_kurzbz UNIQUE (statusgrund_kurzbz); + "; + + if(!$db->db_query($qry)) + echo 'public.tbl_status_grund '.$db->db_last_error().'
'; + else + echo '
Neue Spalte statusgrund_kurzbz zu Tabelle public.tbl_status_grund hinzugefügt'; +} // Add column homeoffice to bis.tbl_bisverwendung if (!$result = @$db->db_query("SELECT homeoffice FROM bis.tbl_bisverwendung LIMIT 1")) @@ -5039,7 +5205,7 @@ $tabellen=array( "public.tbl_rt_person" => array("rt_person_id","person_id","rt_id","studienplan_id","anmeldedatum","teilgenommen","ort_kurzbz","punkte","insertamum","insertvon","updateamum","updatevon"), "public.tbl_rt_studienplan" => array("reihungstest_id","studienplan_id"), "public.tbl_status" => array("status_kurzbz","beschreibung","anmerkung","ext_id","bezeichnung_mehrsprachig"), - "public.tbl_status_grund" => array("statusgrund_id","status_kurzbz","aktiv","bezeichnung_mehrsprachig","beschreibung"), + "public.tbl_status_grund" => array("statusgrund_id","status_kurzbz","aktiv","bezeichnung_mehrsprachig","beschreibung","statusgrund_kurzbz"), "public.tbl_semesterwochen" => array("semester","studiengang_kz","wochen"), "public.tbl_service" => array("service_id", "bezeichnung","beschreibung","ext_id","oe_kurzbz","content_id","design_uid","betrieb_uid","operativ_uid","servicekategorie_kurzbz"), "public.tbl_servicekategorie" => array("servicekategorie_kurzbz", "bezeichnung","sort"), @@ -5058,6 +5224,9 @@ $tabellen=array( "public.tbl_vorlage" => array("vorlage_kurzbz","bezeichnung","anmerkung","mimetype","attribute","archivierbar","signierbar","stud_selfservice","dokument_kurzbz","insertamum","insertvon","updateamum","updatevon"), "public.tbl_vorlagedokument" => array("vorlagedokument_id","sort","vorlagestudiengang_id","dokument_kurzbz"), "public.tbl_vorlagestudiengang" => array("vorlagestudiengang_id","vorlage_kurzbz","studiengang_kz","version","text","oe_kurzbz","style","berechtigung","anmerkung_vorlagestudiengang","aktiv","sprache","subject","orgform_kurzbz","insertamum","insertvon","updateamum","updatevon"), + "public.tbl_zgvpruefungstatus" => array("status_kurzbz","bezeichnung"), + "public.tbl_zgvpruefung" => array("zgvpruefung_id","prestudent_id","insertamum","insertvon","updateamum","updatevon"), + "public.tbl_zgvpruefungstatus_status" => array("zgv_pruefung_status_id","zgvpruefung_id","status","datum"), "testtool.tbl_ablauf" => array("ablauf_id","gebiet_id","studiengang_kz","reihung","gewicht","semester", "insertamum","insertvon","updateamum", "updatevon","ablauf_vorgaben_id","studienplan_id"), "testtool.tbl_ablauf_vorgaben" => array("ablauf_vorgaben_id","studiengang_kz","sprache","sprachwahl","content_id","insertamum","insertvon","updateamum", "updatevon"), "testtool.tbl_antwort" => array("antwort_id","pruefling_id","vorschlag_id"), diff --git a/system/erinnerungsmail_coodle.php b/system/erinnerungsmail_coodle.php index caec9a9cb..963fa19ac 100644 --- a/system/erinnerungsmail_coodle.php +++ b/system/erinnerungsmail_coodle.php @@ -1,4 +1,5 @@ */ + /** * Cronjob zur Versendung von Infomails wenn Coodle Umfragen Beendet sind */ -require_once('../config/vilesci.config.inc.php'); -require_once('../include/coodle.class.php'); -require_once('../include/phrasen.class.php'); -require_once('../include/benutzer.class.php'); -require_once('../include/mail.class.php'); + +require_once(dirname(__FILE__).'/../config/vilesci.config.inc.php'); +require_once(dirname(__FILE__).'/../include/coodle.class.php'); +require_once(dirname(__FILE__).'/../include/phrasen.class.php'); +require_once(dirname(__FILE__).'/../include/benutzer.class.php'); +require_once(dirname(__FILE__).'/../include/mail.class.php'); $coodle = new coodle(); $coodle->getCoodleBeendet(); @@ -33,10 +36,10 @@ $p = new phrasen(); foreach($coodle->result as $row) { $benutzer = new benutzer($row->ersteller_uid); - $subject='Ablauf der Coodle Umfrage'; - - $mailtext=''; - $mailtexthtml=''; + $subject = 'Ablauf der Coodle Umfrage'; + $mailtext = ''; + $mailtexthtml = ''; + switch($benutzer->geschlecht) { case 'm': @@ -53,19 +56,23 @@ foreach($coodle->result as $row) break; } - $mailtext.="Ihre Terminumfrage zum Thema \"".$row->titel."\" ist beendet.\n"; - $mailtext.="Bitte folgen sie dem Link um die Terminumfrage abzuschließen: ".CIS_ROOT."cis/public/coodle.php?coodle_id=".$row->coodle_id."\n\n"; - $mailtext.= $p->t('mail/signatur'); + $mailtext .= "Ihre Terminumfrage zum Thema \"".$row->titel."\" ist beendet.\n"; + $mailtext .= "Bitte folgen sie dem Link um die Terminumfrage abzuschließen: ".CIS_ROOT."cis/public/coodle.php?coodle_id=".$row->coodle_id."\n\n"; + $mailtext .= $p->t('mail/signatur'); - $mailtexthtml.="Ihre Terminumfrage zum Thema \"".$row->titel."\" ist beendet.
"; - $mailtexthtml.="Bitte folgen sie dem Link um die Terminumfrage abzuschließen: coodle_id."\">Link zur Umfrage

"; - $mailtexthtml.= nl2br($p->t('mail/signatur')); + $mailtexthtml .= "Ihre Terminumfrage zum Thema \"".$row->titel."\" ist beendet.
"; + $mailtexthtml .= "Bitte folgen sie dem Link um die Terminumfrage abzuschließen: coodle_id."\">Link zur Umfrage

"; + $mailtexthtml .= nl2br($p->t('mail/signatur')); $mail = new mail($row->ersteller_uid.'@'.DOMAIN, 'no-reply@'.DOMAIN, $subject, $mailtext); $mail->setHTMLContent($mailtexthtml); + if($mail->send()) - echo "Mail versandt an $row->ersteller_uid CoodleID $row->coodle_id
\n"; + echo "Mail versandt an $row->ersteller_uid CoodleID $row->coodle_id\n"; else - echo "Fehler beim Mailversand an $row->ersteller_uid CoodleID $row->coodle_id
\n"; + echo "Fehler beim Mailversand an $row->ersteller_uid CoodleID $row->coodle_id\n"; } -?> \ No newline at end of file + +?> + diff --git a/system/filtersupdate.php b/system/filtersupdate.php index 2d8daed4d..77e0c3e3a 100644 --- a/system/filtersupdate.php +++ b/system/filtersupdate.php @@ -33,11 +33,13 @@ $filters = array( {"name": "Vorname"}, {"name": "Nachname"}, {"name": "ZGVNation"}, + {"name": "ZGVMNation"}, {"name": "StgAbgeschickt"}, {"name": "Studiensemester"}, {"name": "LastAction"}, {"name": "LastActionType"}, {"name": "User/Operator"}, + {"name": "InfoCenterMitarbeiter"}, {"name": "LockUser"} ], "filters": [ @@ -66,11 +68,13 @@ $filters = array( {"name": "Vorname"}, {"name": "Nachname"}, {"name": "ZGVNation"}, + {"name": "ZGVMNation"}, {"name": "StgAbgeschickt"}, {"name": "Studiensemester"}, {"name": "LastAction"}, {"name": "LastActionType"}, {"name": "User/Operator"}, + {"name": "InfoCenterMitarbeiter"}, {"name": "LockUser"} ], "filters": [ @@ -105,9 +109,11 @@ $filters = array( {"name": "Vorname"}, {"name": "Nachname"}, {"name": "ZGVNation"}, + {"name": "ZGVMNation"}, {"name": "LastAction"}, {"name": "LastActionType"}, {"name": "User/Operator"}, + {"name": "InfoCenterMitarbeiter"}, {"name": "LockUser"}, {"name": "StgNichtAbgeschickt"}, {"name": "StgAbgeschickt"}, @@ -140,8 +146,10 @@ $filters = array( {"name": "Vorname"}, {"name": "Nachname"}, {"name": "ZGVNation"}, + {"name": "ZGVMNation"}, {"name": "LastAction"}, {"name": "User/Operator"}, + {"name": "InfoCenterMitarbeiter"}, {"name": "LockUser"}, {"name": "StgNichtAbgeschickt"}, {"name": "StgAbgeschickt"}, @@ -180,10 +188,12 @@ $filters = array( {"name": "Vorname"}, {"name": "Nachname"}, {"name": "ZGVNation"}, + {"name": "ZGVMNation"}, {"name": "StgAbgeschickt"}, {"name": "Studiensemester"}, {"name": "LastAction"}, {"name": "User/Operator"}, + {"name": "InfoCenterMitarbeiter"}, {"name": "LockUser"} ], "filters": [ @@ -218,8 +228,10 @@ $filters = array( {"name": "Vorname"}, {"name": "Nachname"}, {"name": "ZGVNation"}, + {"name": "ZGVMNation"}, {"name": "LastAction"}, {"name": "User/Operator"}, + {"name": "InfoCenterMitarbeiter"}, {"name": "LockUser"}, {"name": "StgNichtAbgeschickt"}, {"name": "StgAbgeschickt"}, @@ -266,6 +278,7 @@ $filters = array( {"name": "StgAbgeschickt"}, {"name": "LastAction"}, {"name": "User/Operator"}, + {"name": "InfoCenterMitarbeiter"}, {"name": "LockUser"}, {"name": "Statusgrund"} ], @@ -302,6 +315,7 @@ $filters = array( {"name": "LastAction"}, {"name": "LastActionType"}, {"name": "User/Operator"}, + {"name": "InfoCenterMitarbeiter"}, {"name": "LockUser"}, {"name": "Statusgrund"}, {"name": "Studiensemester"}, @@ -383,6 +397,7 @@ $filters = array( {"name": "StgAbgeschickt"}, {"name": "LastAction"}, {"name": "User/Operator"}, + {"name": "InfoCenterMitarbeiter"}, {"name": "LockUser"} ], "filters": [ @@ -401,6 +416,61 @@ $filters = array( ', 'oe_kurzbz' => null, ), + array( + 'app' => 'infocenter', + 'dataset_name' => 'zgvUeberpruefung', + 'filter_kurzbz' => 'zgvOffen', + 'description' => '{ZGV Überprüfung}', + 'sort' => 1, + 'default_filter' => true, + 'filter' => ' + { + "name": "Zgv Überprüfung", + "columns": [ + {"name": "PreStudentID"}, + {"name": "Vorname"}, + {"name": "Nachname"}, + {"name": "Studiengang"} + ], + "filters": [ + { + "name": "Status", + "condition": "stg", + "operation": "contains" + } + ] + } + ', + 'oe_kurzbz' => null, + ), + array( + 'app' => 'infocenter', + 'dataset_name' => 'zgvUeberpruefung', + 'filter_kurzbz' => 'zgvRest', + 'description' => '{ZGV abgeschlossen}', + 'sort' => 2, + 'default_filter' => true, + 'filter' => ' + { + "name": "Zgv abgeschlossen", + "columns": [ + {"name": "PreStudentID"}, + {"name": "Vorname"}, + {"name": "Nachname"}, + {"name": "Studiengang"}, + {"name": "Status"} + ], + "filters": [ + { + "name": "Status", + "condition": "stg", + "operation": "ncontains" + } + ] + } + ', + 'oe_kurzbz' => null, + ), array( 'app' => 'budget', 'dataset_name' => 'budgetoverview', diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 18098af91..7cd0419ae 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -88,6 +88,26 @@ $phrases = array( ) ) ), + array( + 'app' => 'core', + 'category' => 'global', + 'phrase' => 'text', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Text', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'text', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'global', @@ -768,6 +788,26 @@ $phrases = array( ) ) ), + array( + 'app' => 'core', + 'category' => 'global', + 'phrase' => 'notizDerSTGL', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Notiz der STGL', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Note of the study course director', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'global', @@ -1474,7 +1514,26 @@ $phrases = array( ) ) ), - + array( + 'app' => 'core', + 'category' => 'anrechnung', + 'phrase' => 'benotungDerLV', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Benotung der Lehrveranstaltung', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Grading of the course', + 'description' => '', + 'insertvon' => 'system' + ) + ) +), //*************************** CORE/filter array( @@ -3006,6 +3065,106 @@ $phrases = array( ) ) ), + array( + 'app' => 'infocenter', + 'category' => 'infocenter', + 'phrase' => 'zgvRueckfragen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'ZGV Prüfung beantragen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'apply for a ZGV examination', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'infocenter', + 'category' => 'infocenter', + 'phrase' => 'zgvErfuellt', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'ZGV erfüllt', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'ZGV fulfilled', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'infocenter', + 'category' => 'infocenter', + 'phrase' => 'zgvNichtErfuellt', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'ZGV nicht erfüllt', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'ZGV unfulfilled', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'infocenter', + 'category' => 'infocenter', + 'phrase' => 'zgvErfuelltPruefung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'ZGV mit Prüfungen erfüllt', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'ZGV fulfilled with exam', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'infocenter', + 'category' => 'infocenter', + 'phrase' => 'zgvInPruefung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'ZGV noch in Prüfung', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'ZGV still in review', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'infocenter', 'category' => 'infocenter', @@ -3366,6 +3525,86 @@ $phrases = array( ) ) ), + array( + 'app' => 'infocenter', + 'category' => 'infocenter', + 'phrase' => 'dokumentWirdNachgereicht', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Dokument wird nachgereicht', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Document will be submitted later', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'infocenter', + 'category' => 'infocenter', + 'phrase' => 'datumUngueltig', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Das Datumsformat ist ungültig oder liegt außerhalb des gültigen Bereichs. Bitte geben Sie ein gültiges Datum im Format tt.mm.jjjj ein.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Date is invalid or out of range. Please enter a valid date in the format dd.mm.yyyy.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'infocenter', + 'category' => 'infocenter', + 'phrase' => 'dokUngueltig', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Bei dem Dokument ist keine Nachreichung möglich.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Date is invalid or out of range. Please enter a valid date in the format dd.mm.yyyy.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'infocenter', + 'category' => 'infocenter', + 'phrase' => 'nachreichDatumNichtVergangenheit', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Das Datum der Nachreichung darf nicht in der Vergangenheit liegen.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'The date of submission may not be in the past.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'global', @@ -3549,18 +3788,18 @@ $phrases = array( array( 'app' => 'infocenter', 'category' => 'infocenter', - 'phrase' => 'nurBachelorFreigeben', + 'phrase' => 'nurBachelorMasterFreigeben', 'insertvon' => 'system', 'phrases' => array( array( 'sprache' => 'German', - 'text' => 'Nur Bachelorstudiengänge können freigegeben werden.', + 'text' => 'Nur Bachelorstudiengänge/Masterstudiengänge können freigegeben werden.', 'description' => '', 'insertvon' => 'system' ), array( 'sprache' => 'English', - 'text' => 'Only bachelor programmes can be approved.', + 'text' => 'Only bachelor/master programmes can be approved.', 'description' => '', 'insertvon' => 'system' ) @@ -7968,7 +8207,7 @@ Any unusual occurrences 'insertvon' => 'system' ) ) - ), + ), array( 'app' => 'core', 'category' => 'ui', @@ -9720,7 +9959,7 @@ Any unusual occurrences 'phrases' => array( array( 'sprache' => 'German', - 'text' => 'Deadline ist überschritten', + 'text' => 'Außerhalb der Einreichfrist', 'description' => '', 'insertvon' => 'system' ), @@ -10472,6 +10711,26 @@ Any unusual occurrences ) ) ), + array( + 'app' => 'core', + 'category' => 'anrechnung', + 'phrase' => 'empfehlungAm', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => ' Empfehlung am', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Recommended on', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'anrechnung', @@ -11012,6 +11271,46 @@ Any unusual occurrences ) ) ), + array( + 'app' => 'core', + 'category' => 'global', + 'phrase' => 'zgv', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'ZGV', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'ZGV', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'global', + 'phrase' => 'antragWurdeAngelegt', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Antrag wurde angelegt', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Application was created', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'anrechnung', @@ -11164,10 +11463,10 @@ Any unusual occurrences 'sprache' => 'German', 'text' => "Bitte laden Sie den Antrag in deutscher oder englischer Sprache für das
    -
  • Wintersemester spätestens bis 15. September
  • +
  • Wintersemester spätestens bis 22. September
  • Sommersemester spätestens bis 22. Februar hoch.
-
Die Entscheidung über den Antrag erfolgt in der Regel innerhalb von zwei Wochen ab dem 15. September +
Die Entscheidung über den Antrag erfolgt in der Regel innerhalb von zwei Wochen ab dem 22. September bzw. 22. Februar.

Für jede Lehrveranstaltung ist ein gesonderter Antrag beizubringen.", 'description' => '', @@ -11177,10 +11476,10 @@ Any unusual occurrences 'sprache' => 'English', 'text' => "Please upload the application in German or English
    -
  • by September 15th for the winter semester
  • +
  • by September 22nd for the winter semester
  • by February 22nd for the summer semester at the latest.
-
The decision on the application is usually made within two weeks from September 15 (winter semester) or February 22 (summer semester). +
The decision on the application is usually made within two weeks from September 22 (winter semester) or February 22 (summer semester).

A separate application must be submitted for each course.", 'description' => '', 'insertvon' => 'system' @@ -11216,17 +11515,17 @@ array( array( 'sprache' => 'German', 'text' => "Bitte laden Sie mehrere Nachweis-Dokumente zusammengefasst in einem PDF-Dokument hoch. -

Falls Sie für den Nachweis der Gleichwertigkeit in Bundesgesetzblättern veröffentlichte Lehrpläne (vgl. HTL, HAK…) verwenden, - laden Sie bitte nur die für die Anrechnung relevanten Teile hoch oder markieren Sie diese entsprechend. -

Falls diese Informationen nicht enthalten sind, kann der Antrag auch abgelehnt werden.", +

Falls für den Nachweis der Gleichwertigkeit in Bundesgesetzblättern veröffentlichte Lehrpläne (vgl. HTL, HAK…) verwendet werden, + sind die für die Anrechnung relevanten Teile entsprechend zu markieren. +

Falls das nicht gemacht wird, wird der Antrag aus formalen Gründen abgelehnt.", 'description' => '', 'insertvon' => 'system' ), array( 'sprache' => 'English', 'text' => "Please combine and upload more than one verification document in one PDF document. -

If you use curricula published in federal law gazettes (cf. HTL, HAK ...) to prove equivalence, please upload only the parts relevant for recognition or mark them accordingly. -

If this information is not included, the application might be rejected.", +

If you use curricula published in federal law gazettes (cf. HTL, HAK ...) to prove equivalence, please mark the parts relevant for recognition accordingly. +

If this information is not included, the application must be rejected.", 'description' => '', 'insertvon' => 'system' ) @@ -11312,7 +11611,7 @@ array( 'sprache' => 'German', 'text' => "Die Entscheidung über den Antrag durch die Studiengangsleitung sollte
    -
  • innerhalb von zwei Wochen ab dem 15. September (Wintersemester)
  • +
  • innerhalb von zwei Wochen ab dem 22. September (Wintersemester)
  • innerhalb von zwei Wochen ab dem 22. Februar (Sommersemester) erfolgen.
", 'description' => '', @@ -11322,7 +11621,7 @@ array( 'sprache' => 'English', 'text' => "The decision on the application is usually made by the program director
    -
  • within two weeks from September 15 (winter semester)
  • +
  • within two weeks from September 22 (winter semester)
  • within two weeks from February 22 (summer semester).
", 'description' => '', @@ -11653,6 +11952,26 @@ array( ) ) ), + array( + 'app' => 'core', + 'category' => 'ui', + 'phrase' => 'empfehlungWurdeAngefordertAusnahmeWoKeineLektoren', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Empfehlungsanfragen: {0}
Abgeschickt: {1}
Nicht abgeschickt: {2}
Grund: Keine Lektoren zu LV zugeteilt.", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "Requests for recommendation: {0}
Sent: {1}
Not sent: {2}
Reason: No lectors assigned to the course yet.", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'ui', @@ -11673,7 +11992,486 @@ array( ) ) ), - + array( + 'app' => 'core', + 'category' => 'ui', + 'phrase' => 'alleInBearbeitungLektor', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Alle anzeigen, die auf Empfehlung von LektorIn warten.", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "Show all that are waiting for recommendation.", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'global', + 'phrase' => 'zuruecknehmen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Zurücknehmen", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "Withdraw", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'anrechnung', + 'phrase' => 'genehmigungAblehnungWirklichZuruecknehmen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Ihre Genehmigung / Ablehnung wirklich zurücknehmen?", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "Do you really want to withdraw your approval / rejection?", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'anrechnung', + 'phrase' => 'erfolgreichZurueckgenommen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Erfolgreich zurückgenommen.", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "Successfully withdrawn.", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'anrechnung', + 'phrase' => 'empfehlungsanforderungWirklichZuruecknehmen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Empfehlungsanforderung wirklich zurücknehmen?", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "Do you really want to withdraw your request for recommendation?", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'anrechnung', + 'phrase' => 'antragNurImAktSS', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Der Antrag kann nur für das aktuelle Semester gestellt werden", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "You only can apply for the actual study semester", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'ui', + 'phrase' => 'neu', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Neu", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "New", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'ui', + 'phrase' => 'inBearbeitung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "in Bearbeitung", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "in process", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'global', + 'phrase' => 'antragWurdeGestellt', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Antrag wurde gestellt.", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "Application was submitted successfully.", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'global', + 'phrase' => 'antragBereitsGestellt', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Der Antrag wurde bereits gestellt.", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "Application has already been submitted.", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'anrechnung', + 'phrase' => 'genehmigungNegativEmpfehlungstextUebernehmen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Empfehlungstext des Lektors als Begründung übernehmen.", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "Copy the lectors recommendation text as reason for the rejection.", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'ui', + 'phrase' => 'errorFelderFehlen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Daten fehlen.
Bitte füllen Sie alle Formularfelder aus", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "Missing data.
Please fill in all form fields", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'ui', + 'phrase' => 'errorUploadFehlt', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Dokument fehlt.
Bitte laden Sie noch die entsprechenden Dokumente hoch.", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "Missing document.
Please upload the required documents.", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'ui', + 'phrase' => 'errorNichtAusgefuehrt', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Ihre Anfrage konnte nicht ausgefuehrt werden.
Bitte wenden Sie sich an den IT-Support.", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "Your request could not be processed.
Please contact the IT Support team.", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'anrechnung', + 'phrase' => 'empfehlungsanfrageAn', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Anfrage an", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "Requested to", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'anrechnung', + 'phrase' => 'empfehlungsanfrageAm', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Empfehlung angefragt am", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "Requested on", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'ui', + 'phrase' => 'maxZeichen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Max. Zeichen", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "Max. Characters", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'anrechnung', + 'phrase' => 'bestaetigungstext', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Hiermit bestätige ich, dass ich die relevanten Prozess-Informationen gelesen habe und bestätige hiermit auch die Vollständigkeit und Richtigkeit meiner Angaben.
Ich nehme zur Kenntnis, dass der Antrag nur einmal hochgeladen werden kann und dass Unterlagen nicht nachgereicht werden können.", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "I hereby confirm that I have read the relevant process information and hereby also confirm the accuracy and completeness of the information I have provided above.
I acknowledge that the application can only be uploaded once and that documents cannot be submitted later.", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'ui', + 'phrase' => 'errorBestaetigungFehlt', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Ihre Bestaetigung fehlt.
Bitte aktivieren Sie das entsprechende Feld.", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "Your confirmation is missing.
Please confirm the corresponding field.", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'anrechnung', + 'phrase' => 'neueAnrechnung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Neue Anrechnung", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "New Exemption", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'global', + 'phrase' => 'antragAnlegen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Antrag anlegen", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "Create Application", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'ui', + 'phrase' => 'keineLVzugeteilt', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Dem Studierenden sind keine Lehrveranstaltungen zugeteilt.", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "No courses assigned to this student yet.", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'global', + 'phrase' => 'antragBearbeiten', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Antrag bearbeiten", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "Go to application", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'anrechnung', + 'phrase' => 'antragBenotungBlockiert', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Antrag kann aufgrund der vorhandenen Benotung nicht erstellt werden.", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "Application can not be created due to existing grade.", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), ); diff --git a/system/sync/sync_stpldev_stpl.php b/system/sync/sync_stpldev_stpl.php index fedc9794c..ae5adc25d 100644 --- a/system/sync/sync_stpldev_stpl.php +++ b/system/sync/sync_stpldev_stpl.php @@ -1,4 +1,5 @@ and * Rudolf Hangl . */ + /** * Syncronisiert die Tabelle Stundenplandev mit der Tabelle Stundenplan - * und versendet Benachrichtigungsmails mit den geänderten Stunden + * und versendet Benachrichtigungsmails mit den geaenderten Stunden * an die Betroffenen Lektoren und Studenten * Uebersichtsmails werden an LV-Planung und Administration geschickt */ + require_once(dirname(__FILE__).'/../../config/vilesci.config.inc.php'); require_once(dirname(__FILE__).'/../../config/global.config.inc.php'); require_once(dirname(__FILE__).'/../../include/functions.inc.php'); @@ -36,109 +39,101 @@ require_once(dirname(__FILE__).'/../../include/phrasen.class.php'); $p_de = new phrasen('German'); $p_en = new phrasen('English'); -echo ' - - - LV-Plan-Synchro (stpldev-stpl) - -'; +$sendmail = (boolean)true; if (isset($_GET['sendmail'])) { if ($_GET['sendmail']=='true') - $sendmail=(boolean)true; + $sendmail = (boolean)true; else - $sendmail=(boolean)false; + $sendmail = (boolean)false; } -else - $sendmail=(boolean)true; -$mailstudents=(boolean)true; +$mailstudents = (boolean)true; // Commandline Paramter parsen bei Aufruf ueber Cronjob // zb php sync_stpldev_stpl.php --sendmail false $longopt = array( - "sendmail:", + "sendmail:", ); + $commandlineparams = getopt('', $longopt); -if(isset($commandlineparams['sendmail']) && $commandlineparams['sendmail']=='false') - $sendmail=false; +if (isset($commandlineparams['sendmail']) && $commandlineparams['sendmail']=='false') + $sendmail = false; $datum = new datum(); -$count_del=0; -$count_ins=0; -$count_upd=0; -$count_err=0; +$count_del = 0; +$count_ins = 0; +$count_upd = 0; +$count_err = 0; -// error log fuer jeden Studiengang -$error_log=array(); // Mails an die Lektoren und Verbaende -$message=array(); +$message = array(); + // Nachrichten fuer die LV-Planung -$message_stpl=' -'; -// error_log -$message_sync=''; +$message_stpl = ' + '; - -// Mail Headers festlegen -$headers= "MIME-Version: 1.0\r\n"; -$headers.="Content-Type: text/html; charset=UTF-8\r\n"; +$message_sync = ''; $stsem = new studiensemester(); $studiensemester = $stsem->getaktorNearest(); -$ss=new studiensemester($studiensemester); -$datum_begin=$ss->start; -$datum_ende=$ss->ende; +$ss = new studiensemester($studiensemester); +$datum_begin = $ss->start; +$datum_ende = $ss->ende; //$datum_begin='2012-08-03'; //$datum_ende='2013-02-02'; // $ss->ende -if(defined('LVPLAN_SYNC_ENDE') && LVPLAN_SYNC_ENDE!='') - $datum_ende=LVPLAN_SYNC_ENDE; +if (defined('LVPLAN_SYNC_ENDE') && LVPLAN_SYNC_ENDE != '') + $datum_ende = LVPLAN_SYNC_ENDE; -$db =new basis_db(); +$db = new basis_db(); $stgwhere = ''; $stgwheredev = ''; -if(isset($_GET['custom'])) + +if (isset($_GET['custom'])) { $sendmail = isset($_GET['mail']); $mailstudents = (isset($_GET['nostudentmail'])?false:true); - $studiengang_kz=$_GET['studiengang_kz']; + $studiengang_kz = $_GET['studiengang_kz']; $stgwhere = " AND studiengang_kz=".$db->db_add_param($studiengang_kz, FHC_INTEGER); $stgwheredev = " AND vw_stundenplandev.studiengang_kz=".$db->db_add_param($studiengang_kz, FHC_INTEGER); $datum_begin = $datum->formatDatum($_GET['von'],'Y-m-d'); $datum_ende = $datum->formatDatum($_GET['bis'],'Y-m-d'); } + $message_summary = ''; // Beginnzeiten holen $qry = "SELECT stunde,to_char(beginn, 'HH24:MI') AS beginn FROM lehre.tbl_stunde"; -$beginnzeit_arr=array(); -if($result = $db->db_query($qry)) +$beginnzeit_arr = array(); + +if ($result = $db->db_query($qry)) { - while($row = $db->db_fetch_object($result)) + while ($row = $db->db_fetch_object($result)) { - $beginnzeit_arr[$row->stunde]=$row->beginn; + $beginnzeit_arr[$row->stunde] = $row->beginn; } } + // ************* FUNCTIONS **************** // function getStudentsFromGroup($studiengang_kz, $semester, $verband, $gruppe, $gruppe_kurzbz, $studiensemester_kurzbz) @@ -146,7 +141,7 @@ function getStudentsFromGroup($studiengang_kz, $semester, $verband, $gruppe, $gr $db = new basis_db(); $students = array(); - if($gruppe_kurzbz=='') + if ($gruppe_kurzbz=='') { $qry = "SELECT distinct student_uid @@ -159,12 +154,13 @@ function getStudentsFromGroup($studiengang_kz, $semester, $verband, $gruppe, $gr studiensemester_kurzbz=".$db->db_add_param($studiensemester_kurzbz)." AND studiengang_kz = ".$db->db_add_param($studiengang_kz)." AND semester = ".$db->db_add_param($semester); - if(trim($verband)!='') + + if (trim($verband) != '') { - $qry.=" AND verband = ".$db->db_add_param($verband); - if(trim($gruppe)!='') + $qry .= " AND verband = ".$db->db_add_param($verband); + if (trim($gruppe) != '') { - $qry.=" AND gruppe = ".$db->db_add_param($gruppe); + $qry .= " AND gruppe = ".$db->db_add_param($gruppe); } } } @@ -184,11 +180,11 @@ function getStudentsFromGroup($studiengang_kz, $semester, $verband, $gruppe, $gr } - if($db->db_query($qry)) + if ($db->db_query($qry)) { - while($row = $db->db_fetch_object()) + while ($row = $db->db_fetch_object()) { - $students[]=$row->student_uid; + $students[] = $row->student_uid; } } @@ -196,125 +192,145 @@ function getStudentsFromGroup($studiengang_kz, $semester, $verband, $gruppe, $gr } // **************************************** // -$message_begin=' - -'.$p_de->t('lvplan/automatischeMail').'
'.$p_de->t('lvplan/folgendeAenderungen').'
-'.$p_en->t('lvplan/automatischeMail').'
'.$p_en->t('lvplan/folgendeAenderungen').'
'; -/************************************************** +$message_begin = ' + + '.$p_de->t('lvplan/automatischeMail').'
'.$p_de->t('lvplan/folgendeAenderungen').'
+ '.$p_en->t('lvplan/automatischeMail').'
'.$p_en->t('lvplan/folgendeAenderungen').'
'; + +/** * Datensaetze holen die neu sind */ -echo 'Neue Datensätze werden geholt. ('.date('H:i:s').')
';flush(); + +echo 'Neue Datensaetze werden geholt. ('.date('H:i:s').')'."\n"; +flush(); + $message_stpl .= 'Neue Datensätze werden geholt. ('.date('H:i:s').')'; -$sql_query="SELECT * FROM lehre.vw_stundenplandev - WHERE +$sql_query = "SELECT * + FROM lehre.vw_stundenplandev + WHERE datum>=".$db->db_add_param($datum_begin)." AND datum<=".$db->db_add_param($datum_ende)." ".$stgwhere." - AND NOT EXISTS - (SELECT stundenplan_id FROM lehre.tbl_stundenplan - WHERE - datum>=".$db->db_add_param($datum_begin)." - AND datum<=".$db->db_add_param($datum_ende)." - AND stundenplan_id=stundenplandev_id) - ORDER BY datum, stunde;"; - + AND NOT EXISTS + (SELECT stundenplan_id FROM lehre.tbl_stundenplan + WHERE + datum>=".$db->db_add_param($datum_begin)." + AND datum<=".$db->db_add_param($datum_ende)." + AND stundenplan_id=stundenplandev_id) + ORDER BY datum, stunde;"; if (!$result = $db->db_query($sql_query)) { - echo $sql_query.' fehlgeschlagen!
'.$db->db_last_error(); - $message_sync.=$sql_query.' fehlgeschlagen!
'.$db->db_last_error(); + echo $sql_query.' fehlgeschlagen!'.$db->db_last_error()."\n"; + $message_sync .= $sql_query.' fehlgeschlagen!'.$db->db_last_error(); } else { - echo 'Neue Datensätze werden angelegt.
';flush(); + echo 'Neue Datensaetze werden angelegt.'."\n"; + flush(); + while ($row = $db->db_fetch_object($result)) { - //echo '.';flush(); $sql_query='INSERT INTO lehre.tbl_stundenplan - (stundenplan_id,unr,mitarbeiter_uid,datum,stunde,ort_kurzbz,studiengang_kz,semester,verband,gruppe, - gruppe_kurzbz,titel,'.(LVPLAN_ANMERKUNG_ANZEIGEN?'anmerkung,':'').'fix,updateamum,updatevon,insertamum,insertvon,lehreinheit_id) VALUES'; //spalte anmerkung nur syncen, wenn im Config aktiv - $sql_query.="(".$db->db_add_param($row->stundenplandev_id).",". - $db->db_add_param($row->unr).",". - $db->db_add_param($row->uid).",". - $db->db_add_param($row->datum).",". - $db->db_add_param($row->stunde).",". - $db->db_add_param($row->ort_kurzbz).",". - $db->db_add_param($row->studiengang_kz).",". + (stundenplan_id, unr, mitarbeiter_uid, datum, stunde,ort_kurzbz, studiengang_kz, semester, verband,gruppe, + gruppe_kurzbz,titel,'.(LVPLAN_ANMERKUNG_ANZEIGEN?'anmerkung,':'').'fix,updateamum,updatevon,insertamum,insertvon,lehreinheit_id) + VALUES'; //spalte anmerkung nur syncen, wenn im Config aktiv + + $sql_query .= "(".$db->db_add_param($row->stundenplandev_id).", ". + $db->db_add_param($row->unr).", ". + $db->db_add_param($row->uid).", ". + $db->db_add_param($row->datum).", ". + $db->db_add_param($row->stunde).", ". + $db->db_add_param($row->ort_kurzbz).", ". + $db->db_add_param($row->studiengang_kz).", ". $db->db_add_param($row->semester); - if ($row->verband==null) - $sql_query.=',NULL'; + + if ($row->verband == null) + $sql_query .= ', NULL'; else - $sql_query.=",".$db->db_add_param($row->verband); - if ($row->gruppe==null) - $sql_query.=',NULL'; + $sql_query .= ", ".$db->db_add_param($row->verband); + + if ($row->gruppe == null) + $sql_query .= ', NULL'; else - $sql_query.=",".$db->db_add_param($row->gruppe); - if ($row->gruppe_kurzbz==null) - $sql_query.=',NULL'; + $sql_query .= ", ".$db->db_add_param($row->gruppe); + + if ($row->gruppe_kurzbz == null) + $sql_query .= ', NULL'; else - $sql_query.=",".$db->db_add_param($row->gruppe_kurzbz); - $sql_query.=",".$db->db_add_param($row->titel); + $sql_query .= ", ".$db->db_add_param($row->gruppe_kurzbz); + + $sql_query .= ", ".$db->db_add_param($row->titel); + if (LVPLAN_ANMERKUNG_ANZEIGEN) //spalte anmerkung nur syncen, wenn im Config aktiv - $sql_query.=",".$db->db_add_param($row->anmerkung); - if ($row->fix=='t') - $sql_query.=',TRUE'; + $sql_query .= ", ".$db->db_add_param($row->anmerkung); + + if ($row->fix == 't') + $sql_query .= ', TRUE'; else - $sql_query.=',FALSE'; - $sql_query.=",".$db->db_add_param($row->updateamum).','. - $db->db_add_param($row->updatevon).','. - $db->db_add_param($row->insertamum).','. + $sql_query .= ', FALSE'; + + $sql_query .= ", ".$db->db_add_param($row->updateamum).', '. + $db->db_add_param($row->updatevon).', '. + $db->db_add_param($row->insertamum).', '. $db->db_add_param($row->insertvon); - if ($row->lehreinheit_id==null) - $sql_query.=',NULL'; + + if ($row->lehreinheit_id == null) + $sql_query .= ', NULL'; else - $sql_query.=','.$db->db_add_param($row->lehreinheit_id); - $sql_query.=');'; - //echo $sql_query; + $sql_query .= ', '.$db->db_add_param($row->lehreinheit_id); + + $sql_query .= ');'; + if (!$result_insert = $db->db_query($sql_query)) { - echo $sql_query.' fehlgeschlagen!
'.$db->db_last_error(); - $message_sync.=$sql_query.' fehlgeschlagen!
'.$db->db_last_error(); + echo $sql_query.' fehlgeschlagen!'.$db->db_last_error()."\n"; + $message_sync .= $sql_query.' fehlgeschlagen!'.$db->db_last_error(); $count_err++; } else { $count_ins++; - if ($count_ins%10==0) + + if ($count_ins % 10 == 0) { echo '-'; flush(); } + // Mails vorbereiten // Lektoren - if (mb_substr($row->uid,0,1)!='_') + if (mb_substr($row->uid, 0, 1) != '_') { if (!isset($message[$row->uid]->isneu)) { if(!isset($message[$row->uid])) $message[$row->uid] = new stdClass(); - $message[$row->uid]->isneu=true; - $message[$row->uid]->mailadress=$row->uid.'@'.DOMAIN; - $message[$row->uid]->message_begin=$message_begin.'
'; - $message[$row->uid]->message=''.$p_de->t('lvplan/neueStunden').' / '.$p_en->t('lvplan/neueStunden').'
+ $message[$row->uid]->isneu = true; + $message[$row->uid]->mailadress = $row->uid.'@'.DOMAIN; + $message[$row->uid]->message_begin = $message_begin.'
'; + $message[$row->uid]->message = ' + '.$p_de->t('lvplan/neueStunden').' / '.$p_en->t('lvplan/neueStunden').' +
@@ -326,114 +342,156 @@ else '; } - $message[$row->uid]->message.="\n"; - $message[$row->uid]->message.=''; - $message[$row->uid]->message.=''; - $message[$row->uid]->message.=''; - $message[$row->uid]->message.=''; - $message[$row->uid]->message.=''; - $message[$row->uid]->message.=''; - $message[$row->uid]->message.=''; + + $message[$row->uid]->message .= "\n"; + $message[$row->uid]->message .= ''; + $message[$row->uid]->message .= ''; + $message[$row->uid]->message .= ''; + $message[$row->uid]->message .= ''; + $message[$row->uid]->message .= ''; + $message[$row->uid]->message .= ''; + $message[$row->uid]->message .= ''; } + // Verband if ($mailstudents) { - $studenten = getStudentsFromGroup($row->studiengang_kz, $row->semester, $row->verband, $row->gruppe, $row->gruppe_kurzbz, $ss->studiensemester_kurzbz); + $studenten = getStudentsFromGroup( + $row->studiengang_kz, + $row->semester, + $row->verband, + $row->gruppe, + $row->gruppe_kurzbz, + $ss->studiensemester_kurzbz + ); foreach ($studenten as $student) { if (!isset($message[$student]->isneu)) { - if(!isset($message[$student])) + if (!isset($message[$student])) $message[$student] = new stdClass(); - $message[$student]->isneu=true; - $message[$student]->mailadress=$student.'@'.DOMAIN; - $message[$student]->message_begin=$message_begin.'
'; - $message[$student]->message=''.$p_de->t('lvplan/neueStunden').' / '.$p_en->t('lvplan/neueStunden').'
+ $message[$student]->isneu = true; + $message[$student]->mailadress = $student.'@'.DOMAIN; + $message[$student]->message_begin = $message_begin.'
'; + $message[$student]->message = ' + + '.$p_de->t('lvplan/neueStunden').' / '.$p_en->t('lvplan/neueStunden').' +
'.$p_de->t('lvplan/raum').'
'.$p_en->t('lvplan/raum').'
'.$p_de->t('lvplan/info').'
'.$p_en->t('lvplan/info').'
'.$row->ort_kurzbz.''.mb_strtoupper($row->stg_typ.$row->stg_kurzbz).'-'.$row->semester.$row->verband.$row->gruppe.' '.$row->gruppe_kurzbz.''.$row->lektor.''.$row->datum.''.$row->stunde.' ('.$beginnzeit_arr[$row->stunde].')'.$row->lehrfach.'-'.$row->lehrform.' ('.$row->lehrfach_bez.')'.$row->titel.'
'.$row->ort_kurzbz.''. + mb_strtoupper($row->stg_typ.$row->stg_kurzbz).'-'.$row->semester.$row->verband.$row->gruppe.' '.$row->gruppe_kurzbz + .''.$row->lektor.''.$row->datum.''.$row->stunde.' ('.$beginnzeit_arr[$row->stunde].')'.$row->lehrfach.'-'.$row->lehrform.' ('.$row->lehrfach_bez.')'.$row->titel.'
- + - - - + + + '; } - $message[$student]->message.="\n"; - $message[$student]->message.=''; - $message[$student]->message.=''; - $message[$student]->message.=''; - $message[$student]->message.=''; - $message[$student]->message.=''; - $message[$student]->message.=''; - $message[$student]->message.=''; + $message[$student]->message .= "\n"; + $message[$student]->message .= ''; + $message[$student]->message .= ''; + $message[$student]->message .= ''; + $message[$student]->message .= ''; + $message[$student]->message .= ''; + $message[$student]->message .= ''; + $message[$student]->message .= ''; } } } } + foreach($message as $msg) - if($msg->isneu) - $msg->message.='
'.$p_de->t('lvplan/raum').'
'.$p_en->t('lvplan/raum').'
'.$p_de->t('lvplan/lehrverband').'
'.$p_en->t('lvplan/lehrverband').'
'. + $p_de->t('lvplan/lehrverband').'
'. + $p_en->t('lvplan/lehrverband').' +
'.$p_de->t('lvplan/lektor').'
'.$p_en->t('lvplan/lektor').'
'.$p_de->t('global/datum').'
'.$p_en->t('global/datum').'
'.$p_de->t('lvplan/stdBeginn').'
'.$p_en->t('lvplan/stdBeginn').'
'.$p_de->t('lvplan/lehrfach').'
'.$p_en->t('lvplan/lehrfach').'
'. + $p_de->t('global/datum').'
'.$p_en->t('global/datum').' +
'. + $p_de->t('lvplan/stdBeginn').'
'. + $p_en->t('lvplan/stdBeginn').' +
'. + $p_de->t('lvplan/lehrfach').'
'.$p_en->t('lvplan/lehrfach').' +
'.$p_de->t('lvplan/info').'
'.$p_en->t('lvplan/info').'
'.$row->ort_kurzbz.''.mb_strtoupper($row->stg_typ.$row->stg_kurzbz).'-'.$row->semester.$row->verband.$row->gruppe.' '.$row->gruppe_kurzbz.''.$row->lektor.''.$row->datum.''.$row->stunde.' ('.$beginnzeit_arr[$row->stunde].')'.$row->lehrfach.'-'.$row->lehrform.' ('.$row->lehrfach_bez.')'.$row->titel.'
'.$row->ort_kurzbz.''. + mb_strtoupper($row->stg_typ.$row->stg_kurzbz).'-'.$row->semester.$row->verband.$row->gruppe.' '.$row->gruppe_kurzbz. + ''.$row->lektor.''.$row->datum.''.$row->stunde.' ('.$beginnzeit_arr[$row->stunde].')'.$row->lehrfach.'-'.$row->lehrform.' ('.$row->lehrfach_bez.')'.$row->titel.'

'; + if ($msg->isneu) + $msg->message .= '
'; } /************************************************** * Datensaetze holen die alt sind */ -echo '
Alte Datensätze werden geholt.('.date('H:i:s').')
';flush(); +echo 'Alte Datensaetze werden geholt.('.date('H:i:s').')'."\n"; +flush(); + $message_stpl .='
Alte Datensätze werden geholt.('.date('H:i:s').')
'; -$sql_query="SELECT * FROM lehre.vw_stundenplan - WHERE datum>=".$db->db_add_param($datum_begin)." - AND datum<=".$db->db_add_param($datum_ende)." ".$stgwhere." - AND NOT EXISTS - (SELECT stundenplandev_id FROM lehre.tbl_stundenplandev - WHERE datum>=".$db->db_add_param($datum_begin)." - AND datum<=".$db->db_add_param($datum_ende)." - AND stundenplandev_id=stundenplan_id);"; + +$sql_query = "SELECT * + FROM lehre.vw_stundenplan + WHERE datum>=".$db->db_add_param($datum_begin)." + AND datum<=".$db->db_add_param($datum_ende)." ".$stgwhere." + AND NOT EXISTS + (SELECT stundenplandev_id FROM lehre.tbl_stundenplandev + WHERE datum>=".$db->db_add_param($datum_begin)." + AND datum<=".$db->db_add_param($datum_ende)." + AND stundenplandev_id=stundenplan_id);"; + if (!$result = $db->db_query($sql_query)) { - echo $sql_query.' fehlgeschlagen!
'.$db->db_last_error(); + echo $sql_query.' fehlgeschlagen!
'.$db->db_last_error()."\n"; + $message_sync.=$sql_query.' fehlgeschlagen!
'.$db->db_last_error(); } else { - echo '
Alte Datensätze werden gelöscht.
';flush(); + echo 'Alte Datensaetze werden geloescht.'."\n"; + flush(); + while ($row = $db->db_fetch_object($result)) { - $sql_query='DELETE FROM lehre.tbl_stundenplan WHERE stundenplan_id='.$db->db_add_param($row->stundenplan_id); + $sql_query = 'DELETE FROM lehre.tbl_stundenplan WHERE stundenplan_id='.$db->db_add_param($row->stundenplan_id); - if (!$result_delete=$db->db_query($sql_query)) + if (!$result_delete = $db->db_query($sql_query)) { - echo $sql_query.' fehlgeschlagen!
'.$db->db_last_error(); - $message_sync.=$sql_query.' fehlgeschlagen!
'.$db->db_last_error(); + echo $sql_query.' fehlgeschlagen!'.$db->db_last_error()."\n"; + + $message_sync .= $sql_query.' fehlgeschlagen!'.$db->db_last_error(); $count_err++; } else { $count_del++; - if ($count_del%10==0) + + if ($count_del % 10 == 0) { echo '-'; flush(); } + // Mails vorbereiten // Lektoren - if (mb_substr($row->uid,0,1)!='_') + if (mb_substr($row->uid,0,1) != '_') { if (!isset($message[$row->uid]->isalt)) { - if(!isset($message[$row->uid])) + if (!isset($message[$row->uid])) $message[$row->uid] = new stdClass(); - $message[$row->uid]->isalt=true; - $message[$row->uid]->mailadress=$row->uid.'@'.DOMAIN; - $message[$row->uid]->message_begin=$message_begin.'
'; - if(!isset($message[$row->uid]->message)) - $message[$row->uid]->message=''; - $message[$row->uid]->message.=''.$p_de->t('lvplan/geloeschteStunden').' / '.$p_en->t('lvplan/geloeschteStunden').'
+ $message[$row->uid]->isalt = true; + $message[$row->uid]->mailadress = $row->uid.'@'.DOMAIN; + $message[$row->uid]->message_begin = $message_begin.'
'; + + if (!isset($message[$row->uid]->message)) + $message[$row->uid]->message = ''; + + $message[$row->uid]->message .= ' + + '.$p_de->t('lvplan/geloeschteStunden').' / '.$p_en->t('lvplan/geloeschteStunden').'
@@ -445,68 +503,93 @@ else '; } - $message[$row->uid]->message.="\n"; - $message[$row->uid]->message.=''; - $message[$row->uid]->message.=''; - $message[$row->uid]->message.=''; - $message[$row->uid]->message.=''; - $message[$row->uid]->message.=''; - $message[$row->uid]->message.=''; - $message[$row->uid]->message.=''; + $message[$row->uid]->message .= "\n"; + $message[$row->uid]->message .= ''; + $message[$row->uid]->message .= ''; + $message[$row->uid]->message .= ''; + $message[$row->uid]->message .= ''; + $message[$row->uid]->message .= ''; + $message[$row->uid]->message .= ''; + $message[$row->uid]->message .= ''; } + // Verband if ($mailstudents) { - $studenten = getStudentsFromGroup($row->studiengang_kz, $row->semester, $row->verband, $row->gruppe, $row->gruppe_kurzbz, $ss->studiensemester_kurzbz); + $studenten = getStudentsFromGroup( + $row->studiengang_kz, $row->semester, $row->verband, $row->gruppe, $row->gruppe_kurzbz, $ss->studiensemester_kurzbz + ); foreach ($studenten as $student) { if (!isset($message[$student]->isalt)) { - if(!isset($message[$student])) + if (!isset($message[$student])) $message[$student] = new stdClass(); - $message[$student]->isalt=true; - $message[$student]->mailadress=$student.'@'.DOMAIN; - $message[$student]->message_begin=$message_begin.'
'; - if(!isset($message[$student]->message)) - $message[$student]->message=''; - $message[$student]->message.=''.$p_de->t('lvplan/geloeschteStunden').' / '.$p_en->t('lvplan/geloeschteStunden').'
+ $message[$student]->isalt = true; + $message[$student]->mailadress = $student.'@'.DOMAIN; + $message[$student]->message_begin = $message_begin.'
'; + + if (!isset($message[$student]->message)) + $message[$student]->message = ''; + + $message[$student]->message .= + ' + '.$p_de->t('lvplan/geloeschteStunden').' / '.$p_en->t('lvplan/geloeschteStunden'). + '
'.$p_de->t('lvplan/raum').'
'.$p_en->t('lvplan/raum').'
'.$p_de->t('lvplan/info').'
'.$p_en->t('lvplan/info').'
'.$row->ort_kurzbz.''.strtoupper($row->stg_typ.$row->stg_kurzbz).'-'.$row->semester.$row->verband.$row->gruppe.' '.$row->gruppe_kurzbz.''.$row->lektor.''.$row->datum.''.$row->stunde.' ('.$beginnzeit_arr[$row->stunde].')'.$row->lehrfach.'-'.$row->lehrform.' ('.$row->lehrfach_bez.')'.$row->titel.'
'.$row->ort_kurzbz.''. + strtoupper($row->stg_typ.$row->stg_kurzbz).'-'.$row->semester.$row->verband.$row->gruppe.' '.$row->gruppe_kurzbz.''.$row->lektor.''.$row->datum.''.$row->stunde.' ('.$beginnzeit_arr[$row->stunde].')'.$row->lehrfach.'-'.$row->lehrform.' ('.$row->lehrfach_bez.')'.$row->titel.'
- + - - + + '; } - $message[$student]->message.="\n"; - $message[$student]->message.=''; - $message[$student]->message.=''; - $message[$student]->message.=''; - $message[$student]->message.=''; - $message[$student]->message.=''; - $message[$student]->message.=''; - $message[$student]->message.=''; + + $message[$student]->message .= "\n"; + $message[$student]->message .= ''; + $message[$student]->message .= ''; + $message[$student]->message .= ''; + $message[$student]->message .= ''; + $message[$student]->message .= ''; + $message[$student]->message .= ''; + $message[$student]->message .= ''; } } } } - foreach($message as $msg) - if(isset($msg->isalt)) - $msg->message.='
'.$p_de->t('lvplan/raum').'
'.$p_en->t('lvplan/raum').'
'.$p_de->t('lvplan/lehrverband').'
'.$p_en->t('lvplan/lehrverband').'
' + .$p_de->t('lvplan/lehrverband').'
'.$p_en->t('lvplan/lehrverband'). + ' +
'.$p_de->t('lvplan/lektor').'
'.$p_en->t('lvplan/lektor').'
'.$p_de->t('global/datum').'
'.$p_en->t('global/datum').'
'.$p_de->t('lvplan/stdBeginn').'
'.$p_en->t('lvplan/stdBeginn').'
'.$p_de->t('lvplan/lehrfach').'
'.$p_en->t('lvplan/lehrfach').'
'. + $p_de->t('lvplan/stdBeginn').'
'.$p_en->t('lvplan/stdBeginn'). + ' +
'. + $p_de->t('lvplan/lehrfach').'
'.$p_en->t('lvplan/lehrfach'). + ' +
'.$p_de->t('lvplan/info').'
'.$p_en->t('lvplan/info').'
'.$row->ort_kurzbz.''.mb_strtoupper($row->stg_typ.$row->stg_kurzbz).'-'.$row->semester.$row->verband.$row->gruppe.' '.$row->gruppe_kurzbz.''.$row->lektor.''.$row->datum.''.$row->stunde.' ('.$beginnzeit_arr[$row->stunde].')'.$row->lehrfach.'-'.$row->lehrform.' ('.$row->lehrfach_bez.')'.$row->titel.'
'.$row->ort_kurzbz.''. + mb_strtoupper($row->stg_typ.$row->stg_kurzbz).'-'.$row->semester.$row->verband.$row->gruppe.' '.$row->gruppe_kurzbz. + ''.$row->lektor.''.$row->datum.''.$row->stunde.' ('.$beginnzeit_arr[$row->stunde].')'.$row->lehrfach.'-'.$row->lehrform.' ('.$row->lehrfach_bez.')'.$row->titel.'

'; + + foreach ($message as $msg) + if (isset($msg->isalt)) + $msg->message .= '
'; } /************************************************** * Datensaetze holen die anders sind */ -echo '
Geänderte Datensätze werden geholt.('.date('H:i:s').')
';flush(); -$message_stpl.='
Geänderte Datensätze werden geholt.('.date('H:i:s').')
'; -$sql_query="SELECT vw_stundenplandev.*, vw_stundenplan.datum AS old_datum, vw_stundenplan.stunde AS old_stunde, +echo 'Geaenderte Datensaetze werden geholt.('.date('H:i:s').')'."\n"; +flush(); + +$message_stpl .= '
Geänderte Datensätze werden geholt.('.date('H:i:s').')
'; + +$sql_query = "SELECT vw_stundenplandev.*, vw_stundenplan.datum AS old_datum, vw_stundenplan.stunde AS old_stunde, vw_stundenplan.ort_kurzbz AS old_ort_kurzbz, vw_stundenplan.lektor AS old_lektor, vw_stundenplan.uid AS old_uid, vw_stundenplan.titel AS old_titel, vw_stundenplan.anmerkung AS old_anmerkung @@ -524,103 +607,124 @@ $sql_query="SELECT vw_stundenplandev.*, vw_stundenplan.datum AS old_datum, vw_st vw_stundenplandev.gruppe_kurzbz!=vw_stundenplan.gruppe_kurzbz OR coalesce(vw_stundenplandev.titel,'')!=coalesce(vw_stundenplan.titel,'') OR vw_stundenplandev.fix!=vw_stundenplan.fix OR"; + if (LVPLAN_ANMERKUNG_ANZEIGEN) $sql_query .= " coalesce(vw_stundenplandev.anmerkung,'')!=coalesce(vw_stundenplan.anmerkung,'') OR"; + $sql_query .= " vw_stundenplandev.lehreinheit_id!=vw_stundenplan.lehreinheit_id ) AND vw_stundenplandev.datum>=".$db->db_add_param($datum_begin)." AND vw_stundenplandev.datum<=".$db->db_add_param($datum_ende)." ".$stgwheredev.";"; -//echo $sql_query.'
'; - - if (!$result = $db->db_query($sql_query)) { - echo $sql_query.' fehlgeschlagen!
'.$db->db_last_error(); - $message_sync.=$sql_query.' fehlgeschlagen!
'.$db->db_last_error(); + echo $sql_query.' fehlgeschlagen!'.$db->db_last_error()."\n"; + + $message_sync .= $sql_query.' fehlgeschlagen!
'.$db->db_last_error(); } else { - echo '
Datensätze werden geändert.
';flush(); + echo 'Datensaetze werden geaendert.'."\n"; + flush(); + while ($row = $db->db_fetch_object($result)) { - //echo '.';flush(); // Alten Eintrag aus tbl_stundenplan holen - $sql_query="SELECT * FROM lehre.tbl_stundenplandev WHERE stundenplandev_id=".$db->db_add_param($row->stundenplandev_id).";"; + $sql_query = "SELECT * FROM lehre.tbl_stundenplandev WHERE stundenplandev_id=".$db->db_add_param($row->stundenplandev_id).";"; + if (!$result_old = $db->db_query($sql_query)) { - echo $sql_query.' fehlgeschlagen!
'.$db->db_last_error(); - $message_sync.=$sql_query.' fehlgeschlagen!
'.$db->db_last_error(); + echo $sql_query.' fehlgeschlagen!'.$db->db_last_error()."\n"; + + $message_sync .= $sql_query.' fehlgeschlagen!
'.$db->db_last_error(); } else - $row_old=$db->db_fetch_object($result_old); + $row_old = $db->db_fetch_object($result_old); // Datensaetze aendern - $sql_query="UPDATE lehre.tbl_stundenplan SET - unr=".$db->db_add_param($row->unr). - ",mitarbeiter_uid=".$db->db_add_param($row->uid). - ",datum=".$db->db_add_param($row->datum). - ",stunde=".$db->db_add_param($row->stunde). - ",ort_kurzbz=".$db->db_add_param($row->ort_kurzbz). - ",studiengang_kz=".$db->db_add_param($row->studiengang_kz). - ",semester=".$db->db_add_param($row->semester); - if ($row->verband==null) - $sql_query.=',verband=NULL'; + $sql_query = "UPDATE lehre.tbl_stundenplan SET + unr = ".$db->db_add_param($row->unr). + ", mitarbeiter_uid = ".$db->db_add_param($row->uid). + ", datum = ".$db->db_add_param($row->datum). + ", stunde = ".$db->db_add_param($row->stunde). + ", ort_kurzbz = ".$db->db_add_param($row->ort_kurzbz). + ", studiengang_kz = ".$db->db_add_param($row->studiengang_kz). + ", semester = ".$db->db_add_param($row->semester); + + if ($row->verband == null) + $sql_query .= ', verband = NULL'; else - $sql_query.=",verband=".$db->db_add_param($row->verband); - if ($row->gruppe==null) - $sql_query.=',gruppe=NULL'; + $sql_query .= ", verband = ".$db->db_add_param($row->verband); + + if ($row->gruppe == null) + $sql_query .= ', gruppe = NULL'; else - $sql_query.=",gruppe=".$db->db_add_param($row->gruppe); - if ($row->gruppe_kurzbz==null) -// $sql_query.=",gruppe_kurzbz=NULL, titel=$row->titel"; --> Das war die urspruengliche query. row->titel von kindlm am 16.03.2012 entfernt und in eigenes if geschrieben. - $sql_query.=',gruppe_kurzbz=NULL'; + $sql_query .= ", gruppe = ".$db->db_add_param($row->gruppe); + + if ($row->gruppe_kurzbz == null) + $sql_query .= ', gruppe_kurzbz = NULL'; else - $sql_query.=",gruppe_kurzbz=".$db->db_add_param($row->gruppe_kurzbz); + $sql_query .= ", gruppe_kurzbz = ".$db->db_add_param($row->gruppe_kurzbz); + if (LVPLAN_ANMERKUNG_ANZEIGEN) //spalte anmerkung nur syncen, wenn im Config aktiv - $sql_query.=",anmerkung=".$db->db_add_param($row->anmerkung); - if ($row->titel=='') - $sql_query.=',titel=NULL'; + $sql_query .= ", anmerkung = ".$db->db_add_param($row->anmerkung); + + if ($row->titel == '') + $sql_query .= ', titel = NULL'; else - $sql_query.=",titel=".$db->db_add_param($row->titel); - if ($row->fix=='t') - $sql_query.=',fix=TRUE'; + $sql_query .= ", titel = ".$db->db_add_param($row->titel); + + if ($row->fix == 't') + $sql_query .= ', fix = TRUE'; else - $sql_query.=',fix=FALSE'; - $sql_query.=",updateamum=".$db->db_add_param($row->updateamum).",updatevon=".$db->db_add_param($row->updatevon); - if ($row->lehreinheit_id==null) - $sql_query.=',lehreinheit_id=NULL'; + $sql_query.=', fix = FALSE'; + + $sql_query .= ", updateamum = ".$db->db_add_param($row->updateamum).", updatevon = ".$db->db_add_param($row->updatevon); + + if ($row->lehreinheit_id == null) + $sql_query .= ', lehreinheit_id = NULL'; else - $sql_query.=",lehreinheit_id=".$db->db_add_param($row->lehreinheit_id); - $sql_query.=" WHERE stundenplan_id=".$db->db_add_param($row->stundenplandev_id).";"; - //echo $sql_query.'
'; - if (!$result_update=$db->db_query($sql_query)) + $sql_query .= ", lehreinheit_id = ".$db->db_add_param($row->lehreinheit_id); + + $sql_query .= " WHERE stundenplan_id = ".$db->db_add_param($row->stundenplandev_id).";"; + + if (!$result_update = $db->db_query($sql_query)) { - echo $sql_query.' fehlgeschlagen!
'.$db->db_last_error(); - $message_sync.=$sql_query.' fehlgeschlagen!
'.$db->db_last_error(); + echo $sql_query.' fehlgeschlagen!'.$db->db_last_error()."\n"; + + $message_sync .= $sql_query.' fehlgeschlagen!
'.$db->db_last_error(); $count_err++; } else { $count_upd++; - if ($count_upd%10==0) + + if ($count_upd % 10 == 0) { echo '-'; flush(); } + // Mails vorbereiten // Lektoren - if (mb_substr($row->uid,0,1)!='_') + if (mb_substr($row->uid, 0, 1) != '_') { if (!isset($message[$row->uid]->isset)) { - if(!isset($message[$row->uid])) + if (!isset($message[$row->uid])) $message[$row->uid] = new stdClass(); - $message[$row->uid]->isset=true; - $message[$row->uid]->mailadress=$row->uid.'@'.DOMAIN; - $message[$row->uid]->message_begin=$message_begin.'
'; - if(!isset($message[$row->uid]->message)) - $message[$row->uid]->message=''; - $message[$row->uid]->message.=''.$p_de->t('lvplan/geaenderteStunden').' / '.$p_en->t('lvplan/geaenderteStunden').'
+ + $message[$row->uid]->isset = true; + $message[$row->uid]->mailadress = $row->uid.'@'.DOMAIN; + $message[$row->uid]->message_begin = $message_begin.'
'; + + if (!isset($message[$row->uid]->message)) + $message[$row->uid]->message = ''; + + $message[$row->uid]->message .= ' + + '.$p_de->t('lvplan/geaenderteStunden').' / '.$p_en->t('lvplan/geaenderteStunden').' + +
@@ -633,51 +737,64 @@ else '; } - $message[$row->uid]->message.="\n"; - $message[$row->uid]->message.=''; - $message[$row->uid]->message.=''; - $message[$row->uid]->message.=''; - $message[$row->uid]->message.=''; - $message[$row->uid]->message.=''; - $message[$row->uid]->message.=''; - $message[$row->uid]->message.=''; - $message[$row->uid]->message.=''; - - $message[$row->uid]->message.="\n"; - $message[$row->uid]->message.=''; - $myclass=($row->ort_kurzbz!=$row->old_ort_kurzbz?'marked':'unmarked'); - $message[$row->uid]->message.=''; + $message[$row->uid]->message .= "\n"; + $message[$row->uid]->message .= ''; + $message[$row->uid]->message .= ''; + $message[$row->uid]->message .= ''; + $message[$row->uid]->message .= ''; + $message[$row->uid]->message .= ''; + $message[$row->uid]->message .= ''; + $message[$row->uid]->message .= ''; + $message[$row->uid]->message .= ''; + $message[$row->uid]->message .= "\n"; + $message[$row->uid]->message .= ''; + $myclass=($row->ort_kurzbz != $row->old_ort_kurzbz?'marked':'unmarked'); + $message[$row->uid]->message .= ''; $myclass='unmarked'; - $message[$row->uid]->message.=''; - $myclass=($row->lektor!=$row->old_lektor?'marked':'unmarked'); - $message[$row->uid]->message.=''; - $myclass=(($row->datum!=$row->old_datum)?'marked':'unmarked'); - $message[$row->uid]->message.=''; - $myclass=(($row->stunde!=$row->old_stunde)?'marked':'unmarked'); - $message[$row->uid]->message.=''; - $myclass='unmarked'; - $message[$row->uid]->message.=''; - $myclass=($row->titel!=$row->old_titel?'marked':'unmarked'); - $message[$row->uid]->message.=''; + $message[$row->uid]->message .= ''; + $myclass = ($row->lektor != $row->old_lektor ? 'marked' : 'unmarked'); + $message[$row->uid]->message .= ''; + $myclass = (($row->datum != $row->old_datum) ? 'marked' : 'unmarked'); + $message[$row->uid]->message .= ''; + $myclass = (($row->stunde != $row->old_stunde) ? 'marked' : 'unmarked'); + $message[$row->uid]->message .= ''; + $myclass = 'unmarked'; + $message[$row->uid]->message .= ''; + $myclass = ($row->titel != $row->old_titel ? 'marked' : 'unmarked'); + $message[$row->uid]->message .= ''; } //wenn sich der Lektor geaendert hat dann auch den vorherigen lektor informieren //sofern es kein dummylektor ist - if($row->uid!=$row->old_uid) + if ($row->uid != $row->old_uid) { - if (mb_substr($row->old_uid,0,1)!='_') + if (mb_substr($row->old_uid, 0, 1) != '_') { if (!isset($message[$row->old_uid]->isset)) { - if(!isset($message[$row->old_uid])) + if (!isset($message[$row->old_uid])) $message[$row->old_uid] = new stdClass(); - $message[$row->old_uid]->isset=true; - $message[$row->old_uid]->mailadress=$row->old_uid.'@'.DOMAIN; - $message[$row->old_uid]->message_begin=$message_begin.'
'; - if(!isset($message[$row->old_uid]->message)) + $message[$row->old_uid]->isset = true; + $message[$row->old_uid]->mailadress = $row->old_uid.'@'.DOMAIN; + $message[$row->old_uid]->message_begin = $message_begin.'
'; + + if (!isset($message[$row->old_uid]->message)) $message[$row->old_uid]->message = ''; - $message[$row->old_uid]->message.=''.$p_de->t('lvplan/geaenderteStunden').' / '.$p_en->t('lvplan/geaenderteStunden').'
+ + $message[$row->old_uid]->message .= ' + + '.$p_de->t('lvplan/geaenderteStunden').' / '.$p_en->t('lvplan/geaenderteStunden').' + +
'.$p_de->t('lvplan/status').'
'.$p_en->t('lvplan/status').'
'.$p_de->t('lvplan/info').'
'.$p_en->t('lvplan/info').'
'.$p_de->t('lvplan/vorher').' / '.$p_en->t('lvplan/vorher').': '.$row->old_ort_kurzbz.''.mb_strtoupper($row->stg_typ.$row->stg_kurzbz).'-'.$row->semester.$row->verband.$row->gruppe.' '.$row->gruppe_kurzbz.''.$row->old_lektor.''.$row->old_datum.''.$row->old_stunde.' ('.$beginnzeit_arr[$row->old_stunde].')'.$row->lehrfach.'-'.$row->lehrform.' ('.$row->lehrfach_bez.')'.$row->old_titel.'
'.$p_de->t('lvplan/jetzt').' / '.$p_en->t('lvplan/jetzt').': '.$row->ort_kurzbz.'
'.$p_de->t('lvplan/vorher').' / '.$p_en->t('lvplan/vorher').': '.$row->old_ort_kurzbz.''. + mb_strtoupper($row->stg_typ.$row->stg_kurzbz).'-'.$row->semester.$row->verband.$row->gruppe.' '.$row->gruppe_kurzbz. + ''.$row->old_lektor.''.$row->old_datum.''.$row->old_stunde.' ('.$beginnzeit_arr[$row->old_stunde].')'.$row->lehrfach.'-'.$row->lehrform.' ('.$row->lehrfach_bez.')'.$row->old_titel.'
'.$p_de->t('lvplan/jetzt').' / '.$p_en->t('lvplan/jetzt').': '.$row->ort_kurzbz.''.strtoupper($row->stg_typ.$row->stg_kurzbz).'-'.$row->semester.$row->verband.$row->gruppe.' '.$row->gruppe_kurzbz.''.$row->lektor.''.$row->datum.''.$row->stunde.' ('.$beginnzeit_arr[$row->stunde].')'.$row->lehrfach.'-'.$row->lehrform.' ('.$row->lehrfach_bez.')'.$row->titel.'
----------------
+ '. + strtoupper($row->stg_typ.$row->stg_kurzbz).'-'.$row->semester.$row->verband.$row->gruppe.' '.$row->gruppe_kurzbz.' + + '.$row->lektor.''.$row->datum.''.$row->stunde.' ('.$beginnzeit_arr[$row->stunde].') + '.$row->lehrfach.'-'.$row->lehrform.' ('.$row->lehrfach_bez.') + '.$row->titel.'
----------------
@@ -690,112 +807,148 @@ else '; } - $message[$row->old_uid]->message.="\n"; - $message[$row->old_uid]->message.=''; - $message[$row->old_uid]->message.=''; - $message[$row->old_uid]->message.=''; - $message[$row->old_uid]->message.=''; - $message[$row->old_uid]->message.=''; - $message[$row->old_uid]->message.=''; - $message[$row->old_uid]->message.=''; - $message[$row->old_uid]->message.=''; - $message[$row->old_uid]->message.="\n"; - $message[$row->old_uid]->message.=''; - $myclass=($row->ort_kurzbz!=$row->old_ort_kurzbz?'marked':'unmarked'); - $message[$row->old_uid]->message.=''; - $myclass='unmarked'; - $message[$row->old_uid]->message.=''; - $myclass=($row->lektor!=$row->old_lektor?'marked':'unmarked'); - $message[$row->old_uid]->message.=''; - $myclass=(($row->datum!=$row->old_datum)?'marked':'unmarked'); - $message[$row->old_uid]->message.=''; - $myclass=(($row->stunde!=$row->old_stunde)?'marked':'unmarked'); - $message[$row->old_uid]->message.=''; - $myclass='unmarked'; - $message[$row->old_uid]->message.=''; - $myclass=($row->titel!=$row->old_titel?'marked':'unmarked'); - $message[$row->old_uid]->message.=''; + $message[$row->old_uid]->message .= "\n"; + $message[$row->old_uid]->message .= ''; + $message[$row->old_uid]->message .= ''; + $message[$row->old_uid]->message .= ''; + $message[$row->old_uid]->message .= ''; + $message[$row->old_uid]->message .= ''; + $message[$row->old_uid]->message .= ''; + $message[$row->old_uid]->message .= ''; + $message[$row->old_uid]->message .= ''; + $message[$row->old_uid]->message .= "\n"; + $message[$row->old_uid]->message .= ''; + $myclass = ($row->ort_kurzbz!=$row->old_ort_kurzbz ? 'marked' : 'unmarked'); + $message[$row->old_uid]->message .= ''; + $myclass = 'unmarked'; + $message[$row->old_uid]->message .= ''; + $myclass = ($row->lektor != $row->old_lektor ? 'marked' : 'unmarked'); + $message[$row->old_uid]->message .= ''; + $myclass = (($row->datum != $row->old_datum) ? 'marked' : 'unmarked'); + $message[$row->old_uid]->message .= ''; + $myclass = (($row->stunde != $row->old_stunde) ? 'marked' : 'unmarked'); + $message[$row->old_uid]->message .= ''; + $myclass = 'unmarked'; + $message[$row->old_uid]->message .= ''; + $myclass = ($row->titel != $row->old_titel ? 'marked' : 'unmarked'); + $message[$row->old_uid]->message .= ''; } } + // Verband if ($mailstudents) { - $studenten = getStudentsFromGroup($row->studiengang_kz, $row->semester, $row->verband, $row->gruppe, $row->gruppe_kurzbz, $ss->studiensemester_kurzbz); + $studenten = getStudentsFromGroup( + $row->studiengang_kz, $row->semester, $row->verband, $row->gruppe, $row->gruppe_kurzbz, $ss->studiensemester_kurzbz + ); foreach ($studenten as $student) { if (!isset($message[$student]->isset)) { - if(!isset($message[$student])) + if (!isset($message[$student])) $message[$student] = new stdClass(); - $message[$student]->isset=true; - $message[$student]->mailadress=$student.'@'.DOMAIN; - $message[$student]->message_begin=$message_begin.'
'; - if(!isset($message[$student]->message)) - $message[$student]->message=''; - $message[$student]->message.=''.$p_de->t('lvplan/geaenderteStunden').' / '.$p_en->t('lvplan/geaenderteStunden').'
-
'.$p_de->t('lvplan/status').'
'.$p_en->t('lvplan/status').'
'.$p_de->t('lvplan/info').'
'.$p_en->t('lvplan/info').'
'.$p_de->t('lvplan/vorher').' / '.$p_en->t('lvplan/vorher').': '.$row->old_ort_kurzbz.''.mb_strtoupper($row->stg_typ.$row->stg_kurzbz).'-'.$row->semester.$row->verband.$row->gruppe.' '.$row->gruppe_kurzbz.''.$row->old_lektor.''.$row->old_datum.''.$row->old_stunde.' ('.$beginnzeit_arr[$row->old_stunde].')'.$row->lehrfach.'-'.$row->lehrform.' ('.$row->lehrfach_bez.')'.$row->old_titel.'
'.$p_de->t('lvplan/jetzt').' / '.$p_en->t('lvplan/jetzt').': '.$row->ort_kurzbz.''.strtoupper($row->stg_typ.$row->stg_kurzbz).'-'.$row->semester.$row->verband.$row->gruppe.' '.$row->gruppe_kurzbz.''.$row->lektor.''.$row->datum.''.$row->stunde.' ('.$beginnzeit_arr[$row->stunde].')'.$row->lehrfach.'-'.$row->lehrform.' ('.$row->lehrfach_bez.')'.$row->titel.'
----------------
'.$p_de->t('lvplan/vorher').' / '.$p_en->t('lvplan/vorher').': '.$row->old_ort_kurzbz.''. + mb_strtoupper($row->stg_typ.$row->stg_kurzbz).'-'.$row->semester.$row->verband.$row->gruppe.' '.$row->gruppe_kurzbz. + ''.$row->old_lektor.''.$row->old_datum.''.$row->old_stunde.' ('.$beginnzeit_arr[$row->old_stunde].')'.$row->lehrfach.'-'.$row->lehrform.' ('.$row->lehrfach_bez.')'.$row->old_titel.'
'.$p_de->t('lvplan/jetzt').' / '.$p_en->t('lvplan/jetzt').': '.$row->ort_kurzbz.' + '. + strtoupper($row->stg_typ.$row->stg_kurzbz).'-'.$row->semester.$row->verband.$row->gruppe.' '.$row->gruppe_kurzbz. + ' + '.$row->lektor.''.$row->datum.' + '.$row->stunde.' ('.$beginnzeit_arr[$row->stunde].') + + '.$row->lehrfach.'-'.$row->lehrform.' ('.$row->lehrfach_bez.') + + '.$row->titel.'
---------------- +
- - - - - - - - - '; - } - $message[$student]->message.="\n"; - $message[$student]->message.=''; - $message[$student]->message.=''; - $message[$student]->message.=''; - $message[$student]->message.=''; - $message[$student]->message.=''; - $message[$student]->message.=''; - $message[$student]->message.=''; - $message[$student]->message.=''; + $message[$student]->isset = true; + $message[$student]->mailadress = $student.'@'.DOMAIN; + $message[$student]->message_begin = $message_begin.'
'; - $message[$student]->message.="\n"; - $message[$student]->message.=''; - $myclass=($row->ort_kurzbz!=$row->old_ort_kurzbz?'marked':'unmarked'); - $message[$student]->message.=''; - $myclass='unmarked'; - $message[$student]->message.=''; - $myclass=($row->lektor!=$row->old_lektor?'marked':'unmarked'); - $message[$student]->message.=''; - $myclass=(($row->datum!=$row->old_datum)?'marked':'unmarked'); - $message[$student]->message.=''; - $myclass=(($row->stunde!=$row->old_stunde)?'marked':'unmarked'); - $message[$student]->message.=''; - $myclass='unmarked'; - $message[$student]->message.=''; - $myclass=($row->titel!=$row->old_titel?'marked':'unmarked'); - $message[$student]->message.=''; + if (!isset($message[$student]->message)) + $message[$student]->message = ''; + + $message[$student]->message .= ' + + '.$p_de->t('lvplan/geaenderteStunden').' / '.$p_en->t('lvplan/geaenderteStunden').' + +
+
'.$p_de->t('lvplan/status').'
'.$p_en->t('lvplan/status').'
'.$p_de->t('lvplan/raum').'
'.$p_en->t('lvplan/raum').'
'.$p_de->t('lvplan/lehrverband').'
'.$p_en->t('lvplan/lehrverband').'
'.$p_de->t('lvplan/lektor').'
'.$p_en->t('lvplan/lektor').'
'.$p_de->t('global/datum').'
'.$p_en->t('global/datum').'
'.$p_de->t('lvplan/stdBeginn').'
'.$p_en->t('lvplan/stdBeginn').'
'.$p_de->t('lvplan/lehrfach').'
'.$p_en->t('lvplan/lehrfach').'
'.$p_de->t('lvplan/info').'
'.$p_en->t('lvplan/info').'
'.$p_de->t('lvplan/vorher').' / '.$p_en->t('lvplan/vorher').': '.$row->old_ort_kurzbz.''.mb_strtoupper($row->stg_typ.$row->stg_kurzbz).'-'.$row->semester.$row->verband.$row->gruppe.' '.$row->gruppe_kurzbz.''.$row->old_lektor.''.$row->old_datum.''.$row->old_stunde.' ('.$beginnzeit_arr[$row->old_stunde].')'.$row->lehrfach.'-'.$row->lehrform.' ('.$row->lehrfach_bez.')'.$row->old_titel.'
'.$p_de->t('lvplan/jetzt').' / '.$p_en->t('lvplan/jetzt').': '.$row->ort_kurzbz.''.mb_strtoupper($row->stg_typ.$row->stg_kurzbz).'-'.$row->semester.$row->verband.$row->gruppe.' '.$row->gruppe_kurzbz.''.$row->lektor.''.$row->datum.''.$row->stunde.' ('.$beginnzeit_arr[$row->stunde].')'.$row->lehrfach.'-'.$row->lehrform.' ('.$row->lehrfach_bez.')'.$row->titel.'
----------------
+ + + + + + + + + '; + } + + $message[$student]->message .= "\n"; + $message[$student]->message .= ''; + $message[$student]->message .= ''; + $message[$student]->message .= ''; + $message[$student]->message .= ''; + $message[$student]->message .= ''; + $message[$student]->message .= ''; + $message[$student]->message .= ''; + $message[$student]->message .= ''; + $message[$student]->message .= "\n"; + $message[$student]->message .= ''; + $myclass = ($row->ort_kurzbz != $row->old_ort_kurzbz ? 'marked' : 'unmarked'); + $message[$student]->message .= ''; + $myclass = 'unmarked'; + $message[$student]->message .= ''; + $myclass = ($row->lektor != $row->old_lektor ? 'marked' : 'unmarked'); + $message[$student]->message .= ''; + $myclass = (($row->datum != $row->old_datum) ? 'marked' : 'unmarked'); + $message[$student]->message .= ''; + $myclass = (($row->stunde != $row->old_stunde) ? 'marked' : 'unmarked'); + $message[$student]->message .= ''; + $myclass = 'unmarked'; + $message[$student]->message .= ''; + $myclass = ($row->titel!=$row->old_titel ? 'marked' : 'unmarked'); + $message[$student]->message .= ''; } } } } - foreach($message as $msg) - if(isset($msg->isset)) - $msg->message.='
'.$p_de->t('lvplan/status').'
'.$p_en->t('lvplan/status').'
'.$p_de->t('lvplan/raum').'
'.$p_en->t('lvplan/raum').'
'.$p_de->t('lvplan/lehrverband').'
'.$p_en->t('lvplan/lehrverband').'
'.$p_de->t('lvplan/lektor').'
'.$p_en->t('lvplan/lektor').'
'.$p_de->t('global/datum').'
'.$p_en->t('global/datum').'
'.$p_de->t('lvplan/stdBeginn').'
'.$p_en->t('lvplan/stdBeginn').'
'.$p_de->t('lvplan/lehrfach').'
'.$p_en->t('lvplan/lehrfach').'
'.$p_de->t('lvplan/info').'
'.$p_en->t('lvplan/info').'
'.$p_de->t('lvplan/vorher').' / '.$p_en->t('lvplan/vorher').': '.$row->old_ort_kurzbz.''. + mb_strtoupper($row->stg_typ.$row->stg_kurzbz).'-'.$row->semester.$row->verband.$row->gruppe.' '.$row->gruppe_kurzbz. + ''.$row->old_lektor.''.$row->old_datum.''.$row->old_stunde.' ('.$beginnzeit_arr[$row->old_stunde].')'.$row->lehrfach.'-'.$row->lehrform.' ('.$row->lehrfach_bez.')'.$row->old_titel.'
'.$p_de->t('lvplan/jetzt').' / '.$p_en->t('lvplan/jetzt').': '.$row->ort_kurzbz.' + '. + mb_strtoupper($row->stg_typ.$row->stg_kurzbz).'-'.$row->semester. + $row->verband.$row->gruppe.' '.$row->gruppe_kurzbz.' + + '.$row->lektor.''.$row->datum.''.$row->stunde.' ('.$beginnzeit_arr[$row->stunde].') + '.$row->lehrfach.'-'.$row->lehrform.' ('.$row->lehrfach_bez.') + '.$row->titel.'
----------------

'; + + foreach ($message as $msg) + if (isset($msg->isset)) + $msg->message .= '
'; } /************************************************** * Mails an Lektoren und Studenten schicken */ + $message_help = ''; + if ($sendmail) { foreach ($message as $msg) { - $mail = new mail($msg->mailadress,MAIL_LVPLAN,'LV-Plan Update','Sie muessen diese Mail als HTML-Mail anzeigen um die LV-Plan Änderungen anzuzeigen'); + $mail = new mail($msg->mailadress, MAIL_LVPLAN, 'LV-Plan Update', 'Sie muessen diese Mail als HTML-Mail anzeigen um die LV-Plan Änderungen anzuzeigen'); $mail->setHTMLContent($msg->message_begin.$msg->message); + if ($mail->send()) { - echo 'Mail an '.$msg->mailadress.' wurde verschickt!
'; + echo 'Mail an '.$msg->mailadress.' wurde verschickt!'."\n"; + $message_stpl.='Mail an '.$msg->mailadress.' wurde verschickt!
'; + if ($message_help != $msg->message) { $message_summary .= $msg->message; @@ -805,81 +958,99 @@ if ($sendmail) } else { - echo 'Mail an '.$msg->mailadress.' konnte nicht verschickt werden!
'; - $message_sync.='Mail an '.$msg->mailadress.' konnte ***nicht*** verschickt werden!
'; + echo 'Mail an '.$msg->mailadress.' konnte nicht verschickt werden!'."\n"; + + $message_sync .= 'Mail an '.$msg->mailadress.' konnte ***nicht*** verschickt werden!
'; } } } -if(defined('LVPLAN_HORDE_SYNC') && LVPLAN_HORDE_SYNC===true) +if (defined('LVPLAN_HORDE_SYNC') && LVPLAN_HORDE_SYNC === true) { // Alle User bei denen sich der LVPlan veraendert hat // werden in ein File gesichert. Bei diesen Personen wird der LVPlan im Horde aktualisiert - $users=array(); - foreach ($message as $uid=>$msg) + $users = array(); + + foreach ($message as $uid => $msg) { - $users[]=$uid; + $users[] = $uid; } $uidfile = DOC_ROOT.'../system/hordelvplansync/lvplanupdate.txt'; // Letzte Durchlaufzeit des Scripts holen // anhand der Aenderungszeit des Textfiles mit den UIDs - if(!$lastmod = filemtime($uidfile)) - $lastmod=time()-86400; // Wenn die Zeit nicht ermittelt werden kann, werden die letzten 24 Std genommen + if (!$lastmod = filemtime($uidfile)) + $lastmod = time() - 86400; // Wenn die Zeit nicht ermittelt werden kann, werden die letzten 24 Std genommen // Zusaetzlich jene holen, bei denen sich die Reservierungen geaendert haben $qry = "SELECT * FROM campus.tbl_reservierung WHERE insertamum>'".date('Y-m-d H:i:s',$lastmod)."'"; - if($result = $db->db_query($qry)) + if ($result = $db->db_query($qry)) { - while($row = $db->db_fetch_object($result)) + while ($row = $db->db_fetch_object($result)) { $users[] = $row->uid; + //Wenn fuer eine Gruppe reserviert wurde, dann die Personen aus der Gruppe holen - if($row->semester!='' || $row->verband!='' || $row->gruppe!='' || $row->gruppe_kurzbz!='') + if ($row->semester != '' || $row->verband != '' || $row->gruppe != '' || $row->gruppe_kurzbz != '') { - $studenten = getStudentsFromGroup($row->studiengang_kz, $row->semester, $row->verband, $row->gruppe, $row->gruppe_kurzbz, $ss->studiensemester_kurzbz); + $studenten = getStudentsFromGroup( + $row->studiengang_kz, $row->semester, $row->verband, $row->gruppe, $row->gruppe_kurzbz, $ss->studiensemester_kurzbz + ); + $users = array_merge($users, $studenten); } } } + // geaenderte User in Textfile schreiben $users = array_unique($users); - if(count($users)>0) + + if (count($users) > 0) { - if($fp = fopen($uidfile, 'a')) + if ($fp = fopen($uidfile, 'a')) { foreach($users as $uid) { fwrite($fp, $uid."\n"); } - fclose($fp); - //Horde Syncro starten - //chdir(DOC_ROOT.'../system/hordelvplansync/'); - //exec('php5 synchordelvplan.php lvplanupdate.txt >>/var/log/sync/synchordelvplan.log 2>&1'); + fclose($fp); } } } + // Mail an Admin -$message_tmp=$count_upd.' Datensätze wurden geändert.
+$message_tmp = $count_upd.' Datensätze wurden geändert.
'.$count_ins.' Datensätze wurden hinzugefügt.
'.$count_del.' Datensätze wurden gelöscht.
'.$count_err.' Fehler sind dabei aufgetreten!

'; -echo '
'.$message_tmp; + +echo $count_upd.' Datensaetze wurden geaendert.'."\n". + $count_ins.' Datensaetze wurden hinzugefuegt.'."\n". + $count_del.' Datensaetze wurden geloescht.'."\n". + $count_err.' Fehler sind dabei aufgetreten!'."\n"; //Bricht den Code um, da es sonst zu Anzeigefehlern im Mail kommen kann $message_stpl = wordwrap($message_stpl, 70); $message_summary = wordwrap($message_summary, 70); -$message_sync=''.$message_tmp.$message_sync.$message_stpl.'

Details

'.$message_summary.''; -$mail = new mail(MAIL_ADMIN,MAIL_LVPLAN,'LV-Plan Update Zusammenfassung','Sie muessen diese Mail als HTML-Mail anzeigen um die LV-Plan Änderungen anzuzeigen'); + +// Message sync +$message_sync = ''.$message_tmp.$message_sync.$message_stpl.'

Details

'.$message_summary.''; + +$mail = new mail(MAIL_ADMIN, MAIL_LVPLAN, 'LV-Plan Update Zusammenfassung', 'Sie muessen diese Mail als HTML-Mail anzeigen um die LV-Plan Änderungen anzuzeigen'); $mail->setHTMLContent($message_sync); -$mail->send(); -$message_stpl=''.$message_tmp.$message_stpl.'

Details

'.$message_summary.''; +if (!$mail->send()) + echo 'Error occurred while sending email to '.MAIL_ADMIN."\n"; + +// Message stpl +$message_stpl = ''.$message_tmp.$message_stpl.'

Details

'.$message_summary.''; + $mail = new mail(MAIL_LVPLAN, MAIL_LVPLAN, 'LV-Plan Update Zusammenfassung', 'Sie muessen diese Mail als HTML-Mail anzeigen um die LV-Plan Änderungen anzuzeigen'); $mail->setHTMLContent($message_stpl); -$mail->send(); +if (!$mail->send()) + echo 'Error occurred while sending email to '.MAIL_LVPLAN."\n"; + ?> - - + diff --git a/vilesci/bis/studentenmeldung.php b/vilesci/bis/studentenmeldung.php index fb723df75..dceb4d30c 100644 --- a/vilesci/bis/studentenmeldung.php +++ b/vilesci/bis/studentenmeldung.php @@ -76,6 +76,7 @@ $stgart=''; $orgform_code=''; $status=''; $datei=''; +$dateiNurBewerber=''; $aktstatus=''; $aktstatus_datum=''; $mob=''; @@ -319,8 +320,7 @@ else if($result = $db->db_query($qry)) { - - $datei.=" + $header =" ".$erhalter." ".date("dmY", $datumobj->mktime_fromdate($bisdatum))." @@ -328,6 +328,10 @@ if($result = $db->db_query($qry)) ".$stg_kz.""; + + $datei .= $header; + $dateiNurBewerber .= $header; + while($row = $db->db_fetch_object($result)) { $datei.= GenerateXMLStudentBlock($row); @@ -343,17 +347,29 @@ if($result = $db->db_query($qry)) $orgcodes = array_unique($orgform_code_array); //Mischform foreach($orgcodes as $code) - $datei.= GenerateXMLBewerberBlock($code); + { + $bewerberBlock=GenerateXMLBewerberBlock($code); + $datei.=$bewerberBlock; + $dateiNurBewerber.=$bewerberBlock; + } } else - $datei.= GenerateXMLBewerberBlock(); + { + $bewerberBlock=GenerateXMLBewerberBlock(); + $datei.=$bewerberBlock; + $dateiNurBewerber.=$bewerberBlock; + } } } -$datei.=" +$footer=" "; + +$datei.=$footer; +$dateiNurBewerber.=$footer; + echo ' @@ -592,6 +608,12 @@ $dateiausgabe=fopen($ddd,'w'); fwrite($dateiausgabe,$datei); fclose($dateiausgabe); +$dddNurBew='bisdaten/bismeldung_bewerber_'.$ssem.'_Stg'.$stg_kz.'.xml'; + +$dateiausgabe=fopen($dddNurBew,'w'); +fwrite($dateiausgabe,$dateiNurBewerber); +fclose($dateiausgabe); + $eee='bisdaten/tabelle_'.$ssem.'_Stg'.$stg_kz.'.html'; $dateiausgabe=fopen($eee,'w'); @@ -602,6 +624,7 @@ if(file_exists($ddd)) { echo 'BIS-Meldung Stg '.$stg_kz.' archivieren
'; echo 'XML-Datei für BIS-Meldung Stg '.$stg_kz.'
'; + echo 'XML-Datei für BIS-Meldung Stg '.$stg_kz.' - nur Bewerberdaten
'; } if(file_exists($eee)) { diff --git a/vilesci/fhausweis/kartenruecknahme.php b/vilesci/fhausweis/kartenruecknahme.php index 7e67da753..00518a293 100644 --- a/vilesci/fhausweis/kartenruecknahme.php +++ b/vilesci/fhausweis/kartenruecknahme.php @@ -26,15 +26,20 @@ require_once('../../include/functions.inc.php'); require_once('../../include/person.class.php'); require_once('../../include/benutzer.class.php'); require_once('../../include/student.class.php'); +require_once('../../include/prestudent.class.php'); +require_once('../../include/mitarbeiter.class.php'); require_once('../../include/studiengang.class.php'); require_once('../../include/betriebsmittel.class.php'); require_once('../../include/betriebsmittelperson.class.php'); require_once('../../include/benutzerberechtigung.class.php'); +require_once('../../include/datum.class.php'); +require_once('../../include/studiensemester.class.php'); $uid = get_uid(); $rechte = new benutzerberechtigung(); $rechte->getBerechtigungen($uid); +$datum_obj = new datum(); echo ' @@ -44,22 +49,61 @@ echo ' - Kartentausch + Kartenrücknahme -

Zutrittskarte - Ruecknahme

'; +

Zutrittskarte - Rücknahme

'; -if(!$rechte->isBerechtigt('basis/fhausweis', 'suid')) +if(!$rechte->isBerechtigt('basis/fhausweis', 's')) die('Sie haben keine Berechtigung für diese Seite'); $db = new basis_db(); $kartennummer = (isset($_POST['kartennummer'])?$_POST['kartennummer']:''); $action=(isset($_POST['action'])?$_POST['action']:''); -if ($action == 'kartenruecknahme') +if ($action == 'karte_loeschen') +{ + if(!$rechte->isBerechtigt('basis/fhausweis', 'suid')) + die('Sie haben keine Berechtigung zum löschen von Karten'); + + $bmp = new betriebsmittelperson(); + if ($bmp->getKartenzuordnung($kartennummer, false)) + { + if ($bmp->betriebsmittelperson_id != '') + { + if ($bmp->delete($bmp->betriebsmittelperson_id)) + { + if ($bmp->delete_betriebsmittel($bmp->betriebsmittel_id)) + { + echo 'Karte erfolgreich gelöscht'; + } + else + { + echo 'Fehler beim löschen der Betriebsmittel_id: '.$bmp->betriebsmittel_id.''; + } + } + else + { + echo 'Fehler beim löschen der Betriebsmittelperson_id: '.$bmp->betriebsmittelperson_id.''; + } + } + else + { + echo 'Diese Karte ist derzeit nicht zugewiesen'; + } + } + else + { + echo 'Diese Karte ist derzeit nicht zugewiesen'; + } + + echo '


'; +} + +if ($action == 'kartenabfrage' || $action == 'kartenruecknahme') { $bmp = new betriebsmittelperson(); - if ($bmp->getKartenzuordnung($kartennummer)) + if ($bmp->getKartenzuordnung($kartennummer, false)) { if ($bmp->uid != '') { @@ -72,25 +116,28 @@ if ($action == 'kartenruecknahme') } else { - $error=false; - //Neue Karte aktivieren $bmp = new betriebsmittelperson(); if ($bmp->getKartenzuordnungPerson($benutzer->person_id, $kartennummer)) { - if ($bmp->ausgegebenam != '' && $bmp->retouram == '') + if ($action == 'kartenruecknahme') { - $bmp->retouram=date('Y-m-d'); + if(!$rechte->isBerechtigt('basis/fhausweis', 'su')) + die('Sie haben keine Berechtigung zum aktualisieren von Kartendaten'); + + $bmp->retouram = date('Y-m-d'); $bmp->updateamum = date('Y-m-d H:i:s'); $bmp->updatevon = $uid; if(!$bmp->save(false)) { - echo 'Fehler beim Tauschen: '.$bmp->errormsg.''; - $error=true; + echo 'Fehler beim austragen der Karte'; } else - echo 'Karte wurde erfolgreich ausgetragen.
- + echo 'Karte wurde erfolgreich ausgetragen.'; + } + else + { + echo '
+ UID: '.$benutzer->uid.'
+ Karte augegeben am: '.($bmp->ausgegebenam != '' ? $datum_obj->formatDatum($bmp->ausgegebenam,'d.m.Y') : 'Karte nicht ausgegeben').'
+ Karte retour am: '.($bmp->retouram != '' ? $datum_obj->formatDatum($bmp->retouram,'d.m.Y') : 'Karte nicht retourniert').'
'; + if ($bmp->beschreibung != '') + { + echo 'Beschreibung: '.$bmp->beschreibung.'
'; + } + $student = new student(); + $mitarbeiter = new mitarbeiter(); + if ($student->load($bmp->uid)) + { + $prestudent = new prestudent(); + if ($prestudent->getLastStatus($student->prestudent_id)) + { + echo '
Letzter Status: '; + $style = ''; + if ($prestudent->status_kurzbz == 'Abbrecher' || $prestudent->status_kurzbz == 'Absolvent') + { + $style = 'style="color: red; font-weight: bold"'; + } + echo ''.$prestudent->status_kurzbz.' im '; + $style = ''; + $studiensemester = new studiensemester(); + if ($prestudent->studiensemester_kurzbz != $studiensemester->getakt()) + { + $style = 'style="color: red; font-weight: bold"'; + } + echo ''.$prestudent->studiensemester_kurzbz.'
'; + } + } + elseif ($mitarbeiter->load($bmp->uid)) + { + echo '
Letzter Status: '.($benutzer->bnaktiv ? 'Mitarbeiter*in aktiv' : 'Mitarbeiter*in inaktiv seit '.$datum_obj->formatDatum($benutzer->updateaktivam,'d.m.Y').'').'
'; + } + else + { + echo '
Kein/e Mitarbeiter*in oder Student*in
'; + } + echo '
-
Vorname: '.$benutzer->vorname.'
Nachname: '.$benutzer->nachname.'
- UID: '.$benutzer->uid.'
-
'; - } - else - { - echo 'Karte ist nicht ausgegeben oder wurde bereits retourniert'; +
'; + + if ($bmp->retouram == '') + { + echo '
+ + + +

'; + } + + if($rechte->isBerechtigt('basis/fhausweis', 'suid')) + { + echo '
+ + + ausgegebenam != '' || $bmp->retouram != '') + { + echo ' onclick="return confirm(\'Die Karte wurde ausgegeben oder retourniert. Wollen Sie sie wirklich löschen?\')"'; + } + echo '/> +
'; + } } } else @@ -116,7 +223,6 @@ if ($action == 'kartenruecknahme') Fehler beim Tauschen: Die Karte wurde dieser Person noch nicht zugeordnet ('.$benutzer->uid.' '.$kartennummer.') '; - $error = true; } } } @@ -144,10 +250,10 @@ Ziehen Sie die neue Karte über den Hitag Kartenleser um die Karte zu deaktivier

- + Kartennummer: - +
'; diff --git a/vilesci/fhausweis/kartezuweisen.php b/vilesci/fhausweis/kartezuweisen.php index 1a6ebfef6..1e2972d9e 100644 --- a/vilesci/fhausweis/kartezuweisen.php +++ b/vilesci/fhausweis/kartezuweisen.php @@ -44,13 +44,13 @@ echo ' - - - - - + + + + + - Kartentausch + Karte zuweisen Studienplan Semester Vorrückung @@ -96,10 +103,10 @@ if($studiensemester_kurzbz_to == '') echo '
'; -echo ' Quelle: '; $stsem = new studiensemester(); -$stsem->getAll(); +$stsem->getPlusMinus(null,10,'ende ASC'); foreach($stsem->studiensemester as $row) { @@ -113,10 +120,7 @@ foreach($stsem->studiensemester as $row) } echo ''; -echo ' Ziel:'; foreach($stsem->studiensemester as $row) { @@ -168,7 +172,7 @@ if(isset($_POST['show']) && $studiensemester_kurzbz_from != '' && $studiensemest studienplan.sprache FROM lehre.tbl_studienplan studienplan JOIN lehre.tbl_studienplan_semester USING (studienplan_id) - JOIN lehre.tbl_studienordnung USING (studienordnung_id) + JOIN lehre.tbl_studienordnung sto USING (studienordnung_id) JOIN PUBLIC.tbl_studiengang USING (studiengang_kz) WHERE tbl_studienplan_semester.studiensemester_kurzbz = ".$db->db_add_param($studiensemester_kurzbz_from, FHC_STRING)." AND NOT EXISTS ( @@ -179,60 +183,78 @@ if(isset($_POST['show']) && $studiensemester_kurzbz_from != '' && $studiensemest AND orgform_kurzbz = studienplan.orgform_kurzbz AND studiensemester_kurzbz = ".$db->db_add_param($studiensemester_kurzbz_to, FHC_STRING)." ) + AND NOT EXISTS ( + SELECT 1 + FROM lehre.tbl_studienplan_semester + JOIN lehre.tbl_studienplan USING (studienplan_id) + JOIN lehre.tbl_studienordnung USING (studienordnung_id) + WHERE orgform_kurzbz = studienplan.orgform_kurzbz + AND studiensemester_kurzbz = ".$db->db_add_param($studiensemester_kurzbz_to, FHC_STRING)." + AND studiengang_kz = sto.studiengang_kz + ) AND tbl_studiengang.typ IN ('b', 'm', 'l') - AND studienplan.onlinebewerbung_studienplan = true - AND tbl_studienplan_semester.semester = 1 - ORDER BY studiengang"; + AND studienplan.onlinebewerbung_studienplan = true"; + if (substr($studiensemester_kurzbz_from,0,2) == 'SS') + { + $qry .= " AND tbl_studienplan_semester.semester = 2"; + } + else + { + $qry .= " AND tbl_studienplan_semester.semester = 1"; + } + $qry .= " ORDER BY studiengang"; if($result = $db->db_query($qry)) { echo '
Anzahl: '.$db->db_num_rows($result); - //$pruefling = new pruefling(); - - echo ''; - echo ''; - echo ''; - echo ''; - echo ' - - - - - - - - - - - '; - while($row = $db->db_fetch_object($result)) + + if ($db->db_num_rows($result) > 0) { - echo ' - - - - - - - - '; + echo ''; + echo ''; + echo ''; + echo ''; + echo '
- - - - - StudiengangOrganisationsformBezeichnungSpracheStudienplan ID
'.$row->studiengang.''.$row->orgform_kurzbz.''.$row->bezeichnung.''.$row->sprache.''.$row->studienplan_id.'
+ + + + + + + + + + + '; + while ($row = $db->db_fetch_object($result)) + { + echo ' + + + + + + + + '; + } + echo "
+ + + + + StudiengangOrganisationsformBezeichnungSpracheStudienplan ID
'.$row->studiengang.''.$row->orgform_kurzbz.''.$row->bezeichnung.''.$row->sprache.''.$row->studienplan_id.'
"; + if ($rechte->isBerechtigt('lehre/studienordnung', null, 'suid')) + { + echo ''; + } + else + { + echo ' Keine Berechtigung zum Vorrücken von Studienplänen'; + } + + echo '
'; } - echo ""; - if($rechte->isBerechtigt('lehre/studienordnung', null, 'suid')) - { - echo ''; - } - else - { - echo ' Keine Berechtigung zum Vorrücken von Studienplänen'; - } - - echo ''; } } diff --git a/vilesci/personen/student_vorrueckung.php b/vilesci/personen/student_vorrueckung.php index 960413c2a..8eb858f30 100644 --- a/vilesci/personen/student_vorrueckung.php +++ b/vilesci/personen/student_vorrueckung.php @@ -19,6 +19,7 @@ * Andreas Oesterreicher < andreas.oesterreicher@technikum-wien.at > * Rudolf Hangl < rudolf.hangl@technikum-wien.at > * Gerald Simane-Sequens < gerald.simane-sequens@technikum-wien.at > + * Manuela Thamer < manuela.thamer@technikum-wien.at > */ /** * Vorrückung aller AKTIVEN Studenten. @@ -32,6 +33,7 @@ require_once('../../include/benutzerberechtigung.class.php'); require_once('../../include/lehrverband.class.php'); require_once('../../include/studienordnung.class.php'); require_once('../../include/studienplan.class.php'); +require_once('../../include/statusgrund.class.php'); if (!$db = new basis_db()) die('Es konnte keine Verbindung zum Server aufgebaut werden.'); @@ -301,6 +303,16 @@ if (isset($_POST['vorr'])) } } + //auf statusgrund_kurzbz abfragen + $statusgrundObj = new statusgrund($row_status->statusgrund_id); + $statusgrundId = null; + if ($statusgrundObj->statusgrund_kurzbz === "prewiederholer" && $row_status->ausbildungssemester > 1) + { + $s = $row->semester_stlv - 1; + $ausbildungssemester = $row_status->ausbildungssemester - 1; + $statusgrundId = $statusgrundObj->getByStatusgrundKurzbz('wiederholer')->statusgrund_id; + } + $lvb = new lehrverband(); //Lehrverbandgruppe anlegen, wenn noch nicht vorhanden @@ -364,14 +376,15 @@ if (isset($_POST['vorr'])) //Eintragen des neuen Status $sql .= "INSERT INTO public.tbl_prestudentstatus (prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester, datum, insertamum, - insertvon, updateamum, updatevon, ext_id, orgform_kurzbz, studienplan_id) + insertvon, updateamum, updatevon, ext_id, orgform_kurzbz, studienplan_id, statusgrund_id) VALUES (".$db->db_add_param($row->prestudent_id).", ". $db->db_add_param($row_status->status_kurzbz).", ". $db->db_add_param($next_ss).", ". $db->db_add_param($ausbildungssemester).", now(), now(), ". $db->db_add_param($user).", NULL, NULL, NULL, ". $db->db_add_param($row_status->orgform_kurzbz).", ". - $db->db_add_param($studienplan_id).");"; + $db->db_add_param($studienplan_id).", ". + $db->db_add_param($statusgrundId).");"; } if ($sql != '') { @@ -408,7 +421,7 @@ $outp .= ' Studiengang: - '; //Auswahl Studiengang foreach ($studiengang as $stg) @@ -420,7 +433,7 @@ foreach ($studiengang as $stg) $url .= "&studiensemester_kurzbz_akt=$studiensemester_kurzbz_akt"; $url .= "&studiensemester_kurzbz_zk=$studiensemester_kurzbz_zk"; - $outp .= ""; if (!isset($s[$stg->studiengang_kz])) $s[$stg->studiengang_kz] = new stdClass(); @@ -435,17 +448,12 @@ $outp .= ' $outp .= " Angezeigtes Studiensemester: - \n"; if (isset($ss_arr) && is_array($ss_arr)) { foreach ($ss_arr as $sts) { - if ($studiensemester_kurzbz == $sts) - $sel = " selected "; - else - $sel = ''; - $url = $_SERVER['PHP_SELF']."?stg_kz=$stg_kz"; $url .= "&semester=$semester"; $url .= "&semesterv=$semesterv"; @@ -453,7 +461,7 @@ if (isset($ss_arr) && is_array($ss_arr)) $url .= "&studiensemester_kurzbz_akt=$studiensemester_kurzbz_akt"; $url .= "&studiensemester_kurzbz_zk=$studiensemester_kurzbz_zk"; - $outp .= ""; + $outp .= ""; } } $outp .= " @@ -493,17 +501,12 @@ $outp .= ' Ausgangs-Studiensemester: - '; if (isset($ss_arr) && is_array($ss_arr)) { foreach ($ss_arr as $sts2) { - if ($studiensemester_kurzbz_akt == $sts2) - $sel2 = " selected "; - else - $sel2 = ''; - $url = $_SERVER['PHP_SELF']."?stg_kz=$stg_kz"; $url .= "&semester=$semester"; $url .= "&semesterv=$semesterv"; @@ -511,7 +514,7 @@ if (isset($ss_arr) && is_array($ss_arr)) $url .= "&studiensemester_kurzbz_akt=$sts2"; $url .= "&studiensemester_kurzb_zk=$studiensemester_kurzbz_zk"; - $outp .= ""; + $outp .= ""; } } $outp .= " @@ -547,7 +550,7 @@ $outp .= 'alle -- $outp .= " Ziel-Studiensemester: - \n"; if (isset($ss_arr) && is_array($ss_arr)) { @@ -565,7 +568,7 @@ if (isset($ss_arr) && is_array($ss_arr)) $url .= "&studiensemester_kurzbz_akt=$studiensemester_kurzbz_akt"; $url .= "&studiensemester_kurzbz_zk=$sts3"; - $outp .= ""; + $outp .= ""; } } $outp .= " \n @@ -617,11 +620,12 @@ if ($result_std != 0) $row = $db->db_fetch_object($result_std, $i); $qry_status = " SELECT - status_kurzbz, ausbildungssemester, tbl_studienplan.studienplan_id, tbl_studienplan.bezeichnung + tbl_prestudentstatus.status_kurzbz, statusgrund_kurzbz, ausbildungssemester, tbl_studienplan.studienplan_id, tbl_studienplan.bezeichnung FROM public.tbl_prestudentstatus JOIN public.tbl_prestudent USING(prestudent_id) LEFT JOIN lehre.tbl_studienplan USING(studienplan_id) + LEFT JOIN public.tbl_status_grund USING (statusgrund_id) WHERE person_id=".$db->db_add_param($row->person_id, FHC_INTEGER)." AND studiengang_kz=".$db->db_add_param($row->studiengang_kz, FHC_INTEGER)." @@ -638,6 +642,7 @@ if ($result_std != 0) if ($row_status = $db->db_fetch_object($result_status)) { $status_kurzbz = $row_status->status_kurzbz; + $statusgrund_kurzbz = $row_status->statusgrund_kurzbz; $ausbildungssemester = $row_status->ausbildungssemester; $studienplan_id = $row_status->studienplan_id; $studienplan_bezeichnung = $row_status->bezeichnung; diff --git a/vilesci/stammdaten/auswertung_fhtw.php b/vilesci/stammdaten/auswertung_fhtw.php index 752467913..1acfe1a55 100644 --- a/vilesci/stammdaten/auswertung_fhtw.php +++ b/vilesci/stammdaten/auswertung_fhtw.php @@ -3002,6 +3002,7 @@ else if ($erg->letzter_status == 'Abgewiesener') { $inaktiv = 'text-muted'; + $erg->prioritaet = 0; } echo " diff --git a/vilesci/stammdaten/personen_listedoppelte.php b/vilesci/stammdaten/personen_listedoppelte.php deleted file mode 100644 index 9d7110cc4..000000000 --- a/vilesci/stammdaten/personen_listedoppelte.php +++ /dev/null @@ -1,177 +0,0 @@ - - * Andreas Oesterreicher < andreas.oesterreicher@technikum-wien.at > - * Rudolf Hangl < rudolf.hangl@technikum-wien.at > - * Gerald Simane-Sequens < gerald.simane-sequens@technikum-wien.at > - */ - - - -// *************************************************************** -// * Script zum Anzeigen und Zusammenlegen von -// * doppelten Personen -// *************************************************************** - -//DB Verbindung herstellen - require_once('../../config/vilesci.config.inc.php'); - require_once('../../include/basis_db.class.php'); - if (!$db = new basis_db()) - die('Es konnte keine Verbindung zum Server aufgebaut werden.'); - - require_once('../../include/person.class.php'); - require_once('../../include/functions.inc.php'); - -$msg=''; -$outp=''; -$anfang=''; -$ende=''; -$person1=''; -$person2=''; - -if ((isset($_GET['person2']) || isset($_POST['person2']))&&(isset($_GET['person1']) || isset($_POST['person1']))) -{ - //zusammenlegen der personen - $person2=(isset($_GET['person2'])?$_GET['person2']:$_POST['person2']); - $person1=(isset($_GET['person1'])?$_GET['person1']:$_POST['person1']); - $sql_query_upd1="BEGIN;"; - $sql_query_upd1.="UPDATE public.tbl_benutzer SET person_id='$person1' WHERE person_id='$person2';"; - $sql_query_upd1.="UPDATE public.tbl_konto SET person_id='$person1' WHERE person_id='$person2';"; - $sql_query_upd1.="UPDATE public.tbl_prestudent SET person_id='$person1' WHERE person_id='$person2';"; - //$sql_query_upd1.="UPDATE sync.tbl_syncperson SET person_portal='$radio_2' WHERE person_portal='$radio_1';"; - $sql_query_upd1.="UPDATE lehre.tbl_abschlusspruefung SET pruefer1='$person1' WHERE pruefer1='$person2';"; - $sql_query_upd1.="UPDATE lehre.tbl_abschlusspruefung SET pruefer2='$person1' WHERE pruefer2='$person2';"; - $sql_query_upd1.="UPDATE lehre.tbl_abschlusspruefung SET pruefer3='$person1' WHERE pruefer3='$person2';"; - $sql_query_upd1.="UPDATE lehre.tbl_projektbetreuer SET person_id='$person1' WHERE person_id='$person2';"; - $sql_query_upd1.="UPDATE public.tbl_adresse SET person_id='$person1' WHERE person_id='$person2';"; - $sql_query_upd1.="UPDATE public.tbl_akte SET person_id='$person1' WHERE person_id='$person2';"; - $sql_query_upd1.="UPDATE public.tbl_bankverbindung SET person_id='$person1' WHERE person_id='$person2';"; - $sql_query_upd1.="UPDATE public.tbl_kontakt SET person_id='$person1' WHERE person_id='$person2';"; - - $sql_query_upd1.="UPDATE wawi.tbl_betriebsmittelperson SET person_id='$person1' WHERE person_id='$person2';"; - - $sql_query_upd1.="DELETE FROM public.tbl_person WHERE person_id='$person2';"; - if($db->db_query($sql_query_upd1)) - { - $msg = "Daten erfolgreich gespeichert
"; - $db->db_query("COMMIT;"); - $msg .= "
".mb_eregi_replace(';',';
',$sql_query_upd1); - - if(@$db->db_query('SELECT person_portal FROM sync.tbl_syncperson LIMIT 1')) - { - $msg.= "

Sync-Tabelle wird aktualisiert"; - $sql_query_upd1="UPDATE sync.tbl_syncperson SET person_portal='$person1' WHERE person_portal='$person2';"; - $db->db_query($sql_query_upd1); - $msg.= "
".mb_eregi_replace(';',';
',$sql_query_upd1)."COMMIT"; - } - if(@$db->db_query('SELECT person_id FROM sync.tbl_syncperson LIMIT 1')) - { - $msg.= "

Sync-Tabelle wird aktualisiert"; - $sql_query_upd1="UPDATE sync.tbl_syncperson SET person_id='$radio_2' WHERE person_id='$radio_1';"; - $db->db_query($sql_query_upd1); - $msg.= "
".mb_eregi_replace(';',';
',$sql_query_upd1)."COMMIT"; - } - } - else - { - $msg = "Die Änderung konnte nicht durchgeführt werden!"; - $db->db_query("ROLLBACK;"); - $msg.= "
".mb_eregi_replace(';',';
',$sql_query_upd1)."ROLLBACK"; - } -} - -?> - - - - - - -Personen-Auflistung von Mehrfacheinträgen - - - -

Mehrfache Personendatensaetze

- -Der Button in der erste Spalte gibt die Person_id des Datensatzes an, der entfernt werden soll. -
Wird dieser Button angeklickt, werden alle anhängenden Daten dem Datensatz dieser Zeile (Person_id in Spalte 2) angehängt. -
Dadurch kann es in Folge zu Doppeleinträgen bei diesen Datensätzen kommen (z.B. Adresse)."; -?> -
-

".$msg.""; ?>

-
-"; - echo ""; - echo ""; - - //Tabelle 1 - echo "
"; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - - $qry="SELECT person.person_id as person2, tbl_person.person_id AS person1, tbl_person.nachname as nachname1, tbl_person.vorname as vorname1, tbl_person.gebdatum as gebdatum1, - tbl_person.svnr as svnr1, tbl_person.ersatzkennzeichen as ersatzkennzeichen1, tbl_person.ext_id as ext_id1, tbl_person.* FROM tbl_person person - JOIN tbl_person ON (person.vorname=tbl_person.vorname AND person.nachname=tbl_person.nachname AND person.gebdatum=tbl_person.gebdatum AND person.person_id!=tbl_person.person_id - AND person.person_id!=tbl_person.person_id) ORDER BY tbl_person.nachname - LIMIT 50 ;"; - $i=0; - if($result = $db->db_query($qry)) - { - while($l=$db->db_fetch_object($result)) - { - - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - $i++; - } - } - echo "
Alt.-IDIDNachnameVornameGeburtsdatumSVNrErsatzkennz.Ext-ID
- -
$l->person1$l->nachname1$l->vorname1$l->gebdatum1$l->svnr1$l->ersatzkennzeichen1$l->ext_id1
"; - echo ""; - //echo ""; - echo ""; - //echo ""; - -?> - - - - \ No newline at end of file diff --git a/vilesci/stammdaten/reihungstest_administration.php b/vilesci/stammdaten/reihungstest_administration.php index b1db58e5e..658f01b31 100644 --- a/vilesci/stammdaten/reihungstest_administration.php +++ b/vilesci/stammdaten/reihungstest_administration.php @@ -330,7 +330,7 @@ if($result = $db->db_query($qry)) } echo ''; } - +echo '   Auch Prüfling löschen  '; echo '        '; if(isset($_POST['deleteteilgebiet'])) { @@ -526,6 +526,57 @@ if(isset($_POST['delete_all'])) $db->errormsg = 'Fehler beim Loeschen der Daten'; $db->db_query('ROLLBACK'); } + + // Wenn Option angeklickt ist, auch den Prüfling löschen + if (isset($_POST['deletePruefling']) && $_POST['deletePruefling'] == 'on') + { + $qry = "SELECT * FROM testtool.tbl_pruefling WHERE prestudent_id=".$db->db_add_param($_POST['prestudent'])."; + "; + + if($db->db_query($qry)) + { + while($row = $db->db_fetch_object()) + { + $undo=" INSERT INTO testtool.tbl_pruefling(pruefling_id, studiengang_kz, idnachweis, registriert, prestudent_id, semester) VALUES (". + $db->db_add_param($row->pruefling_id, FHC_INTEGER).', '. + $db->db_add_param($row->studiengang_kz, FHC_INTEGER).', '. + $db->db_add_param($row->idnachweis).', '. + $db->db_add_param($row->registriert).', '. + $db->db_add_param($row->prestudent_id, FHC_INTEGER).', '. + $db->db_add_param($row->semester, FHC_INTEGER).');'; + } + } + else + { + $db->errormsg = 'Fehler beim Erstellen des UNDO Befehls fuer testtool.tbl_pruefling'; + $db->db_query('ROLLBACK'); + return false; + } + $qry = "DELETE FROM testtool.tbl_pruefling WHERE prestudent_id=".$db->db_add_param($_POST['prestudent']).";"; + + if($result = $db->db_query($qry)) + { + //Log schreiben + $log = new log(); + + $log->new = true; + $log->sql = $qry; + $log->sqlundo = $undo; + $log->executetime = date('Y-m-d H:i:s'); + $log->mitarbeiter_uid = $user; + $log->beschreibung = "Prüfling von Prestudent ".$_POST['prestudent']." geloescht"; + + if(!$log->save()) + { + $db->errormsg = 'Fehler beim Schreiben des Log-Eintrages'; + $db->db_query('ROLLBACK'); + return false; + } + + $db->db_query('COMMIT;'); + echo '
Prüfling wurde gelöscht'; + } + } } else echo 'Um alle Antworten eines Prüflings zu löschen, wählen Sie im DropDown bitte "Alle Gebiete" aus';