From 55d5d6666a789e501e382f227be3d5455f04bb49 Mon Sep 17 00:00:00 2001 From: Gerald Simane Date: Thu, 16 Oct 2008 12:15:11 +0000 Subject: [PATCH] --- include/moodle_course.class.php | 2253 +++++++++++++++++-------------- 1 file changed, 1274 insertions(+), 979 deletions(-) diff --git a/include/moodle_course.class.php b/include/moodle_course.class.php index 7dc1d77ba..c8020d0ac 100644 --- a/include/moodle_course.class.php +++ b/include/moodle_course.class.php @@ -1,979 +1,1274 @@ -, - * Andreas Oesterreicher and - * Rudolf Hangl . - */ -/* - * - */ -class moodle_course -{ - var $conn; - var $conn_moodle; - var $errormsg; - var $result = array(); - - //Vilesci Attribute - var $moodle_id; - var $mdl_course_id; - var $lehreinheit_id; - var $lehrveranstaltung_id; - var $studiensemester_kurzbz; - var $insertamum; - var $insertvon; - var $gruppen; - - //Moodle Attribute - var $mdl_fullname; - var $mdl_shortname; - - var $mdl_context_id; - var $mdl_context_level; - var $mdl_context_instanceid; - var $mdl_context_path; - var $mdl_context_depth; - - // ********************************************** - // * moodle_course - // * @param $conn Connection zur Vilesci DB - // * $conn_moodle Connection zur Moodle DB - // ********************************************** - function moodle_course($conn, $conn_moodle) - { - $this->conn = $conn; - $this->conn_moodle = $conn_moodle; - - $qry = "SET CLIENT_ENCODING TO 'LATIN9';"; - pg_query($this->conn_moodle, $qry); - } - - // ********************************************** - // * Laedt einen MoodleKurs - // * @param mdl_course_id ID des Moodle Kurses - // * @return true wenn ok, false im Fehlerfall - // ********************************************** - function load($mdl_course_id) - { - $qry = "SELECT * FROM public.mdl_course WHERE id='".addslashes($mdl_course_id)."'"; - if($result = pg_query($this->conn_moodle, $qry)) - { - if($row = pg_fetch_object($result)) - { - $this->mdl_fullname = $row->fullname; - $this->mdl_shortname = $row->shortname; - $this->mdl_course_id = $row->id; - return true; - } - else - { - $this->errormsg = 'Kurs wurde nicht gefunden'; - return false; - } - } - else - { - $this->errormsg = 'Fehler beim Laden des Kurses'; - return false; - } - } - - // ********************************************** - // * Laedt alle MoodleKurse die zu einer LV/Stsem - // * plus die MoodleKurse die auf dessen LE haengen - // * @param lehrveranstaltung_id - // * studiensemester_kurzbz - // * @return true wenn ok, false im Fehlerfall - // ********************************************** - function getAll($lehrveranstaltung_id, $studiensemester_kurzbz) - { - $qry = "SELECT distinct on(mdl_course_id) * - FROM - lehre.tbl_lehrveranstaltung, lehre.tbl_lehreinheit, lehre.tbl_moodle - WHERE - tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id AND - tbl_lehrveranstaltung.lehrveranstaltung_id = '".addslashes($lehrveranstaltung_id)."' AND - tbl_lehreinheit.studiensemester_kurzbz='".addslashes($studiensemester_kurzbz)."' AND - ((tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_moodle.lehrveranstaltung_id AND tbl_moodle.studiensemester_kurzbz=tbl_lehreinheit.studiensemester_kurzbz) - OR - (tbl_lehreinheit.lehreinheit_id=tbl_moodle.lehreinheit_id) - )"; - if($result = pg_query($this->conn, $qry)) - { - while($row=pg_fetch_object($result)) - { - $obj = new moodle_course($this->conn, $this->conn_moodle); - $obj->moodle_id = $row->moodle_id; - $obj->mdl_course_id = $row->mdl_course_id; - $obj->lehreinheit_id = $row->lehreinheit_id; - $obj->lehrveranstaltung_id = $row->lehrveranstaltung_id; - $obj->studiensemester_kurzbz = $row->studiensemester_kurzbz; - $obj->insertamum = $row->insertamum; - $obj->insertvon = $row->insertvon; - $obj->gruppen = ($row->gruppen=='t'?true:false); - - $qry_mdl = "SELECT * FROM public.mdl_course WHERE id='".addslashes($row->mdl_course_id)."'"; - if($result_mdl = pg_query($this->conn_moodle, $qry_mdl)) - { - if($row_mdl = pg_fetch_object($result_mdl)) - { - $obj->mdl_fullname = $row_mdl->fullname; - $obj->mdl_shortname = $row_mdl->shortname; - } - } - $this->result[] = $obj; - } - return true; - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - - } - - // ********************************************** - // * Schaut ob fuer diese LV/StSem schon ein - // * Moodle Kurs existiert - // * @param lehrveranstaltung_id - // * studiensemester_kurzbz - // * @return true wenn vorhanden, false wenn nicht - // ********************************************** - function course_exists_for_lv($lehrveranstaltung_id, $studiensemester_kurzbz) - { - $qry = "SELECT 1 FROM lehre.tbl_moodle WHERE lehrveranstaltung_id='".addslashes($lehrveranstaltung_id)."' AND studiensemester_kurzbz='".addslashes($studiensemester_kurzbz)."'"; - if($result = pg_query($this->conn, $qry)) - { - if(pg_num_rows($result)>0) - return true; - else - return false; - } - else - { - $this->errormsg = 'Fehler bei SELECT Abfrage in moodle_course.class.php / course_exists_for_lv'; - return false; - } - } - - // ********************************************** - // * Schaut ob fuer diese LE schon ein Moodle - // * Kurs existiert - // * @param lehreinheit_id - // * @return true wenn vorhanden, false wenn nicht - // ********************************************** - function course_exists_for_le($lehreinheit_id) - { - $qry = "SELECT 1 FROM lehre.tbl_moodle WHERE lehreinheit_id='".addslashes($lehreinheit_id)."'"; - if($result = pg_query($this->conn, $qry)) - { - if(pg_num_rows($result)>0) - return true; - else - return false; - } - else - { - $this->errormsg = 'Fehler bei SELECT Abfrage in moodle_course.class.php / course_exists_for_le'; - return false; - } - } - - // ********************************************** - // * Schaut ob fuer diese LV/StSem schon ein - // * Moodle Kurs existiert - // * @param lehrveranstaltung_id - // * studiensemester_kurzbz - // * @return true wenn vorhanden, false wenn nicht - // ********************************************** - function course_exists_for_allLE($lehrveranstaltung_id, $studiensemester_kurzbz) - { - $qry = "SELECT 1 FROM lehre.tbl_lehreinheit - WHERE lehrveranstaltung_id='".addslashes($lehrveranstaltung_id)."' - AND studiensemester_kurzbz='".addslashes($studiensemester_kurzbz)."' - AND lehreinheit_id NOT IN (SELECT lehreinheit_id FROM lehre.tbl_moodle WHERE lehreinheit_id=tbl_lehreinheit.lehreinheit_id)"; - if($result = pg_query($this->conn, $qry)) - { - if(pg_num_rows($result)>0) - return false; - else - return true; - } - else - { - $this->errormsg = 'Fehler bei SELECT Abfrage in moodle_course.class.php / course_exists_for_allLE'; - return false; - } - } - - // ************************************************ - // * wenn $var '' ist wird "null" zurueckgegeben - // * wenn $var !='' ist werden datenbankkritische - // * Zeichen mit backslash versehen und das Ergebnis - // * unter Hochkomma gesetzt. - // ************************************************ - function addslashes($var) - { - return ($var!=''?"'".addslashes($var)."'":'null'); - } - - // ************************************************ - // * Legt einen Eintrag in der tbl_moodle an - // * @return true wenn ok, false im Fehlerfall - // ************************************************ - function create_vilesci() - { - if($this->mdl_course_id=='') - { - $this->errormsg='mdl_course_id muss angegeben sein'; - return false; - } - - $qry = 'BEGIN; INSERT INTO lehre.tbl_moodle(mdl_course_id, lehreinheit_id, lehrveranstaltung_id, - studiensemester_kurzbz, insertamum, insertvon, gruppen) - VALUES('. - $this->addslashes($this->mdl_course_id).','. - $this->addslashes($this->lehreinheit_id).','. - $this->addslashes($this->lehrveranstaltung_id).','. - $this->addslashes($this->studiensemester_kurzbz).','. - $this->addslashes($this->insertamum).','. - $this->addslashes($this->insertvon).','. - ($this->gruppen?'true':'false').');'; - - if(pg_query($this->conn, $qry)) - { - $qry = "SELECT currval('lehre.tbl_moodle_moodle_id_seq') as id;"; - if($result = pg_query($this->conn, $qry)) - { - if($row = pg_fetch_object($result)) - { - $this->moodle_id = $row->id; - pg_query($this->conn, 'COMMIT;'); - return true; - } - else - { - pg_query($this->conn, 'ROLLBACK'); - $this->errormsg = 'Fehler beim Lesen der Sequence'; - return false; - } - } - else - { - pg_query($this->conn, 'ROLLBACK'); - $this->errormsg = 'Fehler beim Lesen der Sequence'; - return false; - } - } - else - { - $this->errormsg = 'Fehler beim Einfuegen des Datensatzes'; - return false; - } - } - - // *********************************************** - // * Legt einen Kurs im Moodle an - // *********************************************** - function create_moodle() - { - pg_query($this->conn_moodle, 'BEGIN;'); - - //CourseCategorie ermitteln - - //lehrveranstalung ID holen falls die nur die lehreinheit_id angegeben wurde - if($this->lehrveranstaltung_id=='') - { - $qry = "SELECT lehrveranstaltung_id FROM lehre.tbl_lehreinheit - WHERE lehreinheit_id='".addslashes($this->lehreinheit_id)."'"; - if($result = pg_query($this->conn, $qry)) - { - if($row = pg_fetch_object($result)) - { - $lvid = $row->lehrveranstaltung_id; - } - else - { - pg_query($this->conn_moodle, 'ROLLBACK'); - $this->errormsg = 'Fehler beim Ermitteln der LehrveranstaltungID'; - return false; - } - } - else - { - pg_query($this->conn_moodle, 'ROLLBACK'); - $this->errormsg = 'Fehler beim Ermitteln der LehrveranstaltungID'; - return false; - } - } - else - $lvid = $this->lehrveranstaltung_id; - - //Studiengang und Semester holen - $qry = "SELECT tbl_lehrveranstaltung.semester, UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as stg FROM lehre.tbl_lehrveranstaltung JOIN public.tbl_studiengang USING(studiengang_kz) - WHERE lehrveranstaltung_id='$lvid'"; - - if($result = pg_query($this->conn, $qry)) - { - if($row = pg_fetch_object($result)) - { - $semester = $row->semester; - $stg = $row->stg; - } - else - { - pg_query($this->conn_moodle, 'ROLLBACK'); - $this->errormsg = 'Fehler beim Ermitteln von Studiengang und Semester'; - return false; - } - } - else - { - pg_query($this->conn_moodle, 'ROLLBACK'); - $this->errormsg = 'Fehler beim Ermitteln von Studiengang und Semester'; - return false; - } - - //Studiensemester Categorie holen - if(!$id_stsem = $this->getCategorie($this->studiensemester_kurzbz, '0')) - { - if(!$id_stsem = $this->createCategorie($this->studiensemester_kurzbz, '0')) - echo "
Fehler beim Anlegen des Studiensemesters"; - } - //Studiengang Categorie holen - if(!$id_stg = $this->getCategorie($stg, $id_stsem)) - { - if(!$id_stg = $this->createCategorie($stg, $id_stsem)) - echo "
$this->errormsg"; - } - //Semester Categorie holen - if(!$id_sem = $this->getCategorie($semester, $id_stg)) - { - if(!$id_sem = $this->createCategorie($semester, $id_stg)) - echo "
$this->errormsg"; - } - - //CourseCategorie Context holen - $this->getContext(40, $id_sem); - - //Eintrag in tbl_mdl_course - $qry = "INSERT INTO public.mdl_course(category, sortorder, fullname, shortname, format, showgrades, newsitems, enrollable) - VALUES (".$this->addslashes($id_sem).", (SELECT max(sortorder)+1 FROM public.mdl_course), ".$this->addslashes($this->mdl_fullname).", ". - $this->addslashes($this->mdl_shortname).",'topics', 1, 5, 0);"; - - if($result = pg_query($this->conn_moodle, $qry)) - { - $qry = "SELECT currval('mdl_course_id_seq') as id"; - if($result = pg_query($this->conn_moodle, $qry)) - { - if($row = pg_fetch_object($result)) - { - $this->mdl_course_id = $row->id; - } - else - { - pg_query($this->conn_moodle, 'ROLLBACK'); - $this->errormsg = 'Fehler beim Auslesen der Sequence'; - return false; - } - } - else - { - pg_query($this->conn_moodle, 'ROLLBACK'); - $this->errormsg = 'Fehler beim Auslesen der Sequence'; - return false; - } - } - else - { - pg_query($this->conn_moodle, 'ROLLBACK'); - $this->errormsg = 'Fehler beim INSERT'; - return false; - } - - //zum vorherigen Pfad die aktuelle id hinzufuegen - $path = "(SELECT '$this->mdl_context_path' || '/' || currval('mdl_context_id_seq'))"; - //vorherige tiefe um 1 erhoehen - $depth = $this->mdl_context_depth+1; - - //Context eintragen - $qry = "INSERT INTO public.mdl_context(contextlevel, instanceid, path, depth) VALUES('50', ". - $this->addslashes($this->mdl_course_id).",".$path.",".$this->addslashes($depth).");"; - - if(pg_query($this->conn_moodle, $qry)) - { - $qry = "SELECT currval('mdl_context_id_seq') as id"; - if($result = pg_query($this->conn_moodle, $qry)) - { - if($row = pg_fetch_object($result)) - { - $this->mdl_context_id = $row->id; - } - else - { - pg_query($this->conn_moodle, 'ROLLBACK'); - $this->errormsg = 'Fehler beim Auslesen der Sequence'; - return false; - } - } - else - { - pg_query($this->conn_moodle, 'ROLLBACK'); - $this->errormsg = 'Fehler beim Auslesen der Sequence'; - return false; - } - } - else - { - pg_query($this->conn_moodle, 'ROLLBACK'); - $this->errormsg = 'Fehler beim INSERT'; - return false; - } - - //Bloecke hinzufuegen - $qry = - "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(20, $this->mdl_course_id, 'course-view', 'l', 0, 1);". //Teilnehmer - "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(1, $this->mdl_course_id, 'course-view', 'l', 1, 1);". //Aktivitäten - "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(25, $this->mdl_course_id, 'course-view', 'l', 2, 1);". //Forumssuche - "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(2, $this->mdl_course_id, 'course-view', 'l', 3, 1);". //Admin - "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(9, $this->mdl_course_id, 'course-view', 'l', 4, 1);". //Kursliste - "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(18, $this->mdl_course_id, 'course-view', 'r', 0, 1);". //Neueste Nachrichten - "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(8, $this->mdl_course_id, 'course-view', 'r', 1, 1);". //Kalender / Bald aktuell... - "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(22, $this->mdl_course_id, 'course-view', 'r', 2, 1);"; //Neueste Aktivitäten - - if(!pg_query($this->conn_moodle, $qry)) - { - pg_query($this->conn_moodle, 'ROLLBACK'); - $this->errormsg = 'Fehler beim INSERT der bloecke'; - return false; - } - else - { - pg_query($this->conn_moodle, 'COMMIT'); - return true; - } - - } - - // ************************************************************ - // * Laedt eine CourseCategorie anhand der Bezeichnung und der - // * ParentID - // ************************************************************ - function getCategorie($bezeichnung, $parent) - { - if($bezeichnung=='') - { - $this->errormsg = 'Bezeichnung muss angegeben werden'; - return false; - } - if($parent=='') - { - $this->errormsg = 'getCategorie: parent wurde nicht uebergeben'; - return false; - } - $qry = "SELECT id FROM public.mdl_course_categories WHERE name='".addslashes($bezeichnung)."' AND parent='".addslashes($parent)."'"; - - if($result = pg_query($this->conn_moodle, $qry)) - { - if($row = pg_fetch_object($result)) - { - return $row->id; - } - else - { - $this->errormsg = 'Fehler beim Laden der KursKategorie'; - return false; - } - } - else - { - $this->errormsg = 'Fehler beim Laden der KursKategorie'; - return false; - } - } - - // ************************************************************ - // * Erzeugt eine CourseCategorie anhand der Bezeichnung und der - // * ParentID - // ************************************************************ - function createCategorie($bezeichnung, $parent) - { - if($bezeichnung=='') - { - $this->errormsg = 'Bezeichnung muss angegeben werden'; - return false; - } - if($parent=='') - { - $this->errormsg = 'createCategorie: parent wurde nicht uebergeben: '.$bezeichnung.' '.$parent; - return false; - } - if($parent!='0') - { - //Parent laden - $qry = "SELECT * FROM public.mdl_course_categories WHERE id='".addslashes($parent)."'"; - //echo $qry; - if($result = pg_query($this->conn_moodle, $qry)) - { - if($row = pg_fetch_object($result)) - { - $depth = $row->depth; - $path = $row->path; - } - else - { - $this->errormsg = 'Fehler beim Laden der KursKategorie'; - return false; - } - } - else - { - $this->errormsg = 'Fehler beim Laden der KursKategorie'; - return false; - } - } - else - { - $depth=0; - $path=''; - } - - //KursKategorie anlegen - $qry = "BEGIN; INSERT INTO public.mdl_course_categories(name, parent, sortorder, - coursecount, visible, timemodified, depth, path, theme) - VALUES(".$this->addslashes($bezeichnung).",".$this->addslashes($parent).",". - "'999',0,1,0,".$this->addslashes($depth+1). - ", (SELECT ".$this->addslashes($path.'/')." || currval('mdl_course_categories_id_seq')), null);"; - - if(pg_query($this->conn_moodle, $qry)) - { - $qry = "SELECT currval('mdl_course_categories_id_seq') as id"; - if($result = pg_query($this->conn_moodle, $qry)) - { - if($row = pg_fetch_object($result)) - { - $coursecatid = $row->id; - - //Context anlegen - //wenn Parent 0 ist, dann den SYSTEM Eintrag holen - if($parent!='0') - $qry = "SELECT path, depth FROM public.mdl_context WHERE contextlevel='40' AND instanceid='".addslashes($parent)."'"; - else - $qry = "SELECT path, depth FROM public.mdl_context WHERE contextlevel='10' AND instanceid='".addslashes($parent)."'"; - if($result = pg_query($this->conn_moodle, $qry)) - { - if($row = pg_fetch_object($result)) - { - $path = $row->path; - $depth = $row->depth; - - //zum vorherigen Pfad die aktuelle id hinzufuegen - $path = "(SELECT '$path' || '/' || currval('mdl_context_id_seq'))"; - //vorherige tiefe um 1 erhoehen - $depth=$depth+1; - - //Context eintragen - $qry = "INSERT INTO public.mdl_context(contextlevel, instanceid, path, depth) VALUES('40', ". - $this->addslashes($coursecatid).",".$path.",".$this->addslashes($depth).");"; - - if(pg_query($this->conn_moodle, $qry)) - { - $qry = "SELECT currval('mdl_context_id_seq') as id"; - if($result = pg_query($this->conn_moodle, $qry)) - { - if($row = pg_fetch_object($result)) - { - pg_query($this->conn_moodle,'COMMIT;'); - return $coursecatid; - } - else - { - pg_query($this->conn_moodle, 'ROLLBACK'); - $this->errormsg = 'Fehler beim Auslesen der Sequence'; - return false; - } - } - else - { - pg_query($this->conn_moodle, 'ROLLBACK'); - $this->errormsg = 'Fehler beim Auslesen der Sequence'; - return false; - } - } - else - { - pg_query($this->conn_moodle, 'ROLLBACK'); - $this->errormsg = 'Fehler beim INSERT'; - return false; - } - } - else - { - pg_query($this->conn_moodle, 'ROLLBACK;'); - $this->errormsg = 'Fehler beim Auslesen des Contextes'.$qry; - return false; - } - } - else - { - pg_query($this->conn_moodle, 'ROLLBACK;'); - $this->errormsg = 'Fehler beim Auslesen des Contextes'; - return false; - } - } - else - { - pg_query($this->conn_moodle, 'ROLLBACK'); - $this->errormsg = 'Fehler beim Auslesen der Sequence'; - return false; - } - } - else - { - pg_query($this->conn_moodle, 'ROLLBACK'); - $this->errormsg = 'Fehler beim Auslesen der Sequence'; - return false; - } - } - else - { - pg_query($this->conn_moodle, 'ROLLBACK'); - $this->errormsg = 'Fehler beim Speichern der KursKategorie'; - return false; - } - } - - // ************************************************************ - // * Laedt einen Context anhand des contextlevels und der instanceid - // ************************************************************ - function getContext($contextlevel, $instanceid) - { - $qry ="SELECT * FROM public.mdl_context WHERE contextlevel='".addslashes($contextlevel)."' - AND instanceid='".addslashes($instanceid)."'"; - - if($result = pg_query($this->conn_moodle, $qry)) - { - if($row = pg_fetch_object($result)) - { - $this->mdl_context_id = $row->id; - $this->mdl_context_contextlevelid = $row->id; - $this->mdl_context_instanceid = $row->instanceid; - $this->mdl_context_path = $row->path; - $this->mdl_context_depth = $row->depth; - - return true; - } - else - { - $this->errormsg = 'Eintrag wurde nicht gefunden'; - return false; - } - } - else - { - $this->errormsg = 'Fehler beim Auslesen des Contexts'; - return false; - } - } - - // **************************************************** - // * Liefert alle Kurse dieser LV in denen der Student - // * zugeteilt ist - // **************************************************** - function getCourse($lehrveranstaltung_id, $studiensemester_kurzbz, $student_uid) - { - //alle betreffenden Kurse holen - $qry = "SELECT tbl_lehreinheit.lehreinheit_id, mdl_course_id FROM lehre.tbl_moodle JOIN lehre.tbl_lehreinheit USING(lehrveranstaltung_id, studiensemester_kurzbz) - WHERE tbl_moodle.lehrveranstaltung_id='".addslashes($lehrveranstaltung_id)."' - AND tbl_moodle.studiensemester_kurzbz='".addslashes($studiensemester_kurzbz)."' - UNION - SELECT tbl_lehreinheit.lehreinheit_id, mdl_course_id FROM lehre.tbl_moodle JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) - WHERE tbl_lehreinheit.lehrveranstaltung_id='".addslashes($lehrveranstaltung_id)."' AND - tbl_lehreinheit.studiensemester_kurzbz='".addslashes($studiensemester_kurzbz)."'"; - - $courses = array(); - if($result = pg_query($this->conn, $qry)) - { - while($row = pg_fetch_object($result)) - { - //schauen in welchen der Student ist - $qry = "SELECT 1 FROM campus.vw_student_lehrveranstaltung - WHERE uid='".addslashes($student_uid)."' AND lehreinheit_id='".addslashes($row->lehreinheit_id)."'"; - - if($result_vw = pg_query($this->conn, $qry)) - { - if(pg_num_rows($result_vw)>0) - { - if(!array_key_exists($row->mdl_course_id, $courses)) - $courses[]=$row->mdl_course_id; - } - } - } - } - return $courses; - } - - // *************************************************** - // * Aktualisiert die Spalte gruppen in der tbl_moodle - // * @param moodle_id ID der MoodleZuteilung - // * gruppen boolean true wenn syncronisiert - // * werden soll, false wenn nicht - // * @return true wenn ok, false im Fehlerfall - // *************************************************** - function updateGruppenSync($moodle_id, $gruppen) - { - if(!is_numeric($moodle_id)) - { - $this->errormsg = 'Moodle_id muss eine gueltige Zahl sein'; - return false; - } - - $qry = "UPDATE lehre.tbl_moodle SET gruppen=".($gruppen?'true':'false')." WHERE moodle_id='".addslashes($moodle_id)."'"; - - if(pg_query($this->conn, $qry)) - { - return true; - } - else - { - $this->errormsg = 'Fehler beim Update'; - return false; - } - } - - // ******************************** - // * Legt einen Testkurs an - // ******************************** - function createTestkurs($lehrveranstaltung_id, $studiensemester_kurzbz) - { - pg_query($this->conn_moodle, 'BEGIN;'); - - //CourseCategorie ermitteln - - //Studiengang und Semester holen - $qry = "SELECT tbl_lehrveranstaltung.semester, UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as stg FROM lehre.tbl_lehrveranstaltung JOIN public.tbl_studiengang USING(studiengang_kz) - WHERE lehrveranstaltung_id='$lehrveranstaltung_id'"; - - if($result = pg_query($this->conn, $qry)) - { - if($row = pg_fetch_object($result)) - { - $semester = $row->semester; - $stg = $row->stg; - } - else - { - pg_query($this->conn_moodle, 'ROLLBACK'); - $this->errormsg = 'Fehler beim Ermitteln von Studiengang und Semester'; - return false; - } - } - else - { - pg_query($this->conn_moodle, 'ROLLBACK'); - $this->errormsg = 'Fehler beim Ermitteln von Studiengang und Semester'; - return false; - } - - //Testkurs Categorie holen - if(!$id_testkurs = $this->getCategorie('Testkurse', '0')) - { - if(!$id_testkurs = $this->createCategorie('Testkurse', '0')) - echo "
Fehler beim Anlegen der Testkurskategorie"; - } - //StSem Categorie holen - if(!$id_stsem = $this->getCategorie($studiensemester_kurzbz, $id_testkurs)) - { - if(!$id_stsem = $this->createCategorie($studiensemester_kurzbz, $id_testkurs)) - echo "
$this->errormsg"; - } - - //CourseCategorie Context holen - $this->getContext(40, $id_stsem); - - //Eintrag in tbl_mdl_course - $qry = "INSERT INTO public.mdl_course(category, sortorder, fullname, shortname, format, showgrades, newsitems, enrollable) - VALUES (".$this->addslashes($id_stsem).", (SELECT max(sortorder)+1 FROM public.mdl_course), ".$this->addslashes($this->mdl_fullname).", ". - $this->addslashes($this->mdl_shortname).",'topics', 1, 5, 0);"; - - if($result = pg_query($this->conn_moodle, $qry)) - { - $qry = "SELECT currval('mdl_course_id_seq') as id"; - if($result = pg_query($this->conn_moodle, $qry)) - { - if($row = pg_fetch_object($result)) - { - $this->mdl_course_id = $row->id; - } - else - { - pg_query($this->conn_moodle, 'ROLLBACK'); - $this->errormsg = 'Fehler beim Auslesen der Sequence'; - return false; - } - } - else - { - pg_query($this->conn_moodle, 'ROLLBACK'); - $this->errormsg = 'Fehler beim Auslesen der Sequence'; - return false; - } - } - else - { - pg_query($this->conn_moodle, 'ROLLBACK'); - $this->errormsg = 'Fehler beim INSERT'; - return false; - } - - //zum vorherigen Pfad die aktuelle id hinzufuegen - $path = "(SELECT '$this->mdl_context_path' || '/' || currval('mdl_context_id_seq'))"; - //vorherige tiefe um 1 erhoehen - $depth = $this->mdl_context_depth+1; - - //Context eintragen - $qry = "INSERT INTO public.mdl_context(contextlevel, instanceid, path, depth) VALUES('50', ". - $this->addslashes($this->mdl_course_id).",".$path.",".$this->addslashes($depth).");"; - - if(pg_query($this->conn_moodle, $qry)) - { - $qry = "SELECT currval('mdl_context_id_seq') as id"; - if($result = pg_query($this->conn_moodle, $qry)) - { - if($row = pg_fetch_object($result)) - { - $this->mdl_context_id = $row->id; - } - else - { - pg_query($this->conn_moodle, 'ROLLBACK'); - $this->errormsg = 'Fehler beim Auslesen der Sequence'; - return false; - } - } - else - { - pg_query($this->conn_moodle, 'ROLLBACK'); - $this->errormsg = 'Fehler beim Auslesen der Sequence'; - return false; - } - } - else - { - pg_query($this->conn_moodle, 'ROLLBACK'); - $this->errormsg = 'Fehler beim INSERT'; - return false; - } - - //Bloecke hinzufuegen - $qry = - "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(20, $this->mdl_course_id, 'course-view', 'l', 0, 1);". //Teilnehmer - "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(1, $this->mdl_course_id, 'course-view', 'l', 1, 1);". //Aktivitäten - "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(25, $this->mdl_course_id, 'course-view', 'l', 2, 1);". //Forumssuche - "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(2, $this->mdl_course_id, 'course-view', 'l', 3, 1);". //Admin - "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(9, $this->mdl_course_id, 'course-view', 'l', 4, 1);". //Kursliste - "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(18, $this->mdl_course_id, 'course-view', 'r', 0, 1);". //Neueste Nachrichten - "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(8, $this->mdl_course_id, 'course-view', 'r', 1, 1);". //Kalender / Bald aktuell... - "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(22, $this->mdl_course_id, 'course-view', 'r', 2, 1);"; //Neueste Aktivitäten - - if(!pg_query($this->conn_moodle, $qry)) - { - pg_query($this->conn_moodle, 'ROLLBACK'); - $this->errormsg = 'Fehler beim INSERT der Bloecke'; - return false; - } - else - { - pg_query($this->conn_moodle, 'COMMIT'); - return true; - } - } - - // ****************************************************** - // * Laedt den Testkurs zu dieser Lehrveranstaltung - // * @param lehrveranstaltung_id - // * studiensemester_kurzbz - // * @return ID wenn gefunden, false wenn nicht vorhanden - // ****************************************************** - function loadTestkurs($lehrveranstaltung_id, $studiensemester_kurzbz) - { - $qry = "SELECT - UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as kuerzel, - tbl_lehrveranstaltung.semester, tbl_lehrveranstaltung.kurzbz - FROM - lehre.tbl_lehrveranstaltung JOIN public.tbl_studiengang USING(studiengang_kz) - WHERE - lehrveranstaltung_id='".addslashes($lehrveranstaltung_id)."'"; - - if($result = pg_query($this->conn, $qry)) - { - if($row = pg_fetch_object($result)) - { - $shortname = strtoupper($studiensemester_kurzbz.'-'.$row->kuerzel.'-'.$row->semester.'-'.$row->kurzbz); - } - else - { - $this->errormsg = 'Fehler beim Laden des Testkurses'; - return false; - } - } - else - { - $this->errormsg = 'Fehler beim Laden des Testkurses'; - return false; - } - - //Testkurs Categorie holen - if(!$id_testkurs = $this->getCategorie('Testkurse', '0')) - { - $this->errormsg = 'Categorie nicht gefunden'; - return false; - } - - //StSem Categorie holen - if(!$id_stsem = $this->getCategorie($studiensemester_kurzbz, $id_testkurs)) - { - $this->errormsg = 'Categorie nicht gefunden'; - return false; - } - - $qry = "SELECT id, fullname, shortname FROM public.mdl_course WHERE shortname='".addslashes($shortname)."' AND category='$id_stsem' LIMIT 1"; - - if($result = pg_query($this->conn_moodle, $qry)) - { - if($row = pg_fetch_object($result)) - { - $this->mdl_fullname = $row->fullname; - $this->mdl_shortname = $row->shortname; - $this->mdl_course_id = $row->id; - return true; - } - else - { - $this->errormsg = 'Es wurde kein Testkurs gefunden'; - return false; - } - } - else - { - $this->errormsg = 'Fehler beim Abfragen der Kurse'; - return false; - } - } -} \ No newline at end of file +, + * Andreas Oesterreicher and + * Rudolf Hangl . + */ +/* + * + */ +class moodle_course +{ + var $conn; + var $conn_moodle; + var $errormsg; + var $result = array(); + + //Vilesci Attribute + var $moodle_id; + var $mdl_course_id; + var $lehreinheit_id; + var $lehrveranstaltung_id; + var $studiensemester_kurzbz; + var $insertamum; + var $insertvon; + var $gruppen; + + //Moodle Attribute + var $mdl_fullname; + var $mdl_shortname; + + var $mdl_context_id; + var $mdl_context_level; + var $mdl_context_instanceid; + var $mdl_context_path; + var $mdl_context_depth; + + var $note; + + // ********************************************** + // * moodle_course + // * @param $conn Connection zur Vilesci DB + // * $conn_moodle Connection zur Moodle DB + // ********************************************** + function moodle_course($conn, $conn_moodle) + { + $this->conn = $conn; + $this->conn_moodle = $conn_moodle; + + $qry = "SET CLIENT_ENCODING TO 'LATIN9';"; + pg_query($this->conn_moodle, $qry); + } + + // ********************************************** + // * Laedt einen MoodleKurs + // * @param mdl_course_id ID des Moodle Kurses + // * @return true wenn ok, false im Fehlerfall + // ********************************************** + function load($mdl_course_id) + { + $qry = "SELECT * FROM public.mdl_course WHERE id='".addslashes($mdl_course_id)."'"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + $this->mdl_fullname = $row->fullname; + $this->mdl_shortname = $row->shortname; + $this->mdl_course_id = $row->id; + return true; + } + else + { + $this->errormsg = 'Kurs wurde nicht gefunden'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden des Kurses'; + return false; + } + } + + // ********************************************** + // * Laedt alle MoodleKurse die zu einer LV/Stsem + // * plus die MoodleKurse die auf dessen LE haengen + // * @param lehrveranstaltung_id + // * studiensemester_kurzbz + // * @return true wenn ok, false im Fehlerfall + // ********************************************** + function getAll($lehrveranstaltung_id, $studiensemester_kurzbz) + { + $qry = "SELECT distinct on(mdl_course_id) * + FROM + lehre.tbl_lehrveranstaltung, lehre.tbl_lehreinheit, lehre.tbl_moodle + WHERE + tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id AND + tbl_lehrveranstaltung.lehrveranstaltung_id = '".addslashes($lehrveranstaltung_id)."' AND + tbl_lehreinheit.studiensemester_kurzbz='".addslashes($studiensemester_kurzbz)."' AND + ((tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_moodle.lehrveranstaltung_id AND tbl_moodle.studiensemester_kurzbz=tbl_lehreinheit.studiensemester_kurzbz) + OR + (tbl_lehreinheit.lehreinheit_id=tbl_moodle.lehreinheit_id) + )"; + + if($result = pg_query($this->conn, $qry)) + { + while($row=pg_fetch_object($result)) + { + $obj = new moodle_course($this->conn, $this->conn_moodle); + $obj->moodle_id = $row->moodle_id; + $obj->mdl_course_id = $row->mdl_course_id; + $obj->lehreinheit_id = $row->lehreinheit_id; + $obj->lehrveranstaltung_id = $row->lehrveranstaltung_id; + $obj->studiensemester_kurzbz = $row->studiensemester_kurzbz; + $obj->insertamum = $row->insertamum; + $obj->insertvon = $row->insertvon; + $obj->gruppen = ($row->gruppen=='t'?true:false); + + $qry_mdl = "SELECT * FROM public.mdl_course WHERE id='".addslashes($row->mdl_course_id)."'"; + if($result_mdl = pg_query($this->conn_moodle, $qry_mdl)) + { + if($row_mdl = pg_fetch_object($result_mdl)) + { + $obj->mdl_fullname = $row_mdl->fullname; + $obj->mdl_shortname = $row_mdl->shortname; + } + } + $this->result[] = $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + + } + + // ********************************************** + // * Schaut ob fuer diese LV/StSem schon ein + // * Moodle Kurs existiert + // * @param lehrveranstaltung_id + // * studiensemester_kurzbz + // * @return true wenn vorhanden, false wenn nicht + // ********************************************** + function course_exists_for_lv($lehrveranstaltung_id, $studiensemester_kurzbz) + { + $qry = "SELECT 1 FROM lehre.tbl_moodle WHERE lehrveranstaltung_id='".addslashes($lehrveranstaltung_id)."' AND studiensemester_kurzbz='".addslashes($studiensemester_kurzbz)."'"; + if($result = pg_query($this->conn, $qry)) + { + if(pg_num_rows($result)>0) + return true; + else + return false; + } + else + { + $this->errormsg = 'Fehler bei SELECT Abfrage in moodle_course.class.php / course_exists_for_lv'; + return false; + } + } + + // ********************************************** + // * Schaut ob fuer diese LE schon ein Moodle + // * Kurs existiert + // * @param lehreinheit_id + // * @return true wenn vorhanden, false wenn nicht + // ********************************************** + function course_exists_for_le($lehreinheit_id) + { + $qry = "SELECT 1 FROM lehre.tbl_moodle WHERE lehreinheit_id='".addslashes($lehreinheit_id)."'"; + if($result = pg_query($this->conn, $qry)) + { + if(pg_num_rows($result)>0) + return true; + else + return false; + } + else + { + $this->errormsg = 'Fehler bei SELECT Abfrage in moodle_course.class.php / course_exists_for_le'; + return false; + } + } + + // ********************************************** + // * Schaut ob fuer diese LV/StSem schon ein + // * Moodle Kurs existiert + // * @param lehrveranstaltung_id + // * studiensemester_kurzbz + // * @return true wenn vorhanden, false wenn nicht + // ********************************************** + function course_exists_for_allLE($lehrveranstaltung_id, $studiensemester_kurzbz) + { + $qry = "SELECT 1 FROM lehre.tbl_lehreinheit + WHERE lehrveranstaltung_id='".addslashes($lehrveranstaltung_id)."' + AND studiensemester_kurzbz='".addslashes($studiensemester_kurzbz)."' + AND lehreinheit_id NOT IN (SELECT lehreinheit_id FROM lehre.tbl_moodle WHERE lehreinheit_id=tbl_lehreinheit.lehreinheit_id)"; + if($result = pg_query($this->conn, $qry)) + { + if(pg_num_rows($result)>0) + return false; + else + return true; + } + else + { + $this->errormsg = 'Fehler bei SELECT Abfrage in moodle_course.class.php / course_exists_for_allLE'; + return false; + } + } + + // ************************************************ + // * wenn $var '' ist wird "null" zurueckgegeben + // * wenn $var !='' ist werden datenbankkritische + // * Zeichen mit backslash versehen und das Ergebnis + // * unter Hochkomma gesetzt. + // ************************************************ + function addslashes($var) + { + return ($var!=''?"'".addslashes($var)."'":'null'); + } + + // ************************************************ + // * Legt einen Eintrag in der tbl_moodle an + // * @return true wenn ok, false im Fehlerfall + // ************************************************ + function create_vilesci() + { + if($this->mdl_course_id=='') + { + $this->errormsg='mdl_course_id muss angegeben sein'; + return false; + } + + $qry = 'BEGIN; INSERT INTO lehre.tbl_moodle(mdl_course_id, lehreinheit_id, lehrveranstaltung_id, + studiensemester_kurzbz, insertamum, insertvon, gruppen) + VALUES('. + $this->addslashes($this->mdl_course_id).','. + $this->addslashes($this->lehreinheit_id).','. + $this->addslashes($this->lehrveranstaltung_id).','. + $this->addslashes($this->studiensemester_kurzbz).','. + $this->addslashes($this->insertamum).','. + $this->addslashes($this->insertvon).','. + ($this->gruppen?'true':'false').');'; + + if(pg_query($this->conn, $qry)) + { + $qry = "SELECT currval('lehre.tbl_moodle_moodle_id_seq') as id;"; + if($result = pg_query($this->conn, $qry)) + { + if($row = pg_fetch_object($result)) + { + $this->moodle_id = $row->id; + pg_query($this->conn, 'COMMIT;'); + return true; + } + else + { + pg_query($this->conn, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Lesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Lesen der Sequence'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Einfuegen des Datensatzes'; + return false; + } + } + + // *********************************************** + // * Legt einen Kurs im Moodle an + // *********************************************** + function create_moodle() + { + pg_query($this->conn_moodle, 'BEGIN;'); + + //CourseCategorie ermitteln + + //lehrveranstalung ID holen falls die nur die lehreinheit_id angegeben wurde + if($this->lehrveranstaltung_id=='') + { + $qry = "SELECT lehrveranstaltung_id FROM lehre.tbl_lehreinheit + WHERE lehreinheit_id='".addslashes($this->lehreinheit_id)."'"; + if($result = pg_query($this->conn, $qry)) + { + if($row = pg_fetch_object($result)) + { + $lvid = $row->lehrveranstaltung_id; + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Ermitteln der LehrveranstaltungID'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Ermitteln der LehrveranstaltungID'; + return false; + } + } + else + $lvid = $this->lehrveranstaltung_id; + + //Studiengang und Semester holen + $qry = "SELECT tbl_lehrveranstaltung.semester, UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as stg FROM lehre.tbl_lehrveranstaltung JOIN public.tbl_studiengang USING(studiengang_kz) + WHERE lehrveranstaltung_id='$lvid'"; + + if($result = pg_query($this->conn, $qry)) + { + if($row = pg_fetch_object($result)) + { + $semester = $row->semester; + $stg = $row->stg; + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Ermitteln von Studiengang und Semester'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Ermitteln von Studiengang und Semester'; + return false; + } + + //Studiensemester Categorie holen + if(!$id_stsem = $this->getCategorie($this->studiensemester_kurzbz, '0')) + { + if(!$id_stsem = $this->createCategorie($this->studiensemester_kurzbz, '0')) + echo "
Fehler beim Anlegen des Studiensemesters"; + } + //Studiengang Categorie holen + if(!$id_stg = $this->getCategorie($stg, $id_stsem)) + { + if(!$id_stg = $this->createCategorie($stg, $id_stsem)) + echo "
$this->errormsg"; + } + //Semester Categorie holen + if(!$id_sem = $this->getCategorie($semester, $id_stg)) + { + if(!$id_sem = $this->createCategorie($semester, $id_stg)) + echo "
$this->errormsg"; + } + + //CourseCategorie Context holen + $this->getContext(40, $id_sem); + + //Eintrag in tbl_mdl_course + $qry = "INSERT INTO public.mdl_course(category, sortorder, fullname, shortname, format, showgrades, newsitems, enrollable) + VALUES (".$this->addslashes($id_sem).", (SELECT max(sortorder)+1 FROM public.mdl_course), ".$this->addslashes($this->mdl_fullname).", ". + $this->addslashes($this->mdl_shortname).",'topics', 1, 5, 0);"; + + if($result = pg_query($this->conn_moodle, $qry)) + { + $qry = "SELECT currval('mdl_course_id_seq') as id"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + $this->mdl_course_id = $row->id; + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim INSERT'; + return false; + } + + //zum vorherigen Pfad die aktuelle id hinzufuegen + $path = "(SELECT '$this->mdl_context_path' || '/' || currval('mdl_context_id_seq'))"; + //vorherige tiefe um 1 erhoehen + $depth = $this->mdl_context_depth+1; + + //Context eintragen + $qry = "INSERT INTO public.mdl_context(contextlevel, instanceid, path, depth) VALUES('50', ". + $this->addslashes($this->mdl_course_id).",".$path.",".$this->addslashes($depth).");"; + + if(pg_query($this->conn_moodle, $qry)) + { + $qry = "SELECT currval('mdl_context_id_seq') as id"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + $this->mdl_context_id = $row->id; + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim INSERT'; + return false; + } + + //Bloecke hinzufuegen + $qry = + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(20, $this->mdl_course_id, 'course-view', 'l', 0, 1);". //Teilnehmer + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(1, $this->mdl_course_id, 'course-view', 'l', 1, 1);". //Aktivitäten + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(25, $this->mdl_course_id, 'course-view', 'l', 2, 1);". //Forumssuche + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(2, $this->mdl_course_id, 'course-view', 'l', 3, 1);". //Admin + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(9, $this->mdl_course_id, 'course-view', 'l', 4, 1);". //Kursliste + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(18, $this->mdl_course_id, 'course-view', 'r', 0, 1);". //Neueste Nachrichten + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(8, $this->mdl_course_id, 'course-view', 'r', 1, 1);". //Kalender / Bald aktuell... + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(22, $this->mdl_course_id, 'course-view', 'r', 2, 1);"; //Neueste Aktivitäten + + if(!pg_query($this->conn_moodle, $qry)) + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim INSERT der bloecke'; + return false; + } + else + { + pg_query($this->conn_moodle, 'COMMIT'); + return true; + } + + } + + // ************************************************************ + // * Laedt eine CourseCategorie anhand der Bezeichnung und der + // * ParentID + // ************************************************************ + function getCategorie($bezeichnung, $parent) + { + if($bezeichnung=='') + { + $this->errormsg = 'Bezeichnung muss angegeben werden'; + return false; + } + if($parent=='') + { + $this->errormsg = 'getCategorie: parent wurde nicht uebergeben'; + return false; + } + $qry = "SELECT id FROM public.mdl_course_categories WHERE name='".addslashes($bezeichnung)."' AND parent='".addslashes($parent)."'"; + + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + return $row->id; + } + else + { + $this->errormsg = 'Fehler beim Laden der KursKategorie'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden der KursKategorie'; + return false; + } + } + + // ************************************************************ + // * Erzeugt eine CourseCategorie anhand der Bezeichnung und der + // * ParentID + // ************************************************************ + function createCategorie($bezeichnung, $parent) + { + if($bezeichnung=='') + { + $this->errormsg = 'Bezeichnung muss angegeben werden'; + return false; + } + if($parent=='') + { + $this->errormsg = 'createCategorie: parent wurde nicht uebergeben: '.$bezeichnung.' '.$parent; + return false; + } + if($parent!='0') + { + //Parent laden + $qry = "SELECT * FROM public.mdl_course_categories WHERE id='".addslashes($parent)."'"; + //echo $qry; + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + $depth = $row->depth; + $path = $row->path; + } + else + { + $this->errormsg = 'Fehler beim Laden der KursKategorie'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden der KursKategorie'; + return false; + } + } + else + { + $depth=0; + $path=''; + } + + //KursKategorie anlegen + $qry = "BEGIN; INSERT INTO public.mdl_course_categories(name, parent, sortorder, + coursecount, visible, timemodified, depth, path, theme) + VALUES(".$this->addslashes($bezeichnung).",".$this->addslashes($parent).",". + "'999',0,1,0,".$this->addslashes($depth+1). + ", (SELECT ".$this->addslashes($path.'/')." || currval('mdl_course_categories_id_seq')), null);"; + + if(pg_query($this->conn_moodle, $qry)) + { + $qry = "SELECT currval('mdl_course_categories_id_seq') as id"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + $coursecatid = $row->id; + + //Context anlegen + //wenn Parent 0 ist, dann den SYSTEM Eintrag holen + if($parent!='0') + $qry = "SELECT path, depth FROM public.mdl_context WHERE contextlevel='40' AND instanceid='".addslashes($parent)."'"; + else + $qry = "SELECT path, depth FROM public.mdl_context WHERE contextlevel='10' AND instanceid='".addslashes($parent)."'"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + $path = $row->path; + $depth = $row->depth; + + //zum vorherigen Pfad die aktuelle id hinzufuegen + $path = "(SELECT '$path' || '/' || currval('mdl_context_id_seq'))"; + //vorherige tiefe um 1 erhoehen + $depth=$depth+1; + + //Context eintragen + $qry = "INSERT INTO public.mdl_context(contextlevel, instanceid, path, depth) VALUES('40', ". + $this->addslashes($coursecatid).",".$path.",".$this->addslashes($depth).");"; + + if(pg_query($this->conn_moodle, $qry)) + { + $qry = "SELECT currval('mdl_context_id_seq') as id"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + pg_query($this->conn_moodle,'COMMIT;'); + return $coursecatid; + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim INSERT'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK;'); + $this->errormsg = 'Fehler beim Auslesen des Contextes'.$qry; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK;'); + $this->errormsg = 'Fehler beim Auslesen des Contextes'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Speichern der KursKategorie'; + return false; + } + } + + // ************************************************************ + // * Laedt einen Context anhand des contextlevels und der instanceid + // ************************************************************ + function getContext($contextlevel, $instanceid) + { + + $qry ="SELECT * FROM public.mdl_context WHERE contextlevel='".addslashes($contextlevel)."' + AND instanceid='".addslashes($instanceid)."'"; + + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + $this->mdl_context_id = $row->id; + $this->mdl_context_contextlevelid = $row->id; + $this->mdl_context_instanceid = $row->instanceid; + $this->mdl_context_path = $row->path; + $this->mdl_context_depth = $row->depth; + + return true; + } + else + { + $this->errormsg = 'Eintrag wurde nicht gefunden'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Auslesen des Contexts'; + return false; + } + } + + // **************************************************** + // * Liefert alle Kurse dieser LV in denen der Student + // * zugeteilt ist + // **************************************************** + function getCourse($lehrveranstaltung_id, $studiensemester_kurzbz, $student_uid) + { + //alle betreffenden Kurse holen + $qry = "SELECT tbl_lehreinheit.lehreinheit_id, mdl_course_id FROM lehre.tbl_moodle JOIN lehre.tbl_lehreinheit USING(lehrveranstaltung_id, studiensemester_kurzbz) + WHERE tbl_moodle.lehrveranstaltung_id='".addslashes($lehrveranstaltung_id)."' + AND tbl_moodle.studiensemester_kurzbz='".addslashes($studiensemester_kurzbz)."' + UNION + SELECT tbl_lehreinheit.lehreinheit_id, mdl_course_id FROM lehre.tbl_moodle JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + WHERE tbl_lehreinheit.lehrveranstaltung_id='".addslashes($lehrveranstaltung_id)."' AND + tbl_lehreinheit.studiensemester_kurzbz='".addslashes($studiensemester_kurzbz)."'"; + + $courses = array(); + if($result = pg_query($this->conn, $qry)) + { + while($row = pg_fetch_object($result)) + { + //schauen in welchen der Student ist + $qry = "SELECT 1 FROM campus.vw_student_lehrveranstaltung + WHERE uid='".addslashes($student_uid)."' AND lehreinheit_id='".addslashes($row->lehreinheit_id)."'"; + + if($result_vw = pg_query($this->conn, $qry)) + { + if(pg_num_rows($result_vw)>0) + { + if(!array_key_exists($row->mdl_course_id, $courses)) + $courses[]=$row->mdl_course_id; + } + } + } + } + return $courses; + } + + // *************************************************** + // * Aktualisiert die Spalte gruppen in der tbl_moodle + // * @param moodle_id ID der MoodleZuteilung + // * gruppen boolean true wenn syncronisiert + // * werden soll, false wenn nicht + // * @return true wenn ok, false im Fehlerfall + // *************************************************** + function updateGruppenSync($moodle_id, $gruppen) + { + if(!is_numeric($moodle_id)) + { + $this->errormsg = 'Moodle_id muss eine gueltige Zahl sein'; + return false; + } + + $qry = "UPDATE lehre.tbl_moodle SET gruppen=".($gruppen?'true':'false')." WHERE moodle_id='".addslashes($moodle_id)."'"; + + if(pg_query($this->conn, $qry)) + { + return true; + } + else + { + $this->errormsg = 'Fehler beim Update'; + return false; + } + } + + // ******************************** + // * Legt einen Testkurs an + // ******************************** + function createTestkurs($lehrveranstaltung_id, $studiensemester_kurzbz) + { + pg_query($this->conn_moodle, 'BEGIN;'); + + //CourseCategorie ermitteln + + //Studiengang und Semester holen + $qry = "SELECT tbl_lehrveranstaltung.semester, UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as stg FROM lehre.tbl_lehrveranstaltung JOIN public.tbl_studiengang USING(studiengang_kz) + WHERE lehrveranstaltung_id='$lehrveranstaltung_id'"; + + if($result = pg_query($this->conn, $qry)) + { + if($row = pg_fetch_object($result)) + { + $semester = $row->semester; + $stg = $row->stg; + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Ermitteln von Studiengang und Semester'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Ermitteln von Studiengang und Semester'; + return false; + } + + //Testkurs Categorie holen + if(!$id_testkurs = $this->getCategorie('Testkurse', '0')) + { + if(!$id_testkurs = $this->createCategorie('Testkurse', '0')) + echo "
Fehler beim Anlegen der Testkurskategorie"; + } + //StSem Categorie holen + if(!$id_stsem = $this->getCategorie($studiensemester_kurzbz, $id_testkurs)) + { + if(!$id_stsem = $this->createCategorie($studiensemester_kurzbz, $id_testkurs)) + echo "
$this->errormsg"; + } + + //CourseCategorie Context holen + $this->getContext(40, $id_stsem); + + //Eintrag in tbl_mdl_course + $qry = "INSERT INTO public.mdl_course(category, sortorder, fullname, shortname, format, showgrades, newsitems, enrollable) + VALUES (".$this->addslashes($id_stsem).", (SELECT max(sortorder)+1 FROM public.mdl_course), ".$this->addslashes($this->mdl_fullname).", ". + $this->addslashes($this->mdl_shortname).",'topics', 1, 5, 0);"; + + if($result = pg_query($this->conn_moodle, $qry)) + { + $qry = "SELECT currval('mdl_course_id_seq') as id"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + $this->mdl_course_id = $row->id; + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim INSERT'; + return false; + } + + //zum vorherigen Pfad die aktuelle id hinzufuegen + $path = "(SELECT '$this->mdl_context_path' || '/' || currval('mdl_context_id_seq'))"; + //vorherige tiefe um 1 erhoehen + $depth = $this->mdl_context_depth+1; + + //Context eintragen + $qry = "INSERT INTO public.mdl_context(contextlevel, instanceid, path, depth) VALUES('50', ". + $this->addslashes($this->mdl_course_id).",".$path.",".$this->addslashes($depth).");"; + + if(pg_query($this->conn_moodle, $qry)) + { + $qry = "SELECT currval('mdl_context_id_seq') as id"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + $this->mdl_context_id = $row->id; + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim INSERT'; + return false; + } + + //Bloecke hinzufuegen + $qry = + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(20, $this->mdl_course_id, 'course-view', 'l', 0, 1);". //Teilnehmer + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(1, $this->mdl_course_id, 'course-view', 'l', 1, 1);". //Aktivitäten + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(25, $this->mdl_course_id, 'course-view', 'l', 2, 1);". //Forumssuche + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(2, $this->mdl_course_id, 'course-view', 'l', 3, 1);". //Admin + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(9, $this->mdl_course_id, 'course-view', 'l', 4, 1);". //Kursliste + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(18, $this->mdl_course_id, 'course-view', 'r', 0, 1);". //Neueste Nachrichten + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(8, $this->mdl_course_id, 'course-view', 'r', 1, 1);". //Kalender / Bald aktuell... + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(22, $this->mdl_course_id, 'course-view', 'r', 2, 1);"; //Neueste Aktivitäten + + if(!pg_query($this->conn_moodle, $qry)) + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim INSERT der Bloecke'; + return false; + } + else + { + pg_query($this->conn_moodle, 'COMMIT'); + return true; + } + } + + // ****************************************************** + // * Laedt den Testkurs zu dieser Lehrveranstaltung + // * @param lehrveranstaltung_id + // * studiensemester_kurzbz + // * @return ID wenn gefunden, false wenn nicht vorhanden + // ****************************************************** + function loadTestkurs($lehrveranstaltung_id, $studiensemester_kurzbz) + { + $qry = "SELECT + UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as kuerzel, + tbl_lehrveranstaltung.semester, tbl_lehrveranstaltung.kurzbz + FROM + lehre.tbl_lehrveranstaltung JOIN public.tbl_studiengang USING(studiengang_kz) + WHERE + lehrveranstaltung_id='".addslashes($lehrveranstaltung_id)."'"; + + if($result = pg_query($this->conn, $qry)) + { + if($row = pg_fetch_object($result)) + { + $shortname = strtoupper($studiensemester_kurzbz.'-'.$row->kuerzel.'-'.$row->semester.'-'.$row->kurzbz); + } + else + { + $this->errormsg = 'Fehler beim Laden des Testkurses'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden des Testkurses'; + return false; + } + + //Testkurs Categorie holen + if(!$id_testkurs = $this->getCategorie('Testkurse', '0')) + { + $this->errormsg = 'Categorie nicht gefunden'; + return false; + } + + //StSem Categorie holen + if(!$id_stsem = $this->getCategorie($studiensemester_kurzbz, $id_testkurs)) + { + $this->errormsg = 'Categorie nicht gefunden'; + return false; + } + + $qry = "SELECT id, fullname, shortname FROM public.mdl_course WHERE shortname='".addslashes($shortname)."' AND category='$id_stsem' LIMIT 1"; + + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + $this->mdl_fullname = $row->fullname; + $this->mdl_shortname = $row->shortname; + $this->mdl_course_id = $row->id; + return true; + } + else + { + $this->errormsg = 'Es wurde kein Testkurs gefunden'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Abfragen der Kurse'; + return false; + } + } + + // ****************************************************** + // * Laedt die Noten zu einem Moodle Course ID + // * @param mdl_course_id + // * + // * @return objekt mit den Noten der Teilnehmer dieses Kurses + // ****************************************************** + function loadNoten($lehrveranstaltung_id='', $studiensemester_kurzbz='',$student_uid='',$bDetailinfo=false) + { + + // Init + $lehrveranstaltung_id=trim($lehrveranstaltung_id); + $studiensemester_kurzbz=trim($studiensemester_kurzbz); + $student_uid=trim($student_uid); + $this->errormsg=''; + + // plausib + if (empty($lehrveranstaltung_id) + || empty($studiensemester_kurzbz) + || empty($student_uid) ) + { + $this->errormsg = 'Es fehlt die Eingabe von'; + $this->errormsg.=(empty($lehrveranstaltung_id)?' Lehrveranstaltung':$lehrveranstaltung_id); + $this->errormsg.=(empty($studiensemester_kurzbz)?' Semester (Kurzbz.)':$studiensemester_kurzbz); + $this->errormsg.=(empty($student_uid)?' Student':$student_uid); + return false; + } + + // -------------------------------------------------------------------- + // Ermitteln die Lehreinheiten und Moodle ID + // mit dem studiensemester_kurzbz ( bsp WS2008 ) + // und der lehrveranstaltung_id aus FAS ( bsp 23802 ) + // -------------------------------------------------------------------- + $qry = " + select lehreinheit_id, mdl_course_id,studiensemester_kurzbz,lehrveranstaltung_id + from ( + SELECT tbl_lehreinheit.lehreinheit_id, mdl_course_id,studiensemester_kurzbz,tbl_moodle.lehrveranstaltung_id + FROM lehre.tbl_moodle + JOIN lehre.tbl_lehreinheit USING(lehrveranstaltung_id, studiensemester_kurzbz) + WHERE tbl_moodle.lehrveranstaltung_id like E'".addslashes($lehrveranstaltung_id)."' + AND tbl_moodle.studiensemester_kurzbz like E'".addslashes($studiensemester_kurzbz)."' + + UNION + SELECT tbl_lehreinheit.lehreinheit_id, mdl_course_id,tbl_lehreinheit.studiensemester_kurzbz,tbl_moodle.lehrveranstaltung_id + FROM lehre.tbl_moodle + JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + WHERE tbl_lehreinheit.lehrveranstaltung_id like E'".addslashes($lehrveranstaltung_id)."' + AND tbl_lehreinheit.studiensemester_kurzbz like E'".addslashes($studiensemester_kurzbz)."' + ) as foo + WHERE lehrveranstaltung_id like E'".addslashes($lehrveranstaltung_id)."' + AND studiensemester_kurzbz like E'".addslashes($studiensemester_kurzbz)."' + ;"; + + if(!$result = @pg_query($this->conn, $qry)) + { + $this->errormsg = 'Fehler beim Lesen der Kurse '; + return false; + } + // init + $lehreinheit_kpl = array(); // Gesamte Information der Lehreinheit und Moodle IDs + $lehreinheit=array(); // Lehreinheiten zum lesen Studenten im Campus (Student und LE im FAS) + while($row = @pg_fetch_object($result)) + { + $row->lehreinheit_id=trim($row->lehreinheit_id); + $lehreinheit[$row->lehreinheit_id]=$row->lehreinheit_id; // Fuer Select Campus + $lehreinheit_kpl[$row->lehreinheit_id]=$row; // Fuer GesamtDaten wird Ergaenzt von Campus, + } + @pg_free_result($result); + if (count($lehreinheit)<1) // Es gibt keine Lehreinheiten + return false; + + // Fuer die naechste Verarbeitung die Array Sortieren + asort($lehreinheit); + reset($lehreinheit); + + asort($lehreinheit_kpl); + reset($lehreinheit_kpl); + + // -------------------------------------------------------------------- + // + // Suchen Studenten Lehreinheiten zu Moodle - LE + // Fuer die Notenermittlung sind nur Studenten wichtig + // die einen Moodlekurs besuchen der auch eine Lehrveranstaltung ist + // Als Ergebnis sind alle Studenten mit gemeinsame Moodle und FAS LV + // -------------------------------------------------------------------- + $qry = "SELECT * FROM campus.vw_student_lehrveranstaltung "; + $qry.= " WHERE uid like E'".addslashes($student_uid)."'"; + $qry.= " AND lehreinheit_id in (".implode(",",$lehreinheit)."); "; + + unset($lehreinheit); // lehreinheit wird nach Check nicht mehr benoetigt. wird nun die Lehrveranstalt + if(!$result = @pg_query($this->conn, $qry)) + { + $this->errormsg = 'Fehler beim Lesen der Studenten mit Lehreinheit(en) '; + return false; + } + // Lehreinheit und Moodlekurs zusammenfuehren + $lehrveranstaltUSER=array(); // Detailinformation fuer das Noten-Ergebnis + $lehrveranstaltMOODLE=array(); // Je Student alle Moodle IDs + while($row = @pg_fetch_object($result)) + { + // Von der Lehreinheit kann der Moodle-Kurs ermittelt werden + $mdl_course_id=trim($lehreinheit_kpl[$row->lehreinheit_id]->mdl_course_id); + // Die Moodle Kurs ID zu den Lehreinheitdaten hinzufuegen ( DatenSelect erweitern ) + $row->mdl_course_id=$mdl_course_id; + $mdl_username=trim($row->uid); + // Campusdaten merken fuer Student und MoodleID ( wird fuer merge mit Moodlenoten benotigt ) + $lehrveranstaltUSER[$mdl_username][$mdl_course_id]=$row; + // Alle Moodle IDs zum Studenten sammeln fuer Noten Select + $lehrveranstaltMOODLE[$mdl_username][$mdl_course_id]=$mdl_course_id; + } + @pg_free_result($result); + unset($lehreinheit_kpl); // Wird nicht mehr benoetigt (die Daten sind nun in LV,LE ) + + // Fuer die naechste Verarbeitung die Array Sortieren + asort($lehrveranstaltUSER); + reset($lehrveranstaltUSER); + + if (count($lehrveranstaltMOODLE)<1) // Es gibt keine Moodle - LV,LE + return false; + + // -------------------------------------------------------------------- + // Moodle Noten - Uebersetztungstabellen einlesen (min. ein Record ) + // -------------------------------------------------------------------- + $qry = "select * from mdl_grade_letters order by contextid; "; + if(!$result = @pg_query($this->conn_moodle, $qry)) + { + $this->errormsg = 'Fehler beim Lesen der Noten '; + return false; + } + $mdl_grade_letters_first=null; + // Init + $mdl_grade_letters=array(); + while($row = @pg_fetch_object($result)) + { + if ($mdl_grade_letters_first==null) + $mdl_grade_letters_first=$row->contextid; + $mdl_grade_letters[$row->contextid][]=$row; + } + asort($mdl_grade_letters); + reset($mdl_grade_letters); + if (!isset($mdl_grade_letters[$mdl_grade_letters_first])) + { + $this->errormsg = 'Fehler beim Lesen der Notenskala eins !'; + return false; + } + // -------------------------------------------------------------------- + // + // Moodle zu User, und MoodleIDs lesen + // aus der Tabelle GRADE "Noten werden die Benotungen geholt + // + // + // -------------------------------------------------------------------- + $qry = "select mdl_grade_items.courseid, + mdl_user.username,mdl_user.lastname,mdl_user.firstname, + mdl_grade_grades.userid, + mdl_grade_grades.rawgrade, + mdl_grade_grades.rawgrademax, + mdl_grade_grades.rawgrademin, + mdl_grade_grades.finalgrade, + mdl_course.fullname,mdl_course.shortname + from mdl_grade_items , mdl_grade_grades ,mdl_user,mdl_course + where mdl_grade_items.itemtype='course' + and mdl_grade_grades.finalgrade IS NOT NULL + and mdl_course.id=mdl_grade_items.courseid + and mdl_grade_grades.itemid=mdl_grade_items.id + and mdl_grade_grades.userid=mdl_user.id + "; + $usr_qry=""; + + + + while (list( $user_key, $course_ids ) = each($lehrveranstaltMOODLE) ) + { + if(empty($usr_qry)) + $usr_qry.=" and ( (mdl_user.username like E'".addslashes($user_key)."' and mdl_grade_items.courseid in (".implode(",",$course_ids).") ) "; + else + $usr_qry.=" or (mdl_user.username like E'".addslashes($user_key)."' and mdl_grade_items.courseid in (".implode(",",$course_ids).") ) "; + } + if (!empty($usr_qry)) + $qry.=$usr_qry." )"; + $qry.= "order by mdl_grade_items.courseid,mdl_user.lastname,mdl_user.firstname;"; // Ende SQL String + + if (isset($lehrveranstaltMOODLE)) // wird nicht mehr benoetigt + unset($lehrveranstaltMOODLE); + + if(!$result = @pg_query($this->conn_moodle, $qry)) + { + $this->errormsg = 'Fehler beim Lesen der Moodle Benutzer und Noten '; + return false; + } + + // Init + $mdl_course=array(); + $mdl_noten=array(); + $mdl_noten_course=array(); + while($row = @pg_fetch_object($result)) + { + $mdl_course_id=trim($row->courseid); + $mdl_username=trim($row->username); + $mdl_finalgrade=trim($row->finalgrade); + + if (empty($mdl_finalgrade)) + continue; // Keine Notenfindung + + // Vergleichswerte fuer die Noten aus der Tabelle mdl_grade_letters suchen + $arrTmpDefaultNoten=$mdl_grade_letters[$mdl_grade_letters_first]; + if (isset($mdl_grade_letters[$mdl_course_id])) + { + $arrTmpDefaultNoten=$mdl_grade_letters[$mdl_course_id]; + } + $row->TabellezurNotenermittlung=$arrTmpDefaultNoten; + $row->note=0; + for ($iTmpIndex=0;$iTmpIndexlowerboundary; + $iTmpFaktor=(!empty($row->rawgrademax)?(int)(100/$row->rawgrademax):1); + if ($mdl_finalgrade>=( $iTmpVergl / $iTmpFaktor) ) + { + if (is_numeric($arrTmpDefaultNoten[$iTmpIndex]->letter)) + $row->note=($iTmpIndex + 1); + else + { + if ( substr($arrTmpDefaultNoten[$iTmpIndex]->letter,0,1)=="A") + $row->note=1; + elseif (substr($arrTmpDefaultNoten[$iTmpIndex]->letter,0,1)=="B") + $row->note=2; + elseif (substr($arrTmpDefaultNoten[$iTmpIndex]->letter,0,1)=="C") + $row->note=3; + elseif (substr($arrTmpDefaultNoten[$iTmpIndex]->letter,0,1)=="D") + $row->note=4; + else + $row->note=5; + } + break; + } + } + + // Wenn kein Detail werden nur die Noten genommen Moodle Noten + if (!$bDetailinfo) + { + $mdl_noten_course[]=array("courseid"=>$row->courseid,"fullname"=>$row->fullname,"shortname"=>$row->shortname,"userid"=>$row->userid,"username"=>$row->username,"firstname"=>$row->firstname,"lasttname"=>$row->lastname,"note"=>$row->note); + $mdl_noten[]=$row->note; + $mdl_course[]=$row; + } + else // Fuer Detailinformation Moodle Noten und Lehrveranstaltung mischen zu einem Datensatz + { + if ($bDetailinfo && isset($lehrveranstaltUSER[$mdl_username][$mdl_course_id])) + { + $lehrverantstaltung=$lehrveranstaltUSER[$mdl_username][$mdl_course_id]; + while (list( $key, $value ) = each($lehrverantstaltung) ) + $row->$key=$value; + unset($lehrverantstaltung); + $mdl_course[$mdl_course_id][]=$row; + } + elseif($bDetailinfo) // Wenn Detailinformation werden auch die ohne FAS LV genommen + { + $mdl_course['ohneLV'][]=$row; + } + } + + +# echo "
courseid:=".$row->courseid ."(".$row->fullname." ".$row->shortname.") username:=".$row->username ." Name:=".$row->firstname." ".$row->lastname." Note ".$row->note .""; + + } + // nicht benoetigten Speicher freigeben + @pg_free_result($result); + unset($result); + + if (isset($qry)) unset($qry); + if (isset($moodle_id)) unset($moodle_id); + if (isset($lehreinheit_id)) unset($lehreinheit_id); + if (isset($lehrveranstaltUSER)) unset($lehrveranstaltUSER); + + // Fuer Detail wird die gesamte Information geliefert, oder ohne Detail nur die Noten + if (!is_array($mdl_course) || count($mdl_course)<1) + { + $this->errormsg = ' keine Informationen gefunden'. count($mdl_course) ; + return false; + } + + if($bDetailinfo) // Alle Informationen Retour + return $this->note=$mdl_course; + + // Nur die Noten senden wenn 1 Datensatz gefunden wird, + // ansonst weitere Informationen zum zuordnen der Note zu einem Studenten + return (count($mdl_noten)>1?$this->note=$mdl_noten_course:$this->note=$mdl_noten[0]); + } // Ende moodle Noten + + +} // Ende moodle_course class \ No newline at end of file