From bf1bc8d1a97dbb52c2d1bd30a295a3909058da22 Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Sun, 13 Oct 2024 13:32:15 +0200 Subject: [PATCH 01/33] added new contact type email unverifiziert and adresse type meldeadresse (mainly for electronic onboarding) --- system/dbupdate_3.4.php | 1 + ...14_electronic_onboarding_anbindung_ida.php | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 system/dbupdate_3.4/40314_electronic_onboarding_anbindung_ida.php diff --git a/system/dbupdate_3.4.php b/system/dbupdate_3.4.php index 11880fd55..d3b7b454d 100644 --- a/system/dbupdate_3.4.php +++ b/system/dbupdate_3.4.php @@ -58,6 +58,7 @@ require_once('dbupdate_3.4/17513_Entwicklungsteam.php'); require_once('dbupdate_3.4/28575_softwarebereitstellung.php'); require_once('dbupdate_3.4/41150_oe-pfad_db_view.php'); require_once('dbupdate_3.4/44031_stv_favorites.php'); +require_once('dbupdate_3.4/40314_electronic_onboarding_anbindung_ida.php'); // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; diff --git a/system/dbupdate_3.4/40314_electronic_onboarding_anbindung_ida.php b/system/dbupdate_3.4/40314_electronic_onboarding_anbindung_ida.php new file mode 100644 index 000000000..ccc0a5827 --- /dev/null +++ b/system/dbupdate_3.4/40314_electronic_onboarding_anbindung_ida.php @@ -0,0 +1,30 @@ +db_query("SELECT 1 FROM public.tbl_kontakttyp WHERE kontakttyp='email_unverifiziert'")) +{ + if($db->db_num_rows($result)==0) + { + $qry = "INSERT INTO public.tbl_kontakttyp(kontakttyp, beschreibung, bezeichnung_mehrsprachig) VALUES('email_unverifiziert', 'Unverifizierte E-Mail', '{\"Unverifizierte E-Mail\", \"Unverified email\"}');"; + + if(!$db->db_query($qry)) + echo 'Kontakttyp: '.$db->db_last_error().'
'; + else + echo '
Neuen Kontakttyp E-Mail unverifiziert in public.tbl_kontakttyp hinzugefügt'; + } +} + +// public.tbl_adressentyp: add type Meldeadresse +if($result = $db->db_query("SELECT 1 FROM public.tbl_adressentyp WHERE adressentyp_kurzbz='m'")) +{ + if($db->db_num_rows($result)==0) + { + $qry = "INSERT INTO public.tbl_adressentyp(adressentyp_kurzbz, bezeichnung, bezeichnung_mehrsprachig, sort) VALUES('m', 'Meldeadresse', '{\"Meldeadresse\", \"Registered adress\"}', 6);"; + + if(!$db->db_query($qry)) + echo 'Adressentyp: '.$db->db_last_error().'
'; + else + echo '
Neue Adressentyp Meldeadresse in public.tbl_adressentyp hinzugefügt'; + } +} From b8ff37eb8edfd28c897119d032c517533663574f Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Sat, 19 Oct 2024 17:25:09 +0200 Subject: [PATCH 02/33] added kontakt verifikation table for saving of kontakt verifikation data, added model for the table --- .../person/Kontaktverifikation_model.php | 42 ++++++++++++++++ ...14_electronic_onboarding_anbindung_ida.php | 48 +++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 application/models/person/Kontaktverifikation_model.php diff --git a/application/models/person/Kontaktverifikation_model.php b/application/models/person/Kontaktverifikation_model.php new file mode 100644 index 000000000..b15439edb --- /dev/null +++ b/application/models/person/Kontaktverifikation_model.php @@ -0,0 +1,42 @@ +dbTable = 'public.tbl_kontakt_verifikation'; + $this->pk = 'kontakt_verifikation_id'; + } + + /** + * Gets contact verification for a person and a verification code + * @param person_id + * @param kontakttyp + * @param verifikation_code + * @param expiration_days number of days after which verifikation code expires + * @return object success or error + */ + public function getKontaktVerifikation($person_id, $kontakttyp, $verifikation_code, $expiration_days = 1) + { + $qry = " + SELECT + kt.kontakt_id, + kv.verifikation_code + FROM + public.tbl_kontakt_verifikation kv + JOIN public.tbl_kontakt kt USING(kontakt_id) + WHERE kt.person_id = ? + AND kt.kontakttyp = ? + AND kv.verifikation_code = ? + AND kv.erstelldatum >= NOW() - INTERVAL '".$this->escape($expiration_days)." days' + ORDER BY + kt.kontakt_id DESC + LIMIT 1"; + + return $this->execQuery($qry, array($person_id, $kontakttyp, $verifikation_code)); + } +} diff --git a/system/dbupdate_3.4/40314_electronic_onboarding_anbindung_ida.php b/system/dbupdate_3.4/40314_electronic_onboarding_anbindung_ida.php index ccc0a5827..b204d45aa 100644 --- a/system/dbupdate_3.4/40314_electronic_onboarding_anbindung_ida.php +++ b/system/dbupdate_3.4/40314_electronic_onboarding_anbindung_ida.php @@ -28,3 +28,51 @@ if($result = $db->db_query("SELECT 1 FROM public.tbl_adressentyp WHERE adressent echo '
Neue Adressentyp Meldeadresse in public.tbl_adressentyp hinzugefügt'; } } + +if (!$result = @$db->db_query('SELECT 1 FROM public.tbl_kontakt_verifikation LIMIT 1')) +{ + $qry = "CREATE SEQUENCE public.tbl_kontakt_verifikation_kontakt_verifikation_id_seq + INCREMENT BY 1 + NO MAXVALUE + NO MINVALUE + START WITH 1 + CACHE 1 + NO CYCLE; + + CREATE TABLE public.tbl_kontakt_verifikation + ( + kontakt_verifikation_id integer DEFAULT nextval('public.tbl_kontakt_verifikation_kontakt_verifikation_id_seq'::regclass), + kontakt_id integer UNIQUE NOT NULL, + verifikation_code varchar(32) UNIQUE NOT NULL, + erstelldatum timestamp without time zone, + verifikation_datum timestamp without time zone, + app varchar(32), + CONSTRAINT pk_tbl_kontakt_verifikation_id PRIMARY KEY (kontakt_verifikation_id) + ); + + ALTER TABLE public.tbl_kontakt_verifikation ADD CONSTRAINT fk_tbl_kontakt_verifikation_kontakt_id FOREIGN KEY (kontakt_id) + REFERENCES public.tbl_kontakt (kontakt_id) + ON DELETE CASCADE ON UPDATE CASCADE; + + ALTER TABLE public.tbl_kontakt_verifikation ADD CONSTRAINT fk_tbl_kontakt_verifikation_app FOREIGN KEY (app) + REFERENCES system.tbl_app (app) + ON DELETE RESTRICT ON UPDATE CASCADE; + + COMMENT ON TABLE public.tbl_kontakt_verifikation IS 'Contact verification'; + COMMENT ON COLUMN public.tbl_kontakt_verifikation.kontakt_id IS 'Contact to verify'; + COMMENT ON COLUMN public.tbl_kontakt_verifikation.verifikation_code IS 'Code generated for verification'; + COMMENT ON COLUMN public.tbl_kontakt_verifikation.erstelldatum IS 'Time when verification code was generated'; + COMMENT ON COLUMN public.tbl_kontakt_verifikation.verifikation_datum IS 'Time when contact was verified'; + COMMENT ON COLUMN public.tbl_kontakt_verifikation.app IS 'App where contact was verified'; + + GRANT SELECT, UPDATE, INSERT, DELETE ON public.tbl_kontakt_verifikation TO web; + GRANT SELECT, UPDATE, INSERT, DELETE ON public.tbl_kontakt_verifikation TO vilesci; + GRANT SELECT, UPDATE ON public.tbl_kontakt_verifikation_kontakt_verifikation_id_seq TO vilesci; + GRANT SELECT, UPDATE ON public.tbl_kontakt_verifikation_kontakt_verifikation_id_seq TO web; + "; + + if(!$db->db_query($qry)) + echo 'public.tbl_kontakt_verifikation: '.$db->db_last_error().'
'; + else + echo ' public.tbl_kontakt_verifikation: Tabelle hinzugefuegt
'; +} From add9263d35ff2a1883c5336a5329144714118882 Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Mon, 11 Nov 2024 17:17:33 +0100 Subject: [PATCH 03/33] added Electronic Onboarding phrases --- system/phrasesupdate.php | 366 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 364 insertions(+), 2 deletions(-) diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 7ef0269c9..29d5d6132 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -31025,8 +31025,370 @@ array( 'insertvon' => 'system' ) ) - ) - + ), + //**************************** FHC-Core-ElectronicOnboarding + array( + 'app' => 'core', + 'category' => 'onboarding', + 'phrase' => 'emailFehlt', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Email fehlt', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Email is missing', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'onboarding', + 'phrase' => 'emailUngueltig', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Email ist ungültig', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'The email is not valid', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'onboarding', + 'phrase' => 'emailRegistriert', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Diese Email ist bereits registriert. Bitte verwenden sie eine andere Email oder loggen sie sich mit einer anderen Methode ein.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'The email is already registered. Please choose a different email or use a different login method.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'onboarding', + 'phrase' => 'bewerbungZugangEmailBetreff', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Zugang zu Ihrer Bewerbung', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Access to your application', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'onboarding', + 'phrase' => 'bewerbungZugangEmailAnredeWeiblich', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Sehr geehrte Frau', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Dear Ms', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'onboarding', + 'phrase' => 'bewerbungZugangEmailAnredeMaennlich', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Sehr geehrter Herr', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Dear Mr', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'onboarding', + 'phrase' => 'bewerbungZugangEmailAnredeNeutral', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Sehr geehrte/r', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Dear', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'onboarding', + 'phrase' => 'registrierungVerifzierenFuer', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Registrierung verifizieren für', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Verify registration for', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'onboarding', + 'phrase' => 'registrierungVerifzieren', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Registrierung verifizieren', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Verify registration', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'onboarding', + 'phrase' => 'vorname', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Vorname', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'First name', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'onboarding', + 'phrase' => 'nachname', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Nachname', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Last name', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'onboarding', + 'phrase' => 'geburtsdatum', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Geburtsdatum', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Birth date', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'onboarding', + 'phrase' => 'emailAdresse', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'E-Mail Adresse', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'E-mail address', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'onboarding', + 'phrase' => 'emailGesendet', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Die E-Mail mit dem Link zu Ihrer Bewerbung wurde erfolgreich an {0} verschickt.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'The email with the link to your application has been successfully sent to {0}.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'onboarding', + 'phrase' => 'emailGesendetHinweis', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'In der Regel erhalten Sie das Mail in wenigen Minuten. Wenn Sie nach 24 Stunden noch kein Mail erhalten haben, + kontaktieren Sie bitte unsere {0}Studienberatung{1}', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'You should receive an e-mail within a few minutes. If you receive no e-mail within 24 hours please contact + our {0}student counselling team{1}.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'onboarding', + 'phrase' => 'fehlerBeiRegistrierung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Fehler bei der Registrierung', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Error when registering', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'onboarding', + 'phrase' => 'fehlerBeiRegistrierungText', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Da ist etwas schief gelaufen. Wir bitten um Entschuldigung.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Sorry, something went wrong.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'onboarding', + 'phrase' => 'fehlerBeiRegistrierungNochmalVersuchen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Nochmals versuchen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Try again', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), ); From b63146a8d89cdc4f08213350170346b1956cd560 Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Wed, 20 Nov 2024 15:03:59 +0100 Subject: [PATCH 04/33] added MeldezettelJob for accepting Meldezettel of students with Meldeadresse --- .../controllers/jobs/MeldezettelJob.php | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 application/controllers/jobs/MeldezettelJob.php diff --git a/application/controllers/jobs/MeldezettelJob.php b/application/controllers/jobs/MeldezettelJob.php new file mode 100644 index 000000000..329597985 --- /dev/null +++ b/application/controllers/jobs/MeldezettelJob.php @@ -0,0 +1,86 @@ +_ci =& get_instance(); + + $this->_ci->load->model('crm/Dokumentprestudent_model', 'DokumentprestudentModel'); + } + + /** + * Sets Meldezettel to "accepted" for all students with Meldeadresse. + */ + public function acceptMeldezettel() + { + $this->logInfo('Start Meldezettel Job'); + + $params = array(self::DOKUMENT_KURZBZ); + + $qry = " + -- get all prestudents with meldeadresse, but no accepted Meldezettel + SELECT + DISTINCT prestudent_id + FROM + public.tbl_adresse + JOIN public.tbl_person USING (person_id) + JOIN public.tbl_prestudent ps USING (person_id) + WHERE + typ = 'm' + AND NOT EXISTS ( + SELECT + 1 + FROM + public.tbl_dokumentprestudent + WHERE + prestudent_id = ps.prestudent_id + AND dokument_kurzbz = ? + )"; + + // get all prestudents with Meldeadresse and no accpeted Meldezettel + $result = $this->_ci->DokumentprestudentModel->execReadOnlyQuery($qry, $params); + + if (isError($result)) + { + $this->logError(getError($result)); + } + + $count = 0; + + if (hasData($result)) + { + $prestudents = getData($result); + + foreach ($prestudents as $prestudent) + { + // set Meldezettel to accepted + $result = $this->_ci->DokumentprestudentModel->insert( + array( + 'prestudent_id' => $prestudent->prestudent_id, + 'dokument_kurzbz' => self::DOKUMENT_KURZBZ, + 'datum' => date('Y-m-d'), + 'insertamum' => strftime('%Y-%m-%d %H:%M'), + 'insertvon' => self::INSERT_VON + ) + ); + + if (isError($result)) + $this->logError(getError($result)); + else + $count++; + } + } + + $this->logInfo('End Meldezettel Job', array('Number of changes ' => $count)); + } +} From 0a97b39efbb877ff3f7a07ca0d531434b54cb3ca Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Tue, 24 Dec 2024 19:14:04 +0100 Subject: [PATCH 05/33] added phrases for electronic onboarding verification page --- .../person/Kontaktverifikation_model.php | 2 +- system/phrasesupdate.php | 137 +++++++++++++++++- 2 files changed, 132 insertions(+), 7 deletions(-) diff --git a/application/models/person/Kontaktverifikation_model.php b/application/models/person/Kontaktverifikation_model.php index b15439edb..17bcb1c35 100644 --- a/application/models/person/Kontaktverifikation_model.php +++ b/application/models/person/Kontaktverifikation_model.php @@ -29,7 +29,7 @@ class Kontaktverifikation_model extends DB_Model FROM public.tbl_kontakt_verifikation kv JOIN public.tbl_kontakt kt USING(kontakt_id) - WHERE kt.person_id = ? + WHERE kt.person_id = ? AND kt.kontakttyp = ? AND kv.verifikation_code = ? AND kv.erstelldatum >= NOW() - INTERVAL '".$this->escape($expiration_days)." days' diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 8d7bdd939..843a055a1 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -31310,18 +31310,18 @@ array( array( 'app' => 'core', 'category' => 'onboarding', - 'phrase' => 'registrierungVerifzierenFuer', + 'phrase' => 'bewerbungVerifizierung', 'insertvon' => 'system', 'phrases' => array( array( 'sprache' => 'German', - 'text' => 'Registrierung verifizieren für', + 'text' => 'Verifizierung Ihrer Bewerbung', 'description' => '', 'insertvon' => 'system' ), array( 'sprache' => 'English', - 'text' => 'Verify registration for', + 'text' => 'Application verification', 'description' => '', 'insertvon' => 'system' ) @@ -31330,18 +31330,143 @@ array( array( 'app' => 'core', 'category' => 'onboarding', - 'phrase' => 'registrierungVerifzieren', + 'phrase' => 'bewerbungVerifzieren', 'insertvon' => 'system', 'phrases' => array( array( 'sprache' => 'German', - 'text' => 'Registrierung verifizieren', + 'text' => 'Bewerbung verifizieren', 'description' => '', 'insertvon' => 'system' ), array( 'sprache' => 'English', - 'text' => 'Verify registration', + 'text' => 'Verify application', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'onboarding', + 'phrase' => 'bewerbungVerifizierungEinleitung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Wenn Ihre Daten stimmen, geben Sie bitte Ihre E-Mail Adresse ein und drücken Sie auf "Bewerbung verfifizieren". +Danach erhalten Sie eine E-Mail mit dem Link zu Ihrer Bewerbung an die angegebene Adresse. +Dort können Sie Studienrichtungen hinzufügen, Ihre Daten vervollständigen, und sich unverbindlich bewerben.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'If your data is correct, please enter your email and click "Verify application". +We will then send you a link via e-mail to the address specified. There, you can add personal information or degree programs and submit non-binding applications.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'onboarding', + 'phrase' => 'bewerbungVerifizierungKontakthinweis', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Wenn Sie mehr Informationen benötigen, steht Ihnen unsere Studienberatung gerne persönlich, telefonisch, per E-Mail oder WhatsApp zur Verfügung.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Should you require any additional information, please do not hesitate to contact our student counselling team in person, by phone, or via e-mail or WhatsApp.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'onboarding', + 'phrase' => 'bewerbungVerifizierungDatenschutzhinweis', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Datenschutz-Hinweis', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Privacy information', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'onboarding', + 'phrase' => 'bewerbungVerifizierungDatenschutzhinweisText', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Die uns von Ihnen zum Zwecke der Bewerbung bekanntgegebenen Daten werden von uns ausschließlich zur Abwicklung der Bewerbung auf der Grundlage von vor- bzw vertraglichen Zwecken verarbeitet und mit der unten beschriebenen Ausnahme bei Unklarheiten betreffend die Zugangsvoraussetzungen nicht an Dritte weitergegeben. +Kommt es zu keinem weiteren Kontakt bzw zu keiner Aufnahme, löschen wir Ihre Daten nach drei Jahren.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'The data communicated to us by you for the purpose of the application will be used by us exclusively for the processing of the application on the basis of pre-contractual or contractual purposes and will not be passed on to third parties with the exception described below in case of uncertainties regarding the entry requirements. +If there is no further contact or enrolment, your data will be deleted after three years.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'onboarding', + 'phrase' => 'bewerbungVerifizierungInformationenDatenschutzGrundverordnung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Informationen zu Ihren Betroffenenrechten finden Sie hier:', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Information on your data subject rights can be found here:', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'onboarding', + 'phrase' => 'bewerbungVerifizierungDatenschutzFragen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Bei Fragen stehen wir Ihnen jederzeit unter folgender Mail zur Verfügung: ', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'If you have any questions, please contact us at ', 'description' => '', 'insertvon' => 'system' ) From 115b35ad7b40f3b27a161c5a8859ca019f1924e5 Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Wed, 8 Jan 2025 14:52:32 +0100 Subject: [PATCH 06/33] electronic onboarding: changed phrase for error display --- system/phrasesupdate.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 843a055a1..4de9cbb03 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -31622,13 +31622,13 @@ If there is no further contact or enrolment, your data will be deleted after thr 'phrases' => array( array( 'sprache' => 'German', - 'text' => 'Da ist etwas schief gelaufen. Wir bitten um Entschuldigung.', + 'text' => 'Es ist ein Fehler bei der Registrierung aufgetreten.', 'description' => '', 'insertvon' => 'system' ), array( 'sprache' => 'English', - 'text' => 'Sorry, something went wrong.', + 'text' => 'An error occured during registration.', 'description' => '', 'insertvon' => 'system' ) From 08cb3d3809b34b43eb87558a02a5ae702e4c8681 Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Thu, 16 Jan 2025 21:02:01 +0100 Subject: [PATCH 07/33] electronic onboarding phrase typo fix --- system/phrasesupdate.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 4de9cbb03..7f030e62b 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -31355,7 +31355,7 @@ array( 'phrases' => array( array( 'sprache' => 'German', - 'text' => 'Wenn Ihre Daten stimmen, geben Sie bitte Ihre E-Mail Adresse ein und drücken Sie auf "Bewerbung verfifizieren". + 'text' => 'Wenn Ihre Daten stimmen, geben Sie bitte Ihre E-Mail Adresse ein und drücken Sie auf "Bewerbung verifizieren". Danach erhalten Sie eine E-Mail mit dem Link zu Ihrer Bewerbung an die angegebene Adresse. Dort können Sie Studienrichtungen hinzufügen, Ihre Daten vervollständigen, und sich unverbindlich bewerben.', 'description' => '', From 39ada202774fbb77811a2cd54bd96f2a046917aa Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Wed, 22 Jan 2025 15:26:25 +0100 Subject: [PATCH 08/33] Electronic Onboarding: added phrases --- system/phrasesupdate.php | 102 +++++++++++++++++++++++++++++++-------- 1 file changed, 82 insertions(+), 20 deletions(-) diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 7f030e62b..e177274ec 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -31307,26 +31307,6 @@ array( ) ) ), - array( - 'app' => 'core', - 'category' => 'onboarding', - 'phrase' => 'bewerbungVerifizierung', - 'insertvon' => 'system', - 'phrases' => array( - array( - 'sprache' => 'German', - 'text' => 'Verifizierung Ihrer Bewerbung', - 'description' => '', - 'insertvon' => 'system' - ), - array( - 'sprache' => 'English', - 'text' => 'Application verification', - 'description' => '', - 'insertvon' => 'system' - ) - ) - ), array( 'app' => 'core', 'category' => 'onboarding', @@ -31654,6 +31634,88 @@ If there is no further contact or enrolment, your data will be deleted after thr ) ) ), + array( + 'app' => 'core', + 'category' => 'onboarding', + 'phrase' => 'zustimmungDatenuebermittlung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Können in Ausnahmefällen die Zugangsvoraussetzungen von der FH Technikum Wien nicht abschließend abgeklärt werden, erteile ich die Zustimmung, dass die FH Technikum Wien die Dokumente zur Überprüfung an die zuständigen Behörden weiterleiten kann.
+Ich wurde darüber informiert, dass ich nicht verpflichtet bin, der Übermittlung meiner Daten zuzustimmen. Diese Zustimmung ist allerdings notwendig, um die Bewerbung berücksichtigen zu können.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'If in exceptional cases the admission requirements can not be finally clarified by the UAS Technikum Wien, I give my consent that the UAS Technikum Wien can forward the documents to the competent authorities for verification.
+I have been informed that I am under no obligation to consent to the transmission of my data. However, this consent is necessary in order for the application to be considered.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'onboarding', + 'phrase' => 'zustimmungDatenschutzerklaerung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Ich habe die Datenschutzerklärung zu Kenntnis genommen.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'I have taken note of the privacy policy.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'onboarding', + 'phrase' => 'bitteDatenuebermittlungZustimmen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Sie müssen der Datenübermittlung zustimmen, um Ihre Bewerbung abschicken zu können.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'You have to consent the transmission of your data to send the application.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'onboarding', + 'phrase' => 'bitteDatenschutzerklaerungZustimmen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Sie müssen der Datenschutzerklärung zustimmen, um Ihre Bewerbung abschicken zu können.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'You have to consent to the privacy statement to send the application.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ) ); From 239eace246349288b1146c1c684243e59e5721af Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Fri, 27 Jun 2025 23:14:56 +0200 Subject: [PATCH 09/33] registration links to Bewerbungstool: changed in infocenter and fas, studentenverwaltung so that user email is not verified --- application/views/system/infocenter/stammdaten.php | 2 +- .../js/components/Stv/Studentenverwaltung/Details/Details.js | 4 ++-- rdf/student.rdf.php | 2 +- vilesci/personen/personendetails.php | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/application/views/system/infocenter/stammdaten.php b/application/views/system/infocenter/stammdaten.php index f143c9c03..4806d979a 100644 --- a/application/views/system/infocenter/stammdaten.php +++ b/application/views/system/infocenter/stammdaten.php @@ -188,7 +188,7 @@ zugangscode)): ?> diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Details.js b/public/js/components/Stv/Studentenverwaltung/Details/Details.js index ae4f92b20..3ca656697 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Details.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Details.js @@ -153,7 +153,7 @@ export default { @@ -459,4 +459,4 @@ export default { ` -}; \ No newline at end of file +}; diff --git a/rdf/student.rdf.php b/rdf/student.rdf.php index 40cf28e01..f16f8a7b0 100644 --- a/rdf/student.rdf.php +++ b/rdf/student.rdf.php @@ -349,7 +349,7 @@ function draw_content($row) uid)?$row->uid.'@'.DOMAIN:'').']]> zugangscode.']]> - zugangscode.'&emailAdresse='.$mail_privat.']]> + zugangscode.'&emailAdresse='.$mail_privat.'&keepEmailUnverified=true]]> bpk.']]> diff --git a/vilesci/personen/personendetails.php b/vilesci/personen/personendetails.php index a20e34c5d..684b21712 100644 --- a/vilesci/personen/personendetails.php +++ b/vilesci/personen/personendetails.php @@ -153,7 +153,7 @@ echo "Name: $person->titelpre $person->nachname $ echo "Geburtsdatum: ".$datum_obj->formatDatum($person->gebdatum,'d.m.Y').""; echo "Geschlecht: ".$person->geschlecht.""; echo "Anmerkung: ".$db->convert_html_chars($person->anmerkungen).""; -echo "Zugangscode:".(in_array('bewerbung', (explode(';', ACTIVE_ADDONS)))?"".$db->convert_html_chars($person->zugangscode)."":$db->convert_html_chars($person->zugangscode)).""; +echo "Zugangscode:".(in_array('bewerbung', (explode(';', ACTIVE_ADDONS)))?"".$db->convert_html_chars($person->zugangscode)."":$db->convert_html_chars($person->zugangscode)).""; echo ''; echo '
Statusinformation - FH Ausweis
'; From 12cdf5a83ef4c2b0e09fbefd25b32e638f8a756d Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Fri, 11 Jul 2025 17:11:19 +0200 Subject: [PATCH 10/33] =?UTF-8?q?accepting=20documents:=20enabled=20accept?= =?UTF-8?q?ing=20for=20all=20Studieng=C3=A4nge,=20not=20just=20master,=20a?= =?UTF-8?q?dded=20date=20and=20insertamum?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/dokument.class.php | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/include/dokument.class.php b/include/dokument.class.php index 6dec9a66d..7b1d490fb 100644 --- a/include/dokument.class.php +++ b/include/dokument.class.php @@ -888,9 +888,10 @@ class dokument extends basis_db * Akzeptiert ein bestimmtes Dokument * @param char $dokument_kurzbz Bezeichner Dokument. * @param int $person_id Personenkennzeichen. + * @param array $studiengang_typen einschränken nach Studiengang Typ. * @return boolean true wenn akzeptiert bzw geprüft ohne Akzeptieren, false wenn Fehler */ - public function akzeptiereDokument($dokument_kurzbz, $person_id) + public function akzeptiereDokument($dokument_kurzbz, $person_id, $studiengang_typen = null) { $db = new basis_db(); $arrayDoksZuAkzeptieren = array(); @@ -902,7 +903,6 @@ class dokument extends basis_db tbl_prestudent ps, tbl_studiengang sg WHERE ps.studiengang_kz = sg.studiengang_kz - AND sg.typ = 'm' AND person_id = ".$this->db_add_param($person_id)." AND not exists( SELECT * @@ -910,6 +910,11 @@ class dokument extends basis_db where dok.prestudent_id = ps.prestudent_id and dokument_kurzbz = ".$this->db_add_param($dokument_kurzbz).")"; + if (isset($studiengang_typen) && is_array($studiengang_typen) && !empty($studiengang_typen)) + { + $qry .= ' AND sg.typ IN ('. $db->db_implode4SQL($studiengang_typen).')'; + } + //gibt ein Array von zu akzeptierenden Dokumenten zurück if ($db->db_query($qry)) { @@ -923,11 +928,14 @@ class dokument extends basis_db } //für alle prestudent_ids das Dokument akzeptieren - $qry = "INSERT INTO public.tbl_dokumentprestudent(dokument_kurzbz, prestudent_id) VALUES"; + $qry = "INSERT INTO public.tbl_dokumentprestudent(dokument_kurzbz, prestudent_id, datum, insertamum) VALUES"; foreach ($arrayDoksZuAkzeptieren as $prestudent_id) { - $qry .= "(".$this->db_add_param($dokument_kurzbz). ",". $prestudent_id. ")"; + $qry .= "(".$this->db_add_param($dokument_kurzbz). + ",".$this->db_add_param($prestudent_id, FHC_INTEGER). + ",".$this->db_add_param(date('Y-m-d')). + ",".$this->db_add_param(strftime('%Y-%m-%d %H:%M')). ")"; if (next($arrayDoksZuAkzeptieren) == true) { From 1883e8a6f1df3acb10681fd4d90a8bba44e35a5c Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Wed, 16 Jul 2025 15:19:50 +0200 Subject: [PATCH 11/33] moved default stunden for projektbetreuer (master/bachelor) to config --- config/global.config-default.inc.php | 6 ++++++ content/student/studentprojektarbeit.js.php | 6 ++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/config/global.config-default.inc.php b/config/global.config-default.inc.php index 8cfc36bfb..f24a302cc 100644 --- a/config/global.config-default.inc.php +++ b/config/global.config-default.inc.php @@ -162,6 +162,12 @@ define('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON', ''); // Legt fest, ob Vertragsdetails zum Projektauftrag im Reiter Projektarbeit angezeigt werden define('FAS_STUDIERENDE_PROJEKTARBEIT_VERTRAGSDETAILS_ANZEIGEN', false); +// Legt default Stunden pro Projektarbeitsbetreuung für Bachelorarbeiten fest +define('FAS_STUDIERENDE_PROJEKTARBEIT_DEFAULT_BETREUER_STUNDEN_BACHELOR', '5.0'); + +// Legt default Stunden pro Projektarbeitsbetreuung für Masterarbeiten fest +define('FAS_STUDIERENDE_PROJEKTARBEIT_DEFAULT_BETREUER_STUNDEN_MASTER', '5.0'); + // Anzeigeoptionen für LV-Plan Menü define('CIS_LVPLAN_EXPORT_ANZEIGEN',true); define('CIS_LVPLAN_PERSONENAUSWAHL_ANZEIGEN',true); diff --git a/content/student/studentprojektarbeit.js.php b/content/student/studentprojektarbeit.js.php index 6c3919327..2005d85fc 100644 --- a/content/student/studentprojektarbeit.js.php +++ b/content/student/studentprojektarbeit.js.php @@ -1165,12 +1165,14 @@ function StudentProjektbetreuerDetailReset() if(document.getElementById('student-projektarbeit-menulist-projekttyp').value=='Diplom') { - document.getElementById('student-projektbetreuer-textbox-stunden').value='5.0'; + document.getElementById('student-projektbetreuer-textbox-stunden').value= + ; document.getElementById('student-projektbetreuer-menulist-betreuerart').value='Erstbegutachter'; } else if(document.getElementById('student-projektarbeit-menulist-projekttyp').value=='Bachelor') { - document.getElementById('student-projektbetreuer-textbox-stunden').value='4.0'; + document.getElementById('student-projektbetreuer-textbox-stunden').value= + ; document.getElementById('student-projektbetreuer-menulist-betreuerart').value='Begutachter'; } else if(document.getElementById('student-projektarbeit-menulist-projekttyp').value=='Praktikum') From eb8c3213dfb3628ba3a9cbd737ff463e1841b716 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Tue, 19 Aug 2025 07:37:33 +0200 Subject: [PATCH 12/33] - ects angabe bei der anmeldung - tablesorter hinzugefuegt - pruefungsort anderer raum moeglich (text) - pruefungsanmeldungen nur noch studiensemester dropdown - kompatible lvs vergleichen --- cis/private/lehre/pruefung/pruefung.js.php | 119 ++- .../pruefung/pruefungsanmeldung.json.php | 78 +- .../lehre/pruefung/pruefungsanmeldung.php | 14 + .../pruefung/pruefungsanmeldungen_liste.php | 10 +- .../pruefungsanmeldungen_liste_ohne_namen.php | 7 + .../pruefungsanmeldungen_verwalten.php | 59 +- config/global.config-default.inc.php | 3 + include/pruefungCis.class.php | 32 + include/pruefungsanmeldung.class.php | 12 +- include/pruefungstermin.class.php | 6 +- locale/de-AT/pruefung.php | 2 + locale/en-US/pruefung.php | 1 + system/dbupdate_3.4.php | 6 +- .../47972_pruefungsverwaltung_ects_angabe.php | 22 + ...hrveranstaltung_kompatibel_vergleichen.php | 682 ++++++++++++++++++ vilesci/lehre/studienordnung.js | 5 +- 16 files changed, 1006 insertions(+), 52 deletions(-) create mode 100644 system/dbupdate_3.4/47972_pruefungsverwaltung_ects_angabe.php create mode 100644 vilesci/lehre/lehrveranstaltung_kompatibel_vergleichen.php diff --git a/cis/private/lehre/pruefung/pruefung.js.php b/cis/private/lehre/pruefung/pruefung.js.php index 4142e413c..f2fc2dc7e 100644 --- a/cis/private/lehre/pruefung/pruefung.js.php +++ b/cis/private/lehre/pruefung/pruefung.js.php @@ -382,7 +382,7 @@ function writePruefungsTable(e, data, anmeldung) } else if(new Date() > minimumFrist) { - button = "

"+frist+"'>

"; + button = "

"+frist+"'>

"; } } else @@ -479,13 +479,15 @@ function showPruefungsDetails(prfId, lvId) * @param {type} lvBezeichnung Bezeichnung der Lehrveranstaltung * @param {type} terminVon Beginn der Prüfung * @param {type} terminBis Ende der Prüfung + * @param {type} ects der LV * @returns {undefined} */ -function openDialog(lehrveranstaltung_id, termin_id, lvBezeichnung, terminVon, terminBis) +function openDialog(lehrveranstaltung_id, termin_id, lvBezeichnung, terminVon, terminBis, ects) { $("#lehrveranstaltungHidden").val(lehrveranstaltung_id); $("#terminHidden").val(termin_id); $("#lehrveranstaltung").html(lvBezeichnung); + $("#ectsangabe").val(ects); $.ajax({ dataType: 'json', @@ -582,6 +584,12 @@ function saveAnmeldung(lehrveranstaltung_id, termin_id) if($('#prestudent_studiengang').length) studiengang_kz = $('#prestudent_studiengang option:selected').val(); + var ects = null; + if ($('#ectsangabe').length) + { + ects = $('#ectsangabe').val(); + } + $.ajax({ dataType: 'json', url: "./pruefungsanmeldung.json.php", @@ -593,7 +601,8 @@ function saveAnmeldung(lehrveranstaltung_id, termin_id) bemerkung: bemerkungen, uid: uid, studienverpflichtung_id: studienverpflichtung_id, - studiengang_kz: studiengang_kz + studiengang_kz: studiengang_kz, + ects: ects }, error: loadError, success: function(data){ @@ -804,6 +813,7 @@ function writeAnmeldungen(data, showMessage = true) var pruefung_id = data.result.anmeldungen[0].pruefung_id; var lehrveranstaltung_id = data.result.anmeldungen[0].lehrveranstaltung_id; var ort_kurzbz = data.result.ort_kurzbz; + var anderer_raum = data.result.anderer_raum; var lv_bezeichnung = data.result.lv_bezeichnung; var lv_lehrtyp = data.result.lv_lehrtyp; var prf_termin = data.result.datum; @@ -816,24 +826,33 @@ function writeAnmeldungen(data, showMessage = true) count++; var vorname = d.student.vorname !== "null" ? d.student.vorname : ""; var nachname = d.student.nachname !== "null" ? d.student.nachname : ""; + + let ects = ""; + + ects = d.ects !== null ? "(" + d.ects + " ECTS) ": ""; + + + switch(d.status_kurzbz) { case 'angemeldet': - liste += "
  • "+vorname+" "+nachname+""; + liste += "
  • "+ects+vorname+" "+nachname+""; liste += "
    "+count+"
    ' onclick='anmeldungBestaetigen(\""+d.pruefungsanmeldung_id+"\", \""+terminId+"\", \""+lehrveranstaltung_id+"\");'>"; liste += "
    "; if(d.wuensche !== null) { - liste += ""; + let msg = $('
    ').text(d.wuensche).html(); + liste += `
    `; } liste += "
  • "; break; case 'bestaetigt': - liste += "
  • "+vorname+" "+nachname+""; + liste += "
  • "+ects+vorname+" "+nachname+""; liste += "
    "+count+"
    "; if(d.wuensche !== null) { - liste += ""; + let msg = $('
    ').text(d.wuensche).html(); + liste += `
    `; } break; @@ -848,9 +867,9 @@ function writeAnmeldungen(data, showMessage = true) $("#lvdaten").html(lv_bezeichnung+" ("+prf_termin+")"); $("#anmeldeDaten").html(liste); $("#listeDrucken").html(listenLinks); - if(ort_kurzbz !== null) + if(ort_kurzbz !== null || anderer_raum !== null) { - $("#raumLink").html("t('pruefung/pruefungsraum'); ?>"+ort_kurzbz); + $("#raumLink").html("t('pruefung/pruefungsraum'); ?>"+ (ort_kurzbz ?? anderer_raum)); } else { @@ -883,11 +902,17 @@ function writeAnmeldungen(data, showMessage = true) function openRaumDialog(terminId, lehrveranstaltung_id) { getRaeume(terminId); - $("#raum").html('

    t('pruefung/pruefungsraum'); ?>

    t('pruefung/imBuero'); ?>
    t('pruefung/raum'); ?>: '); + $("#raum").html('

    t('pruefung/pruefungsraum'); ?>

    t('pruefung/imBuero'); ?>
    t('pruefung/raum'); ?>:
    t('pruefung/andererRaum'); ?>
    '); $("#raumSpeichernButton").html("' onclick='saveRaum(\""+terminId+"\", \""+lehrveranstaltung_id+"\");'/>"); $("#raumDialog").dialog("open"); } +function openKommentarDialog(text) +{ + $('#kommentarimDialog').text(text); + $('#kommentarDialog').dialog('open'); +} + /** * speichert die Reihung der Studenten einer Prüfungsanmeldung * @param {type} terminId ID des Prüfungstermines @@ -1118,25 +1143,49 @@ function loadPruefungStudiengang(studiengang_kz, studiensemester) $("#pruefungenListe").empty(); if(data.result.length > 0) { - var liste = ""; - data.result.forEach(function(e){ - liste += "
    • "+e.bezeichnung+"
        "; - try + $('#table4').show() + let rows = ''; + + data.result.forEach(function(e) + { + let termine = e?.pruefung[0]?.termine || []; + + if (termine.length === 0) { - e.pruefung[0].termine.forEach(function(d){ - liste += "
      • "+convertDateTime(d.von)+" "+convertDateTime(d.von, "time")+" - "+convertDateTime(d.bis, "time")+"
      • "; + rows += ` + + + ${e.bezeichnung} + Keine Termine + `; + } + else + { + termine.forEach(function(d) { + let vonDate = convertDateTime(d.von); + let vonTime = convertDateTime(d.von, 'time'); + let bisTime = convertDateTime(d.bis, 'time'); + let onClick = `showAnmeldungen(${d.pruefungstermin_id}, ${e.lehrveranstaltung_id})`; + + rows += ` + + + ${e.studiengang} + ${e.bezeichnung} + ${vonDate} + ${vonTime} + ${bisTime} + t('pruefung/pruefungsbewertungAnmeldungen'); ?> + `; }); } - catch(err) - { - var errmsg = err.message; - } - liste += "
    "; }); - $("#pruefungenListe").append(liste); + $("#pruefungenListe").html(rows); + setTablesorter('table4') } else { + $('#table4').hide() $("#pruefungenListe").html("t('pruefung/keinePruefungenVorhanden'); ?>"); } } @@ -1241,6 +1290,7 @@ function loadStudiensemester() data.result.forEach(function(d){ selectData += ""; }); + $('#studiensemester').html(selectData); loadPruefungsfenster(); loadLehrveranstaltungen(); @@ -1540,7 +1590,7 @@ function loadPruefungsDetails(prfId) if(data.result.length === 0) { messageBox("message", "t('pruefung/keinePruefungsfensterGespeichert'); ?>", "red", "highlight", 10000); - $("#pruefungsfenster").html(""); + $("#pruefungsfenster").html(""); } else { @@ -2188,10 +2238,28 @@ function changeStateOfRaumDropdown() } } +function changeStateOfRaumInputs() +{ + if ($("#andererRaum").prop("checked") === true) + { + $("#raumInfos").hide(); + } + else + { + $("#raumInfos").show(); + } +} + function saveRaum(terminId, lehrveranstaltung_id) { var ort_kurzbz; - if($("#raum input[type=checkbox]").prop("checked") === true) + let anderer_raum = ''; + if ($("#andererRaum").prop("checked") === true && $('#andereRaumInput').val() !== '') + { + ort_kurzbz = ""; + anderer_raum = $('#andereRaumInput').val(); + } + else if($("#raum input[type=checkbox]").prop("checked") === true) { ort_kurzbz = "buero"; } @@ -2206,7 +2274,8 @@ function saveRaum(terminId, lehrveranstaltung_id) data: { method: "saveRaum", ort_kurzbz: ort_kurzbz, - terminId: terminId + terminId: terminId, + anderer_raum: anderer_raum }, error: loadError }).done(function(data){ diff --git a/cis/private/lehre/pruefung/pruefungsanmeldung.json.php b/cis/private/lehre/pruefung/pruefungsanmeldung.json.php index 6757cf391..54c064d14 100644 --- a/cis/private/lehre/pruefung/pruefungsanmeldung.json.php +++ b/cis/private/lehre/pruefung/pruefungsanmeldung.json.php @@ -108,7 +108,7 @@ switch($method) break; case 'getPruefungenStudiengang': $studiensemester = filter_input(INPUT_POST,"studiensemester"); - $data = getPruefungenStudiengang($uid, $studiensemester); + $data = getPruefungenStudiengangBySemester($studiensemester); break; case 'saveKommentar': $data = saveKommentar(); @@ -120,7 +120,8 @@ switch($method) case 'saveRaum': $terminId = $_REQUEST["terminId"]; $ort_kurzbz = $_REQUEST["ort_kurzbz"]; - $data = saveRaum($terminId, $ort_kurzbz, $uid); + $anderer_raum = $_REQUEST["anderer_raum"]; + $data = saveRaum($terminId, $ort_kurzbz, $uid, $anderer_raum); break; case 'getLvKompatibel': $lvid = filter_input(INPUT_POST, "lehrveranstaltung_id"); @@ -397,6 +398,7 @@ function saveAnmeldung($aktStudiensemester = null, $uid = null) $lv_besucht = false; $studienverpflichtung_id = filter_input(INPUT_POST, "studienverpflichtung_id"); $studiengang_kz = filter_input(INPUT_POST, "studiengang_kz"); + $ects = filter_input(INPUT_POST, "ects"); //Defaulteinstellung für Anzahlprüfungsversuche (wird durch Addon "ktu" überschrieben) $maxAnzahlVersuche = 0; @@ -731,6 +733,10 @@ function saveAnmeldung($aktStudiensemester = null, $uid = null) else $anmeldung->anrechnung_id = $anrechnung->anrechnung_id; + if (defined('CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE') && (CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE === true)) + { + $anmeldung->ects = $ects; + } if($anmeldung->save(true)) { $pruefung = new pruefungCis($termin->pruefung_id); @@ -1166,6 +1172,53 @@ function getPruefungenStudiengang($uid, $aktStudiensemester) return $data; } +function getPruefungenStudiengangBySemester($aktStudiensemester) +{ + $result = array(); + $pruefungen = new pruefungCis(); + $pruefungen->getPruefungByStudiensemester($aktStudiensemester); + + if((!empty($pruefungen->lehrveranstaltungen))) + { + $lehrveranstaltungen = []; + foreach ($pruefungen->lehrveranstaltungen as $prf) + { + $pruefung = new pruefungCis(); + $pruefung->load($prf->pruefung_id); + + if ($pruefung->storniert) + continue; + + $pruefung->getTermineByPruefung(); + + $lvid = $prf->lehrveranstaltung_id; + + if (!isset($lehrveranstaltungen[$lvid])) + { + $lv = new stdClass(); + $lehrveranstaltung = new lehrveranstaltung(); + $lehrveranstaltung->load($lvid); + + $studiengang = new studiengang(); + $studiengang->load($lehrveranstaltung->studiengang_kz); + + $lv->bezeichnung = $lehrveranstaltung->bezeichnung; + $lv->lehrveranstaltung_id = $lvid; + $lv->studiengang = $studiengang->kuerzel; + $lv->pruefung = []; + $lehrveranstaltungen[$lvid] = $lv; + } + + $lehrveranstaltungen[$lvid]->pruefung[] = $pruefung; + } + $result = array_values($lehrveranstaltungen); + } + $data['result']=$result; + $data['error']='false'; + $data['errormsg']=''; + return $data; +} + /** * * @return typespeichert ein Kommentar zu einer Prüfungsanmeldung @@ -1246,7 +1299,7 @@ function compareRaeume($a, $b) return strcmp($a->ort_kurzbz, $b->ort_kurzbz); } -function saveRaum($terminId, $ort_kurzbz, $uid) +function saveRaum($terminId, $ort_kurzbz, $uid, $anderer_raum = '') { $terminkollision = defined('CIS_PRUEFUNGSANMELDUNG_ERLAUBE_TERMINKOLLISION') ? CIS_PRUEFUNGSANMELDUNG_ERLAUBE_TERMINKOLLISION : false; $pruefungstermin = new pruefungstermin($terminId); @@ -1265,7 +1318,24 @@ function saveRaum($terminId, $ort_kurzbz, $uid) { $pruefung = new pruefungCis($pruefungstermin->pruefung_id); $mitarbeiter = new mitarbeiter($pruefung->mitarbeiter_uid); - if($ort_kurzbz === "buero") + + if ($ort_kurzbz === "" && $anderer_raum !== "") + { + $pruefungstermin->anderer_raum = $anderer_raum; + + if($pruefungstermin->save(false)) + { + $data['result']="reserviert"; + $data['error']='false'; + $data['errormsg']=''; + } + else + { + $data['error']='true'; + $data['errormsg']=$pruefungstermin->errormsg; + } + } + else if($ort_kurzbz === "buero") { $pruefungstermin->ort_kurzbz = $mitarbeiter->ort_kurzbz; if($pruefungstermin->save(false)) diff --git a/cis/private/lehre/pruefung/pruefungsanmeldung.php b/cis/private/lehre/pruefung/pruefungsanmeldung.php index c969c51aa..837e0c227 100644 --- a/cis/private/lehre/pruefung/pruefungsanmeldung.php +++ b/cis/private/lehre/pruefung/pruefungsanmeldung.php @@ -321,6 +321,20 @@ $studiensemester->getAll(); + + + + + t('pruefung/ects'); ?>: + + + + + + diff --git a/cis/private/lehre/pruefung/pruefungsanmeldungen_liste.php b/cis/private/lehre/pruefung/pruefungsanmeldungen_liste.php index 39ec68ad4..91c2ea084 100644 --- a/cis/private/lehre/pruefung/pruefungsanmeldungen_liste.php +++ b/cis/private/lehre/pruefung/pruefungsanmeldungen_liste.php @@ -235,12 +235,18 @@ $rechte->getBerechtigungen($uid); t('global/datum'); ?> t('benotungstool/note'); ?> t('global/anmerkung'); ?> + + + t('pruefung/ects'); ?> + + uid); @@ -269,6 +275,8 @@ $rechte->getBerechtigungen($uid); echo ''.$date.''; echo ''; echo ''; + if (defined('CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE') && (CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE === true)) + echo ''. $anmeldung->ects .''; echo ''; } ?> diff --git a/cis/private/lehre/pruefung/pruefungsanmeldungen_liste_ohne_namen.php b/cis/private/lehre/pruefung/pruefungsanmeldungen_liste_ohne_namen.php index 207ba4dd7..414ebdf15 100644 --- a/cis/private/lehre/pruefung/pruefungsanmeldungen_liste_ohne_namen.php +++ b/cis/private/lehre/pruefung/pruefungsanmeldungen_liste_ohne_namen.php @@ -233,6 +233,11 @@ $rechte->getBerechtigungen($uid); t('global/datum'); ?> t('benotungstool/note'); ?> t('global/anmerkung'); ?> + + t('pruefung/ects'); ?> + @@ -265,6 +270,8 @@ $rechte->getBerechtigungen($uid); echo ''.$date.''; echo ''; echo ''; + if (defined('CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE') && (CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE === true)) + echo ''. $anmeldung->ects .''; echo ''; } ?> diff --git a/cis/private/lehre/pruefung/pruefungsanmeldungen_verwalten.php b/cis/private/lehre/pruefung/pruefungsanmeldungen_verwalten.php index 22bca21cc..dd38950b1 100644 --- a/cis/private/lehre/pruefung/pruefungsanmeldungen_verwalten.php +++ b/cis/private/lehre/pruefung/pruefungsanmeldungen_verwalten.php @@ -95,7 +95,7 @@ if (empty($pruefung->result) && !$rechte->isBerechtigt('lehre/pruefungsanmeldung #prfWrapper { position: absolute; height: 70%; - width: 300px; + width: 40%; top: 180px; padding: 1.8em 1.5em 1.8em 1em; /*border-radius: 25px;*/ @@ -117,9 +117,9 @@ if (empty($pruefung->result) && !$rechte->isBerechtigt('lehre/pruefungsanmeldung #anmWrapper { position: absolute; /*top: 45px;*/ - left: 350px; + left: 45%; top: 180px; - width: 500px; + width: 40%; height: 70%; padding: 1.8em 1.5em 1.8em 1em; /*border-radius: 25px;*/ @@ -228,7 +228,6 @@ if (empty($pruefung->result) && !$rechte->isBerechtigt('lehre/pruefungsanmeldung

    t('pruefung/anmeldungenVerwalten'); ?>

    -
    -
    -

    t('global/studiengang'); ?>

    -
    -
    -

    t('global/studiensemester'); ?>

    result) && !$rechte->isBerechtigt('lehre/pruefungsanmeldung $studiensemester->getPlusMinus(null, 5); foreach($studiensemester->studiensemester as $sem) { - /*@var $sem studiensemester */ if ($aktuellesSemester == $sem->studiensemester_kurzbz) { echo ''; @@ -273,9 +290,20 @@ if (empty($pruefung->result) && !$rechte->isBerechtigt('lehre/pruefungsanmeldung

    t('pruefung/pruefungPruefungenTitle'); ?>

    -
      - -
    + + + + + + + + + + + + + +
    @@ -311,6 +339,9 @@ if (empty($pruefung->result) && !$rechte->isBerechtigt('lehre/pruefungsanmeldung
    +
    diff --git a/config/global.config-default.inc.php b/config/global.config-default.inc.php index 8cfc36bfb..89b02a8ce 100644 --- a/config/global.config-default.inc.php +++ b/config/global.config-default.inc.php @@ -263,6 +263,9 @@ define('CIS_SAALPLAN_ALLERAEUME_OPTION', false); //Legt fest ob Bestätigungsmails über eine Anmelung zu einer Prüfung an eine einzelne Person erfolgt oder an den jeweiligen Lektor. (Leerstring für jeweiligen Lektor | uid); define('CIS_PRUEFUNG_MAIL_EMPFAENGER_ANMEDLUNG',""); +//Gibt an, ob die Studierenden bei der Anmeldung zu einer Prüfung den Ausmas an ECTS angeben können +define('CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE', false); + // Username fuer STIP Schnittstelle define('STIP_USER_NAME','stipendienstelle'); // Passwort fuer STIP Schnittstelle diff --git a/include/pruefungCis.class.php b/include/pruefungCis.class.php index ec402ed5d..29b0c425d 100644 --- a/include/pruefungCis.class.php +++ b/include/pruefungCis.class.php @@ -464,6 +464,7 @@ class pruefungCis extends basis_db $obj->anmeldung_von= $row->anmeldung_von; $obj->anmeldung_bis = $row->anmeldung_bis; $obj->ort_kurzbz = $row->ort_kurzbz; + $obj->anderer_raum = $row->anderer_raum; $obj->sammelklausur = $row->sammelklausur; array_push($this->termine, $obj); } @@ -646,6 +647,37 @@ class pruefungCis extends basis_db return false; } + public function getPruefungByStudiensemester($studiensemester_kurzbz) + { + if(empty($studiensemester_kurzbz)) + { + $this->errormsg = "Kein Studiensemester übergeben.
    "; + return false; + } + + $qry = 'SELECT * + FROM campus.tbl_lehrveranstaltung_pruefung + JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id) + JOIN campus.tbl_pruefung USING (pruefung_id) + WHERE tbl_pruefung.studiensemester_kurzbz = ' . $this->db_add_param($studiensemester_kurzbz); + + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $obj = new stdClass(); + $obj->lehrveranstaltung_pruefung_id = $row->lehrveranstaltung_pruefung_id; + $obj->lehrveranstaltung_id = $row->lehrveranstaltung_id; + $obj->pruefung_id = $row->pruefung_id; + $obj->storniert = $row->storniert; + $obj->bezeichnung = $row->bezeichnung; + array_push($this->lehrveranstaltungen, $obj); + } + return true; + } + return false; + } + /** * Lädt alle Prüfung-Lehrveranstaltung Kombinationen * @return boolean true, wenn ok; false, im Fehlerfall diff --git a/include/pruefungsanmeldung.class.php b/include/pruefungsanmeldung.class.php index e4fbec506..c23b0212b 100644 --- a/include/pruefungsanmeldung.class.php +++ b/include/pruefungsanmeldung.class.php @@ -39,6 +39,7 @@ class pruefungsanmeldung extends basis_db { public $statusupdatevon; //varchar(32) public $statusupdateamum; //timestamp public $anrechnung_id; //integer + public $ects; //integer public $pruefungstyp_kurzbz; //varchar(32) public $insertamum; // timestamp @@ -94,7 +95,7 @@ class pruefungsanmeldung extends basis_db { if($new) { - $qry = 'INSERT INTO campus.tbl_pruefungsanmeldung (uid, pruefungstermin_id, lehrveranstaltung_id, status_kurzbz, wuensche, reihung, kommentar, anrechnung_id, pruefungstyp_kurzbz) VALUES (' + $qry = 'INSERT INTO campus.tbl_pruefungsanmeldung (uid, pruefungstermin_id, lehrveranstaltung_id, status_kurzbz, wuensche, reihung, kommentar, anrechnung_id, pruefungstyp_kurzbz, ects) VALUES (' . $this->db_add_param($this->uid).', ' . $this->db_add_param($this->pruefungstermin_id).', ' . $this->db_add_param($this->lehrveranstaltung_id).', ' @@ -103,7 +104,8 @@ class pruefungsanmeldung extends basis_db { . $this->db_add_param($this->reihung).', ' . $this->db_add_param($this->kommentar).', ' . $this->db_add_param($this->anrechnung_id).', ' - . $this->db_add_param($this->pruefungstyp_kurzbz).');'; + . $this->db_add_param($this->pruefungstyp_kurzbz).', ' + . $this->db_add_param($this->ects).');'; } else { @@ -116,7 +118,8 @@ class pruefungsanmeldung extends basis_db { . 'reihung='.$this->db_add_param($this->reihung).', ' . 'kommentar='.$this->db_add_param($this->kommentar).', ' . 'anrechnung_id='.$this->db_add_param($this->anrechnung_id).', ' - . 'pruefungstyp_kurzbz='.$this->db_add_param($this->pruefungstyp_kurzbz) + . 'pruefungstyp_kurzbz='.$this->db_add_param($this->pruefungstyp_kurzbz).', ' + . 'ects='.$this->db_add_param($this->ects) . ' WHERE pruefungsanmeldung_id='.$this->db_add_param($this->pruefungsanmeldung_id).';'; } @@ -167,6 +170,7 @@ class pruefungsanmeldung extends basis_db { $this->statusupdatevon = $row->statusupdatevon; $this->anrechnung_id = $row->anrechnung_id; $this->pruefungstyp_kurzbz = $row->pruefungstyp_kurzbz; + $this->ects = $row->ects; $this->insertamum = $row->insertamum; } return true; @@ -221,6 +225,7 @@ class pruefungsanmeldung extends basis_db { $anmeldung->statusupdatevon = $row->statusupdatevon; $anmeldung->anrechnung_id = $row->anrechnung_id; $anmeldung->pruefungstyp_kurzbz = $row->pruefungstyp_kurzbz; + $anmeldung->ects = $row->ects; array_push($anmeldungen, $anmeldung); } return $anmeldungen; @@ -280,6 +285,7 @@ class pruefungsanmeldung extends basis_db { $anmeldung->statusupdatevon = $row->statusupdatevon; $anmeldung->anrechnung_id = $row->anrechnung_id; $anmeldung->pruefungstyp_kurzbz = $row->pruefungstyp_kurzbz; + $anmeldung->ects = $row->ects; $anmeldung->datum_anmeldung = $row->datum_anmeldung; array_push($anmeldungen, $anmeldung); } diff --git a/include/pruefungstermin.class.php b/include/pruefungstermin.class.php index 74222cceb..c7eb0b085 100644 --- a/include/pruefungstermin.class.php +++ b/include/pruefungstermin.class.php @@ -37,6 +37,7 @@ class pruefungstermin extends basis_db{ public $anmeldung_von; //date public $anmeldung_bis; //date public $ort_kurzbz; //varchar(16) + public $anderer_raum; //text public $sammelklausur; //boolean /** @@ -93,6 +94,7 @@ class pruefungstermin extends basis_db{ $this->anmeldung_von= $row->anmeldung_von; $this->anmeldung_bis = $row->anmeldung_bis; $this->ort_kurzbz = $row->ort_kurzbz; + $this->anderer_raum = $row->anderer_raum; $this->sammelklausur = $row->sammelklausur; } return true; @@ -179,7 +181,8 @@ class pruefungstermin extends basis_db{ . 'teilnehmer_min='.$this->db_add_param($this->teilnehmer_min).', ' . 'anmeldung_von='.$this->db_add_param($this->anmeldung_von).', ' . 'anmeldung_bis='.$this->db_add_param($this->anmeldung_bis).', ' - . 'ort_kurzbz='.$this->db_add_param($this->ort_kurzbz).' ' + . 'ort_kurzbz='.$this->db_add_param($this->ort_kurzbz).', ' + . 'anderer_raum='.$this->db_add_param($this->anderer_raum).' ' . 'WHERE pruefungstermin_id='.$this->db_add_param($this->pruefungstermin_id).';'; } @@ -228,6 +231,7 @@ class pruefungstermin extends basis_db{ $obj->anmeldung_von= $row->anmeldung_von; $obj->anmeldung_bis = $row->anmeldung_bis; $obj->ort_kurzbz = $row->ort_kurzbz; + $obj->anderer_raum = $row->anderer_raum; $obj->sammelklausur = $row->sammelklausur; array_push($this->result, $obj); } diff --git a/locale/de-AT/pruefung.php b/locale/de-AT/pruefung.php index 93b7039e0..9e75fa89e 100644 --- a/locale/de-AT/pruefung.php +++ b/locale/de-AT/pruefung.php @@ -57,6 +57,7 @@ $this->phrasen['pruefung/listeOhneNamenDrucken'] = 'Liste ohne Namen drucken'; $this->phrasen['pruefung/pruefungsraum'] = 'Prüfungsraum: '; $this->phrasen['pruefung/pruefungsort'] = 'Prüfungsort '; $this->phrasen['pruefung/imBuero'] = ' im Büro'; +$this->phrasen['pruefung/andererRaum'] = 'anderer Raum'; $this->phrasen['pruefung/raum'] = ' Raum'; $this->phrasen['pruefung/raumSpeichern'] = ' Raum speichern'; $this->phrasen['pruefung/reihunghErfolgreichGeaendert'] = 'Reihung erfolgreich geändert.'; @@ -95,6 +96,7 @@ $this->phrasen['pruefung/lvVonStudiengang'] = 'Lehrveranstaltungen von Studienga $this->phrasen['pruefung/lvAlle'] = 'Alle Lehrveranstaltungen'; $this->phrasen['pruefung/anmeldungSpeichern'] = 'Anmeldung speichern'; $this->phrasen['pruefung/studienverpflichtung'] = 'Studienverpflichtung'; +$this->phrasen['pruefung/ects'] = 'ECTS'; // liste $this->phrasen['pruefung/anmeldungsliste'] = 'Anmeldungsliste'; diff --git a/locale/en-US/pruefung.php b/locale/en-US/pruefung.php index cd5175c13..7b0cec97e 100644 --- a/locale/en-US/pruefung.php +++ b/locale/en-US/pruefung.php @@ -57,6 +57,7 @@ $this->phrasen['pruefung/listeOhneNamenDrucken'] = 'Liste ohne Namen drucken'; $this->phrasen['pruefung/pruefungsraum'] = 'Prüfungsraum: '; $this->phrasen['pruefung/pruefungsort'] = 'Prüfungsort '; $this->phrasen['pruefung/imBuero'] = ' im Büro'; +$this->phrasen['pruefung/andererRaum'] = 'other Room'; $this->phrasen['pruefung/raum'] = ' Raum'; $this->phrasen['pruefung/raumSpeichern'] = ' Raum speichern'; $this->phrasen['pruefung/reihunghErfolgreichGeaendert'] = 'Reihung erfolgreich geändert.'; diff --git a/system/dbupdate_3.4.php b/system/dbupdate_3.4.php index cf2f40ca8..3a743f065 100644 --- a/system/dbupdate_3.4.php +++ b/system/dbupdate_3.4.php @@ -77,6 +77,8 @@ require_once('dbupdate_3.4/55614_perm_verwaltetoe.php'); require_once('dbupdate_3.4/25999_C4_dashboard.php'); require_once('dbupdate_3.4/61730_Dashboard_Anpassungen.php'); require_once('dbupdate_3.4/40128_search.php'); +require_once('dbupdate_3.4/60882_lehrfaecherverteilung_favorites.php'); +require_once('dbupdate_3.4/47972_pruefungsverwaltung_ects_angabe.php'); // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

    Pruefe Tabellen und Attribute!

    '; @@ -159,8 +161,8 @@ $tabellen=array( "campus.tbl_paabgabe" => array("paabgabe_id","projektarbeit_id","paabgabetyp_kurzbz","fixtermin","datum","kurzbz","abgabedatum", "insertvon","insertamum","updatevon","updateamum"), "campus.tbl_pruefungsfenster" => array("pruefungsfenster_id","studiensemester_kurzbz","oe_kurzbz","start","ende"), "campus.tbl_pruefung" => array("pruefung_id","mitarbeiter_uid","studiensemester_kurzbz","pruefungsfenster_id","pruefungstyp_kurzbz","titel","beschreibung","methode","einzeln","storniert","insertvon","insertamum","updatevon","updateamum","pruefungsintervall"), - "campus.tbl_pruefungstermin" => array("pruefungstermin_id","pruefung_id","von","bis","teilnehmer_max","teilnehmer_min","anmeldung_von","anmeldung_bis","ort_kurzbz","sammelklausur"), - "campus.tbl_pruefungsanmeldung" => array("pruefungsanmeldung_id","uid","pruefungstermin_id","lehrveranstaltung_id","status_kurzbz","wuensche","reihung","kommentar","statusupdatevon","statusupdateamum","anrechnung_id","pruefungstyp_kurzbz","insertamum"), + "campus.tbl_pruefungstermin" => array("pruefungstermin_id","pruefung_id","von","bis","teilnehmer_max","teilnehmer_min","anmeldung_von","anmeldung_bis","ort_kurzbz","sammelklausur", "anderer_raum"), + "campus.tbl_pruefungsanmeldung" => array("pruefungsanmeldung_id","uid","pruefungstermin_id","lehrveranstaltung_id","status_kurzbz","wuensche","reihung","kommentar","statusupdatevon","statusupdateamum","anrechnung_id","pruefungstyp_kurzbz","insertamum", "ects"), "campus.tbl_pruefungsstatus" => array("status_kurzbz","bezeichnung"), "campus.tbl_reservierung" => array("reservierung_id","ort_kurzbz","studiengang_kz","uid","stunde","datum","titel","beschreibung","semester","verband","gruppe","gruppe_kurzbz","veranstaltung_id","insertamum","insertvon"), "campus.tbl_studierendenantrag" => array("studierendenantrag_id","prestudent_id","studiensemester_kurzbz","datum","typ","insertamum","insertvon","datum_wiedereinstieg","grund","dms_id"), diff --git a/system/dbupdate_3.4/47972_pruefungsverwaltung_ects_angabe.php b/system/dbupdate_3.4/47972_pruefungsverwaltung_ects_angabe.php new file mode 100644 index 000000000..7b961fa3d --- /dev/null +++ b/system/dbupdate_3.4/47972_pruefungsverwaltung_ects_angabe.php @@ -0,0 +1,22 @@ +db_query("SELECT ects FROM campus.tbl_pruefungsanmeldung LIMIT 1")) +{ + $qry = 'ALTER TABLE campus.tbl_pruefungsanmeldung ADD COLUMN ects numeric(5,2);'; + + if(!$db->db_query($qry)) + echo ' campus.tbl_pruefungsanmeldung '.$db->db_last_error().'
    '; + else + echo '
    campus.tbl_pruefungsanmeldung: Neue Spalte ects hinzugefügt'; +} + +if(!@$db->db_query("SELECT anderer_raum FROM campus.tbl_pruefungstermin LIMIT 1")) +{ + $qry = 'ALTER TABLE campus.tbl_pruefungstermin ADD COLUMN anderer_raum text NULL;'; + + if(!$db->db_query($qry)) + echo ' campus.tbl_pruefungstermin '.$db->db_last_error().'
    '; + else + echo '
    campus.tbl_pruefungstermin: Neue Spalte anderer_raum hinzugefügt'; +} diff --git a/vilesci/lehre/lehrveranstaltung_kompatibel_vergleichen.php b/vilesci/lehre/lehrveranstaltung_kompatibel_vergleichen.php new file mode 100644 index 000000000..94e1af155 --- /dev/null +++ b/vilesci/lehre/lehrveranstaltung_kompatibel_vergleichen.php @@ -0,0 +1,682 @@ +load($_POST['lv_id']); + + $kompatibleLvs = $lv->loadLVkompatibel($_POST['lv_id']); + if (is_array($kompatibleLvs) && count($kompatibleLvs) > 0) + { + $result = array(); + foreach($kompatibleLvs as $lvId) + { + $lv->load($lvId); + $studiengang = new studiengang(); + $studiengang->load($lv->studiengang_kz); + $oe = new organisationseinheit(); + $oe->load($lv->oe_kurzbz); + + + $result[] = array( + "lehrveranstaltung_id" => $lv->lehrveranstaltung_id, + "kurzbz" => $lv->kurzbz, + "bezeichnung" => $lv->bezeichnung, + "ects" => $lv->ects, + "studiengang_kuerzel" => $studiengang->kuerzel, + "oe_bezeichnung" => $oe->bezeichnung + ); + } + echo json_encode(["result" => $result]); + exit(); + } + echo json_encode(["result" => array()]); + exit(); + } +} + +if (isset($_REQUEST['autocomplete']) && ($_REQUEST['autocomplete'] === 'From' || $_REQUEST['autocomplete'] === 'To')) +{ + $search = trim((isset($_REQUEST['term']) ? $_REQUEST['term'] : '')); + if (is_null($search) || $search == '') + { + exit(); + } + + $qry = "SELECT lehre.tbl_lehrveranstaltung.* + FROM lehre.tbl_lehrveranstaltung + WHERE + lower(bezeichnung) like '%" . $db->db_escape(mb_strtolower($search)) . "%' OR + lehrveranstaltung_id::text like '%" . $db->db_escape(mb_strtolower($search)) . "%' OR + studiengang_kz::text like '%" . $db->db_escape(mb_strtolower($search)) . "%' + ORDER BY lehrveranstaltung_id DESC + LIMIT 10 + "; + + if ($result = $db->db_query($qry)) + { + $result_obj = array(); + while ($row = $db->db_fetch_object($result)) + { + $item['lehrveranstaltung_id'] = html_entity_decode($row->lehrveranstaltung_id); + $item['bezeichnung'] = html_entity_decode($row->bezeichnung); + $item['oe_kurzbz'] = html_entity_decode($row->oe_kurzbz); + $result_obj[] = $item; + } + echo json_encode($result_obj); + } + exit(); +} +?> + + + Lehrveranstaltung Verwaltung + + + + + + + + + + + + + + +getBerechtigungen($user); + +if(!$rechte->isBerechtigt('lehre/lehrveranstaltung', 'suid')) + die('Sie haben keine Berechtigung fuer diese Seite'); + +$studiengang = new studiengang(); +$studiengang->getAll("kurzbzlang"); + +$organisationseinheit = new organisationseinheit(); +$organisationseinheit->getAll(true, true); + +echo "
    +
    +
    + + + + + + + + + "; + echo " + + + + + + + + + + +
    Suche: + +
    Studiengang: + + OE: +
    Semester: + +
    Lehrveranstaltungen: + +
    +
    + Kompatible Lehrveranstaltungen - + + + + + + + + + + + + + + + + +
    IDKurzbezeichnungBezeichnungECTSStudiengangOrganisationseiheitÜbernehmen?Löschen?
    + + + +
    +
    +
    + + + + + + + + + + "; + echo " + + + + + + + + + + +
    Suche: + +
    Studiengang: + + OE: +
    Semester: + +
    Lehrveranstaltungen: + +
    +
    + Kompatible Lehrveranstaltungen - + + + + + + + + + + + + + + +
    IDKurzbezeichnungBezeichnungECTSStudiengangOrganisationseiheitLöschen?
    +
    +"; + + +echo " + "; + +?> diff --git a/vilesci/lehre/studienordnung.js b/vilesci/lehre/studienordnung.js index 54fa9e81b..bf7ff34e7 100644 --- a/vilesci/lehre/studienordnung.js +++ b/vilesci/lehre/studienordnung.js @@ -695,15 +695,16 @@ function loadLVKompatibilitaet(lvid) }).success(function(data) { var html=''; + html = html+'kompatible Lehrveranstaltungen vergleichen

    '; + html = html+'kompatible Lehrveranstaltungen hinzufügen
    '; for(i in data.result) { if(data.result[i]) { lvdata = data.result[i]; if(!(lvdata.kurzbz===null && lvdata.bezeichnung===null && lvdata.studiengang_kz===null && lvdata.semester===null)) - html = html+'
    '+lvdata.kurzbz+' - '+lvdata.bezeichnung+' (Studiengang '+lvdata.studiengang_kz+', Semester '+lvdata.semester+')'; + html = html+'
    '+lvdata.kurzbz+' - '+lvdata.bezeichnung+' (Studiengang '+lvdata.studiengang_kz+', Semester '+lvdata.semester+')
    '; } - html = html+'

    kompatible Lehrveranstaltungen hinzufügen'; } $("#tab-kompatibel").html(html); From e79b7a525f7864d6bd2724e0f1f64e494eb6a3ba Mon Sep 17 00:00:00 2001 From: ma0048 Date: Tue, 26 Aug 2025 11:41:10 +0200 Subject: [PATCH 13/33] pruefung bestaetigen bestaetigungsmail schicken ermoeglicht --- cis/private/lehre/pruefung/pruefung.js.php | 58 ++++++++++++--- .../pruefung/pruefungsanmeldung.json.php | 74 ++++++++++++++++++- .../pruefungsanmeldungen_verwalten.php | 22 +++--- locale/de-AT/pruefung.php | 10 +++ locale/en-US/pruefung.php | 9 +++ 5 files changed, 145 insertions(+), 28 deletions(-) diff --git a/cis/private/lehre/pruefung/pruefung.js.php b/cis/private/lehre/pruefung/pruefung.js.php index f2fc2dc7e..73b808d14 100644 --- a/cis/private/lehre/pruefung/pruefung.js.php +++ b/cis/private/lehre/pruefung/pruefung.js.php @@ -863,7 +863,8 @@ function writeAnmeldungen(data, showMessage = true) }); liste += ""; $("#anmeldung_hinzufuegen").html("' onclick='saveAnmeldung(\""+lehrveranstaltung_id+"\",\""+terminId+"\");'/>"); - $("#reihungSpeichernButton").html("' onclick='saveReihung(\""+terminId+"\", \""+lehrveranstaltung_id+"\");'>' onclick='alleBestaetigen(\""+terminId+"\", \""+lehrveranstaltung_id+"\");'>"); + $("#reihungSpeichernButton").html("