diff --git a/content/fasDBDML.php b/content/fasDBDML.php
index 93c3dea67..ca8cf5aef 100644
--- a/content/fasDBDML.php
+++ b/content/fasDBDML.php
@@ -40,6 +40,7 @@ require_once('../include/variable.class.php');
require_once('../include/benutzerfunktion.class.php');
require_once('../include/studiensemester.class.php');
require_once('../include/fotostatus.class.php');
+require_once('../include/anwesenheit.class.php');
$user = get_uid();
@@ -653,6 +654,41 @@ if(!$error)
$errormsg = 'Fehlerhafte Parameteruebergabe';
}
}
+ elseif(isset($_POST['type']) && $_POST['type']=='anwesenheittoggle')
+ {
+ if(!$rechte->isBerechtigt('student/anwesenheit'))
+ {
+ $return = false;
+ $errormsg = 'Sie haben keine Berechtigung fuer diese Aktion';
+ $data = '';
+ $error = true;
+ }
+ else
+ {
+ if(isset($_POST['student_uid']) && isset($_POST['lehreinheit_id']) && isset($_POST['datum']))
+ {
+ $student_uid = $_POST['student_uid'];
+ $lehreinheit_id = $_POST['lehreinheit_id'];
+ $datum = $_POST['datum'];
+ $anwesenheit = new anwesenheit();
+ if($anwesenheit->AnwesenheitToggle($lehreinheit_id, $datum, $student_uid))
+ {
+ $return = true;
+ $errormsg = "";
+ }
+ else
+ {
+ $return = false;
+ $errormsg = $anwesenheit->errormsg;
+ }
+ }
+ else
+ {
+ $return = false;
+ $errormsg = 'Fehlerhafte Parameteruebergabe';
+ }
+ }
+ }
else
{
$return = false;
diff --git a/content/termine.js.php b/content/termine.js.php
index a521e38d4..3750853f9 100644
--- a/content/termine.js.php
+++ b/content/termine.js.php
@@ -118,3 +118,52 @@ function TermineExport()
var url = 'statistik/termine.xls.php?lehreinheit_id='+TermineLehreinheitID+'&lehrveranstaltung_id='+TermineLehrveranstaltungID+'&mitarbeiter_uid='+TermineMitarbeiterUID+'&student_uid='+TermineStudentUID+'&db_stpl_table='+TermineStundenplanTable;
window.open(url);
}
+
+function TermineToggleAnwesenheit()
+{
+ if(TermineStudentUID=='')
+ {
+ alert('Anwesenheit kann nur in der Studierendenansicht geaendert werden');
+ return;
+ }
+
+ if(TermineStundenplanTable!='stundenplan')
+ {
+ alert('Bitte wechseln Sie auf die Stundenplan Tabelle. Anhand der StundenplanDEV duerfen keine Anwesenheiten geaendert werden.');
+ return;
+ }
+ netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+ var tree = document.getElementById('termine-tree');
+
+ if (tree.currentIndex==-1) return;
+
+ //Ausgewaehlte Nr holen
+ var datum = getTreeCellText(tree, 'termine-treecol-datum_iso', tree.currentIndex);
+ var lehreinheit_id = getTreeCellText(tree, 'termine-treecol-lehreinheit_id', tree.currentIndex);
+
+ var url = 'content/fasDBDML.php';
+ var req = new phpRequest(url,'','');
+
+ req.add('type', 'anwesenheittoggle');
+
+ req.add('datum', datum);
+ req.add('lehreinheit_id', lehreinheit_id);
+ req.add('student_uid', TermineStudentUID);
+
+ var response = req.executePOST();
+
+ var val = new ParseReturnValue(response)
+
+ if (!val.dbdml_return)
+ {
+ if(val.dbdml_errormsg=='')
+ alert(response)
+ else
+ alert(val.dbdml_errormsg)
+ }
+ else
+ {
+ TermineLoadTree();
+ SetStatusBarText('Daten wurden gespeichert');
+ }
+}
diff --git a/content/termine.xul.php b/content/termine.xul.php
index 1e51ddaad..528c030e6 100644
--- a/content/termine.xul.php
+++ b/content/termine.xul.php
@@ -47,6 +47,11 @@ $student_uid = filter_input(INPUT_GET,'student_uid');
+
+
+
@@ -57,6 +62,7 @@ $student_uid = filter_input(INPUT_GET,'student_uid');
+
+
+
@@ -121,6 +132,7 @@ $student_uid = filter_input(INPUT_GET,'student_uid');
+
diff --git a/include/anwesenheit.class.php b/include/anwesenheit.class.php
index 4bdfe4b2f..4647a67bd 100644
--- a/include/anwesenheit.class.php
+++ b/include/anwesenheit.class.php
@@ -435,6 +435,38 @@ class anwesenheit extends basis_db
}
}
+ /**
+ * Prueft ob Anwesenheiten erfasst wurden
+ * @param $lehreinheit_id ID der Lehreinheit
+ * @param $datum Datum
+ * @param $uid UID des Studierenden
+ * @return boolean true wenn vorhanden, sonst false
+ */
+ public function AnwesenheitEntryExists($lehreinheit_id, $datum, $uid=null)
+ {
+ $qry = "SELECT
+ 1
+ FROM
+ campus.tbl_anwesenheit
+ WHERE
+ lehreinheit_id=".$this->db_add_param($lehreinheit_id)."
+ AND datum=".$this->db_add_param($datum)."
+ AND uid=".$this->db_add_param($uid);
+
+ if($result = $this->db_query($qry))
+ {
+ if($this->db_num_rows($result)>0)
+ return true;
+ else
+ return false;
+ }
+ else
+ {
+ $this->errormsg = 'Fehler beim Laden der Daten';
+ return false;
+ }
+ }
+
/**
* Laedt die Anwesenheiten in Prozent von Studierenden bei Lehrveranstaltungen
* Wenn die StudentUID uebergeben wird, werden alle Lehrveranstaltungen zu denen der Studierenden zugeteilt ist inkl Prozent der Anwesenheit
@@ -524,4 +556,84 @@ class anwesenheit extends basis_db
return false;
}
}
+
+ /**
+ * Aendert die bestehende Anwesenheit
+ * @param $lehreinheit_id ID der Lehreinheit
+ * @param $datum Datum
+ * @param $uid UID des Studierenden
+ * @return boolean true ok, sonst false
+ */
+ public function AnwesenheitToggle($lehreinheit_id, $datum, $uid)
+ {
+ if($this->AnwesenheitEntryExists($lehreinheit_id, $datum, $uid))
+ {
+ $qry = "UPDATE
+ campus.tbl_anwesenheit
+ SET anwesend= NOT anwesend
+ WHERE
+ lehreinheit_id=".$this->db_add_param($lehreinheit_id)."
+ AND datum=".$this->db_add_param($datum)."
+ AND uid=".$this->db_add_param($uid);
+
+ if($result = $this->db_query($qry))
+ {
+ if($this->db_affected_rows($result)>0)
+ return true;
+ else
+ {
+ $this->errormsg='Anwesenheitsliste wurde noch nicht erfasst';
+ return false;
+ }
+ }
+ else
+ {
+ $this->errormsg = 'Fehler beim Laden der Daten';
+ return false;
+ }
+ }
+ else
+ {
+ // Anwesenheitsliste wurde noch nicht erfasst. Eintrag neu anlegen
+
+ // Einheiten ermitteln
+ $qry = "SELECT
+ distinct stunde
+ FROM
+ lehre.tbl_stundenplan
+ WHERE
+ lehreinheit_id=".$this->db_add_param($lehreinheit_id)."
+ AND datum=".$this->db_add_param($datum);
+
+ if($result = $this->db_query($qry))
+ {
+ if($anzahl = $this->db_num_rows($result))
+ {
+ $einheiten = $anzahl;
+ }
+ }
+ if($einheiten>0)
+ {
+ $this->lehreinheit_id=$lehreinheit_id;
+ $this->datum = $datum;
+ $this->uid = $uid;
+ $this->anwesend=true;
+ $this->new=true;
+ $this->einheiten=$einheiten;
+ if($this->save())
+ return true;
+ else
+ {
+ $this->errormsg = 'Fehler beim Speichern der Daten';
+ return true;
+ }
+ }
+ else
+ {
+ $this->errormsg = 'Anzahl der Einheiten fuer diesen Tag konnte nicht ermittelt werden';
+ return false;
+ }
+ }
+ }
+
}
diff --git a/vilesci/personen/anwesenheit.php b/vilesci/personen/anwesenheit.php
index 7bb79e194..e4563dbb8 100644
--- a/vilesci/personen/anwesenheit.php
+++ b/vilesci/personen/anwesenheit.php
@@ -204,7 +204,7 @@ if($work=='save')
// Wenn der Eintrag bereits exisitiert aber kein Update durchgefuehrt wird, dann wird der Eintrag uebersprungen
// da der Eintrag sonst doppelt vorhanden ist.
// zB bei Reload der Seite oder schliessen und erneuten oeffnen des Browsers und Absenden der POST Daten
- if($anwesenheit->AnwesenheitExists($_POST['lehreinheit_id'], $_POST['datum'], $user))
+ if($anwesenheit->AnwesenheitEntryExists($_POST['lehreinheit_id'], $_POST['datum'], $user))
{
echo $anwesenheit->convert_html_chars($user)." wird übersprungen da der Eintrag bereits erfasst wurde
";
continue;