-
diff --git a/config/global.config-default.inc.php b/config/global.config-default.inc.php
index ed17a096d..0380ea8d5 100644
--- a/config/global.config-default.inc.php
+++ b/config/global.config-default.inc.php
@@ -258,6 +258,9 @@ define('STIP_USER_PASSWORD','password');
// Array mit Usern die nicht Kollidieren
define('KOLLISIONSFREIE_USER',serialize(array('_DummyLektor')));
+// UID des Dummy Lektors
+define('DUMMY_LEKTOR_UID','_DummyLektor');
+
// Soll der Lageplan am Infoterminal angezeigt werden (true|false)
//define('CIS_INFOSCREEN_LAGEPLAN_ANZEIGEN', true);
diff --git a/content/student/studentdetailoverlay.xul.php b/content/student/studentdetailoverlay.xul.php
index 0ac45f3d9..b4f84d64b 100644
--- a/content/student/studentdetailoverlay.xul.php
+++ b/content/student/studentdetailoverlay.xul.php
@@ -335,13 +335,26 @@ echo '';
@@ -392,14 +405,26 @@ echo '';
@@ -452,13 +477,26 @@ echo '';
diff --git a/include/gruppemanager.class.php b/include/gruppemanager.class.php
new file mode 100644
index 000000000..009804204
--- /dev/null
+++ b/include/gruppemanager.class.php
@@ -0,0 +1,187 @@
+.
+ */
+require_once(dirname(__FILE__).'/basis_db.class.php');
+
+class gruppemanager extends basis_db
+{
+ public $new;
+
+ //Tabellenspalten
+ public $uid; // varchar(32)
+ public $gruppe_kurzbz; // varchar(32)
+ public $insertamum; // timestamp
+ public $insertvon; // varchar(32)
+
+ public $uids = array(); // array
+
+ /**
+ * Konstruktor - Laedt optional einen Gruppenmanager
+ * @param $uid
+ * @param $gruppe_kurzbz
+ */
+ public function __construct($uid=null, $gruppe_kurzbz=null)
+ {
+ parent::__construct();
+
+ if(!is_null($gruppe_kurzbz) && !is_null($uid))
+ $this->load($uid, $gruppe_kurzbz);
+ }
+
+ /**
+ * Laedt die BenutzerGruppe
+ * @param uid, gruppe_kurzbz
+ * @return true wenn ok, false im Fehlerfall
+ */
+ public function load($uid, $gruppe_kurzbz)
+ {
+ $qry = "SELECT * FROM public.tbl_gruppe_manager WHERE uid=".$this->db_add_param($uid)." AND gruppe_kurzbz=".$this->db_add_param($gruppe_kurzbz);
+
+ if($this->db_query($qry))
+ {
+ if($row = $this->db_fetch_object())
+ {
+ $this->uid = $row->uid;
+ $this->gruppe_kurzbz = $row->gruppe_kurzbz;
+ $this->insertamum = $row->insertamum;
+ $this->insertvon = $row->insertvon;
+ return true;
+ }
+ else
+ {
+ $this->errormsg = 'Es wurde kein Datensatz gefunden';
+ return false;
+ }
+ }
+ else
+ {
+ $this->errormsg = 'Fehler beim Laden des Datensatzes';
+ return false;
+ }
+ }
+
+ /**
+ * Laedt die Manager einer Benutzergruppe
+ * @param gruppe_kurzbz
+ * @return true wenn ok, false im Fehlerfall
+ */
+ public function load_uids($gruppe_kurzbz)
+ {
+ $qry = "SELECT * FROM public.tbl_gruppe_manager
+ WHERE gruppe_kurzbz=".$this->db_add_param($gruppe_kurzbz);
+
+ if ($this->db_query($qry))
+ {
+ if ($this->db_num_rows() == 0)
+ return false;
+ else
+ {
+ while ($row = $this->db_fetch_object())
+ {
+ $gm_obj = new gruppemanager();
+ $gm_obj->uid = $row->uid;
+ $this->uids[] = $gm_obj;
+ }
+ return true;
+ }
+ }
+ else
+ {
+ $this->errormsg = 'Fehler beim Laden des Datensatzes';
+ return false;
+ }
+ }
+
+ /**
+ * Prueft die Variablen vor dem Speichern
+ * auf Gueltigkeit.
+ * @return true wenn ok, false im Fehlerfall
+ */
+ protected function validate()
+ {
+ if(mb_strlen($this->uid)>32)
+ {
+ $this->errormsg = 'UID darf nich laenger als 32 Zeichen sein';
+ return false;
+ }
+ if(mb_strlen($this->gruppe_kurzbz)>32)
+ {
+ $this->errormsg = 'Gruppe_kurzbz darf nicht laenger als 32 Zeichen sein';
+ return false;
+ }
+ if(mb_strlen($this->insertvon)>32)
+ {
+ $this->errormsg = 'Insertvon darf nicht laenger als 32 Zeichen sein';
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Speichert GruppeManager in die Datenbank
+ * Wenn $new auf true gesetzt ist wird ein neuer Datensatz
+ * angelegt, ansonsten der Datensatz upgedated
+ * @return true wenn erfolgreich, false im Fehlerfall
+ */
+ public function save()
+ {
+ //Variablen auf Gueltigkeit pruefen
+ if(!$this->validate())
+ return false;
+
+ $qry = 'INSERT INTO public.tbl_gruppe_manager (uid, gruppe_kurzbz, insertamum, insertvon)
+ VALUES('.$this->db_add_param($this->uid).','.
+ $this->db_add_param($this->gruppe_kurzbz).','.
+ $this->db_add_param($this->insertamum).','.
+ $this->db_add_param($this->insertvon).');';
+
+ if($this->db_query($qry))
+ {
+ //Log schreiben
+ return true;
+ }
+ else
+ {
+ $this->errormsg = 'Fehler beim Speichern des GruppeManagers';
+ return false;
+ }
+ }
+
+ /**
+ * Loescht eine Gruppenmanagerzuordnung
+ *
+ * @param $uid
+ * @param $gruppe_kurzbz
+ * @return boolean
+ */
+ public function delete($uid, $gruppe_kurzbz)
+ {
+ $qry = "DELETE FROM public.tbl_gruppe_manager WHERE uid=".$this->db_add_param($uid)." AND gruppe_kurzbz=".$this->db_add_param($gruppe_kurzbz);
+
+ if($this->db_query($qry))
+ return true;
+ else
+ {
+ $this->errormsg = 'Fehler beim Loeschen der Zuteilung';
+ return false;
+ }
+ }
+}
+?>
diff --git a/include/prestudent.class.php b/include/prestudent.class.php
index a958120cb..d357a323e 100644
--- a/include/prestudent.class.php
+++ b/include/prestudent.class.php
@@ -2542,4 +2542,80 @@ class prestudent extends person
return false;
}
}
+
+ /**
+ * Prueft, ob eine Person offene Bewerbungen besitzt
+ * @param int $person_id ID der zu überprüfenden Person.
+ * @return true wenn vorhanden, false wenn nicht vorhanden
+ */
+ public function existsOffeneBewerbung($person_id)
+ {
+ if (!is_numeric($person_id))
+ {
+ $this->errormsg = 'Person_id muss eine gueltige Zahl sein';
+ return false;
+ }
+
+ $db = new basis_db();
+
+ $qry = "SELECT
+ prestudent_id
+ FROM
+ tbl_prestudent ps
+ WHERE
+ person_id = ".$this->db_add_param($person_id)."
+ And
+ get_rolle_prestudent(prestudent_id, null) in ('Interessent','Bewerber','Aufgenommener','Wartender');";
+
+ if ($db->db_query($qry))
+ {
+ $num_rows = $db->db_num_rows();
+ if ($num_rows > 0)
+ {
+ return true;
+ }
+ else
+ return false;
+ }
+ else
+ return false;
+ }
+
+ /**
+ * Prueft, ob es sich um einen Student / Unterbrecher handelt
+ * @param int $person_id ID der zu überprüfenden Person.
+ * @return true wenn zutreffend, false wenn nicht zutreffend
+ */
+ public function isStudent($person_id)
+ {
+ if (!is_numeric($person_id))
+ {
+ $this->errormsg = 'Person_id muss eine gueltige Zahl sein';
+ return false;
+ }
+
+ $db = new basis_db();
+
+ $qry = "SELECT
+ prestudent_id
+ FROM
+ tbl_prestudent ps
+ WHERE
+ person_id = ".$this->db_add_param($person_id)."
+ And
+ get_rolle_prestudent(prestudent_id, null) in ('Student','Unterbrecher');";
+
+ if ($db->db_query($qry))
+ {
+ $num_rows = $db->db_num_rows();
+ if ($num_rows > 0)
+ {
+ return true;
+ }
+ else
+ return false;
+ }
+ else
+ return false;
+ }
}
diff --git a/public/js/infocenter/docUeberpruefung.js b/public/js/infocenter/docUeberpruefung.js
index acb0ca60f..ea992221f 100644
--- a/public/js/infocenter/docUeberpruefung.js
+++ b/public/js/infocenter/docUeberpruefung.js
@@ -7,58 +7,7 @@ $(document).ready(function ()
var personid = $("#hiddenpersonid").val();
- //add click events to "formal geprüft" checkboxes
- $(".prchbox").click(function ()
- {
- var boxid = this.id;
- var akteid = InfocenterDetails._getPrestudentIdFromElementId(boxid);
- var checked = this.checked;
- DocUeberpruefung.saveFormalGeprueft(personid, akteid, checked)
- });
-
- $('select.aktenid').change(function()
- {
- var akteid = InfocenterDetails._getPrestudentIdFromElementId(this.id);
- var typ = $(this).val();
- DocUeberpruefung.saveDocTyp(personid, akteid, typ);
- });
-
- $('.nachreichungInfos').click(function()
- {
- var akteid = InfocenterDetails._getPrestudentIdFromElementId(this.id);
- DocUeberpruefung.checkNachreichungInputs(akteid);
- });
-
- $('.nachreichungAbbrechen').click(function()
- {
- var akteid = InfocenterDetails._getPrestudentIdFromElementId(this.id);
- DocUeberpruefung.checkNachreichungInputs(akteid);
- });
-
- $('.nachreichungSpeichern').click(function()
- {
- var akteid = InfocenterDetails._getPrestudentIdFromElementId(this.id);
- var typ = $('#aktenid_' + akteid).val();
-
- var nachreichungAm = $('#nachreichungAm_' + akteid).val();
- var nachreichungAnmerkung = $('#nachreichungAnmerkung_' + akteid).val();
-
- if(nachreichungAm === '')
- {
- FHC_DialogLib.alertError(FHC_PhrasesLib.t('infocenter', 'datumUngueltig'));
- return false;
- }
-
- var regEx = /^\d{2}\.\d{2}\.(\d{2}|\d{4})$/;
-
- if(nachreichungAm.match(regEx) === null)
- {
- FHC_DialogLib.alertError(FHC_PhrasesLib.t('infocenter', 'datumUngueltig'))
- return false;
- }
-
- DocUeberpruefung.saveNachreichung(personid, nachreichungAm, nachreichungAnmerkung, typ);
- })
+ DocUeberpruefung._addDocUeberpruefungEvents(personid)
});
var DocUeberpruefung = {
@@ -158,6 +107,33 @@ var DocUeberpruefung = {
);
},
+ deleteDoc: function(personid, akteid)
+ {
+ FHC_AjaxClient.ajaxCallPost(
+ CALLED_PATH + "/deleteDoc/" + encodeURIComponent(personid),
+ {
+ "akteid": akteid
+ },
+ {
+ successCallback: function(data, textStatus, jqXHR) {
+ if (FHC_AjaxClient.isSuccess(data))
+ {
+ DocUeberpruefung._refreshUbersichtDoks();
+ InfocenterDetails._refreshLog();
+ }
+ else
+ {
+ FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
+ }
+ },
+ errorCallback: function(data)
+ {
+ FHC_DialogLib.alertWarning("Fehler beim Speichern!");
+ }
+ }
+ );
+ },
+
checkNachreichungInputs: function(akteid)
{
var inputs = $('#nachreichungInputs_' + akteid);
@@ -197,6 +173,19 @@ var DocUeberpruefung = {
}
},
+ _refreshUbersichtDoks: function()
+ {
+ var personid = $("#hiddenpersonid").val();
+
+ $("#uebersichtDoks").load(
+ CONTROLLER_URL + '/reloadUebersichtDoks/' + personid + '?fhc_controller_id=' + FHC_AjaxClient.getUrlParameter('fhc_controller_id'),
+ function () {
+ DocUeberpruefung._formatDocTable();
+ DocUeberpruefung._addDocUeberpruefungEvents(personid);
+ }
+ );
+ },
+
_refreshNachzureichendeDoks: function()
{
var personid = $("#hiddenpersonid").val();
@@ -205,10 +194,79 @@ var DocUeberpruefung = {
CONTROLLER_URL + '/reloadDoks/' + personid + '?fhc_controller_id=' + FHC_AjaxClient.getUrlParameter('fhc_controller_id'),
function () {
DocUeberpruefung._formatDocTable();
+ DocUeberpruefung._addDocUeberpruefungEvents(personid);
}
);
},
+ _addDocUeberpruefungEvents: function(personid)
+ {
+ //add click events to "formal geprüft" checkboxes
+ $(".prchbox").click(function ()
+ {
+ var boxid = this.id;
+ var akteid = InfocenterDetails._getPrestudentIdFromElementId(boxid);
+ var checked = this.checked;
+ DocUeberpruefung.saveFormalGeprueft(personid, akteid, checked)
+ });
+
+ $('select.aktenid').change(function()
+ {
+ var akteid = InfocenterDetails._getPrestudentIdFromElementId(this.id);
+ var typ = $(this).val();
+ DocUeberpruefung.saveDocTyp(personid, akteid, typ);
+ });
+
+ $('.nachreichungInfos').click(function()
+ {
+ var akteid = InfocenterDetails._getPrestudentIdFromElementId(this.id);
+ DocUeberpruefung.checkNachreichungInputs(akteid);
+ });
+
+ $('.nachreichungAbbrechen').click(function()
+ {
+ var akteid = InfocenterDetails._getPrestudentIdFromElementId(this.id);
+ DocUeberpruefung.checkNachreichungInputs(akteid);
+ });
+
+ $('.nachreichungSpeichern').click(function()
+ {
+ var akteid = InfocenterDetails._getPrestudentIdFromElementId(this.id);
+ var typ = $('#aktenid_' + akteid).val();
+
+ var nachreichungAm = $('#nachreichungAm_' + akteid).val();
+ var nachreichungAnmerkung = $('#nachreichungAnmerkung_' + akteid).val();
+
+ if(nachreichungAm === '')
+ {
+ FHC_DialogLib.alertError(FHC_PhrasesLib.t('infocenter', 'datumUngueltig'));
+ return false;
+ }
+
+ var regEx = /^\d{2}\.\d{2}\.(\d{2}|\d{4})$/;
+
+ if(nachreichungAm.match(regEx) === null)
+ {
+ FHC_DialogLib.alertError(FHC_PhrasesLib.t('infocenter', 'datumUngueltig'))
+ return false;
+ }
+
+ DocUeberpruefung.saveNachreichung(personid, nachreichungAm, nachreichungAnmerkung, typ);
+ })
+
+ $('.dokLoeschen').click(function()
+ {
+ var akteid = InfocenterDetails._getPrestudentIdFromElementId(this.id);
+
+ var confirmed = confirm('Wollen Sie sicher das Dokument des Dokumentypens: ' + $('#aktenid_' + akteid).find(':selected').text() + ' löschen?');
+
+ if (confirmed)
+ {
+ DocUeberpruefung.deleteDoc(personid, akteid);
+ }
+ });
+ },
+
_formatDocTable: function()
{
Tablesort.addTablesorter("doctable", [[2, 1], [1, 0]], ["zebra"]);
diff --git a/public/js/infocenter/infocenterPersonDataset.js b/public/js/infocenter/infocenterPersonDataset.js
index 06f5465c4..b7334d265 100644
--- a/public/js/infocenter/infocenterPersonDataset.js
+++ b/public/js/infocenter/infocenterPersonDataset.js
@@ -34,11 +34,10 @@ var InfocenterPersonDataset = {
var auswahlStudienart =
'
';
+ InfocenterPersonDataset.getStudienartData(infocenter_studiengangstyp);
+
var auswahlAbsageToggle =
'
Erweiterte Einstellungen';
@@ -90,11 +89,9 @@ var InfocenterPersonDataset = {
"
"
);
- InfocenterPersonDataset.selectStudiengangTyp(infocenter_studiengangstyp)
-
$('.auswahlStudienArt').change(function()
{
- InfocenterPersonDataset.changeStudengangsTyp($(this).find('option:selected').attr('data-id'));
+ InfocenterPersonDataset.changeStudengangsTyp($(this).find('option:selected').val());
});
$("#datasetActionsBottom").append(
@@ -183,22 +180,6 @@ 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
*/
@@ -257,20 +238,12 @@ var InfocenterPersonDataset = {
});
},
- changeStudengangsTyp: function($typ)
+ changeStudengangsTyp: function(typ)
{
- switch ($typ)
- {
- case 'all' :
- var change = 'b\', \'m';
- break;
- case 'bachelor' :
- var change = 'b';
- break;
- case 'master' :
- var change = 'm';
- break;
- }
+ let change = typ;
+
+ if (typ === 'all')
+ change = change = 'b\', \'m\', \'l';
FHC_AjaxClient.showVeil();
@@ -372,7 +345,8 @@ var InfocenterPersonDataset = {
'system/infocenter/InfoCenter/getAbsageData',
{},
{
- successCallback: function(data, textStatus, jqXHR) {
+ successCallback: function(data, textStatus, jqXHR)
+ {
if (FHC_AjaxClient.hasData(data))
{
data = FHC_AjaxClient.getData(data);
@@ -397,6 +371,42 @@ var InfocenterPersonDataset = {
}
);
},
+ getStudienartData: function(infocenter_studiengangstyp)
+ {
+ FHC_AjaxClient.ajaxCallGet(
+ 'system/infocenter/InfoCenter/getStudienartData',
+ {},
+ {
+ successCallback: function(data, textStatus, jqXHR)
+ {
+ if (FHC_AjaxClient.hasData(data))
+ {
+ data = FHC_AjaxClient.getData(data);
+
+ let all = data.map(item => item.typ).join('\',\'');
+ $('.auswahlStudienArt').append($("
")
+ .val(all)
+ .text('Alle')
+ );
+
+ $.each(data, function(key, value)
+ {
+ let isSelected;
+ isSelected = (infocenter_studiengangstyp === value.typ && all.length !== 1) ? 'selected' : false;
+ $('.auswahlStudienArt').append($("
")
+ .val(value.typ)
+ .text(value.bezeichnung)
+ .attr('selected', isSelected)
+ )
+ });
+ }
+ },
+ errorCallback: function(jqXHR, textStatus, errorThrown) {
+ FHC_DialogLib.alertError(textStatus);
+ }
+ }
+ );
+ },
/**
* initializes call to get the Studiensemester user variable
*/
diff --git a/public/js/lehre/anrechnung/requestAnrechnung.js b/public/js/lehre/anrechnung/requestAnrechnung.js
index dd93394d4..5edb4e162 100644
--- a/public/js/lehre/anrechnung/requestAnrechnung.js
+++ b/public/js/lehre/anrechnung/requestAnrechnung.js
@@ -7,49 +7,6 @@ const COLOR_DANGER = '#f2dede';
$(function(){
const uploadMaxFilesize = $('#requestAnrechnung-uploadfile').data('maxsize') ; // in byte
- let status_kurzbz = $('#requestAnrechnung-status_kurzbz').data('status_kurzbz');
- if (status_kurzbz != ' ' && status_kurzbz != ANRECHNUNGSTATUS_APPROVED)
- {
- var ectsLv = parseFloat($('#ects').text());
- var sumEctsSchulisch = parseFloat($('#sumEctsSchulisch').text());
- var sumEctsBeruflich = parseFloat($('#sumEctsBeruflich').text());
- var begruendung_id = $('#requestAnrechnung-form :input[name="begruendung"]:checked').val();
-
- // If Begründung is 'Hochschulzeugnis', return. They are accepted without limit.
- if (begruendung_id == 5)
- {
- exit;
- }
-
- // If max ECTS is ecceeded
- if (begruendung_id == 4)
- {
- if ((sumEctsSchulisch + sumEctsBeruflich + ectsLv) > 90 ||
- (sumEctsBeruflich + ectsLv) > 60
- )
- {
- // Get ECTS Überschreitungs-message, depending on schulische or berufliche Qualifikation
- var msgBeiEctsUeberschreitung = requestAnrechnung.getMsgBeiEctsUeberschreitung(begruendung_id, ectsLv, sumEctsSchulisch, sumEctsBeruflich);
-
- // Add to Checkbox text
- $('#requestAnrechnung-form :input[name="begruendung"]:checked').closest('label').append(msgBeiEctsUeberschreitung);
- }
- }
- else
- {
- if ((sumEctsSchulisch + sumEctsBeruflich + ectsLv) > 90 ||
- (sumEctsSchulisch + ectsLv) > 60
- )
- {
- // Get ECTS Überschreitungs-message, depending on schulische or berufliche Qualifikation
- var msgBeiEctsUeberschreitung = requestAnrechnung.getMsgBeiEctsUeberschreitung(begruendung_id, ectsLv, sumEctsSchulisch, sumEctsBeruflich);
-
- // Add to Checkbox text
- $('#requestAnrechnung-form :input[name="begruendung"]:checked').closest('label').append(msgBeiEctsUeberschreitung);
- }
- }
- }
-
// Set status alert color
requestAnrechnung.setStatusAlertColor();
@@ -62,9 +19,12 @@ $(function(){
// Init tooltips
requestAnrechnung.initTooltips();
- // // Alert message, if maximum ECTS exceeded
+ // Alert message, if maximum ECTS exceeded
requestAnrechnung.alertIfMaxEctsExceeded();
+ // Alert message inside Begruendungsbox, if maximum ECTS exceeded
+ requestAnrechnung.alertIfMaxEctsExceededInsideBegruendungsbox();
+
// Set chars counter for textarea 'Herkunft der Kenntnisse'
requestAnrechnung.setCharsCounter();
@@ -318,6 +278,51 @@ var requestAnrechnung = {
});
}
},
+ alertIfMaxEctsExceededInsideBegruendungsbox: function(){
+ let status_kurzbz = $('#requestAnrechnung-status_kurzbz').data('status_kurzbz');
+
+ if (status_kurzbz != ' ' && status_kurzbz != ANRECHNUNGSTATUS_APPROVED)
+ {
+ var ectsLv = parseFloat($('#ects').text());
+ var sumEctsSchulisch = parseFloat($('#sumEctsSchulisch').text());
+ var sumEctsBeruflich = parseFloat($('#sumEctsBeruflich').text());
+ var begruendung_id = $('#requestAnrechnung-form :input[name="begruendung"]:checked').val();
+
+ // If Begründung is 'Hochschulzeugnis', return. They are accepted without limit.
+ if (begruendung_id == 5)
+ {
+ return;
+ }
+
+ // If max ECTS is ecceeded
+ if (begruendung_id == 4)
+ {
+ if ((sumEctsSchulisch + sumEctsBeruflich + ectsLv) > 90 ||
+ (sumEctsBeruflich + ectsLv) > 60
+ )
+ {
+ // Get ECTS Überschreitungs-message, depending on schulische or berufliche Qualifikation
+ var msgBeiEctsUeberschreitung = requestAnrechnung.getMsgBeiEctsUeberschreitung(begruendung_id, ectsLv, sumEctsSchulisch, sumEctsBeruflich);
+
+ // Add to Checkbox text
+ $('#requestAnrechnung-form :input[name="begruendung"]:checked').closest('label').append(msgBeiEctsUeberschreitung);
+ }
+ }
+ else
+ {
+ if ((sumEctsSchulisch + sumEctsBeruflich + ectsLv) > 90 ||
+ (sumEctsSchulisch + ectsLv) > 60
+ )
+ {
+ // Get ECTS Überschreitungs-message, depending on schulische or berufliche Qualifikation
+ var msgBeiEctsUeberschreitung = requestAnrechnung.getMsgBeiEctsUeberschreitung(begruendung_id, ectsLv, sumEctsSchulisch, sumEctsBeruflich);
+
+ // Add to Checkbox text
+ $('#requestAnrechnung-form :input[name="begruendung"]:checked').closest('label').append(msgBeiEctsUeberschreitung);
+ }
+ }
+ }
+ },
getMsgBeiEctsUeberschreitung: function(begruendung_id, ects, sumEctsSchulisch, sumEctsBeruflich){
return $('
')
diff --git a/public/js/person/benutzergruppe.js b/public/js/person/benutzergruppe.js
new file mode 100644
index 000000000..353cb6ea3
--- /dev/null
+++ b/public/js/person/benutzergruppe.js
@@ -0,0 +1,223 @@
+/**
+ * Javascript file for benutzergruppe management page
+ */
+
+var Benutzergruppe = {
+ getBenutzer: function(gruppe_kurzbz) {
+ FHC_AjaxClient.ajaxCallGet(
+ 'person/gruppenmanagement/getBenutzer',
+ {
+ gruppe_kurzbz: gruppe_kurzbz
+ },
+ {
+ successCallback: function(data, textStatus, jqXHR) {
+ if (FHC_AjaxClient.isError(data))
+ {
+ FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
+ return;
+ }
+
+ let benutzerTable = $("#benutzer-table tbody");
+ benutzerTable.empty();
+
+ if (FHC_AjaxClient.hasData(data))
+ {
+ // save loaded data
+ let benutzerData = FHC_AjaxClient.getData(data);
+
+ // fill table with Benutzer of Gruppe
+ for (let i = 0; i < benutzerData.length; i++)
+ {
+ let benutzer = benutzerData[i];
+ benutzerTable.append(
+ "
"+
+ "| "+benutzer.uid+" | "+
+ ""+benutzer.vorname+" | "+
+ ""+benutzer.nachname+" | "+
+ ""+(benutzer.aktiv === true ? "Ja" : "Nein")+" | "+
+ ""+
+ ""+
+ " | "+
+ "
"
+ );
+
+ // add delete event to button
+ $("#"+benutzer.uid+"_benutzerLoeschen").click(
+ function() {
+ Benutzergruppe.removeBenutzer(benutzer.uid, gruppe_kurzbz);
+ }
+ )
+ }
+ }
+
+ // add tablesorter to benutzergruppe table
+ Benutzergruppe._setTablesorter();
+ },
+ errorCallback: function(jqXHR, textStatus, errorThrown) {
+ FHC_DialogLib.alertError(textStatus);
+ }
+ }
+ );
+ },
+ getAllBenutzer: function() {
+ FHC_AjaxClient.ajaxCallGet(
+ 'person/gruppenmanagement/getAllBenutzer',
+ null,
+ {
+ successCallback: function(data, textStatus, jqXHR) {
+ if (FHC_AjaxClient.isError(data))
+ {
+ FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
+ return;
+ }
+
+ if (FHC_AjaxClient.hasData(data))
+ {
+ benutzerArr = [];
+
+ // save loaded data
+ let benutzerData = FHC_AjaxClient.getData(data);
+
+ for (let i = 0; i < benutzerData.length; i++)
+ {
+ let ben = benutzerData[i];
+
+ benutzerArr.push(
+ {
+ vorname: ben.vorname,
+ nachname: ben.nachname,
+ uid: ben.uid,
+ label: ben.nachname + " " + ben.vorname + " (" + ben.uid + ")",
+ id: ben.uid
+ }
+ );
+ }
+
+ // callback for searching source mitarbeiter array correctly
+ let sourceCallback = function(request, response)
+ {
+ // case insensitive matcher
+ let matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
+
+ // match vorname nachname OR nachname vorname OR uid
+ response($.grep(benutzerArr, function (value) {
+ return matcher.test(value.nachname + ' '+value.vorname + ' ' + value.nachname)
+ || matcher.test(value.uid);
+ }));
+ }
+
+ // fill autocomplete field with benutzer data
+ Benutzergruppe._fillAutocomplete(
+ 'teilnehmerSelect',
+ 'teilnehmer_uid',
+ sourceCallback
+ );
+ }
+ },
+ errorCallback: function(jqXHR, textStatus, errorThrown) {
+ FHC_DialogLib.alertError(textStatus);
+ }
+ }
+ );
+ },
+ addBenutzer: function(uid, gruppe_kurzbz) {
+ FHC_AjaxClient.ajaxCallPost(
+ 'person/gruppenmanagement/addBenutzer',
+ {
+ uid: uid,
+ gruppe_kurzbz: gruppe_kurzbz
+ },
+ {
+ successCallback: function(data, textStatus, jqXHR) {
+ if (FHC_AjaxClient.isError(data))
+ {
+ FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
+ return;
+ }
+
+ if (FHC_AjaxClient.hasData(data))
+ {
+ // load Benutzer after add to show change
+ Benutzergruppe.getBenutzer(gruppe_kurzbz);
+ }
+ },
+ errorCallback: function(jqXHR, textStatus, errorThrown) {
+ FHC_DialogLib.alertError(textStatus);
+ }
+ }
+ );
+ },
+ removeBenutzer: function(uid, gruppe_kurzbz) {
+ FHC_AjaxClient.ajaxCallPost(
+ 'person/gruppenmanagement/removeBenutzer',
+ {
+ uid: uid,
+ gruppe_kurzbz: gruppe_kurzbz
+ },
+ {
+ successCallback: function(data, textStatus, jqXHR) {
+ if (FHC_AjaxClient.isError(data))
+ {
+ FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
+ return;
+ }
+
+ if (FHC_AjaxClient.hasData(data))
+ {
+ // load Benutzer after remove to show change
+ Benutzergruppe.getBenutzer(gruppe_kurzbz);
+ }
+ },
+ errorCallback: function(jqXHR, textStatus, errorThrown) {
+ FHC_DialogLib.alertError(textStatus);
+ }
+ }
+ );
+ },
+ _fillAutocomplete: function(autocompleteId, idFieldId, source) {
+ // jQuery ui autocomplete for benutzer
+ $("#"+autocompleteId).autocomplete(
+ {
+ // custom matcher
+ source: source,
+ autoFocus: true,
+ select: function(event, ui)
+ {
+ // when autocmplete entry selected, display label text in autocomplete, fill hidden value field
+ $("#"+autocompleteId).val(ui.item.label);
+ $("#"+idFieldId).val(ui.item.id);
+ return false;
+ }
+ }
+ );
+ },
+ _setTablesorter: function() {
+ Tablesort.addTablesorter(
+ // sort by first and third column asc, show filters beggining with 2 Benutzer, exclude fifth column from filter
+ "benutzer-table", [[0,0], [2,0]], ["filter", "zebra"], 2, {headers: {4: {filter: false}}}
+ )
+ }
+};
+
+/**
+ * When JQuery is up
+ */
+$(document).ready(function() {
+ // get the group name
+ let gruppe_kurzbz = $("#gruppe_kurzbz").val();
+
+ // load Benutzer for autocomplete selection
+ Benutzergruppe.getAllBenutzer();
+ // load Benutzer for table
+ Benutzergruppe.getBenutzer(gruppe_kurzbz);
+
+ // add click event to "add Benutzer" button
+ $("#teilnehmerHinzufuegen").click(function(){
+ let uid = $("#teilnehmer_uid").val();
+ Benutzergruppe.addBenutzer(uid, gruppe_kurzbz);
+ $("#teilnehmerSelect").val('');
+ }
+ );
+});
diff --git a/rdf/zgv.rdf.php b/rdf/zgv.rdf.php
index 89338c58b..a3ce1225d 100644
--- a/rdf/zgv.rdf.php
+++ b/rdf/zgv.rdf.php
@@ -53,6 +53,7 @@ if(isset($_GET['optional']) && $_GET['optional']=='true')
-- keine Auswahl --
-- keine Auswahl --
+
';
@@ -70,6 +71,7 @@ if($db->db_query($qry))
zgv_code; ?>]]>
zgv_bez; ?>]]>
zgv_kurzbz; ?>]]>
+
aktiv; ?>]]>
db_query($qry))
}
?>
-
\ No newline at end of file
+
diff --git a/rdf/zgvdoktor.rdf.php b/rdf/zgvdoktor.rdf.php
index dc0b38ff7..38dcec500 100644
--- a/rdf/zgvdoktor.rdf.php
+++ b/rdf/zgvdoktor.rdf.php
@@ -19,7 +19,7 @@
* Andreas Oesterreicher
and
* Rudolf Hangl .
*/
-// header für no cache
+// header f�r no cache
header("Cache-Control: no-cache");
header("Cache-Control: post-check=0, pre-check=0",false);
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
@@ -52,6 +52,7 @@ if(isset($_GET['optional']) && $_GET['optional']=='true')
-- keine Auswahl --
-- keine Auswahl --
+
';
@@ -69,6 +70,7 @@ if($db->db_query($qry))
zgvdoktor_code; ?>]]>
zgvdoktor_bez; ?>]]>
zgvdoktor_kurzbz; ?>]]>
+ aktiv; ?>]]>
db_query($qry))
}
?>
-
\ No newline at end of file
+
diff --git a/rdf/zgvmaster.rdf.php b/rdf/zgvmaster.rdf.php
index 5fc6c62ca..b84af2c71 100644
--- a/rdf/zgvmaster.rdf.php
+++ b/rdf/zgvmaster.rdf.php
@@ -52,6 +52,7 @@ if(isset($_GET['optional']) && $_GET['optional']=='true')
-- keine Auswahl --
-- keine Auswahl --
+
';
@@ -69,6 +70,7 @@ if($db->db_query($qry))
zgvmas_code; ?>]]>
zgvmas_bez; ?>]]>
zgvmas_kurzbz; ?>]]>
+ aktiv?>]]>
db_query($qry))
}
?>
-
\ No newline at end of file
+
diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php
index c7c49c2dd..e0168aa28 100644
--- a/system/dbupdate_3.3.php
+++ b/system/dbupdate_3.3.php
@@ -6243,6 +6243,72 @@ if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berecht
}
}
+// Creates table public.tbl_gruppe_manager if it doesn't exist and grants privileges
+if (!$result = @$db->db_query('SELECT 1 FROM public.tbl_gruppe_manager LIMIT 1'))
+{
+ $qry = 'CREATE TABLE public.tbl_gruppe_manager (
+ gruppe_manager_id integer,
+ gruppe_kurzbz varchar(32) NOT NULL,
+ uid varchar(32) NOT NULL,
+ insertamum timestamp DEFAULT NOW(),
+ insertvon varchar(32)
+ );
+
+ COMMENT ON TABLE public.tbl_gruppe_manager IS \'Table to save assignments groups to their managers.\';
+ COMMENT ON COLUMN public.tbl_gruppe_manager.gruppe_kurzbz IS \'Name of group\';
+ COMMENT ON COLUMN public.tbl_gruppe_manager.uid IS \'User id of group manager\';
+
+ CREATE SEQUENCE public.seq_gruppe_manager_gruppe_manager_id
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+ ALTER TABLE public.tbl_gruppe_manager ALTER COLUMN gruppe_manager_id SET DEFAULT nextval(\'public.seq_gruppe_manager_gruppe_manager_id\'::regclass);
+
+ GRANT SELECT, UPDATE ON SEQUENCE public.seq_gruppe_manager_gruppe_manager_id TO vilesci;
+ GRANT SELECT, UPDATE ON SEQUENCE public.seq_gruppe_manager_gruppe_manager_id TO fhcomplete;
+
+ ALTER TABLE public.tbl_gruppe_manager ADD CONSTRAINT pk_gruppe_manager PRIMARY KEY (gruppe_manager_id);
+
+ ALTER TABLE public.tbl_gruppe_manager ADD CONSTRAINT fk_gruppe_manager_gruppe_kurzbz FOREIGN KEY (gruppe_kurzbz) REFERENCES public.tbl_gruppe(gruppe_kurzbz) ON UPDATE CASCADE ON DELETE CASCADE;
+ ALTER TABLE public.tbl_gruppe_manager ADD CONSTRAINT fk_gruppe_manager_uid FOREIGN KEY (uid) REFERENCES public.tbl_benutzer(uid) ON UPDATE CASCADE ON DELETE RESTRICT;
+
+ ALTER TABLE public.tbl_gruppe_manager ADD CONSTRAINT uk_gruppe_manager_gruppe_kurzbz_uid UNIQUE (gruppe_kurzbz, uid);';
+
+ if (!$db->db_query($qry))
+ echo 'public.tbl_gruppe_manager: '.$db->db_last_error().'
';
+ else
+ echo '
public.tbl_gruppe_manager table created';
+
+ $qry = 'GRANT SELECT ON TABLE public.tbl_gruppe_manager TO web;';
+ if (!$db->db_query($qry))
+ echo 'public.tbl_gruppe_manager: '.$db->db_last_error().'
';
+ else
+ echo '
Granted privileges to web on public.tbl_gruppe_manager';
+
+ $qry = 'GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE public.tbl_gruppe_manager TO vilesci;';
+ if (!$db->db_query($qry))
+ echo 'public.tbl_gruppe_manager: '.$db->db_last_error().'
';
+ else
+ echo '
Granted privileges to vilesci on public.tbl_gruppe_manager';
+}
+
+// Add permission for managing user groups
+if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berechtigung_kurzbz = 'lehre/gruppenmanager';"))
+{
+ if($db->db_num_rows($result) == 0)
+ {
+ $qry = "INSERT INTO system.tbl_berechtigung(berechtigung_kurzbz, beschreibung) VALUES('lehre/gruppenmanager', 'Manager einer Gruppe werden und die Gruppe verwalten');";
+
+ if(!$db->db_query($qry))
+ echo 'system.tbl_berechtigung '.$db->db_last_error().'
';
+ else
+ echo ' system.tbl_berechtigung: Added permission for lehre/gruppenmanager
';
+ }
+}
+
// NOTE(chris): Add "Template" to "Lehrtyp"
if($result = @$db->db_query("SELECT 1 FROM lehre.tbl_lehrtyp WHERE bezeichnung = 'Template';"))
{
@@ -6327,18 +6393,18 @@ if(!@$db->db_query("SELECT public.get_ects_summe_schulisch('', 0, 0)"))
DECLARE rec_quereinstiegs_studiensemester RECORD;
DECLARE sum_quereinstiegs_ects numeric(4, 1) := 0;
DECLARE sum_schulische_ects numeric(4, 1) := 0;
-
-
+
+
BEGIN
-
+
-- IF STUDENT IS QUEREINSTEIGER, GET ECTS SUMME OF ANGERECHNETE SEMESTER
- -- Get Einstiegssemester
- SELECT INTO var_einstiegsausbildungssemester , var_einstiegsstudiensemester_kurzbz, var_einstiegsorgform_kurzbz ausbildungssemester, studiensemester_kurzbz, orgform_kurzbz from public.tbl_prestudentstatus
- WHERE prestudent_id = var_prestudent_id
+ -- Get Einstiegssemester
+ SELECT INTO var_einstiegsausbildungssemester , var_einstiegsstudiensemester_kurzbz, var_einstiegsorgform_kurzbz ausbildungssemester, studiensemester_kurzbz, orgform_kurzbz from public.tbl_prestudentstatus
+ WHERE prestudent_id = var_prestudent_id
AND status_kurzbz = \'Student\'
ORDER BY datum, insertamum, ext_id
LIMIT 1;
-
+
-- If Einstiegssemester > 1 (= Quereinsteiger)
IF (var_einstiegsausbildungssemester > 1) THEN
-- ...get all Quereinstiegssemester
@@ -6357,66 +6423,66 @@ if(!@$db->db_query("SELECT public.get_ects_summe_schulisch('', 0, 0)"))
JOIN lehre.tbl_lehrveranstaltung USING (lehrveranstaltung_id)
WHERE
tbl_studienplan.studienplan_id = (
- SELECT
+ SELECT
studienplan_id
- FROM
- lehre.tbl_studienordnung
- JOIN lehre.tbl_studienplan USING (studienordnung_id)
+ FROM
+ lehre.tbl_studienordnung
+ JOIN lehre.tbl_studienplan USING (studienordnung_id)
JOIN lehre.tbl_studienplan_semester USING (studienplan_id)
- WHERE tbl_studienordnung.studiengang_kz = var_studiengang_kz
+ WHERE tbl_studienordnung.studiengang_kz = var_studiengang_kz
AND tbl_studienplan_semester.semester = var_einstiegsausbildungssemester - 1
AND tbl_studienplan_semester.studiensemester_kurzbz = rec_quereinstiegs_studiensemester.studiensemester_kurzbz
- AND tbl_studienplan.orgform_kurzbz = var_einstiegsorgform_kurzbz
-
+ AND tbl_studienplan.orgform_kurzbz = var_einstiegsorgform_kurzbz
+
LIMIT 1
)
AND tbl_studienplan_lehrveranstaltung.semester = var_einstiegsausbildungssemester
AND studienplan_lehrveranstaltung_id_parent IS NULL -- auf Modulebene
AND tbl_studienplan_lehrveranstaltung.export = TRUE);
-
+
var_einstiegsausbildungssemester = var_einstiegsausbildungssemester - 1;
END LOOP;
END IF;
-
-
+
+
-- GET ECTS SUMME OF ALLE BISHER ANGERECHNETEN LEHRVERANSTALTUNGEN. ANRECHNUNGSGRUND: SCHULISCH.
SELECT INTO sum_schulische_ects COALESCE(SUM(ects), 0) FROM (
- SELECT
+ SELECT
lehrveranstaltung_id, studiensemester_kurzbz, ects
- FROM
- lehre.tbl_zeugnisnote
- LEFT JOIN lehre.tbl_anrechnung USING(lehrveranstaltung_id, studiensemester_kurzbz)
+ FROM
+ lehre.tbl_zeugnisnote
+ LEFT JOIN lehre.tbl_anrechnung USING(lehrveranstaltung_id, studiensemester_kurzbz)
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
JOIN public.tbl_student USING(student_uid)
- WHERE
+ WHERE
tbl_zeugnisnote.note = 6
AND student_uid = var_student_uid
AND lehre.tbl_anrechnung.prestudent_id IN (tbl_student.prestudent_id, NULL)
AND begruendung_id != 5 -- universitäre ECTS nicht mitrechnen
- AND begruendung_id != 4 -- berufliche ECTS nicht mitrechnen
- AND (anrechnung_id IS NULL OR (anrechnung_id IS NOT NULL AND genehmigt_von IS NOT NULL )) -- Anrechnungen aus Zeit vor Anrechnungstool ODER digitale Anrechnungen mit Noteneintrag UND Genehmigung (wichtig, um zurückgenommene Genehmigungen, die in der Notentabelle noch als angerechnet eingetragen sind, rauszufiltern)
-
- UNION
-
- SELECT
+ AND begruendung_id != 4 -- berufliche ECTS nicht mitrechnen
+ AND (anrechnung_id IS NULL OR (anrechnung_id IS NOT NULL AND genehmigt_von IS NOT NULL )) -- Anrechnungen aus Zeit vor Anrechnungstool ODER digitale Anrechnungen mit Noteneintrag UND Genehmigung (wichtig, um zurückgenommene Genehmigungen, die in der Notentabelle noch als angerechnet eingetragen sind, rauszufiltern)
+
+ UNION
+
+ SELECT
lehrveranstaltung_id, studiensemester_kurzbz, ects
- FROM
- lehre.tbl_anrechnung
+ FROM
+ lehre.tbl_anrechnung
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
JOIN public.tbl_student USING(prestudent_id)
- WHERE
+ WHERE
genehmigt_von IS NOT NULL
- AND student_uid = var_student_uid
+ AND student_uid = var_student_uid
AND begruendung_id != 5 -- universitäre ECTS nicht mitrechnen
- AND begruendung_id != 4 -- berufliche ECTS nicht mitrechnen
+ AND begruendung_id != 4 -- berufliche ECTS nicht mitrechnen
) lvsangerechnet;
-
+
-- BUILD ECTS SUMME OF QUEREINSTIEGSSEMESTER- + ANGERECHNETEN LVs-ECTS
-- Summe aller bisher schulisch begründet angerechneten LVs + der Quereinstiegssemester
sum_schulische_ects = sum_schulische_ects + sum_quereinstiegs_ects;
-
+
RETURN sum_schulische_ects ;
-
+
END;
$_$;
@@ -6436,40 +6502,40 @@ if(!@$db->db_query("SELECT public.get_ects_summe_beruflich('')"))
AS $_$
DECLARE var_student_uid ALIAS FOR $1;
DECLARE sum_berufliche_ects numeric(4, 1) := 0;
-
+
BEGIN
-
+
SELECT INTO sum_berufliche_ects COALESCE(SUM(ects), 0) FROM (
- SELECT
+ SELECT
lehrveranstaltung_id, studiensemester_kurzbz, ects
- FROM
- lehre.tbl_zeugnisnote
- LEFT JOIN lehre.tbl_anrechnung USING(lehrveranstaltung_id, studiensemester_kurzbz)
+ FROM
+ lehre.tbl_zeugnisnote
+ LEFT JOIN lehre.tbl_anrechnung USING(lehrveranstaltung_id, studiensemester_kurzbz)
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
JOIN public.tbl_student USING(student_uid)
- WHERE
+ WHERE
tbl_zeugnisnote.note = 6
AND student_uid = var_student_uid
AND lehre.tbl_anrechnung.prestudent_id IN (tbl_student.prestudent_id, NULL)
AND begruendung_id = 4 -- beruflich
AND (anrechnung_id IS NULL OR (anrechnung_id IS NOT NULL AND genehmigt_von IS NOT NULL )) -- Anrechnungen aus Zeit vor Anrechnungstool ODER digitale Anrechnungen mit Noteneintrag UND Genehmigung (wichtig, um zurückgenommene Genehmigungen, die in der Notentabelle noch als angerechnet eingetragen sind, rauszufiltern)
-
- UNION
-
- SELECT
+
+ UNION
+
+ SELECT
lehrveranstaltung_id, studiensemester_kurzbz, ects
- FROM
- lehre.tbl_anrechnung
+ FROM
+ lehre.tbl_anrechnung
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
JOIN public.tbl_student USING(prestudent_id)
- WHERE
+ WHERE
genehmigt_von is not null
- AND student_uid = var_student_uid
+ AND student_uid = var_student_uid
AND begruendung_id = 4 -- beruflich
) lvsangerechnet;
-
+
RETURN sum_berufliche_ects;
-
+
END;
$_$;
@@ -6509,6 +6575,40 @@ if($result = @$db->db_query("SELECT 1 FROM public.tbl_dokument WHERE dokument_ku
}
}
+//Spalte aktiv zu bis.tbl_zgv hinzufügen
+if (!$result = @$db->db_query("SELECT aktiv FROM bis.tbl_zgv LIMIT 1"))
+{
+ $qry = "ALTER TABLE bis.tbl_zgv ADD COLUMN aktiv BOOLEAN NOT NULL DEFAULT true;";
+
+ if(!$db->db_query($qry))
+ echo 'bis.tbl_zgv '.$db->db_last_error().'
';
+ else
+ echo '
Spalte aktiv zu bis.tbl_zgv hinzugefügt';
+}
+
+//Spalte aktiv zu bis.tbl_zgvmaster hinzufügen
+if (!$result = @$db->db_query("SELECT aktiv FROM bis.tbl_zgvmaster LIMIT 1"))
+{
+ $qry = "ALTER TABLE bis.tbl_zgvmaster ADD COLUMN aktiv BOOLEAN NOT NULL DEFAULT true;";
+
+ if(!$db->db_query($qry))
+ echo 'bis.tbl_zgvmaster '.$db->db_last_error().'
';
+ else
+ echo '
Spalte aktiv zu bis.tbl_zgvmaster hinzugefügt';
+}
+
+//Spalte aktiv zu bis.tbl_zgvdoktor hinzufügen
+if (!$result = @$db->db_query("SELECT aktiv FROM bis.tbl_zgvdoktor LIMIT 1"))
+{
+ $qry = "ALTER TABLE bis.tbl_zgvdoktor ADD COLUMN aktiv BOOLEAN NOT NULL DEFAULT true;";
+
+ if(!$db->db_query($qry))
+ echo 'bis.tbl_zgvdoktor '.$db->db_last_error().'
';
+ else
+ echo '
Spalte aktiv zu bis.tbl_zgvdoktor hinzugefügt';
+}
+
+
// *** Pruefung und hinzufuegen der neuen Attribute und Tabellen
echo 'Pruefe Tabellen und Attribute!
';
@@ -6544,9 +6644,9 @@ $tabellen=array(
"bis.tbl_oehbeitrag" => array("oehbeitrag_id","studierendenbeitrag","versicherung","von_studiensemester_kurzbz","bis_studiensemester_kurzbz","insertamum","insertvon","updateamum","updatevon"),
"bis.tbl_orgform" => array("orgform_kurzbz","code","bezeichnung","rolle","bisorgform_kurzbz","bezeichnung_mehrsprachig"),
"bis.tbl_verwendung" => array("verwendung_code","verwendungbez"),
- "bis.tbl_zgv" => array("zgv_code","zgv_bez","zgv_kurzbz","bezeichnung"),
- "bis.tbl_zgvmaster" => array("zgvmas_code","zgvmas_bez","zgvmas_kurzbz","bezeichnung"),
- "bis.tbl_zgvdoktor" => array("zgvdoktor_code", "zgvdoktor_bez", "zgvdoktor_kurzbz","bezeichnung"),
+ "bis.tbl_zgv" => array("zgv_code","zgv_bez","zgv_kurzbz","bezeichnung","aktiv"),
+ "bis.tbl_zgvmaster" => array("zgvmas_code","zgvmas_bez","zgvmas_kurzbz","bezeichnung","aktiv"),
+ "bis.tbl_zgvdoktor" => array("zgvdoktor_code", "zgvdoktor_bez", "zgvdoktor_kurzbz","bezeichnung","aktiv"),
"bis.tbl_zweck" => array("zweck_code","kurzbz","bezeichnung","incoming","outgoing"),
"bis.tbl_zgvgruppe" => array("gruppe_kurzbz","bezeichnung"),
"bis.tbl_zgvgruppe_zuordnung" => array("zgvgruppe_id" ,"studiengang_kz","zgv_code","zgvmas_code","gruppe_kurzbz"),
diff --git a/system/filtersupdate.php b/system/filtersupdate.php
index abe8ac1a5..02c30b648 100644
--- a/system/filtersupdate.php
+++ b/system/filtersupdate.php
@@ -1112,6 +1112,27 @@ $filters = array(
}
',
'oe_kurzbz' => null
+ ),
+ array(
+ 'app' => 'core',
+ 'dataset_name' => 'gruppenmanagement',
+ 'filter_kurzbz' => 'gruppenmanagement',
+ 'description' => '{Meine Gruppen}',
+ 'sort' => 1,
+ 'default_filter' => true,
+ 'filter' => '
+ {
+ "name": "gruppenmanagement",
+ "columns": [
+ {"name": "gruppe_kurzbz"},
+ {"name": "gruppe_bezeichnung"},
+ {"name": "gruppe_beschreibung"},
+ {"name": "studiengang_kurzbz"}
+ ],
+ "filters": []
+ }
+ ',
+ 'oe_kurzbz' => null,
)
);
diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php
index 2f62e4138..9e0a87b6e 100644
--- a/system/phrasesupdate.php
+++ b/system/phrasesupdate.php
@@ -16238,7 +16238,7 @@ array(
'sprache' => 'German',
'text' => 'Ab dem Studienjahr 2022/23 ist der Erwerb von internationalen und interkulturellen Kompetenzen Teil des Curriculums.
Auf der Grundlage der vorliegenden Maßnahmen absolvieren Sie im Laufe ihres Studiums Internationalisierungsaktivitäten, die mit unterschiedlichen ECTS-Punkten hinterlegt sind.
- In Summe müssen 5 ECTS erworben werden, die im 6. Semester wirksam werden.
+ In Summe müssen 5 ECTS erworben werden, die im 6. Semester wirksam werden.
Das Modul „International skills“ wird mit der Beurteilung „Mit Erfolg teilgenommen“ abgeschlossen.
Bitte wählen Sie die für Sie in Frage kommenden Maßnahmen aus und planen Sie das entsprechende Semester.
Sobald die 5 ECTS erreicht wurden, überprüft der Studiengang die von Ihnen hochgeladenen Dokumente.',
@@ -16758,6 +16758,186 @@ array(
)
)
),
+ array(
+ 'app' => 'core',
+ 'category' => 'gruppenmanagement',
+ 'phrase' => 'benutzerSchonZugewiesen',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Benutzer ist bereits der Gruppe zugewiesen",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "User is already assigned to the group",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'gruppenmanagement',
+ 'phrase' => 'gruppenmanagement',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Gruppenmanagement",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "Group management",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'gruppenmanagement',
+ 'phrase' => 'kurzbezeichnung',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Kurzbezeichnung",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "Short description",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'gruppenmanagement',
+ 'phrase' => 'bezeichnung',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Bezeichnung",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "Name",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'gruppenmanagement',
+ 'phrase' => 'beschreibung',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Beschreibung",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "Description",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'gruppenmanagement',
+ 'phrase' => 'zuweisenloeschen',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Zuweisen/Entfernen",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "Assign/Remove",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'gruppenmanagement',
+ 'phrase' => 'benutzergruppe',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Benutzergruppe",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "User group",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'gruppenmanagement',
+ 'phrase' => 'benutzerHinzufuegen',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Benutzer hinzufügen",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "Add user",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'gruppenmanagement',
+ 'phrase' => 'aktiv',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "aktiv",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "active",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ )
);
diff --git a/vilesci/lehre/einheit_menu.php b/vilesci/lehre/einheit_menu.php
index bfb44e8d9..a6e09fe23 100644
--- a/vilesci/lehre/einheit_menu.php
+++ b/vilesci/lehre/einheit_menu.php
@@ -24,6 +24,7 @@ require_once('../../config/vilesci.config.inc.php');
require_once('../../include/functions.inc.php');
require_once('../../include/studiengang.class.php');
require_once('../../include/gruppe.class.php');
+require_once('../../include/gruppemanager.class.php');
require_once('../../include/person.class.php');
require_once('../../include/benutzer.class.php');
require_once('../../include/student.class.php');
@@ -82,17 +83,59 @@ if(!$rechte->isBerechtigt('lehre/gruppe', null, 's'))
Gruppe-Verwaltung
+
-
+ %s - %s %s "
+ ."
"
+ .""
+ ."";
+ ?>
+
@@ -158,8 +301,10 @@ else if (isset($_GET['type']) && $_GET['type']=='delete')
if($rechte->isBerechtigt('lehre/gruppe', $oe_studiengang, 'suid'))
{
+ $grp_kurzbz = $_GET['einheit_id'];
+
$e=new gruppe();
- if(!$e->delete($_GET['einheit_id']))
+ if(!$e->delete($grp_kurzbz))
echo $e->errormsg;
}
else
@@ -214,6 +359,7 @@ function printDropDown()
echo '';
echo '';
}
+
function doSave()
{
global $rechte;
@@ -241,8 +387,10 @@ function doSave()
$e->new = false;
}
+ $user = get_uid();
+
$e->updateamum = date('Y-m-d H:i:s');
- $e->updatevon = get_uid();
+ $e->updatevon = $user;
$e->bezeichnung = $_POST['bezeichnung'];
$e->beschreibung = $_POST['beschreibung'];
$e->studiengang_kz = $_POST['studiengang_kz'];
@@ -258,13 +406,66 @@ function doSave()
$e->sort = $_POST['sort'];
$e->content_visible = isset($_POST['content_visible']);
+
+ // gruppemanager immer array, leer wenn keine angegeben
+ $gruppemanager_uids = isset($_POST['gruppemanager']) && is_array($_POST['gruppemanager']) ? $_POST['gruppemanager'] : array();
+
+ // Prüfung: generierte Gruppen haben keine Manager
+ if (count($gruppemanager_uids) > 0 && $e->generiert === true)
+ {
+ echo "Generierte Gruppen dürfen keine Administratoren haben!";
+ return;
+ }
+
if(!$e->save())
- echo $e->errormsg;
+ echo "".$e->errormsg."";
+ else // wenn Gruppe erfolgreich gespeichert, Gruppenmanager speichern
+ {
+ // Gruppe gemäss Konvention in Großbuchstaben
+ $gruppe_kurzbz = mb_strtoupper($_POST['kurzbz']);
+
+ // bestehende Gruppenmanager laden
+ $bestehende_gruppemanager_uids = array();
+ $gruppemanager_hlp = new gruppemanager();
+ if ($gruppemanager_hlp->load_uids($gruppe_kurzbz))
+ {
+ foreach ($gruppemanager_hlp->uids as $uid_obj)
+ {
+ $bestehende_gruppemanager_uids[] = $uid_obj->uid;
+ }
+ }
+
+ foreach ($gruppemanager_uids as $gruppemanager_uid)
+ {
+ // wenn Gruppenmanager noch nicht zugewiesen
+ if (!in_array($gruppemanager_uid, $bestehende_gruppemanager_uids))
+ {
+ // Gruppemanager speichern
+ $gruppemgr = new gruppemanager();
+ $gruppemgr->uid = $gruppemanager_uid;
+ $gruppemgr->gruppe_kurzbz = $gruppe_kurzbz;
+ $gruppemgr->insertamum = date('Y-m-d H:i:s');
+ $gruppemgr->insertvon = $user;
+
+ if(!$gruppemgr->save())
+ echo $gruppemgr->errormsg;
+ }
+ }
+
+ // zu löschende Gruppemanager ermitteln
+ $geloeschte_gruppemanager_uids = array_diff($bestehende_gruppemanager_uids, $gruppemanager_uids);
+
+ // Nicht mehr vorhandene Gruppenmanager löschen
+ $gruppemanager_hlp = new gruppemanager();
+ foreach ($geloeschte_gruppemanager_uids as $geloeschte_uid)
+ {
+ if (!$gruppemanager_hlp->delete($geloeschte_uid, $gruppe_kurzbz))
+ echo $gruppemanager_hlp->errormsg;
+ }
+ }
}
}
-
-
function doEdit($kurzbz,$new=false)
{
global $db, $rechte, $studiengang, $searchItems;
@@ -282,6 +483,9 @@ function doEdit($kurzbz,$new=false)