diff --git a/cis/private/profile/anwesenheit.php b/cis/private/profile/anwesenheit.php
index 21bdd676c..69f359cdf 100644
--- a/cis/private/profile/anwesenheit.php
+++ b/cis/private/profile/anwesenheit.php
@@ -72,7 +72,7 @@ if(!$semester || !array_key_exists($semester, $alle_semester))
$semester = key($alle_semester);
}
-$student->get_lv($uid, $semester);
+//$student->get_lv($uid, $semester);
?>
@@ -100,25 +100,24 @@ $student->get_lv($uid, $semester);
';
- if($student->result)
+ $anwesenheit = new anwesenheit();
+ $anwesenheit->loadAnwesenheitStudiensemester($semester, $uid);
+ if($anwesenheit->result)
{
- foreach($student->result as $lv)
+ foreach($anwesenheit->result as $aw)
{
-
- $stunden_gesamt = $stundenplan->getStunden($lv->lehreinheit_id);
-
- if(!$stunden_gesamt)
+ if(!$aw->gesamtstunden)
continue;
- $fehlstunden = $anwesenheit->getAnwesenheit($uid, $lv->lehreinheit_id);
- $le_erledigt = $fehlstunden + $anwesenheit->getAnwesenheit($uid, $lv->lehreinheit_id, true);
- $anwesenheit_relativ = ($stunden_gesamt - $fehlstunden) / $stunden_gesamt * 100;
+ $fehlstunden = $aw->nichtanwesend;
+ $le_erledigt = $aw->erfassteanwesenheit;
+ $anwesenheit_relativ = $aw->prozent;
echo '
- '.$db->convert_html_chars($lv->bezeichnung).' ('.$lv->lehrform_kurzbz.')
+ '.$db->convert_html_chars($aw->bezeichnung).'
@@ -126,7 +125,7 @@ $student->get_lv($uid, $semester);
'.round($anwesenheit_relativ, 1).'%
- '.$p->t('anwesenheitsliste/leAbgeschlossen').' ['.$le_erledigt.'/'.$stunden_gesamt.']';
+ '.$p->t('anwesenheitsliste/leAbgeschlossen').' ['.$le_erledigt.'/'.$aw->gesamtstunden.']';
if($fehlstunden)
{
@@ -134,8 +133,9 @@ $student->get_lv($uid, $semester);
>>
| '.$p->t('global/datum').' | '.$p->t('anwesenheitsliste/fehlstunden').' |
';
- $abwesend_termine = $anwesenheit->getAbwesendTermine($uid, $lv->lehreinheit_id);
- foreach($abwesend_termine as $termin)
+ $anwesenheit_termine = new anwesenheit();
+ $anwesenheit_termine->getAnwesenheitLehrveranstaltung($uid, $aw->lehrveranstaltung_id, $semester, false);
+ foreach($anwesenheit_termine->result as $termin)
{
echo '
| '.$datum_obj->formatDatum($termin->datum,'d.m.Y').' |
diff --git a/cis/private/profile/anwesenheit_lektor.php b/cis/private/profile/anwesenheit_lektor.php
index 42caf2545..72e884a8c 100644
--- a/cis/private/profile/anwesenheit_lektor.php
+++ b/cis/private/profile/anwesenheit_lektor.php
@@ -173,7 +173,7 @@ if($lehreinheit_id)
| '.$p->t('global/datum').' | '.$p->t('anwesenheitsliste/fehlstunden').' |
';
- $abwesend_termine = $anwesenheit->getAbwesendTermine($student->uid, $le->lehreinheit_id);
+ $abwesend_termine = $anwesenheit->getAbwesendTermine($student->uid, $lehreinheit_id);
foreach($abwesend_termine as $termin)
{
diff --git a/content/anwesenheit.js.php b/content/anwesenheit.js.php
new file mode 100644
index 000000000..1ae9d62d7
--- /dev/null
+++ b/content/anwesenheit.js.php
@@ -0,0 +1,56 @@
+
+ */
+require_once('../config/vilesci.config.inc.php');
+?>
+// ********** FUNKTIONEN ********** //
+var anwesenheitStudentUID='';
+
+// ****
+// * Laedt die Trees
+// ****
+function loadanwesenheit(student_uid,lehrveranstaltung_id)
+{
+ netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+
+ anwesenheitStudentUID=student_uid;
+
+ //anwesenheit laden
+ url = "rdf/anwesenheit.rdf.php?ts="+gettimestamp();
+
+ if(student_uid!='')
+ url=url+"&student_uid="+student_uid;
+ if(lehrveranstaltung_id!='')
+ url=url+"&lehrveranstaltung_id="+lehrveranstaltung_id;
+
+ var treeanwesenheit=document.getElementById('anwesenheit-tree');
+
+ //Alte DS entfernen
+ var oldDatasources = treeanwesenheit.database.GetDataSources();
+ while(oldDatasources.hasMoreElements())
+ {
+ treeanwesenheit.database.RemoveDataSource(oldDatasources.getNext());
+ }
+
+ var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);
+ var TerminTreeDatasource = rdfService.GetDataSource(url);
+ TerminTreeDatasource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource);
+ treeanwesenheit.database.AddDataSource(TerminTreeDatasource);
+
+}
diff --git a/content/anwesenheit.xul.php b/content/anwesenheit.xul.php
new file mode 100644
index 000000000..7fc6f177e
--- /dev/null
+++ b/content/anwesenheit.xul.php
@@ -0,0 +1,107 @@
+
+ */
+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");
+header("Pragma: no-cache");
+header("Content-type: application/vnd.mozilla.xul+xml");
+
+require_once('../config/vilesci.config.inc.php');
+
+echo ''."\n";
+
+echo '';
+echo '';
+
+$student_uid = filter_input(INPUT_GET,'student_uid');
+$lehrveranstaltung_id= filter_input(INPUT_GET,'lehrveranstaltung_id');
+
+?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/content/lvplanung/lehrveranstaltungoverlay.js.php b/content/lvplanung/lehrveranstaltungoverlay.js.php
index 1b84e253e..364446be5 100644
--- a/content/lvplanung/lehrveranstaltungoverlay.js.php
+++ b/content/lvplanung/lehrveranstaltungoverlay.js.php
@@ -765,6 +765,12 @@ function LeAuswahl()
document.getElementById('lehrveranstaltung-termine').setAttribute('src','termine.xul.php?lehrveranstaltung_id='+lehrveranstaltung_id);
}
+ if(document.getElementById('lehrveranstaltung-tabs').selectedItem==document.getElementById('lehrveranstaltung-tab-anwesenheit'))
+ {
+ // Anwesenheit Laden
+ document.getElementById('lehrveranstaltung-anwesenheit').setAttribute('src','anwesenheit.xul.php?lehrveranstaltung_id='+lehrveranstaltung_id);
+ }
+
LeDetailDisableFields(true);
//Details zuruecksetzen
LeDetailReset();
@@ -2365,3 +2371,25 @@ function LehrveranstaltungTermineIFrameLoad()
catch(e)
{}
}
+
+/**
+ * Laedt die Anwesenheiten einer Lehrveranstaltung wenn auf den Tab gewechselt wird
+ */
+function LehrveranstaltungTermineIFrameLoad()
+{
+ var tree = document.getElementById('lehrveranstaltung-tree');
+
+ if (tree.currentIndex==-1)
+ return;
+ try
+ {
+ //Ausgewaehlte LV holen
+ var col = tree.columns ? tree.columns["lehrveranstaltung-treecol-lehrveranstaltung_id"] : "lehrveranstaltung-treecol-lehrveranstaltung_id";
+ var lehrveranstaltung_id=tree.view.getCellText(tree.currentIndex,col);
+
+ if(lehrveranstaltung_id!='')
+ document.getElementById('lehrveranstaltung-anwesenheit').setAttribute('src','anwesenheit.xul.php?lehrveranstaltung_id='+lehrveranstaltung_id);
+ }
+ catch(e)
+ {}
+}
diff --git a/content/lvplanung/lehrveranstaltungoverlay.xul.php b/content/lvplanung/lehrveranstaltungoverlay.xul.php
index fde02e919..96f0e7626 100644
--- a/content/lvplanung/lehrveranstaltungoverlay.xul.php
+++ b/content/lvplanung/lehrveranstaltungoverlay.xul.php
@@ -27,6 +27,12 @@ header("Pragma: no-cache");
header("Content-type: application/vnd.mozilla.xul+xml");
require_once('../../config/vilesci.config.inc.php');
+require_once('../../include/functions.inc.php');
+require_once('../../include/benutzerberechtigung.class.php');
+
+$user = get_uid();
+$rechte = new benutzerberechtigung();
+$rechte->getBerechtigungen($user);
echo '';
@@ -249,6 +255,11 @@ echo '
+ isBerechtigt('student/anwesenheit'))
+ echo '';
+ ?>
+
@@ -259,6 +270,10 @@ echo '
+ isBerechtigt('student/anwesenheit'))
+ echo '';
+ ?>
diff --git a/content/student/studentenoverlay.xul.php b/content/student/studentenoverlay.xul.php
index a4731c447..100f2d696 100644
--- a/content/student/studentenoverlay.xul.php
+++ b/content/student/studentenoverlay.xul.php
@@ -370,6 +370,11 @@ else
+ isBerechtigt('student/anwesenheit'))
+ echo '';
+ ?>
+
@@ -394,6 +399,11 @@ else
+ isBerechtigt('student/anwesenheit'))
+ echo '';
+ ?>
+
diff --git a/content/student/studentoverlay.js.php b/content/student/studentoverlay.js.php
index 97fe5c8f4..39cc7ffd3 100644
--- a/content/student/studentoverlay.js.php
+++ b/content/student/studentoverlay.js.php
@@ -1532,6 +1532,12 @@ function StudentAuswahl()
document.getElementById('student-termine').setAttribute('src','termine.xul.php?student_uid='+uid);
}
+ // ***** Anwesenheit *****
+ if(document.getElementById('student-content-tabs').selectedItem==document.getElementById('student-tab-anwesenheit'))
+ {
+ document.getElementById('student-anwesenheit').setAttribute('src','anwesenheit.xul.php?student_uid='+uid);
+ }
+
}
// Notizen laden
@@ -5309,6 +5315,19 @@ function StudentTermineIFrameLoad()
}
}
+// ****
+// * Laedt den Anwesenheit IFrame
+// ****
+function StudentAnwesenheitIFrameLoad()
+{
+ uid = document.getElementById('student-detail-textbox-uid').value;
+ if(uid!='')
+ {
+ url = 'anwesenheit.xul.php?student_uid='+uid+'&ts='+gettimestamp();
+ document.getElementById('student-anwesenheit').setAttribute('src',url);
+ }
+}
+
// ****
// * Funktionen IFrame ins leere zeigen lassen
// ****
diff --git a/include/anwesenheit.class.php b/include/anwesenheit.class.php
index 2551acb7a..a8b4d1803 100644
--- a/include/anwesenheit.class.php
+++ b/include/anwesenheit.class.php
@@ -305,6 +305,54 @@ class anwesenheit extends basis_db
return $row->einheiten;
}
+ /**
+ * Liefert die Anwesenheiten/Abwesenheiten eines Studenten bei einer LV
+ *
+ * @param string $student_uid
+ * @param int $lehrveranstaltung_id
+ * @param string $studiensemester_kurzbz
+ * @param boolean $anwesend
+ * @return boolean
+ */
+ public function getAnwesenheitLehrveranstaltung($student_uid, $lehrveranstaltung_id, $studiensemester_kurzbz, $anwesend=false)
+ {
+ $qry = 'SELECT
+ distinct tbl_anwesenheit.*
+ FROM
+ campus.tbl_anwesenheit
+ JOIN campus.vw_student_lehrveranstaltung USING(uid)
+ WHERE
+ uid='.$this->db_add_param($student_uid).'
+ AND lehrveranstaltung_id='.$this->db_add_param($lehrveranstaltung_id, FHC_INTEGER).'
+ AND studiensemester_kurzbz='.$this->db_add_param($studiensemester_kurzbz).'
+ AND anwesend=' . $this->db_add_param($anwesend, FHC_BOOLEAN).'
+ ORDER BY datum';
+
+ if($result = $this->db_query($qry))
+ {
+ while($row = $this->db_fetch_object($result))
+ {
+ $obj = new anwesenheit();
+
+ $obj->anwesenheit_id = $row->anwesenheit_id;
+ $obj->uid = $row->uid;
+ $obj->einheiten = $row->einheiten;
+ $obj->datum = $row->datum;
+ $obj->anwesend = $this->db_parse_bool($row->anwesend);
+ $obj->lehreinheit_id = $row->lehreinheit_id;
+ $obj->anmerkung = $row->anmerkung;
+
+ $this->result[] = $obj;
+ }
+ return true;
+ }
+ else
+ {
+ $this->errormsg = 'Fehler beim Laden der Daten';
+ return false;
+ }
+ }
+
/**
* Liefert die Termine an denen eine Abwesenheit eingetragen ist.
*
@@ -384,4 +432,93 @@ class anwesenheit extends basis_db
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
+ * Wenn die LehrveranstaltungID uebergeben wird, werden alle Studierenden geholt die zugeteilt sind inkl Prozent der Anwesenheit
+ * Es werden pro Student die Anwesenheiten berechnet aufgrund der Lehreinheit zu der sie zugeordnet sind
+ * @param $studiensemester_kurzbz
+ * @param $student_uid
+ * @param $lehrveranstaltung_id
+ * @return boolean true wenn ok, false im fehlerfall
+ */
+ public function loadAnwesenheitStudiensemester($studiensemester_kurzbz, $student_uid=null, $lehrveranstaltung_id=null)
+ {
+ $qry = "SELECT lehrveranstaltung_id, bezeichnung, vorname, nachname, uid, sum(anwesend) as anwesend, sum(nichtanwesend) as nichtanwesend, sum(gesamtstunden) as gesamtstunden FROM (
+ SELECT
+ lehrveranstaltung_id, bezeichnung, vorname, nachname, uid,
+ (
+ SELECT
+ sum(einheiten)
+ FROM
+ campus.tbl_anwesenheit
+ WHERE
+ lehreinheit_id=vw_student_lehrveranstaltung.lehreinheit_id
+ AND uid=vw_student_lehrveranstaltung.uid
+ AND anwesend
+ ) as anwesend,
+ (
+ SELECT
+ sum(einheiten)
+ FROM
+ campus.tbl_anwesenheit
+ WHERE
+ lehreinheit_id=vw_student_lehrveranstaltung.lehreinheit_id
+ AND uid=vw_student_lehrveranstaltung.uid
+ AND NOT anwesend
+ ) as nichtanwesend,
+ (
+ SELECT count(*) anzahl FROM
+ (SELECT datum, stunde FROM campus.vw_stundenplan
+ WHERE lehreinheit_id=vw_student_lehrveranstaltung.lehreinheit_id GROUP BY datum, stunde) as a
+ ) as gesamtstunden
+ FROM
+ campus.vw_student_lehrveranstaltung
+ JOIN public.tbl_benutzer USING(uid)
+ JOIN public.tbl_person USING(person_id)
+ WHERE
+ studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz);
+
+ if(!is_null($lehrveranstaltung_id))
+ $qry.=" AND lehrveranstaltung_id=".$this->db_add_param($lehrveranstaltung_id);
+ if(!is_null($student_uid))
+ $qry.=" AND uid=".$this->db_add_param($student_uid);
+
+ $qry.=") as b GROUP BY lehrveranstaltung_id, bezeichnung, vorname, nachname, uid";
+
+ if($lehrveranstaltung_id!='')
+ $qry.=" order by nachname, vorname ";
+ elseif($student_uid!='')
+ $qry.=" order by bezeichnung";
+
+ if($result = $this->db_query($qry))
+ {
+ while($row = $this->db_fetch_object($result))
+ {
+ $obj = new stdClass();
+ $obj->bezeichnung = $row->bezeichnung;
+ $obj->anwesend = $row->anwesend;
+ $obj->nichtanwesend = $row->nichtanwesend;
+ $obj->gesamtstunden = $row->gesamtstunden;
+
+ $obj->erfassteanwesenheit = $row->anwesend+$row->nichtanwesend;
+ if($row->gesamtstunden=='' || $obj->erfassteanwesenheit=='')
+ $obj->prozent=100;
+ else
+ $obj->prozent = number_format(100-(100/$obj->gesamtstunden*$row->nichtanwesend),2);
+ $obj->vorname = $row->vorname;
+ $obj->nachname = $row->nachname;
+ $obj->uid = $row->uid;
+ $obj->lehrveranstaltung_id = $row->lehrveranstaltung_id;
+ $this->result[] = $obj;
+ }
+ return true;
+ }
+ else
+ {
+ $this->errormsg='Fehler beim Laden der Daten';
+ return false;
+ }
+ }
}
diff --git a/include/rdf.class.php b/include/rdf.class.php
index 14095a262..feede455a 100755
--- a/include/rdf.class.php
+++ b/include/rdf.class.php
@@ -104,13 +104,15 @@ class rdf
* @param $value
* @param $cdata
*/
- public function setAttribut($name,$value,$cdata=true)
+ public function setAttribut($name,$value,$cdata=true, $parsetype=null)
{
if(!isset($this->attr[$this->counter]))
$this->attr[$this->counter] = new stdClass();
$this->attr[$this->counter]->name=$name;
$this->attr[$this->counter]->value=$value;
$this->attr[$this->counter]->cdata=$cdata;
+ if(!is_null($parsetype))
+ $this->attr[$this->counter]->parseType=$parsetype;
$this->counter++;
//var_dump($this->attr);
return true;
@@ -122,7 +124,7 @@ class rdf
public function createRdfHeader()
{
$this->rdf_text="\n".'xml_ns.'="'.$this->rdf_url.'/rdf#"'."\n".'>'."\n\t";
+ .'xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"'."\n\t".'xmlns:nc="http://home.netscape.com/NC-rdf#"'."\n\t".'xmlns:'.$this->xml_ns.'="'.$this->rdf_url.'/rdf#"'."\n".'>'."\n\t";
}
/**
@@ -134,7 +136,13 @@ class rdf
{
$this->rdf_text.="\n\t\t".'';
foreach ($obj->attr as $attr)
- $this->rdf_text.="\n\t\t\t<".$this->xml_ns.':'.$attr->name.'>value.']]>'.$this->xml_ns.':'.$attr->name.'>';
+ {
+ if(isset($attr->parseType))
+ $parsetype = 'nc:parseType="'.$attr->parseType.'"';
+ else
+ $parsetype='';
+ $this->rdf_text.="\n\t\t\t<".$this->xml_ns.':'.$attr->name.' '.$parsetype.'>value.']]>'.$this->xml_ns.':'.$attr->name.'>';
+ }
$this->rdf_text.="\n\t\t".'';
}
}
diff --git a/rdf/anwesenheit.rdf.php b/rdf/anwesenheit.rdf.php
new file mode 100644
index 000000000..06dbe483d
--- /dev/null
+++ b/rdf/anwesenheit.rdf.php
@@ -0,0 +1,83 @@
+
+ */
+require_once('../config/vilesci.config.inc.php');
+require_once('../include/rdf.class.php');
+require_once('../include/basis_db.class.php');
+require_once('../include/functions.inc.php');
+require_once('../include/benutzerberechtigung.class.php');
+require_once('../include/variable.class.php');
+require_once('../include/lehrstunde.class.php');
+require_once('../include/datum.class.php');
+require_once('../include/stunde.class.php');
+require_once('../include/anwesenheit.class.php');
+
+$user = get_uid();
+
+$rechte = new benutzerberechtigung();
+$rechte->getBerechtigungen($user);
+if(!$rechte->isBerechtigt('student/anwesenheit'))
+ die($rechte->errormsg);
+
+$variable = new variable();
+$variable->loadVariables($user);
+
+$datum_obj = new datum();
+
+$oRdf = new rdf('ANWESENHEIT','http://www.technikum-wien.at/anwesenheit');
+
+$student_uid = filter_input(INPUT_GET,'student_uid');
+$lehrveranstaltung_id = filter_input(INPUT_GET,'lehrveranstaltung_id');
+$studiensemester_kurzbz = filter_input(INPUT_GET,'studiensemester_kurzbz');
+if($studiensemester_kurzbz=='')
+ $studiensemester_kurzbz=$variable->variable->semester_aktuell;
+
+$oRdf->sendHeader();
+$db = new basis_db();
+
+$anwesenheit = new anwesenheit();
+if($student_uid!='')
+ $anwesenheit->loadAnwesenheitStudiensemester($studiensemester_kurzbz, $student_uid);
+elseif($lehrveranstaltung_id!='')
+ $anwesenheit->loadAnwesenheitStudiensemester($studiensemester_kurzbz,null,$lehrveranstaltung_id);
+
+$i=0;
+if(isset($anwesenheit->result) && is_array($anwesenheit->result))
+{
+ foreach($anwesenheit->result as $row)
+ {
+ $i=$oRdf->newObjekt($i);
+ $oRdf->obj[$i]->setAttribut('lehrveranstaltung_bezeichnung',$row->bezeichnung,true);
+ $oRdf->obj[$i]->setAttribut('prozent',$row->prozent,true,'Integer');
+ $oRdf->obj[$i]->setAttribut('anwesend',$row->anwesend,true);
+ $oRdf->obj[$i]->setAttribut('nichtanwesend',$row->nichtanwesend,true);
+ $oRdf->obj[$i]->setAttribut('vorname',$row->vorname,true);
+ $oRdf->obj[$i]->setAttribut('nachname',$row->nachname,true);
+ $oRdf->obj[$i]->setAttribut('uid',$row->uid,true);
+
+
+ $ampel='makeIt'.$anwesenheit->getAmpel($row->prozent);
+ $oRdf->obj[$i]->setAttribut('ampel',$ampel,true);
+
+ $oRdf->addSequence($i);
+ $i++;
+ }
+}
+$oRdf->sendRdfText();
+?>
diff --git a/skin/tempus.css b/skin/tempus.css
index 0b48efb26..c0beec6e0 100644
--- a/skin/tempus.css
+++ b/skin/tempus.css
@@ -162,3 +162,16 @@ toolbarbutton.stplweekoverlay-toolbarbutton:hover
color: #AAAAAA;
visibility:hidden;
}
+
+treechildren::-moz-tree-row(makeItred)
+{
+ background-color: #ff8989;
+}
+treechildren::-moz-tree-row(makeItgreen)
+{
+ background-color: #d8ffd8;
+}
+treechildren::-moz-tree-row(makeItyellow)
+{
+ background-color: #ffe6b5;
+}
diff --git a/system/checksystem.php b/system/checksystem.php
index 420c2c6b5..f21ecd937 100644
--- a/system/checksystem.php
+++ b/system/checksystem.php
@@ -3568,6 +3568,7 @@ $berechtigungen = array(
array('soap/buchungen','Berechtigung für Buchungsabfrage Addon Kontoimport'),
array('student/bankdaten','Bankdaten des Studenten'),
array('student/anrechnung','Anrechnungen des Studenten'),
+ array('student/anwesenheit','Anwesenheiten im FAS'),
array('student/dokumente','Wenn SUID dann dürfen Dokumente auch wieder entfernt werden'),
array('student/noten','Notenverwaltung'),
array('student/stammdaten','Stammdaten der Studenten'),