diff --git a/include/moodle_course.class.php b/include/moodle_course.class.php index 11c1c512a..fa5dc6b6b 100644 --- a/include/moodle_course.class.php +++ b/include/moodle_course.class.php @@ -48,7 +48,16 @@ class moodle_course var $mdl_context_instanceid; var $mdl_context_path; var $mdl_context_depth; - + + var $lehrveranstaltung_bezeichnung; + var $lehrveranstaltung_semester; + var $lehrveranstaltung_studiengang_kz; + + var $mdl_benotungen; + var $mdl_resource; + var $mdl_quiz; + var $mdl_chat; + var $note; // ********************************************** @@ -94,7 +103,7 @@ class moodle_course return false; } } - + // ********************************************** // * Laedt alle MoodleKurse die zu einer LV/Stsem // * plus die MoodleKurse die auf dessen LE haengen @@ -150,6 +159,144 @@ class moodle_course } } + + + // ********************************************** + // * 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 getAllVariant($lehrveranstaltung_id='',$studiensemester_kurzbz='',$studiengang='',$semester='',$detail=false) + { + // Initialisierung + $this->errormsg = ''; + $this->result=array(); + +# ,tbl_moodle.* + + $qry = "SELECT distinct tbl_lehreinheit.studiensemester_kurzbz,tbl_lehrveranstaltung.semester + ,tbl_lehrveranstaltung.bezeichnung,tbl_lehrveranstaltung.kurzbz,tbl_lehrveranstaltung.lehrveranstaltung_id,tbl_lehrveranstaltung.studiengang_kz,tbl_lehrveranstaltung.semester + ,tbl_moodle.mdl_course_id + FROM lehre.tbl_lehrveranstaltung, lehre.tbl_lehreinheit,lehre.tbl_moodle + where tbl_lehreinheit.lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id + and ((tbl_moodle.lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id + and tbl_moodle.studiensemester_kurzbz=lehre.tbl_lehreinheit.studiensemester_kurzbz) + OR + (tbl_moodle.lehreinheit_id=tbl_lehreinheit.lehreinheit_id)) + "; + + if ($lehrveranstaltung_id!='') + $qry.=" and tbl_lehrveranstaltung.lehrveranstaltung_id='".addslashes($lehrveranstaltung_id)."' "; + + if ($studiensemester_kurzbz!='') + $qry.=" and tbl_lehreinheit.studiensemester_kurzbz='".addslashes($studiensemester_kurzbz)."' "; + + if ($studiengang!='') + $qry.=" and tbl_lehrveranstaltung.studiengang_kz='".addslashes($studiengang)."' "; + + if ($semester!='') + $qry.=" and tbl_lehrveranstaltung.semester='".addslashes($semester)."' "; + + $qry.=";"; +#exit($qry); + + + if(!$result = @pg_query($this->conn, $qry)) + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + + 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); + $obj->lehrveranstaltung_kurzbz=$row->kurzbz; + + $obj->lehrveranstaltung_bezeichnung=$row->bezeichnung; + $obj->lehrveranstaltung_semester=$row->semester; + $obj->lehrveranstaltung_studiengang_kz=$row->studiengang_kz; + + $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; + } + } + + + + // Anzahl Benotungen + $obj->mdl_benotungen = 0; + + // Anzahl Aktivitaeten und Lehrmaterial + $obj->mdl_resource = 0; + $obj->mdl_quiz = 0; + $obj->mdl_chat = 0; + + + // Anzahl Noten je Kurs und User + $qry_mdl = "select count(*) as anz + from mdl_grade_grades , mdl_grade_items + where mdl_grade_items.itemtype='course' + and mdl_grade_grades.finalgrade IS NOT NULL + and mdl_grade_grades.itemid=mdl_grade_items.id + and mdl_grade_items.courseid ='".addslashes($row->mdl_course_id)."'; "; + + if($detail && $result_mdl = @pg_query($this->conn_moodle, $qry_mdl)) + { + if($row_mdl = @pg_fetch_object($result_mdl)) + { + $obj->mdl_benotungen = (empty($row_mdl->anz)?0:$row_mdl->anz); + } + } + + + $qry_mdl = "select count(course) as anz from public.mdl_chat where mdl_chat.course='".addslashes($row->mdl_course_id)."'; "; + if($detail && $result_mdl = @pg_query($this->conn_moodle, $qry_mdl)) + { + if($row_mdl = @pg_fetch_object($result_mdl)) + { + $obj->mdl_chat = (empty($row_mdl->anz)?0:$row_mdl->anz); + } + } + + $qry_mdl = "select count(course) as anz from public.mdl_resource where mdl_resource.course='".addslashes($row->mdl_course_id)."'; "; + if($detail && $result_mdl = @pg_query($this->conn_moodle, $qry_mdl)) + { + if($row_mdl = @pg_fetch_object($result_mdl)) + { + $obj->mdl_resource = (empty($row_mdl->anz)?0:$row_mdl->anz); + } + } + + + $qry_mdl = "select count(course) as anz from public.mdl_quiz where mdl_quiz.course='".addslashes($row->mdl_course_id)."'; "; + if($detail && $result_mdl = @pg_query($this->conn_moodle, $qry_mdl)) + { + if($row_mdl = @pg_fetch_object($result_mdl)) + { + $obj->mdl_quiz = (empty($row_mdl->anz)?0:$row_mdl->anz); + } + } + $this->result[] = $obj; + } + return true; + + } + // ********************************************** // * Schaut ob fuer diese LV/StSem schon ein @@ -474,6 +621,7 @@ class moodle_course } + // ************************************************************ // * Laedt eine CourseCategorie anhand der Bezeichnung und der // * ParentID @@ -1007,7 +1155,6 @@ class moodle_course $this->errormsg.=(empty($student_uid)?' Student':$student_uid); return false; } - // -------------------------------------------------------------------- // Ermitteln die Lehreinheiten und Moodle ID // mit dem studiensemester_kurzbz ( bsp WS2008 ) @@ -1032,6 +1179,7 @@ class moodle_course $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) @@ -1151,9 +1299,6 @@ class moodle_course and mdl_grade_grades.userid=mdl_user.id "; $usr_qry=""; - - - while (list( $user_key, $course_ids ) = each($lehrveranstaltMOODLE) ) { if(empty($usr_qry)) diff --git a/include/moodle_user.class.php b/include/moodle_user.class.php index 496abae57..5b707320a 100644 --- a/include/moodle_user.class.php +++ b/include/moodle_user.class.php @@ -1,785 +1,780 @@ -, - * Andreas Oesterreicher and - * Rudolf Hangl . - */ -/* - * requires moodle_course.class.php - * studiengang.class.php - */ -class moodle_user -{ - var $conn; - var $conn_moodle; - var $errormsg; - var $log=''; //log message fuer Syncro - var $log_public=''; //log message fuer Syncro - var $sync_create=0; //anzahl der durchgefuehrten zuteilungen beim syncro - var $group_update=0; //anzahl der updates an gruppen - - var $mdl_user_id; - var $mdl_user_username; - var $mdl_user_firstname; - var $mdl_user_lastname; - - - // ********************************************** - // * moodle_user - // * @param $conn Connection zur Vilesci DB - // * $conn_moodle Connection zur Moodle DB - // ********************************************** - function moodle_user($conn, $conn_moodle) - { - $this->conn = $conn; - $this->conn_moodle = $conn_moodle; - - $qry = "SET CLIENT_ENCODING TO 'LATIN9';"; - pg_query($this->conn_moodle, $qry); - } - - function loaduser($uid) - { - $qry = "SELECT * FROM public.mdl_user WHERE username='".addslashes($uid)."'"; - - if($result = pg_query($this->conn_moodle, $qry)) - { - if($row = pg_fetch_object($result)) - { - $this->mdl_user_id = $row->id; - $this->mdl_user_username = $row->username; - $this->mdl_user_firstname = $row->firstname; - $this->mdl_user_lastname = $row->lastname; - return true; - } - else - { - $this->errormsg = 'User wurde nicht gefunden: '.$uid; - return false; - } - } - else - { - $this->errormsg = 'Fehler beim Laden des Users'; - return false; - } - } - - // *********************************************** - // * Liefert ein Array mit allen Lektoren die - // * zu dem Moodle Kurs zugeteilt sind - // *********************************************** - function getMitarbeiter($mdl_course_id) - { - //Mitarbeiter laden die zu diesem Kurs zugeteilt sind - $qry = "SELECT - mitarbeiter_uid - FROM - lehre.tbl_lehreinheitmitarbeiter JOIN lehre.tbl_moodle USING(lehreinheit_id) - WHERE - mdl_course_id='".addslashes($mdl_course_id)."' - UNION - SELECT - mitarbeiter_uid - FROM - lehre.tbl_lehreinheitmitarbeiter JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) - JOIN lehre.tbl_moodle USING(lehrveranstaltung_id) - WHERE - tbl_lehreinheit.studiensemester_kurzbz=tbl_moodle.studiensemester_kurzbz - AND mdl_course_id='".addslashes($mdl_course_id)."'"; - $mitarbeiter=array(); - if($result_ma = pg_query($this->conn, $qry)) - { - while($row_ma = pg_fetch_object($result_ma)) - { - $mitarbeiter[] = $row_ma->mitarbeiter_uid; - } - return $mitarbeiter; - } - } - - // ************************************************ - // * Synchronisiert die Lektoren der Lehreinheiten - // * mit denen des Moodle Kurses - // * @param $mdl_course_id ID des MoodleKurses - // * lehrveranstaltung_id wird nur angegeben beim Syncro von Testkursen - // * studiensemester_kurzbz wird nur angegeben beim Syncro von Testkursen - // * @return true wenn ok, false wenn Fehler - // ************************************************ - function sync_lektoren($mdl_course_id, $lehrveranstaltung_id=null, $studiensemester_kurzbz=null) - { - //Mitarbeiter laden die zu diesem Kurs zugeteilt sind - if(!is_null($lehrveranstaltung_id) && !is_null($studiensemester_kurzbz)) - { - //Bei Testkursen werden alle Lektoren einer Lehrveranstaltung zugeteilt - //da hier kein Eintrag in der tbl_moodle vorhanden ist, werden die Lektoren direkt aus - //der tbl_lehreinheitmitarbeiter geholt. - $qry = "SELECT mitarbeiter_uid FROM lehre.tbl_lehreinheitmitarbeiter JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) - WHERE lehrveranstaltung_id='".addslashes($lehrveranstaltung_id)."' - AND studiensemester_kurzbz='".addslashes($studiensemester_kurzbz)."'"; - } - else - { - $qry = "SELECT - mitarbeiter_uid - FROM - lehre.tbl_lehreinheitmitarbeiter JOIN lehre.tbl_moodle USING(lehreinheit_id) - WHERE - mdl_course_id='".addslashes($mdl_course_id)."' - UNION - SELECT - mitarbeiter_uid - FROM - lehre.tbl_lehreinheitmitarbeiter JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) - JOIN lehre.tbl_moodle USING(lehrveranstaltung_id) - WHERE - tbl_lehreinheit.studiensemester_kurzbz=tbl_moodle.studiensemester_kurzbz - AND mdl_course_id='".addslashes($mdl_course_id)."'"; - } - $mitarbeiter=''; - if($result_ma = pg_query($this->conn, $qry)) - { - //Context des Kurses holen - $mdlcourse = new moodle_course($this->conn, $this->conn_moodle); - if(!$mdlcourse->getContext(50, $mdl_course_id)) - { - $this->errormsg = 'Fehler beim Laden des Contexts'; - return false; - } - - while($row_ma = pg_fetch_object($result_ma)) - { - //MoodleID des Users holen bzw ggf neu anlegen - if(!$this->loaduser($row_ma->mitarbeiter_uid)) - { - //User anlegen - if(!$this->createUser($row_ma->mitarbeiter_uid)) - { - $this->errormsg = "Fehler beim Anlegen des Users $row_ma->mitarbeiter_uid: $this->errormsg"; - return false; - } - else - $this->errormsg = ''; - } - - if($mitarbeiter!='') - $mitarbeiter.=','; - $mitarbeiter.=$this->mdl_user_id; - - //Nachschauen ob dieser Lektor bereits zugeteilt ist - $qry = "SELECT 1 FROM public.mdl_role_assignments - WHERE - userid='".addslashes($this->mdl_user_id)."' AND - contextid='".addslashes($mdlcourse->mdl_context_id)."'"; - if($result = pg_query($this->conn_moodle, $qry)) - { - if(pg_num_rows($result)==0) - { - //Mitarbeiter ist noch nicht zugeteilt. - - if($this->createZuteilung($this->mdl_user_id, $mdlcourse->mdl_context_id, 3)) - { - $this->log.="\nder Lektor $this->mdl_user_firstname $this->mdl_user_lastname wurde zum Kurs hinzugefügt"; - $this->log_public.="\nder Lektor $this->mdl_user_firstname $this->mdl_user_lastname wurde zum Kurs hinzugefügt"; - $this->sync_create++; - } - else - $this->log.="\nFehler beim Anlegen der Lektoren-Zuteilung: $this->errormsg"; - } - } - else - { - $this->errormsg = 'Fehler beim Auslesen der Rollen'; - return false; - } - - $this->createGlobaleGastrolle($this->mdl_user_id); - } - - //Lektoren loeschen die nicht mehr zugeordnet sind - /* Derzeit werden zugeteilte Personen nicht geloescht - $qry = "SELECT * FROM mdl_role_assignments - WHERE - contextid='".addslashes($mdlcourse->mdl_context_id)."' AND - userid NOT in ($mitarbeiter)"; - - if($result = pg_query($this->conn_moodle, $qry)) - { - while($row = pg_fetch_object($result)) - { - $this->deleteZuteilung($row->userid, $mdlcourse->mdl_context_id); - } - } - else - { - $this->errormsg = 'Fehler beim Ermitteln der Lektoren die nicht mehr zugeteilt sind'; - return false; - } - */ - return true; - } - else - { - $this->errormsg = 'Fehler beim Ermitteln der Zugeteilten Lektoren'; - return false; - } - } - - // ************************************************ - // * Synchronisiert die Studenten der Lehreinheiten - // * mit denen des Moodle Kurses - // * @param $mdl_course_id ID des MoodleKurses - // * @return true wenn ok, false wenn Fehler - // ************************************************ - function sync_studenten($mdl_course_id) - { - //Studentengruppen laden die zu diesem Kurs zugeteilt sind - $qry = "SELECT - studiengang_kz, semester, verband, gruppe, gruppe_kurzbz, tbl_moodle.studiensemester_kurzbz, tbl_moodle.gruppen - FROM - lehre.tbl_lehreinheitgruppe JOIN lehre.tbl_moodle USING(lehreinheit_id) - WHERE - mdl_course_id='".addslashes($mdl_course_id)."' - UNION - SELECT - studiengang_kz, semester, verband, gruppe, gruppe_kurzbz, tbl_moodle.studiensemester_kurzbz, tbl_moodle.gruppen - FROM - lehre.tbl_lehreinheitgruppe JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) - JOIN lehre.tbl_moodle USING(lehrveranstaltung_id) - WHERE - tbl_lehreinheit.studiensemester_kurzbz=tbl_moodle.studiensemester_kurzbz - AND mdl_course_id='".addslashes($mdl_course_id)."'"; - $studenten=''; - if($result_std = pg_query($this->conn, $qry)) - { - //Context des Kurses holen - $mdlcourse = new moodle_course($this->conn, $this->conn_moodle); - if(!$mdlcourse->getContext(50, $mdl_course_id)) - { - $this->errormsg = 'Fehler beim Laden des Contexts'; - return false; - } - - while($row_std = pg_fetch_object($result_std)) - { - //Schauen ob fuer diesen Kurs die Gruppen mitgesynct werden sollen - $gruppensync = $row_std->gruppen=='t'?true:false; - - //Studenten dieser Gruppe holen - - if($row_std->gruppe_kurzbz=='') //LVB Gruppe - { - $qry = "SELECT - distinct student_uid - FROM - public.tbl_studentlehrverband - WHERE - studiensemester_kurzbz='$row_std->studiensemester_kurzbz' AND - studiengang_kz = '$row_std->studiengang_kz' AND - semester = '$row_std->semester'"; - if(trim($row_std->verband)!='') - { - $qry.=" AND verband = '$row_std->verband'"; - if(trim($row_std->gruppe)!='') - { - $qry.=" AND gruppe = '$row_std->gruppe'"; - } - } - $studiengang_obj = new studiengang($this->conn); - $studiengang_obj->load($row_std->studiengang_kz); - $gruppenbezeichnung = $studiengang_obj->kuerzel.'-'.trim($row_std->semester).trim($row_std->verband).trim($row_std->gruppe); - } - else //Spezialgruppe - { - $qry = "SELECT - distinct uid as student_uid - FROM - public.tbl_benutzergruppe - WHERE - gruppe_kurzbz='$row_std->gruppe_kurzbz' AND - studiensemester_kurzbz='$row_std->studiensemester_kurzbz' - "; - $gruppenbezeichnung = $row_std->gruppe_kurzbz; - } - - if($result_user = pg_query($this->conn, $qry)) - { - while($row_user = pg_fetch_object($result_user)) - { - - //MoodleID des Users holen bzw ggf neu anlegen - if(!$this->loaduser($row_user->student_uid)) - { - //User anlegen - if(!$this->createUser($row_user->student_uid)) - { - $this->errormsg = "Fehler beim Anlegen des Users $row_user->student_uid: $this->errormsg"; - return false; - } - else - $this->errormsg = ''; - } - - if($studenten!='') - $studenten.=','; - $studenten.=$this->mdl_user_id; - - //Nachschauen ob dieser Student bereits zugeteilt ist - $qry = "SELECT 1 FROM public.mdl_role_assignments - WHERE - userid='".addslashes($this->mdl_user_id)."' AND - contextid='".addslashes($mdlcourse->mdl_context_id)."'"; - if($result = pg_query($this->conn_moodle, $qry)) - { - if(pg_num_rows($result)==0) - { - //Student ist noch nicht zugeteilt. - - if($this->createZuteilung($this->mdl_user_id, $mdlcourse->mdl_context_id, 5)) - { - $this->log.="\nder Student $this->mdl_user_firstname $this->mdl_user_lastname wurde zum Kurs hinzugefügt"; - $this->log_public.="\nder Student $this->mdl_user_firstname $this->mdl_user_lastname wurde zum Kurs hinzugefügt"; - $this->sync_create++; - } - else - $this->log.="\nFehler beim Anlegen der Studenten-Zuteilung: $this->errormsg"; - } - } - else - { - $this->errormsg = 'Fehler beim Auslesen der Rollen'; - return false; - } - - //globale Gastrolle anlegen - $this->createGlobaleGastrolle($this->mdl_user_id); - - //Gruppenzuteilung - if($gruppensync) - { - //Schauen ob die Gruppe vorhanden ist - if(!$groupid = $this->getGroup($mdl_course_id, $gruppenbezeichnung)) - { - //wenn nicht dann anlegen - if(!$groupid = $this->createGroup($mdl_course_id, $gruppenbezeichnung)) - continue; - $this->group_update++; - $this->log.="\nes wurde eine neue Gruppe angelgt: $gruppenbezeichnung"; - $this->log_public.="\nes wurde eine neue Gruppe angelgt: $gruppenbezeichnung"; - } - - //Schauen ob eine Zuteilung zu dieser Gruppe vorhanden ist - if(!$this->getGroupMember($groupid, $this->mdl_user_id)) - { - //wenn nicht dann zuteilen - $this->createGroupMember($groupid, $this->mdl_user_id); - $this->group_update++; - $this->log.="\nder Student $this->mdl_user_firstname $this->mdl_user_lastname wurde der Gruppe $gruppenbezeichnung zugeordnet"; - $this->log_public.="\nder Student $this->mdl_user_firstname $this->mdl_user_lastname wurde der Gruppe $gruppenbezeichnung zugeordnet"; - } - } - } - } - } - - //Studenten loeschen die nicht mehr zugeordnet sind - /* Derzeit werden zugeteilte Personen nicht geloescht - $qry = "SELECT * FROM mdl_role_assignments - WHERE - contextid='".addslashes($mdlcourse->mdl_context_id)."' AND - userid NOT in ($studenten)"; - - if($result = pg_query($this->conn_moodle, $qry)) - { - while($row = pg_fetch_object($result)) - { - $this->deleteZuteilung($row->userid, $mdlcourse->mdl_context_id); - } - } - else - { - $this->errormsg = 'Fehler beim Ermitteln der Studenten die nicht mehr zugeteilt sind'; - return false; - } - */ - return true; - } - else - { - $this->errormsg = 'Fehler beim Ermitteln der Zugeteilten Studenten'; - return false; - } - } - - // ************************************************ - // * Schaut ob eine Zuteilung von Person zu Gruppe - // * existiert - // * @param grouid ID der Gruppe - // * userid ID des Users - // * @return ID der Zuteilung - // ************************************************ - function getGroupMember($groupid, $userid) - { - $qry = "SELECT id FROM public.mdl_groups_members WHERE groupid='".addslashes($groupid)."' AND userid='".addslashes($userid)."'"; - if($result = pg_query($this->conn_moodle, $qry)) - { - if($row = pg_fetch_object($result)) - { - return $row->id; - } - else - { - return false; - } - } - else - { - $this->errormsg = 'Fehler beim Ermitteln der Gruppe'; - return false; - } - } - - // *************************************************** - // * Legt eine Zuteilung eines Users zu - // * einer Gruppe an - // * @param groupid ID der Gruppe - // * userid ID des Users - // * @return ID der Zuteilung oder false im Fehlerfall - // *************************************************** - function createGroupMember($groupid, $userid) - { - $qry = 'BEGIN; INSERT INTO public.mdl_groups_members(groupid, userid) VALUES('. - $this->addslashes($groupid).','.$this->addslashes($userid).');'; - if(pg_query($this->conn_moodle, $qry)) - { - $qry = "SELECT currval('mdl_groups_members_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 $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 - { - $this->errormsg = 'Fehler beim Anlegen der Zuteilung'; - return false; - } - } - // ************************************************ - // * Holt die ID einer MoodleGruppe - // * @param $mdl_course_id ID des Kurses - // * $gruppenbezeichnung Name der Gruppe - // * @return GruppenID wenn ok, false im Fehlerfall - // ************************************************ - function getGroup($mdl_course_id, $gruppenbezeichnung) - { - $qry = "SELECT id FROM public.mdl_groups WHERE courseid='".addslashes($mdl_course_id)."' AND name='".addslashes($gruppenbezeichnung)."'"; - - if($result = pg_query($this->conn_moodle, $qry)) - { - if($row = pg_fetch_object($result)) - { - return $row->id; - } - else - { - $this->errormsg = "Gruppe wurde nciht gefunden $gruppenbezeichnung"; - return false; - } - } - else - { - $this->errormsg = 'Fehler beim Laden einer Gruppe'; - return false; - } - } - - // **************************************************** - // * Legt eine MoodleGruppe zu einem Kurs an - // * @param mdl_course_id ID des MoodleKuses - // * gruppenbezeichnung Bezeichnung der Gruppe - // * @return ID der Gruppe wenn ok, false im Fehlerfall - // **************************************************** - function createGroup($mdl_course_id, $gruppenbezeichnung) - { - $qry = 'BEGIN;INSERT INTO public.mdl_groups(courseid, name, description) VALUES('. - $this->addslashes($mdl_course_id).','. - $this->addslashes($gruppenbezeichnung).','. - $this->addslashes($gruppenbezeichnung).');'; - if(pg_query($this->conn_moodle, $qry)) - { - $qry = "SELECT currval('mdl_groups_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 $row->id; - } - else - { - pg_query($this->conn_moodle, 'ROLLBACK;'); - $this->errormsg = 'Fehler beim Auslesen der GruppenSequence'; - return false; - } - } - else - { - pg_query($this->conn_moodle, 'ROLLBACK;'); - $this->errormsg = 'Fehler beim Auslesen der GruppenSequence'; - return false; - } - } - else - { - $this->errormsgr ='Fehler beim Anlegen der Gruppe'; - 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 User im Moodle an - // * @param $uid UID der Person die angelegt werden soll - // * @return true wenn ok, false wenn Fehler - // ******************************************** - function createUser($uid) - { - $qry = "SELECT uid, vorname, nachname FROM campus.vw_benutzer WHERE uid='".addslashes($uid)."'"; - if($result = pg_query($this->conn, $qry)) - { - if($row = pg_fetch_object($result)) - { - $username = $row->uid; - $vorname = $row->vorname; - $nachname = $row->nachname; - - $qry = "BEGIN; INSERT INTO public.mdl_user(auth, username, idnumber, firstname, lastname, email, mnethostid, confirmed, lang) - VALUES('ldap', ". - $this->addslashes($username).", ". - $this->addslashes($username).",". - $this->addslashes($vorname).",". - $this->addslashes($nachname).",". - $this->addslashes($username.'@'.DOMAIN).", 1, 1, 'de_utf8');"; - - if(pg_query($this->conn_moodle, $qry)) - { - $qry ="SELECT currval('mdl_user_id_seq') as id;"; - if($result = pg_query($this->conn_moodle, $qry)) - { - if($row = pg_fetch_object($result)) - { - pg_query($this->conn_moodle, 'COMMIT;'); - $this->mdl_user_id = $row->id; - return true; - } - else - { - pg_query($this->conn_moodle,'ROLLBACK'); - $this->errormsg = 'Fehler beim Lesen der Sequence'; - return false; - } - } - else - { - pg_query($this->conn_moodle,'ROLLBACK'); - $this->errormsg = 'Fehler beim Lesen der Sequence'; - return false; - } - } - else - { - pg_query($this->conn_moodle,'ROLLBACK'); - $this->errormsg = 'Fehler beim Anlegen des Users'; - return false; - } - } - else - { - $this->errormsg = 'User wurde nicht gefunden: '.$uid; - return false; - } - } - else - { - $this->errormsg = 'Fehler beim Laden des Users'; - return false; - } - } - - // ********************************************* - // * Teilt den User mit der ID $mdl_user_id zum - // * Kurs mit der ContextID $mdl_context_id zu. - // * @param $mdl_user_id Moodle ID des Users - // * $mdl_context_id ContextID des Kurses - // * $role Rolle der Zuteilung (1=Admin/3=Lektor/5=Student) - // * @return true wenn ok, false wenn Fehler - // ********************************************* - function createZuteilung($mdl_user_id, $mdl_context_id, $role) - { - $qry = "INSERT INTO public.mdl_role_assignments(roleid, contextid, userid) - VALUES(". - $this->addslashes($role).",". - $this->addslashes($mdl_context_id).",". - $this->addslashes($mdl_user_id).");"; - - if(pg_query($this->conn_moodle, $qry)) - { - return true; - } - else - { - $this->errormsg = 'Fehler beim Speichern der Zuteilung'; - return false; - } - } - - // ********************************************* - // * Fuegt dem User die globale Gastrolle hinzu - // * @param $mdl_user_id Moodle ID des Users der - // * die GastRolle bekommt - // * @return true wenn ok, false wenn Fehler - // ********************************************* - function createGlobaleGastrolle($mdl_user_id) - { - - //Nachschauen ob diese Person bereits eine globale Gastrolle hat - $qry = "SELECT 1 FROM public.mdl_role_assignments - WHERE - userid='".addslashes($mdl_user_id)."' AND - contextid='1' AND - roleid='6'"; - - if($result = pg_query($this->conn_moodle, $qry)) - { - if(pg_num_rows($result)==0) - { - //noch nicht zugeteilt - if($this->createZuteilung($mdl_user_id, 1, 6)) - { - $this->log.="\n$this->mdl_user_firstname $this->mdl_user_lastname wurde die globale Gastrolle zugeteilt"; - $this->log_public.="\n$this->mdl_user_firstname $this->mdl_user_lastname wurde die globale Gastrolle zugeteilt"; - } - else - $this->log.="\nFehler beim Anlegen der Gast-Zuteilung: $this->errormsg"; - } - } - else - { - $this->errormsg = 'Fehler beim Auslesen der Rollen'; - return false; - } - } - - // ************************************************* - // * Loescht die Zuteilung eines Users zu einem Kurs - // * @param $mdl_user_id MoodleID des Users - // * $mdl_context_id ContextID des Users - // * @return true wenn ok, false wenn Fehler - // ************************************************* - function deleteZuteilung($mdl_user_id, $mdl_context_id) - { - $qry = "DELETE FROM public.mdl_role_assignments - WHERE userid='".addslashes($mdl_user_id)."' AND contextid='".addslashes($mdl_context_id)."'"; - if(pg_query($this->conn_moodle, $qry)) - return true; - else - { - $this->errormsg = 'Fehler beim Loeschen der Zuteilung'; - return false; - } - } - - // ******************************************************* - // * Teilt die TestStudenten zu einem Testkurs zu - // * @param mdl_course_id ID des Moodle Kurses - // ******************************************************* - function createTestStudentenZuordnung($mdl_course_id) - { - //Context des Kurses holen - $mdlcourse = new moodle_course($this->conn, $this->conn_moodle); - if(!$mdlcourse->getContext(50, $mdl_course_id)) - { - $this->errormsg = 'Fehler beim Laden des Contexts'; - return false; - } - - $users = array('student1', 'student2', 'student3'); - foreach ($users as $row_user) - { - //MoodleID des Users holen - if(!$this->loaduser($row_user)) - { - $this->errormsg = "Fehler beim Laden des Users $row_user: $this->errormsg"; - return false; - } - - //Nachschauen ob dieser Student bereits zugeteilt ist - $qry = "SELECT 1 FROM public.mdl_role_assignments - WHERE - userid='".addslashes($this->mdl_user_id)."' AND - contextid='".addslashes($mdlcourse->mdl_context_id)."'"; - - if($result = pg_query($this->conn_moodle, $qry)) - { - if(pg_num_rows($result)==0) - { - //Student ist noch nicht zugeteilt. - if($this->createZuteilung($this->mdl_user_id, $mdlcourse->mdl_context_id, 5)) - { - $this->log.="\nder Student $this->mdl_user_firstname $this->mdl_user_lastname wurde zum Kurs hinzugefügt"; - $this->log_public.="\nder Student $this->mdl_user_firstname $this->mdl_user_lastname wurde zum Kurs hinzugefügt"; - $this->sync_create++; - } - else - $this->log.="\nFehler beim Anlegen der Studenten-Zuteilung: $this->errormsg"; - } - } - else - { - $this->errormsg = 'Fehler beim Auslesen der Rollen'; - return false; - } - } - return true; - } +, + * Andreas Oesterreicher and + * Rudolf Hangl . + */ +/* + * requires moodle_course.class.php + * studiengang.class.php + */ +class moodle_user +{ + var $conn; + var $conn_moodle; + var $errormsg; + var $log=''; //log message fuer Syncro + var $log_public=''; //log message fuer Syncro + var $sync_create=0; //anzahl der durchgefuehrten zuteilungen beim syncro + var $group_update=0; //anzahl der updates an gruppen + + var $mdl_user_id; + var $mdl_user_username; + var $mdl_user_firstname; + var $mdl_user_lastname; + + + // ********************************************** + // * moodle_user + // * @param $conn Connection zur Vilesci DB + // * $conn_moodle Connection zur Moodle DB + // ********************************************** + function moodle_user($conn, $conn_moodle) + { + $this->conn = $conn; + $this->conn_moodle = $conn_moodle; + + $qry = "SET CLIENT_ENCODING TO 'LATIN9';"; + pg_query($this->conn_moodle, $qry); + } + + function loaduser($uid) + { + $qry = "SELECT * FROM public.mdl_user WHERE username='".addslashes($uid)."'"; + + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + $this->mdl_user_id = $row->id; + $this->mdl_user_username = $row->username; + $this->mdl_user_firstname = $row->firstname; + $this->mdl_user_lastname = $row->lastname; + return true; + } + else + { + $this->errormsg = 'User wurde nicht gefunden: '.$uid; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden des Users'; + return false; + } + } + + // *********************************************** + // * Liefert ein Array mit allen Lektoren die + // * zu dem Moodle Kurs zugeteilt sind + // *********************************************** + function getMitarbeiter($mdl_course_id) + { + //Mitarbeiter laden die zu diesem Kurs zugeteilt sind + $qry = "SELECT + mitarbeiter_uid + FROM + lehre.tbl_lehreinheitmitarbeiter JOIN lehre.tbl_moodle USING(lehreinheit_id) + WHERE + mdl_course_id='".addslashes($mdl_course_id)."' + UNION + SELECT + mitarbeiter_uid + FROM + lehre.tbl_lehreinheitmitarbeiter JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + JOIN lehre.tbl_moodle USING(lehrveranstaltung_id) + WHERE + tbl_lehreinheit.studiensemester_kurzbz=tbl_moodle.studiensemester_kurzbz + AND mdl_course_id='".addslashes($mdl_course_id)."'"; + $mitarbeiter=array(); + if($result_ma = pg_query($this->conn, $qry)) + { + while($row_ma = pg_fetch_object($result_ma)) + { + $mitarbeiter[] = $row_ma->mitarbeiter_uid; + } + return $mitarbeiter; + } + } + + // ************************************************ + // * Synchronisiert die Lektoren der Lehreinheiten + // * mit denen des Moodle Kurses + // * @param $mdl_course_id ID des MoodleKurses + // * lehrveranstaltung_id wird nur angegeben beim Syncro von Testkursen + // * studiensemester_kurzbz wird nur angegeben beim Syncro von Testkursen + // * @return true wenn ok, false wenn Fehler + // ************************************************ + function sync_lektoren($mdl_course_id, $lehrveranstaltung_id=null, $studiensemester_kurzbz=null) + { + //Mitarbeiter laden die zu diesem Kurs zugeteilt sind + if(!is_null($lehrveranstaltung_id) && !is_null($studiensemester_kurzbz)) + { + //Bei Testkursen werden alle Lektoren einer Lehrveranstaltung zugeteilt + //da hier kein Eintrag in der tbl_moodle vorhanden ist, werden die Lektoren direkt aus + //der tbl_lehreinheitmitarbeiter geholt. + $qry = "SELECT mitarbeiter_uid FROM lehre.tbl_lehreinheitmitarbeiter JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + WHERE lehrveranstaltung_id='".addslashes($lehrveranstaltung_id)."' + AND studiensemester_kurzbz='".addslashes($studiensemester_kurzbz)."'"; + } + else + { + $qry = "SELECT + mitarbeiter_uid + FROM + lehre.tbl_lehreinheitmitarbeiter JOIN lehre.tbl_moodle USING(lehreinheit_id) + WHERE + mdl_course_id='".addslashes($mdl_course_id)."' + UNION + SELECT + mitarbeiter_uid + FROM + lehre.tbl_lehreinheitmitarbeiter JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + JOIN lehre.tbl_moodle USING(lehrveranstaltung_id) + WHERE + tbl_lehreinheit.studiensemester_kurzbz=tbl_moodle.studiensemester_kurzbz + AND mdl_course_id='".addslashes($mdl_course_id)."'"; + } + $mitarbeiter=''; + if($result_ma = pg_query($this->conn, $qry)) + { + //Context des Kurses holen + $mdlcourse = new moodle_course($this->conn, $this->conn_moodle); + if(!$mdlcourse->getContext(50, $mdl_course_id)) + { + $this->errormsg = 'Fehler beim Laden des Contexts'; + return false; + } + + while($row_ma = pg_fetch_object($result_ma)) + { + //MoodleID des Users holen bzw ggf neu anlegen + if(!$this->loaduser($row_ma->mitarbeiter_uid)) + { + //User anlegen + if(!$this->createUser($row_ma->mitarbeiter_uid)) + { + $this->errormsg = "Fehler beim Anlegen des Users $row_ma->mitarbeiter_uid: $this->errormsg"; + return false; + } + else + $this->errormsg = ''; + } + + if($mitarbeiter!='') + $mitarbeiter.=','; + $mitarbeiter.=$this->mdl_user_id; + + //Nachschauen ob dieser Lektor bereits zugeteilt ist + $qry = "SELECT 1 FROM public.mdl_role_assignments + WHERE + userid='".addslashes($this->mdl_user_id)."' AND + contextid='".addslashes($mdlcourse->mdl_context_id)."'"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if(pg_num_rows($result)==0) + { + //Mitarbeiter ist noch nicht zugeteilt. + + if($this->createZuteilung($this->mdl_user_id, $mdlcourse->mdl_context_id, 3)) + { + $this->log.="\nder Lektor $this->mdl_user_firstname $this->mdl_user_lastname wurde zum Kurs hinzugefügt"; + $this->log_public.="\nder Lektor $this->mdl_user_firstname $this->mdl_user_lastname wurde zum Kurs hinzugefügt"; + $this->sync_create++; + } + else + $this->log.="\nFehler beim Anlegen der Lektoren-Zuteilung: $this->errormsg"; + } + } + else + { + $this->errormsg = 'Fehler beim Auslesen der Rollen'; + return false; + } + } + + //Lektoren loeschen die nicht mehr zugeordnet sind + /* Derzeit werden zugeteilte Personen nicht geloescht + $qry = "SELECT * FROM mdl_role_assignments + WHERE + contextid='".addslashes($mdlcourse->mdl_context_id)."' AND + userid NOT in ($mitarbeiter)"; + + if($result = pg_query($this->conn_moodle, $qry)) + { + while($row = pg_fetch_object($result)) + { + $this->deleteZuteilung($row->userid, $mdlcourse->mdl_context_id); + } + } + else + { + $this->errormsg = 'Fehler beim Ermitteln der Lektoren die nicht mehr zugeteilt sind'; + return false; + } + */ + return true; + } + else + { + $this->errormsg = 'Fehler beim Ermitteln der Zugeteilten Lektoren'; + return false; + } + } + + // ************************************************ + // * Synchronisiert die Studenten der Lehreinheiten + // * mit denen des Moodle Kurses + // * @param $mdl_course_id ID des MoodleKurses + // * @return true wenn ok, false wenn Fehler + // ************************************************ + function sync_studenten($mdl_course_id) + { + //Studentengruppen laden die zu diesem Kurs zugeteilt sind + $qry = "SELECT + studiengang_kz, semester, verband, gruppe, gruppe_kurzbz, tbl_moodle.studiensemester_kurzbz, tbl_moodle.gruppen + FROM + lehre.tbl_lehreinheitgruppe JOIN lehre.tbl_moodle USING(lehreinheit_id) + WHERE + mdl_course_id='".addslashes($mdl_course_id)."' + UNION + SELECT + studiengang_kz, semester, verband, gruppe, gruppe_kurzbz, tbl_moodle.studiensemester_kurzbz, tbl_moodle.gruppen + FROM + lehre.tbl_lehreinheitgruppe JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + JOIN lehre.tbl_moodle USING(lehrveranstaltung_id) + WHERE + tbl_lehreinheit.studiensemester_kurzbz=tbl_moodle.studiensemester_kurzbz + AND mdl_course_id='".addslashes($mdl_course_id)."'"; + $studenten=''; + if($result_std = pg_query($this->conn, $qry)) + { + //Context des Kurses holen + $mdlcourse = new moodle_course($this->conn, $this->conn_moodle); + if(!$mdlcourse->getContext(50, $mdl_course_id)) + { + $this->errormsg = 'Fehler beim Laden des Contexts'; + return false; + } + + while($row_std = pg_fetch_object($result_std)) + { + //Schauen ob fuer diesen Kurs die Gruppen mitgesynct werden sollen + $gruppensync = $row_std->gruppen=='t'?true:false; + + //Studenten dieser Gruppe holen + + if($row_std->gruppe_kurzbz=='') //LVB Gruppe + { + $qry = "SELECT + distinct student_uid + FROM + public.tbl_studentlehrverband + WHERE + studiensemester_kurzbz='$row_std->studiensemester_kurzbz' AND + studiengang_kz = '$row_std->studiengang_kz' AND + semester = '$row_std->semester'"; + if(trim($row_std->verband)!='') + { + $qry.=" AND verband = '$row_std->verband'"; + if(trim($row_std->gruppe)!='') + { + $qry.=" AND gruppe = '$row_std->gruppe'"; + } + } + $studiengang_obj = new studiengang($this->conn); + $studiengang_obj->load($row_std->studiengang_kz); + $gruppenbezeichnung = $studiengang_obj->kuerzel.'-'.trim($row_std->semester).trim($row_std->verband).trim($row_std->gruppe); + } + else //Spezialgruppe + { + $qry = "SELECT + distinct uid as student_uid + FROM + public.tbl_benutzergruppe + WHERE + gruppe_kurzbz='$row_std->gruppe_kurzbz' AND + studiensemester_kurzbz='$row_std->studiensemester_kurzbz' + "; + $gruppenbezeichnung = $row_std->gruppe_kurzbz; + } + + if($result_user = pg_query($this->conn, $qry)) + { + while($row_user = pg_fetch_object($result_user)) + { + + //MoodleID des Users holen bzw ggf neu anlegen + if(!$this->loaduser($row_user->student_uid)) + { + //User anlegen + if(!$this->createUser($row_user->student_uid)) + { + $this->errormsg = "Fehler beim Anlegen des Users $row_user->student_uid: $this->errormsg"; + return false; + } + else + $this->errormsg = ''; + } + + if($studenten!='') + $studenten.=','; + $studenten.=$this->mdl_user_id; + + //Nachschauen ob dieser Student bereits zugeteilt ist + $qry = "SELECT 1 FROM public.mdl_role_assignments + WHERE + userid='".addslashes($this->mdl_user_id)."' AND + contextid='".addslashes($mdlcourse->mdl_context_id)."'"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if(pg_num_rows($result)==0) + { + //Student ist noch nicht zugeteilt. + + if($this->createZuteilung($this->mdl_user_id, $mdlcourse->mdl_context_id, 5)) + { + $this->log.="\nder Student $this->mdl_user_firstname $this->mdl_user_lastname wurde zum Kurs hinzugefügt"; + $this->log_public.="\nder Student $this->mdl_user_firstname $this->mdl_user_lastname wurde zum Kurs hinzugefügt"; + $this->sync_create++; + } + else + $this->log.="\nFehler beim Anlegen der Studenten-Zuteilung: $this->errormsg"; + } + } + else + { + $this->errormsg = 'Fehler beim Auslesen der Rollen'; + return false; + } + + //Gruppenzuteilung + if($gruppensync) + { + //Schauen ob die Gruppe vorhanden ist + if(!$groupid = $this->getGroup($mdl_course_id, $gruppenbezeichnung)) + { + //wenn nicht dann anlegen + if(!$groupid = $this->createGroup($mdl_course_id, $gruppenbezeichnung)) + continue; + $this->group_update++; + $this->log.="\nes wurde eine neue Gruppe angelgt: $gruppenbezeichnung"; + $this->log_public.="\nes wurde eine neue Gruppe angelgt: $gruppenbezeichnung"; + } + + //Schauen ob eine Zuteilung zu dieser Gruppe vorhanden ist + if(!$this->getGroupMember($groupid, $this->mdl_user_id)) + { + //wenn nicht dann zuteilen + $this->createGroupMember($groupid, $this->mdl_user_id); + $this->group_update++; + $this->log.="\nder Student $this->mdl_user_firstname $this->mdl_user_lastname wurde der Gruppe $gruppenbezeichnung zugeordnet"; + $this->log_public.="\nder Student $this->mdl_user_firstname $this->mdl_user_lastname wurde der Gruppe $gruppenbezeichnung zugeordnet"; + } + } + } + } + } + + //Studenten loeschen die nicht mehr zugeordnet sind + /* Derzeit werden zugeteilte Personen nicht geloescht + $qry = "SELECT * FROM mdl_role_assignments + WHERE + contextid='".addslashes($mdlcourse->mdl_context_id)."' AND + userid NOT in ($studenten)"; + + if($result = pg_query($this->conn_moodle, $qry)) + { + while($row = pg_fetch_object($result)) + { + $this->deleteZuteilung($row->userid, $mdlcourse->mdl_context_id); + } + } + else + { + $this->errormsg = 'Fehler beim Ermitteln der Studenten die nicht mehr zugeteilt sind'; + return false; + } + */ + return true; + } + else + { + $this->errormsg = 'Fehler beim Ermitteln der Zugeteilten Studenten'; + return false; + } + } + + // ************************************************ + // * Schaut ob eine Zuteilung von Person zu Gruppe + // * existiert + // * @param grouid ID der Gruppe + // * userid ID des Users + // * @return ID der Zuteilung + // ************************************************ + function getGroupMember($groupid, $userid) + { + $qry = "SELECT id FROM public.mdl_groups_members WHERE groupid='".addslashes($groupid)."' AND userid='".addslashes($userid)."'"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + return $row->id; + } + else + { + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Ermitteln der Gruppe'; + return false; + } + } + + // *************************************************** + // * Legt eine Zuteilung eines Users zu + // * einer Gruppe an + // * @param groupid ID der Gruppe + // * userid ID des Users + // * @return ID der Zuteilung oder false im Fehlerfall + // *************************************************** + function createGroupMember($groupid, $userid) + { + $qry = 'BEGIN; INSERT INTO public.mdl_groups_members(groupid, userid) VALUES('. + $this->addslashes($groupid).','.$this->addslashes($userid).');'; + if(pg_query($this->conn_moodle, $qry)) + { + $qry = "SELECT currval('mdl_groups_members_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 $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 + { + $this->errormsg = 'Fehler beim Anlegen der Zuteilung'; + return false; + } + } + // ************************************************ + // * Holt die ID einer MoodleGruppe + // * @param $mdl_course_id ID des Kurses + // * $gruppenbezeichnung Name der Gruppe + // * @return GruppenID wenn ok, false im Fehlerfall + // ************************************************ + function getGroup($mdl_course_id, $gruppenbezeichnung) + { + $qry = "SELECT id FROM public.mdl_groups WHERE courseid='".addslashes($mdl_course_id)."' AND name='".addslashes($gruppenbezeichnung)."'"; + + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + return $row->id; + } + else + { + $this->errormsg = "Gruppe wurde nciht gefunden $gruppenbezeichnung"; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden einer Gruppe'; + return false; + } + } + + // **************************************************** + // * Legt eine MoodleGruppe zu einem Kurs an + // * @param mdl_course_id ID des MoodleKuses + // * gruppenbezeichnung Bezeichnung der Gruppe + // * @return ID der Gruppe wenn ok, false im Fehlerfall + // **************************************************** + function createGroup($mdl_course_id, $gruppenbezeichnung) + { + $qry = 'BEGIN;INSERT INTO public.mdl_groups(courseid, name, description) VALUES('. + $this->addslashes($mdl_course_id).','. + $this->addslashes($gruppenbezeichnung).','. + $this->addslashes($gruppenbezeichnung).');'; + if(pg_query($this->conn_moodle, $qry)) + { + $qry = "SELECT currval('mdl_groups_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 $row->id; + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK;'); + $this->errormsg = 'Fehler beim Auslesen der GruppenSequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK;'); + $this->errormsg = 'Fehler beim Auslesen der GruppenSequence'; + return false; + } + } + else + { + $this->errormsgr ='Fehler beim Anlegen der Gruppe'; + 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 User im Moodle an + // * @param $uid UID der Person die angelegt werden soll + // * @return true wenn ok, false wenn Fehler + // ******************************************** + function createUser($uid) + { + $qry = "SELECT uid, vorname, nachname FROM campus.vw_benutzer WHERE uid='".addslashes($uid)."'"; + if($result = pg_query($this->conn, $qry)) + { + if($row = pg_fetch_object($result)) + { + $username = $row->uid; + $vorname = $row->vorname; + $nachname = $row->nachname; + + $qry = "BEGIN; INSERT INTO public.mdl_user(auth, username, idnumber, firstname, lastname, email, mnethostid, confirmed, lang) + VALUES('ldap', ". + $this->addslashes($username).", ". + $this->addslashes($username).",". + $this->addslashes($vorname).",". + $this->addslashes($nachname).",". + $this->addslashes($username.'@'.DOMAIN).", 1, 1, 'de_utf8');"; + + if(pg_query($this->conn_moodle, $qry)) + { + $qry ="SELECT currval('mdl_user_id_seq') as id;"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + pg_query($this->conn_moodle, 'COMMIT;'); + $this->mdl_user_id = $row->id; + return true; + } + else + { + pg_query($this->conn_moodle,'ROLLBACK'); + $this->errormsg = 'Fehler beim Lesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle,'ROLLBACK'); + $this->errormsg = 'Fehler beim Lesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle,'ROLLBACK'); + $this->errormsg = 'Fehler beim Anlegen des Users'; + return false; + } + } + else + { + $this->errormsg = 'User wurde nicht gefunden: '.$uid; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden des Users'; + return false; + } + } + + // ********************************************* + // * Teilt den User mit der ID $mdl_user_id zum + // * Kurs mit der ContextID $mdl_context_id zu. + // * @param $mdl_user_id Moodle ID des Users + // * $mdl_context_id ContextID des Kurses + // * $role Rolle der Zuteilung (1=Admin/3=Lektor/5=Student) + // * @return true wenn ok, false wenn Fehler + // ********************************************* + function createZuteilung($mdl_user_id, $mdl_context_id, $role) + { + $qry = "INSERT INTO public.mdl_role_assignments(roleid, contextid, userid) + VALUES(". + $this->addslashes($role).",". + $this->addslashes($mdl_context_id).",". + $this->addslashes($mdl_user_id).");"; + + if(pg_query($this->conn_moodle, $qry)) + { + return true; + } + else + { + $this->errormsg = 'Fehler beim Speichern der Zuteilung'; + return false; + } + } + + // ********************************************* + // * Fuegt dem User die globale Gastrolle hinzu + // * @param $mdl_user_id Moodle ID des Users der + // * die GastRolle bekommt + // * @return true wenn ok, false wenn Fehler + // ********************************************* + function createGlobaleGastrolle($mdl_user_id) + { + + //Nachschauen ob diese Person bereits eine globale Gastrolle hat + $qry = "SELECT 1 FROM public.mdl_role_assignments + WHERE + userid='".addslashes($mdl_user_id)."' AND + contextid='1' AND + roleid='6'"; + + if($result = pg_query($this->conn_moodle, $qry)) + { + if(pg_num_rows($result)==0) + { + //noch nicht zugeteilt + if($this->createZuteilung($mdl_user_id, 1, 6)) + { + $this->log.="\n$this->mdl_user_firstname $this->mdl_user_lastname wurde die globale Gastrolle zugeteilt"; + $this->log_public.="\n$this->mdl_user_firstname $this->mdl_user_lastname wurde die globale Gastrolle zugeteilt"; + } + else + $this->log.="\nFehler beim Anlegen der Gast-Zuteilung: $this->errormsg"; + } + } + else + { + $this->errormsg = 'Fehler beim Auslesen der Rollen'; + return false; + } + } + + // ************************************************* + // * Loescht die Zuteilung eines Users zu einem Kurs + // * @param $mdl_user_id MoodleID des Users + // * $mdl_context_id ContextID des Users + // * @return true wenn ok, false wenn Fehler + // ************************************************* + function deleteZuteilung($mdl_user_id, $mdl_context_id) + { + $qry = "DELETE FROM public.mdl_role_assignments + WHERE userid='".addslashes($mdl_user_id)."' AND contextid='".addslashes($mdl_context_id)."'"; + if(pg_query($this->conn_moodle, $qry)) + return true; + else + { + $this->errormsg = 'Fehler beim Loeschen der Zuteilung'; + return false; + } + } + + // ******************************************************* + // * Teilt die TestStudenten zu einem Testkurs zu + // * @param mdl_course_id ID des Moodle Kurses + // ******************************************************* + function createTestStudentenZuordnung($mdl_course_id) + { + //Context des Kurses holen + $mdlcourse = new moodle_course($this->conn, $this->conn_moodle); + if(!$mdlcourse->getContext(50, $mdl_course_id)) + { + $this->errormsg = 'Fehler beim Laden des Contexts'; + return false; + } + + $users = array('student1', 'student2', 'student3'); + foreach ($users as $row_user) + { + //MoodleID des Users holen + if(!$this->loaduser($row_user)) + { + $this->errormsg = "Fehler beim Laden des Users $row_user: $this->errormsg"; + return false; + } + + //Nachschauen ob dieser Student bereits zugeteilt ist + $qry = "SELECT 1 FROM public.mdl_role_assignments + WHERE + userid='".addslashes($this->mdl_user_id)."' AND + contextid='".addslashes($mdlcourse->mdl_context_id)."'"; + + if($result = pg_query($this->conn_moodle, $qry)) + { + if(pg_num_rows($result)==0) + { + //Student ist noch nicht zugeteilt. + if($this->createZuteilung($this->mdl_user_id, $mdlcourse->mdl_context_id, 5)) + { + $this->log.="\nder Student $this->mdl_user_firstname $this->mdl_user_lastname wurde zum Kurs hinzugefügt"; + $this->log_public.="\nder Student $this->mdl_user_firstname $this->mdl_user_lastname wurde zum Kurs hinzugefügt"; + $this->sync_create++; + } + else + $this->log.="\nFehler beim Anlegen der Studenten-Zuteilung: $this->errormsg"; + } + } + else + { + $this->errormsg = 'Fehler beim Auslesen der Rollen'; + return false; + } + } + return true; + } } \ No newline at end of file