, * Andreas Oesterreicher and * Rudolf Hangl . */ class uebung { var $conn; // resource DB-Handle var $errormsg; // string var $new; // boolean var $uebungen = array(); // lehreinheit Objekt //Tabellenspalten var $uebung_id; // serial var $gewicht; // smalint var $punkte; // Real var $angabedatei; // oid var $freigabevon; // timestamp var $freigabebis; // timestamp var $abgabe; // boolean var $beispiele; // boolean var $bezeichnung; // varchar(32) var $positiv; // boolean var $defaultbemerkung; // text var $lehreinheit_id; // integer var $updateamum; // timestamp var $updatevon; // varchar(16) var $insertamum; // timestamp var $insertvon; // varchar(16) var $statistik; // boolean var $liste_id; //integer var $maxbsp; //smallint var $maxstd; //smallint var $nummer; //smallint var $prozent; //Studentuebung var $student_uid; // varchar(16) var $mitarbeiter_uid; // varchar(16) var $abgabe_id; // integer var $note; // smalint var $mitarbeitspunkte; // smalint var $anmerkung; // text var $benotungsdatum; // timestamp //Abgabe var $abgabe_abgabe_id; // integer var $abgabedatei; // varchar(64) var $abgabezeit; // timestamp var $abgabe_anmerkung; // text // ************************************************************************* // * Konstruktor - Uebergibt die Connection und laedt optional eine Uebung // * @param $conn Datenbank-Connection // * $uebung_id // * $unicode Gibt an ob die Daten mit UNICODE Codierung // * oder LATIN9 Codierung verarbeitet werden sollen // ************************************************************************* function uebung($conn, $uebung_id=null, $unicode=false) { $this->conn = $conn; if($unicode) $qry = "SET CLIENT_ENCODING TO 'UNICODE';"; else $qry = "SET CLIENT_ENCODING TO 'LATIN9';"; if(!pg_query($this->conn,$qry)) { $this->errormsg = 'Encoding konnte nicht gesetzt werden'; return false; } if($uebung_id!=null) $this->load($uebung_id); } // ********************************************************* // * Laedt die Uebung // * @param uebung_id // ********************************************************* function load($uebung_id) { if(!is_numeric($uebung_id)) { $this->errormsg='Uebung_id muss eine gueltige Zahl sein'; return false; } $qry = "SELECT * FROM campus.tbl_uebung WHERE uebung_id='$uebung_id'"; if($result=pg_query($this->conn, $qry)) { if($row = pg_fetch_object($result)) { $this->uebung_id = $row->uebung_id; $this->gewicht = $row->gewicht; $this->punkte = $row->punkte; $this->angabedatei = $row->angabedatei; $this->freigabevon = $row->freigabevon; $this->freigabebis = $row->freigabebis; $this->abgabe = ($row->abgabe=='t'?true:false); $this->beispiele = ($row->beispiele=='t'?true:false); $this->bezeichnung = $row->bezeichnung; $this->positiv = ($row->positiv=='t'?true:false); $this->defaultbemerkung = $row->defaultbemerkung; $this->lehreinheit_id = $row->lehreinheit_id; $this->updateamum = $row->updateamum; $this->updatevon = $row->updatevon; $this->insertamum = $row->insertamum; $this->insertvon = $row->insertvon; $this->statistik = ($row->statistik=='t'?true:false); $this->liste_id = $row->liste_id; $this->maxbsp = $row->maxbsp; $this->maxstd = $row->maxstd; $this->nummer = $row->nummer; $this->prozent = $row->prozent; return true; } else { $this->errormsg = "Es ist keine Uebung mit der ID $uebung_id vorhanden"; return false; } } else { $this->errormsg = 'Fehler beim laden der Uebung'; return false; } } function toggle_prozent_punkte($uebung_id) { $qry = "update campus.tbl_uebung set prozent = not prozent where uebung_id = '".$uebung_id."'"; if(pg_query($this->conn, $qry)) return true; else { return false; $this->errormsg = "toggle misslungen"; } } function load_studentuebung($student_uid, $uebung_id) { $qry = "SELECT * FROM campus.tbl_studentuebung WHERE student_uid='$student_uid' AND uebung_id='$uebung_id'"; if($result = pg_query($this->conn, $qry)) { if($row = pg_fetch_object($result)) { $this->student_uid = $row->student_uid; $this->mitarbeiter_uid = $row->mitarbeiter_uid; $this->abgabe_id = $row->abgabe_id; $this->uebung_id = $row->uebung_id; $this->note = $row->note; $this->mitarbeitspunkte = $row->mitarbeitspunkte; $this->punkte = $row->punkte; $this->anmerkung = $row->anmerkung; $this->benotungsdatum = $row->benotungsdatum; $this->updateamum = $row->updateamum; $this->updatevon = $row->updatevon; $this->insertamum = $row->insertamum; $this->insertvon = $row->insertvon; return true; } else { $this->errormsg = 'Es gibt keinen passenden Eintrag'; return false; } } else { $this->errormsg = 'Fehler beim laden des eintrages'; return false; } } function load_abgabe($abgabe_id) { $qry = "SELECT * FROM campus.tbl_abgabe WHERE abgabe_id = '$abgabe_id'"; if($result = pg_query($this->conn, $qry)) { if($row = pg_fetch_object($result)) { $this->abgabe_id = $row->abgabe_id; $this->abgabedatei = $row->abgabedatei; $this->abgabezeit = $row->abgabezeit; $this->abgabe_anmerkung = $row->anmerkung; return true; } else { $this->errormsg = 'Es gibt keinen passenden Eintrag'; return false; } } else { $this->errormsg = 'Fehler beim Laden des Eintrages'; return false; } } function check_studentuebung($uebung_id) { $qry = "SELECT * FROM campus.tbl_studentuebung WHERE uebung_id='$uebung_id'"; if($result = pg_query($this->conn, $qry)) { if (pg_num_rows($result) >0) return true; else return false; } else return false; } function get_next_nummer() { $qry = "SELECT max(nummer) FROM campus.tbl_uebung"; $result = pg_query($this->conn, $qry); $row = pg_fetch_object($result); $next = $row->max + 1; $this->next_nummer = $next; } function load_uebung($lehreinheit_id, $level=null, $uebung_id=null) { if(!is_numeric($lehreinheit_id)) { $this->errormsg = 'Lehreinheit_id muss eine gueltige Zahl sein'; return false; } $qry = "SELECT * FROM campus.tbl_uebung WHERE lehreinheit_id='".$lehreinheit_id."'"; if ($level == 1) $qry .= " and liste_id is null"; if ($level == 2) $qry .= " and liste_id = '".$uebung_id."'"; $qry .= " ORDER BY bezeichnung"; if($result=pg_query($this->conn, $qry)) { while($row = pg_fetch_object($result)) { $uebung_obj = new uebung($this->conn); $uebung_obj->uebung_id = $row->uebung_id; $uebung_obj->gewicht = $row->gewicht; $uebung_obj->punkte = $row->punkte; $uebung_obj->angabedatei = $row->angabedatei; $uebung_obj->freigabevon = $row->freigabevon; $uebung_obj->freigabebis = $row->freigabebis; $uebung_obj->abgabe = ($row->abgabe=='t'?true:false); $uebung_obj->beispiele = ($row->beispiele=='t'?true:false); $uebung_obj->bezeichnung = $row->bezeichnung; $uebung_obj->positiv = ($row->positiv=='t'?true:false); $uebung_obj->defaultbemerkung = $row->defaultbemerkung; $uebung_obj->lehreinheit_id = $row->lehreinheit_id; $uebung_obj->updateamum = $row->updateamum; $uebung_obj->updatevon = $row->updatevon; $uebung_obj->insertamum = $row->insertamum; $uebung_obj->insertvon = $row->insertvon; $uebung_obj->statistik = ($row->statistik=='t'?true:false); $uebung_obj->liste_id = $row->liste_id; $uebung_obj->maxstd = $row->maxstd; $uebung_obj->maxbsp = $row->maxbsp; $uebung_obj->nummer = $row->nummer; $uebung_obj->prozent = $row->prozent; $this->uebungen[] = $uebung_obj; } return true; } else { $this->errormsg = 'Fehler beim laden der Uebung'; return false; } } // ******************************************* // * Prueft die Variablen vor dem Speichern // * auf Gueltigkeit. // * @return true wenn ok, false im Fehlerfall // ******************************************* function validate() { if(!is_numeric($this->lehreinheit_id)) { $this->errormsg = 'Lehreinheit_id muss eine gueltige Zahl sein'; return false; } if(strlen($this->bezeichnung)>32) { $this->errormsg = 'Bezeichnung darf nicht laenger als 32 Zeichen sein'; return false; } return true; } // ************************************************ // * wenn $var '' ist wird NULL zurueckgegeben // * wenn $var !='' ist werden Datenbankkritische // * Zeichen mit Backslash versehen und das Ergbnis // * unter Hochkomma gesetzt. // ************************************************ function addslashes($var) { return ($var!=''?"'".addslashes($var)."'":'null'); } // ************************************************************ // * Speichert Uebung 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 // ************************************************************ function save($new=null) { if(is_null($new)) $new = $this->new; //Variablen auf Gueltigkeit pruefen if(!$this->validate()) return false; if($new) { $qry = 'BEGIN; INSERT INTO campus.tbl_uebung(gewicht, punkte, angabedatei, freigabevon, freigabebis, abgabe, beispiele, bezeichnung, positiv, defaultbemerkung, lehreinheit_id, updateamum, updatevon, insertamum, insertvon, liste_id, maxstd, maxbsp, nummer, statistik) VALUES('. $this->addslashes($this->gewicht).','. $this->addslashes($this->punkte).','. $this->addslashes($this->angabedatei).','. $this->addslashes($this->freigabevon).','. $this->addslashes($this->freigabebis).','. ($this->abgabe?'true':'false').','. ($this->beispiele?'true':'false').','. $this->addslashes($this->bezeichnung).','. ($this->positiv?'true':'false').','. $this->addslashes($this->defaultbemerkung).','. $this->addslashes($this->lehreinheit_id).','. $this->addslashes($this->updateamum).','. $this->addslashes($this->updatevon).','. $this->addslashes($this->insertamum).','. $this->addslashes($this->insertvon).','. $this->addslashes($this->liste_id).','. $this->addslashes($this->maxstd).','. $this->addslashes($this->maxbsp).','. $this->addslashes($this->nummer).','. ($this->statistik?'true':'false').');'; } else { $qry = 'UPDATE campus.tbl_uebung SET'. ' gewicht='.$this->addslashes($this->gewicht).','. ' punkte='.$this->addslashes($this->punkte).','. ' angabedatei='.$this->addslashes($this->angabedatei).','. ' freigabevon='.$this->addslashes($this->freigabevon).','. ' freigabebis='.$this->addslashes($this->freigabebis).','. ' abgabe='.($this->abgabe?'true':'false').','. ' beispiele='.($this->beispiele?'true':'false').','. ' bezeichnung='.$this->addslashes($this->bezeichnung).','. ' positiv='.($this->positiv?'true':'false').','. ' defaultbemerkung='.$this->addslashes($this->defaultbemerkung).','. ' lehreinheit_id='.$this->addslashes($this->lehreinheit_id).','. ' updateamum='.$this->addslashes($this->updateamum).','. ' updatevon='.$this->addslashes($this->updatevon).','. ' liste_id='.$this->addslashes($this->liste_id).','. ' maxstd='.$this->addslashes($this->maxstd).','. ' maxbsp='.$this->addslashes($this->maxbsp).','. ' nummer='.$this->addslashes($this->nummer).','. ' statistik='.($this->statistik?'true':'false'). " WHERE uebung_id=".$this->addslashes($this->uebung_id).";"; } if(pg_query($this->conn,$qry)) { if($new) { $qry = "SELECT currval('campus.tbl_uebung_uebung_id_seq') as id;"; if($result = pg_query($this->conn, $qry)) { if($row=pg_fetch_object($result)) { $this->uebung_id = $row->id; pg_query($this->conn, 'COMMIT'); return true; } else { $this->errormsg = 'Fehler beim Auslesen der Sequence'; pg_query($this->conn,'ROLLBACK'); return false; } } else { $this->errormsg = 'Fehler beim Auslesen der Sequence'; pg_query($this->conn,'ROLLBACK'); return false; } } else return true; } else { $this->errormsg = 'Fehler beim Speichern der Uebung:'.$qry; return false; } } // ******************************************* // * Prueft die Variablen vor dem Speichern // * auf Gueltigkeit. // * @return true wenn ok, false im Fehlerfall // ******************************************* function validate_studentuebung() { if(!is_numeric($this->uebung_id)) { $this->errormsg = 'Uebung_id muss eine gueltige Zahl sein'; return false; } if($this->student_uid=='') { $this->errormsg = 'Student_uid muss eingetragen werden'; return false; } return true; } // ************************************************************ // * Speichert StudentUebung 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 // ************************************************************ function studentuebung_save($new=null) { if(is_null($new)) $new = $this->new; //Variablen auf Gueltigkeit pruefen if(!$this->validate_studentuebung()) return false; if($new) { $qry = 'INSERT INTO campus.tbl_studentuebung(student_uid, mitarbeiter_uid, abgabe_id, uebung_id, note, mitarbeitspunkte, punkte, anmerkung, benotungsdatum, updateamum, updatevon, insertamum, insertvon) VALUES('. $this->addslashes($this->student_uid).','. $this->addslashes($this->mitarbeiter_uid).','. $this->addslashes($this->abgabe_id).','. $this->addslashes($this->uebung_id).','. $this->addslashes($this->note).','. $this->addslashes($this->mitarbeitspunkte).','. $this->addslashes($this->punkte).','. $this->addslashes($this->anmerkung).','. $this->addslashes($this->benotungsdatum).','. $this->addslashes($this->updateamum).','. $this->addslashes($this->updatevon).','. $this->addslashes($this->insertamum).','. $this->addslashes($this->insertvon).');'; } else { $qry = 'UPDATE campus.tbl_studentuebung SET'. ' mitarbeiter_uid='.$this->addslashes($this->mitarbeiter_uid).','. ' abgabe_id='.$this->addslashes($this->abgabe_id).','. ' uebung_id='.$this->addslashes($this->uebung_id).','. ' note='.$this->addslashes($this->note).','. ' mitarbeitspunkte='.$this->addslashes($this->mitarbeitspunkte).','. ' punkte='.$this->addslashes($this->punkte).','. ' anmerkung='.$this->addslashes($this->anmerkung).','. ' benotungsdatum='.$this->addslashes($this->benotungsdatum).','. ' updateamum='.$this->addslashes($this->updateamum).','. ' updatevon='.$this->addslashes($this->updatevon). " WHERE uebung_id=".$this->addslashes($this->uebung_id)." AND student_uid=".$this->addslashes($this->student_uid).";"; } if(pg_query($this->conn,$qry)) { return true; } else { $this->errormsg = 'Fehler beim Speichern der StudentUebung'; return false; } } function abgabe_save($new=null) { if(is_null($new)) $new = $this->new; if($new) { $qry = 'INSERT INTO campus.tbl_abgabe(abgabedatei, abgabezeit, anmerkung) VALUES('. $this->addslashes($this->abgabedatei).','. $this->addslashes($this->abgabezeit).','. $this->addslashes($this->abgabe_anmerkung).');'; } else { $qry = 'UPDATE campus.tbl_abgabe SET'. ' abgabe_id='.$this->addslashes($this->abgabe_id).','. ' abgabedatei='.$this->addslashes($this->abgabedatei).','. ' abgabezeit='.$this->addslashes($this->abgabezeit).','. ' anmerkung='.$this->addslashes($this->abgabe_anmerkung). " WHERE abgabe_id=".$this->addslashes($this->abgabe_id).";"; } if(pg_query($this->conn,$qry)) { if($new) { $qry = "SELECT currval('campus.tbl_abgabe_abgabe_id_seq') as id;"; if($result = pg_query($this->conn, $qry)) { if($row=pg_fetch_object($result)) { $this->abgabe_id = $row->id; pg_query($this->conn, 'COMMIT'); return true; } else { $this->errormsg = 'Fehler beim Auslesen der Sequence'; pg_query($this->conn,'ROLLBACK'); return false; } } else { $this->errormsg = 'Fehler beim Auslesen der Sequence'; pg_query($this->conn,'ROLLBACK'); return false; } } else return true; } else { $this->errormsg = 'Fehler beim Speichern der StudentUebung'; return false; } } // ************************************************************ // * Loescht eine Uebung plus die abhaengigen eintraege in den // * Tabellen studentuebung, studentbeispiel, und beispiel // ************************************************************ function delete($uebung_id) { if(!is_numeric($uebung_id)) { $this->errormsg = 'Uebung_id ist ungueltig'; return false; } // subuebungen wegraeumen $qry = "SELECT * FROM campus.tbl_uebung WHERE liste_id = '".$uebung_id."'"; if($result=pg_query($this->conn, $qry)) { while($row = pg_fetch_object($result)) { foreach (glob(BENOTUNGSTOOL_PATH."angabe/*".$row->uebung_id.".*") as $angabe) { if(file_exists($angabe)) unlink($angabe); } $qry = "DELETE FROM campus.tbl_studentbeispiel WHERE beispiel_id IN(SELECT beispiel_id FROM campus.tbl_beispiel WHERE uebung_id='$row->uebung_id'); DELETE FROM campus.tbl_abgabe WHERE abgabe_id IN(SELECT abgabe_id FROM campus.tbl_studentuebung WHERE uebung_id='$row->uebung_id'); DELETE FROM campus.tbl_studentuebung WHERE uebung_id='$row->uebung_id'; DELETE FROM campus.tbl_beispiel WHERE uebung_id='$row->uebung_id'; DELETE FROM campus.tbl_studentuebung WHERE uebung_id = '$row->uebung_id'; DELETE FROM campus.tbl_uebung WHERE uebung_id='$row->uebung_id';"; if(!pg_query($qry)) { $this->errormsg = 'Fehler beim Loeschen der Daten'; return false; } } } foreach (glob(BENOTUNGSTOOL_PATH."angabe/*".$uebung_id.".*") as $angabe) { if(file_exists($angabe)) unlink($angabe); } $qry = "DELETE FROM campus.tbl_studentbeispiel WHERE beispiel_id IN(SELECT beispiel_id FROM campus.tbl_beispiel WHERE uebung_id='$uebung_id'); DELETE FROM campus.tbl_abgabe WHERE abgabe_id IN(SELECT abgabe_id FROM campus.tbl_studentuebung WHERE uebung_id='$uebung_id'); DELETE FROM campus.tbl_studentuebung WHERE uebung_id='$uebung_id'; DELETE FROM campus.tbl_beispiel WHERE uebung_id='$uebung_id'; DELETE FROM campus.tbl_studentuebung WHERE uebung_id = '$uebung_id'; DELETE FROM campus.tbl_uebung WHERE uebung_id='$uebung_id';"; if(pg_query($qry)) return true; else { $this->errormsg = 'Fehler beim Loeschen der Daten'; return false; } } // ************************************************************ // * Loescht eine Uebung plus die abhaengigen eintraege in den // * Tabellen studentuebung, studentbeispiel, und beispiel // ************************************************************ function delete_abgabe($abgabe_id) { if(!is_numeric($abgabe_id)) { $this->errormsg = 'abgabe_id ist ungueltig'; return false; } // subuebungen wegraeumen $qry = "SELECT * FROM campus.tbl_abgabe WHERE abgabe_id = '".$abgabe_id."'"; if($result=pg_query($this->conn, $qry)) { while($row = pg_fetch_object($result)) { if(file_exists(BENOTUNGSTOOL_PATH."abgabe/".$row->abgabedatei)) unlink(BENOTUNGSTOOL_PATH."abgabe/".$row->abgabedatei); $qry = "UPDATE campus.tbl_studentuebung set abgabe_id = null where abgabe_id = '$abgabe_id'; DELETE FROM campus.tbl_abgabe WHERE abgabe_id = '$abgabe_id'"; if(!pg_query($qry)) { $this->errormsg = 'Fehler beim Loeschen der Daten'; return false; } else return true; } } } } ?>