From 2f4b0b573e0918c8dc0545f7f44e00382459fd67 Mon Sep 17 00:00:00 2001 From: oesi Date: Fri, 11 Nov 2016 13:16:57 +0100 Subject: [PATCH] =?UTF-8?q?Moodle=20Schnittstelle=20-=20Fehler=20behoben?= =?UTF-8?q?=20wodurch=20es=20passieren=20konnte=20dass=20bei=20Verbindungs?= =?UTF-8?q?abbr=C3=BCchen=20Kurse=20in=20falschen=20Kategorien=20angelegt?= =?UTF-8?q?=20wurden=20-=20Nach=20dem=20zuordnen=20von=20Personen=20zu=20K?= =?UTF-8?q?ursen=20wird=20nun=20l=C3=A4nger=20gewartet,=20da=20sonst=20die?= =?UTF-8?q?=20Gruppenzuordnung=20fehlschl=C3=A4gt=20-=20User=20werden=20nu?= =?UTF-8?q?n=20standardm=C3=A4=C3=9Fig=20als=20lokale=20User=20im=20Moodle?= =?UTF-8?q?=20erstellt=20und=20dann=20auf=20LDAP=20User=20ge=C3=A4ndert=20?= =?UTF-8?q?da=20es=20sonst=20zu=20Passwort=C3=A4nderungen=20im=20LDAP=20ko?= =?UTF-8?q?mmt=20wenn=20diese=20gleich=20als=20LDAP=20User=20angelegt=20we?= =?UTF-8?q?rden.=20(Neue=20Webservice-Funktion=20core=5Fuser=5Fupdate=5Fus?= =?UTF-8?q?ers=20muss=20im=20Moodle=20zugeordnet=20werden!)=20-=20E-Mail?= =?UTF-8?q?=20Benachrichtigung=20=C3=BCber=20neue=20Teilnehmer=20in=20den?= =?UTF-8?q?=20Kursen=20enthalten=20nun=20den=20vollen=20Namen=20anstatt=20?= =?UTF-8?q?nur=20der=20UID=20-=20Inaktive=20Personen=20werden=20nicht=20me?= =?UTF-8?q?hr=20in=20Moodle=20Kurse=20=C3=BCbertragen=20-=20Bei=20Cronjobs?= =?UTF-8?q?=20wird=20nun=20auch=20der=20Output=20der=20Jobs=20ausgegeben/g?= =?UTF-8?q?eloggt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + include/moodle.class.php | 168 ++++++++++++++--------------- include/moodle24_course.class.php | 107 ++++++++++++++---- include/moodle24_user.class.php | 103 ++++++++++++------ system/sync/sync_moodle24_user.php | 4 +- system/sync/sync_moodle_kurse.php | 87 ++++++++++----- vilesci/cronjobs/cronjob.php | 9 +- 7 files changed, 305 insertions(+), 174 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ad9601ddb..5a9a78ea3 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ ### Updateinfo - **[FAS]** Für Lehraufträge muss eine Unoconv-Vorlage erstellt werden, da der für xsl-fo notwendige Seitenumbruch-Tag aus dem RDF entfernt wurde. - **[FAS]** Mehrsprachigkeitsspalte tbl_status.bezeichnung_mehrsprachig wird durch das Updatescript automatisch in den ersten beiden Sprachen mit der status_kurzbz vorbefüllt. Übersetzungen sind anzupassen. +- **[MOODLE]** Neue Webservicefunktion core_user_update_users wird benötigt ## [3.1.0] - 2015-11-12 ### Added diff --git a/include/moodle.class.php b/include/moodle.class.php index ce8b3f7ad..7c61930db 100644 --- a/include/moodle.class.php +++ b/include/moodle.class.php @@ -23,7 +23,7 @@ require_once(dirname(__FILE__).'/basis_db.class.php'); class moodle extends basis_db { public $result = array(); - + public $moodle_id; public $mdl_course_id; public $lehreinheit_id; @@ -35,10 +35,10 @@ class moodle extends basis_db public $moodle_version; public $version; - + /** * Konstruktor - * + * */ public function __construct() { @@ -46,12 +46,12 @@ class moodle extends basis_db $this->getVersionen(); return true; } - - + + public function load($moodle_id) { - $qry = "SELECT * FROM lehre.tbl_moodle WHERE moodle_id =".$this->db_add_param($moodle_id, FHC_INTEGER).';'; - + $qry = "SELECT * FROM lehre.tbl_moodle WHERE moodle_id =".$this->db_add_param($moodle_id, FHC_INTEGER).';'; + if($result=$this->db_query($qry)) { if($row = $this->db_fetch_object()) @@ -65,21 +65,21 @@ class moodle extends basis_db $this->insertvon = $row->insertvon; $this->gruppen = $this->db_parse_bool($row->gruppen); $this->moodle_version = $row->moodle_version; - return true; + return true; } else { - $this->errormsg = "Kein Moodleeintrag gefunden"; - return false; + $this->errormsg = "Kein Moodleeintrag gefunden"; + return false; } } else { - $this->errormsg="Fehler bei der Abfrage aufgetreten"; - return false; + $this->errormsg="Fehler bei der Abfrage aufgetreten"; + return false; } } - + /** * Laedt alle Moodlekurse zu einer LV/Stsem * plus die Moodlekurse die auf dessen LE haengen @@ -91,25 +91,25 @@ class moodle extends basis_db */ public function getAll($lehrveranstaltung_id, $studiensemester_kurzbz) { - $qry = "SELECT - distinct on(mdl_course_id) * - FROM - lehre.tbl_lehrveranstaltung, lehre.tbl_lehreinheit, lehre.tbl_moodle + $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 = ".$this->db_add_param($lehrveranstaltung_id, FHC_INTEGER)." - AND tbl_lehreinheit.studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz)." - AND ((tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_moodle.lehrveranstaltung_id + tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id + AND tbl_lehrveranstaltung.lehrveranstaltung_id = ".$this->db_add_param($lehrveranstaltung_id, FHC_INTEGER)." + AND tbl_lehreinheit.studiensemester_kurzbz=".$this->db_add_param($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=$this->db_query($qry)) { while($row = $this->db_fetch_object($result)) { $obj = new stdClass(); - + $obj->moodle_id = $row->moodle_id; $obj->mdl_course_id = $row->mdl_course_id; $obj->lehreinheit_id = $row->lehreinheit_id; @@ -124,27 +124,27 @@ class moodle extends basis_db } return true; } - else + else { $this->errormsg = 'Fehler beim Laden der Daten'; return false; } - } - + } + /** * gibt alle Moodlekurseinträge der Zwischentabelle für übergebenen Studiengang und Semester zurück * @param type $studiengang_kz - * @param type $studiensemester + * @param type $studiensemester */ public function getAllMoodleForStudiengang($studiengang_kz, $studiensemester, $version='2.4') { $qry = ' - + SELECT mdl_course_id, moodle.moodle_id, moodle.lehreinheit_id, moodle.lehrveranstaltung_id, moodle.studiensemester_kurzbz, moodle.insertamum, moodle.insertvon, gruppen, moodle_version FROM lehre.tbl_moodle moodle JOIN lehre.tbl_lehrveranstaltung lv USING(lehrveranstaltung_id) WHERE moodle.studiensemester_kurzbz = '.$this->db_add_param($studiensemester).' - AND lv.studiengang_kz ='.$this->db_add_param($studiengang_kz).' - AND moodle_version ='.$this->db_add_param($version).' + AND lv.studiengang_kz ='.$this->db_add_param($studiengang_kz).' + AND moodle_version ='.$this->db_add_param($version).' AND moodle.lehreinheit_id is null UNION @@ -153,17 +153,17 @@ SELECT distinct on(mdl_course_id) mdl_course_id, moodle.moodle_id, moodle.lehrei JOIN lehre.tbl_lehreinheit le ON(moodle.lehreinheit_id = le.lehreinheit_id) JOIN lehre.tbl_lehrveranstaltung lv ON(le.lehrveranstaltung_id = lv.lehrveranstaltung_id) WHERE moodle.studiensemester_kurzbz = '.$this->db_add_param($studiensemester).' - AND lv.studiengang_kz ='.$this->db_add_param($studiengang_kz).' - AND moodle_version ='.$this->db_add_param($version).' + AND lv.studiengang_kz ='.$this->db_add_param($studiengang_kz).' + AND moodle_version ='.$this->db_add_param($version).' AND moodle.lehrveranstaltung_id is null -'; - +'; + if($result=$this->db_query($qry)) { while($row = $this->db_fetch_object($result)) { $obj = new stdClass(); - + $obj->moodle_id = $row->moodle_id; $obj->mdl_course_id = $row->mdl_course_id; $obj->lehreinheit_id = $row->lehreinheit_id; @@ -178,50 +178,50 @@ SELECT distinct on(mdl_course_id) mdl_course_id, moodle.moodle_id, moodle.lehrei } return true; } - else + else { $this->errormsg = 'Fehler beim Laden der Daten'; return false; - } + } } - + /** * Löscht den Zuordnungseintrag in der Moodletablle - * @param type $moodle_id + * @param type $moodle_id */ public function deleteZuordnung($mdl_course_id) { - $qry = "DELETE FROM lehre.tbl_moodle WHERE mdl_course_id=".$this->db_add_param($mdl_course_id, FHC_INTEGER).';'; - + $qry = "DELETE FROM lehre.tbl_moodle WHERE mdl_course_id=".$this->db_add_param($mdl_course_id, FHC_INTEGER).';'; + if($result=$this->db_query($qry)) return true; else { - $this->errormsg="Fehler beim Löschen der Daten"; - return false; + $this->errormsg="Fehler beim Löschen der Daten"; + return false; } } - + /** * gibt alle LE Ids der Übergebenen Moodle_Course_ID zurück */ public function getLeFromCourse($moodle_course_id) { - $qry = "SELECT lehreinheit_id FROM lehre.tbl_moodle WHERE mdl_course_id =".$this->db_add_param($moodle_course_id, FHC_INTEGER).';'; - $le = array(); + $qry = "SELECT lehreinheit_id FROM lehre.tbl_moodle WHERE mdl_course_id =".$this->db_add_param($moodle_course_id, FHC_INTEGER).';'; + $le = array(); if($result = $this->db_query($qry)) { while($row = $this->db_fetch_object()) { - $le[] = $row->lehreinheit_id; + $le[] = $row->lehreinheit_id; } } - return $le; + return $le; } - + /** - * Schaut ob fuer diese LV/StSem schon ein + * Schaut ob fuer diese LV/StSem schon ein * Moodle Kurs existiert * * @param lehrveranstaltung_id @@ -230,19 +230,19 @@ SELECT distinct on(mdl_course_id) mdl_course_id, moodle.moodle_id, moodle.lehrei */ public function course_exists_for_lv($lehrveranstaltung_id, $studiensemester_kurzbz) { - $qry = "SELECT - 1 - FROM - lehre.tbl_moodle - WHERE + $qry = "SELECT + 1 + FROM + lehre.tbl_moodle + WHERE lehrveranstaltung_id=".$this->db_add_param($lehrveranstaltung_id, FHC_INTEGER)." AND studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz); if($this->db_query($qry)) { if($this->db_num_rows()>0) - return true; - else + return true; + else return false; } else @@ -251,7 +251,7 @@ SELECT distinct on(mdl_course_id) mdl_course_id, moodle.moodle_id, moodle.lehrei return false; } } - + /** * Schaut ob fuer diese LE schon ein Moodle * Kurs existiert @@ -265,7 +265,7 @@ SELECT distinct on(mdl_course_id) mdl_course_id, moodle.moodle_id, moodle.lehrei { if($this->db_num_rows()>0) return true; - else + else return false; } else @@ -274,7 +274,7 @@ SELECT distinct on(mdl_course_id) mdl_course_id, moodle.moodle_id, moodle.lehrei return false; } } - + /** * Prueft ob fuer alle Lehreinheiten dieser LV bereits ein Moodlekurs existiert * @@ -284,19 +284,19 @@ SELECT distinct on(mdl_course_id) mdl_course_id, moodle.moodle_id, moodle.lehrei */ public function course_exists_for_allLE($lehrveranstaltung_id, $studiensemester_kurzbz) { - $qry = "SELECT 1 FROM lehre.tbl_lehreinheit - WHERE + $qry = "SELECT 1 FROM lehre.tbl_lehreinheit + WHERE lehrveranstaltung_id=".$this->db_add_param($lehrveranstaltung_id, FHC_INTEGER)." AND studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz)." AND lehreinheit_id NOT IN ( - SELECT lehreinheit_id FROM lehre.tbl_moodle + SELECT lehreinheit_id FROM lehre.tbl_moodle WHERE lehreinheit_id=tbl_lehreinheit.lehreinheit_id)"; if($this->db_query($qry)) { if($this->db_num_rows()>0) return false; - else + else return true; } else @@ -308,11 +308,11 @@ SELECT distinct on(mdl_course_id) mdl_course_id, moodle.moodle_id, moodle.lehrei /** * Laedt die Moodle Versionsinformationen - */ + */ public function getVersionen() { $qry = "SELECT * FROM lehre.tbl_moodle_version"; - + if($result = $this->db_query($qry)) { while($row = $this->db_fetch_object($result)) @@ -328,7 +328,7 @@ SELECT distinct on(mdl_course_id) mdl_course_id, moodle.moodle_id, moodle.lehrei return false; } } - + /** * Liefert den Pfad zur Moodle Installation * @param version Versionsnummer @@ -342,9 +342,9 @@ SELECT distinct on(mdl_course_id) mdl_course_id, moodle.moodle_id, moodle.lehrei /** - * Liefert alle Kurse dieser LV zu denen der Student + * Liefert alle Kurse dieser LV zu denen der Student * zugeteilt ist - * + * * @param lehrveranstaltung_id * @param studiensemester_kurzbz * @param student_uid @@ -353,33 +353,33 @@ SELECT distinct on(mdl_course_id) mdl_course_id, moodle.moodle_id, moodle.lehrei public function getCourse($lehrveranstaltung_id, $studiensemester_kurzbz, $student_uid) { //alle betreffenden Kurse holen - $qry = "SELECT + $qry = "SELECT tbl_lehreinheit.lehreinheit_id, mdl_course_id, tbl_moodle.moodle_version - FROM - lehre.tbl_moodle + FROM + lehre.tbl_moodle JOIN lehre.tbl_lehreinheit USING(lehrveranstaltung_id, studiensemester_kurzbz) - WHERE + WHERE tbl_moodle.lehrveranstaltung_id=".$this->db_add_param($lehrveranstaltung_id, FHC_INTEGER)." AND tbl_moodle.studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz)." - UNION - SELECT + UNION + SELECT tbl_lehreinheit.lehreinheit_id, mdl_course_id, tbl_moodle.moodle_version - FROM - lehre.tbl_moodle - JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) - WHERE + FROM + lehre.tbl_moodle + JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + WHERE tbl_lehreinheit.lehrveranstaltung_id=".$this->db_add_param($lehrveranstaltung_id, FHC_INTEGER)." AND tbl_lehreinheit.studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz); - + $courses = array(); if($result = $this->db_query($qry)) { while($row = $this->db_fetch_object($result)) { //schauen in welchen Kursen der Student ist - $qry = "SELECT 1 FROM campus.vw_student_lehrveranstaltung - WHERE - uid=".$this->db_add_param($student_uid)." + $qry = "SELECT 1 FROM campus.vw_student_lehrveranstaltung + WHERE + uid=".$this->db_add_param($student_uid)." AND lehreinheit_id=".$this->db_add_param($row->lehreinheit_id, FHC_INTEGER); if($result_vw = $this->db_query($qry)) @@ -396,7 +396,7 @@ SELECT distinct on(mdl_course_id) mdl_course_id, moodle.moodle_id, moodle.lehrei } } } - } + } return true; } } diff --git a/include/moodle24_course.class.php b/include/moodle24_course.class.php index 8f43c5413..888d84eb7 100644 --- a/include/moodle24_course.class.php +++ b/include/moodle24_course.class.php @@ -98,8 +98,16 @@ class moodle24_course extends basis_db return false; } - $client = new SoapClient($this->serverurl); - $response = $client->core_course_get_courses(array('ids'=>array($this->mdl_course_id))); + try + { + $client = new SoapClient($this->serverurl); + $response = $client->core_course_get_courses(array('ids'=>array($this->mdl_course_id))); + } + catch (SoapFault $E) + { + $this->errormsg.="SOAP Fehler beim Anlegen des Kurses: ".$E->faultstring; + return false; + } if($response) { @@ -186,7 +194,7 @@ class moodle24_course extends basis_db { //CourseCategorie ermitteln - //lehrveranstalung ID holen falls die nur die lehreinheit_id angegeben wurde + //lehrveranstalung ID holen falls nur die lehreinheit_id angegeben wurde if($this->lehrveranstaltung_id=='') { $qry = "SELECT lehrveranstaltung_id FROM lehre.tbl_lehreinheit @@ -239,11 +247,12 @@ class moodle24_course extends basis_db return false; } - // Kategoriebau Aufbauen + // Kategoriebaum Aufbauen if(defined('MOODLE_COURSE_SCHEMA') && MOODLE_COURSE_SCHEMA=='DEP-STG-JG-STSEM') { - // Struktur: Department -> STG -> Jahrgang -> StSem (Informationstechnologie und Informationsmanagement -> BIMK -> Jahrgang 2014 -> WS2014) + // Struktur: Department -> STG -> Jahrgang -> StSem + // (Informationstechnologie und Informationsmanagement -> BIMK -> Jahrgang 2014 -> WS2014) // Studiengang der Lehrveranstaltung holen // Uebergeordnetes Department ermitteln @@ -267,17 +276,29 @@ class moodle24_course extends basis_db } } // Department - if(!$id_department = $this->getCategorie($department, '0')) + $id_department = $this->getCategorie($department, '0'); + if ($id_department === false) + return false; + if ($id_department === -1) { if(!$id_department = $this->createCategorie($department, '0')) + { echo "
$this->errormsg"; + return false; + } } // Studiengang - if(!$id_stg = $this->getCategorie($stg, $id_department)) + $id_stg = $this->getCategorie($stg, $id_department); + if ($id_stg === false) + return false; + if ($id_stg === -1) { if(!$id_stg = $this->createCategorie($stg, $id_department)) + { echo "
$this->errormsg"; + return false; + } } // Jahrgang - 1. Studiensemester ermitteln (Stsem um Ausbsem -1 zurückspringen) und das Jahr ermitteln @@ -296,17 +317,29 @@ class moodle24_course extends basis_db $datum = new Datum(); $jahr = $datum->formatDatum($studiensemester->start, 'Y'); - if(!$id_jahrgang = $this->getCategorie('Jahrgang '.$jahr, $id_stg)) + $id_jahrgang = $this->getCategorie('Jahrgang '.$jahr, $id_stg); + if ($id_jahrgang === false) + return false; + if ($id_jahrgang === -1) { if(!$id_jahrgang = $this->createCategorie('Jahrgang '.$jahr, $id_stg)) + { echo "
$this->errormsg"; + return false; + } } // Studiensemester - if(!$id_stsem = $this->getCategorie($this->studiensemester_kurzbz, $id_jahrgang)) + $id_stsem = $this->getCategorie($this->studiensemester_kurzbz, $id_jahrgang); + if ($id_stsem === false) + return false; + if ($id_stsem === -1) { if(!$id_stsem = $this->createCategorie($this->studiensemester_kurzbz, $id_jahrgang)) + { echo "
Fehler beim Anlegen des Studiensemesters"; + return false; + } } $categoryid=$id_stsem; @@ -316,22 +349,40 @@ class moodle24_course extends basis_db // Struktur: STSEM -> STG -> Ausbsemester (WS2014 -> BEL -> 1) //Studiensemester Categorie holen - if(!$id_stsem = $this->getCategorie($this->studiensemester_kurzbz, '0')) + $id_stsem = $this->getCategorie($this->studiensemester_kurzbz, '0'); + if ($id_stsem === false) + return false; + if ($id_stsem === -1) { if(!$id_stsem = $this->createCategorie($this->studiensemester_kurzbz, '0')) + { echo "
Fehler beim Anlegen des Studiensemesters"; + return false; + } } //Studiengang Categorie holen - if(!$id_stg = $this->getCategorie($stg, $id_stsem)) + $id_stg = $this->getCategorie($stg, $id_stsem); + if ($id_stg === false) + return false; + if ($id_stg === -1) { if(!$id_stg = $this->createCategorie($stg, $id_stsem)) + { echo "
$this->errormsg"; + return false; + } } //Semester Categorie holen - if(!$id_sem = $this->getCategorie($semester, $id_stg)) + $id_sem = $this->getCategorie($semester, $id_stg); + if ($id_sem === false) + return false; + if ($id_sem === -1) { - if(!$id_sem = $this->createCategorie($semester, $id_stg)) + if (!$id_sem = $this->createCategorie($semester, $id_stg)) + { echo "
$this->errormsg"; + return false; + } } $categoryid=$id_sem; } @@ -377,7 +428,7 @@ class moodle24_course extends basis_db * @param bezeichnung Bezeichnung der Kategorie * @param parent ID der uebergeordneten Kurskategorie * - * @return id der Kategorie oder false im Fehlerfall + * @return id der Kategorie, -1 wenn Kategorie nicht existiert, false im Fehlerfall */ public function getCategorie($bezeichnung, $parent) { @@ -404,7 +455,7 @@ class moodle24_course extends basis_db else { $this->errormsg = 'Fehler beim Laden der Kurskategorie'; - return false; + return -1; } } catch (SoapFault $E) @@ -412,13 +463,12 @@ class moodle24_course extends basis_db $this->errormsg.="SOAP Fehler beim Laden der Kurskategorie: ".$E->faultstring; return false; } - } /** * Erzeugt eine Kurskategorie anhand der Bezeichnung und der ParentID * @param bezeichnung Bezeichnung der Kategorie - * @param parent ID der uebergeordneten Kategorie + * @param parent ID der uebergeordneten Kategorie, false im Fehlerfall */ public function createCategorie($bezeichnung, $parent) { @@ -451,6 +501,7 @@ class moodle24_course extends basis_db catch (SoapFault $E) { $this->errormsg.="SOAP Fehler beim Anlegen der Kategorie: ".$E->faultstring; + return false; } } @@ -524,7 +575,10 @@ class moodle24_course extends basis_db } //Testkurs Categorie holen - if(!$id_testkurs = $this->getCategorie('Testkurse', '0')) + $id_testkurs = $this->getCategorie('Testkurse', '0'); + if ($id_testkurs === false) + return false; + if ($id_testkurs === -1) { if(!$id_testkurs = $this->createCategorie('Testkurse', '0')) { @@ -533,7 +587,10 @@ class moodle24_course extends basis_db } } //StSem Categorie holen - if(!$id_stsem = $this->getCategorie($studiensemester_kurzbz, $id_testkurs)) + $id_stsem = $this->getCategorie($studiensemester_kurzbz, $id_testkurs); + if ($id_stsem === false) + return false; + if ($id_stsem === -1) { if(!$id_stsem = $this->createCategorie($studiensemester_kurzbz, $id_testkurs)) { @@ -598,14 +655,20 @@ class moodle24_course extends basis_db } //Testkurs Categorie holen - if(!$id_testkurs = $this->getCategorie('Testkurse', '0')) + $id_testkurs = $this->getCategorie('Testkurse', '0'); + if ($id_testkurs === false) + return false; + if ($id_testkurs === -1) { $this->errormsg = 'Categorie nicht gefunden'; return false; } //StSem Categorie holen - if(!$id_stsem = $this->getCategorie($studiensemester_kurzbz, $id_testkurs)) + $id_stsem = $this->getCategorie($studiensemester_kurzbz, $id_testkurs); + if($id_stsem === false) + return false; + if ($id_stsem === -1) { $this->errormsg = 'Categorie nicht gefunden'; return false; @@ -758,7 +821,7 @@ class moodle24_course extends basis_db */ public function getLeFromCourse($moodle_course_id) { - $qry = "SELECT lehreinheit_id FROM lehre.tbl_moodle WHERE moodle_version='2.4' AND mdl_course_id =".$this->db_add_param($moodle_course_id, FHC_INTEGER).';'; + $qry = "SELECT lehreinheit_id FROM lehre.tbl_moodle WHERE moodle_version='2.4' AND mdl_course_id =".$this->db_add_param($moodle_course_id, FHC_INTEGER).';'; $le = array(); if($result = $this->db_query($qry)) { diff --git a/include/moodle24_user.class.php b/include/moodle24_user.class.php index a94278fcd..ab23873e7 100644 --- a/include/moodle24_user.class.php +++ b/include/moodle24_user.class.php @@ -195,7 +195,6 @@ class moodle24_user extends basis_db { while($row_ma = $this->db_fetch_object($result_ma)) { - $user_zugeteilt=false; foreach($enrolled_users as $user) { @@ -208,7 +207,6 @@ class moodle24_user extends basis_db if(!$user_zugeteilt) { - $retval = $this->loaduser($row_ma->mitarbeiter_uid); //MoodleID des Users holen bzw ggf neu anlegen if($retval===false) @@ -316,14 +314,16 @@ class moodle24_user extends basis_db $gruppensync = $this->db_parse_bool($row_std->gruppen); //Studenten dieser Gruppe holen - if($row_std->gruppe_kurzbz=='') //LVB Gruppe { $qry = "SELECT - distinct student_uid + distinct student_uid, tbl_person.vorname, tbl_person.nachname FROM public.tbl_studentlehrverband + JOIN public.tbl_benutzer ON(student_uid=uid) + JOIN public.tbl_person USING(person_id) WHERE + tbl_benutzer.aktiv AND studiensemester_kurzbz=".$this->db_add_param($row_std->studiensemester_kurzbz)." AND studiengang_kz = ".$this->db_add_param($row_std->studiengang_kz)." AND semester = ".$this->db_add_param($row_std->semester); @@ -343,10 +343,13 @@ class moodle24_user extends basis_db else //Spezialgruppe { $qry = "SELECT - distinct uid as student_uid + distinct uid as student_uid, tbl_person.vorname, tbl_person.nachname FROM public.tbl_benutzergruppe + JOIN public.tbl_benutzer USING(uid) + JOIN public.tbl_person USING(person_id) WHERE + tbl_benutzer.aktiv AND gruppe_kurzbz=".$this->db_add_param($row_std->gruppe_kurzbz)." AND studiensemester_kurzbz=".$this->db_add_param($row_std->studiensemester_kurzbz); $gruppenbezeichnung = $row_std->gruppe_kurzbz; @@ -356,9 +359,7 @@ class moodle24_user extends basis_db { while($row_user = $this->db_fetch_object($result_user)) { - //Nachschauen ob dieser Student bereits zugeteilt ist - $user_zugeteilt=false; foreach($enrolled_users as $user) { @@ -372,7 +373,6 @@ class moodle24_user extends basis_db if(!$user_zugeteilt) { - $retval = $this->loaduser($row_user->student_uid); //MoodleID des Users holen bzw ggf neu anlegen if($retval===false) @@ -393,7 +393,6 @@ class moodle24_user extends basis_db $studenten.=','; $studenten.=$this->mdl_user_id; - //Student ist noch nicht zugeteilt. $data = new stdClass(); @@ -403,8 +402,8 @@ class moodle24_user extends basis_db $userstoenroll[]=$data; - $this->log.="\nStudentIn $row_user->student_uid wurde zum Kurs hinzugefügt"; - $this->log_public.="\nStudentIn $row_user->student_uid wurde zum Kurs hinzugefügt"; + $this->log.="\nStudentIn ".$this->mdl_user_firstname." ".$this->mdl_user_lastname." ($row_user->student_uid) wurde zum Kurs hinzugefügt"; + $this->log_public.="\nStudentIn ".$this->mdl_user_firstname." ".$this->mdl_user_lastname." ($row_user->student_uid) wurde zum Kurs hinzugefügt"; $this->sync_create++; } } @@ -415,7 +414,11 @@ class moodle24_user extends basis_db if(!isset($vorhandenegruppen[$gruppenbezeichnung])) { //Schauen ob die Gruppe vorhanden ist - if(!$groupid = $this->getGroup($mdl_course_id, $gruppenbezeichnung)) + $groupid = $this->getGroup($mdl_course_id, $gruppenbezeichnung); + if ($groupid === false) + return false; + + if($groupid === -1) { //wenn nicht dann anlegen if(!$groupid = $this->createGroup($mdl_course_id, $gruppenbezeichnung)) @@ -435,14 +438,18 @@ class moodle24_user extends basis_db //if($this->mdl_user_id=='') // $this->loaduser($row_user->student_uid); //Schauen ob eine Zuteilung zu dieser Gruppe vorhanden ist - if(!$this->getGroupMember($groupid, $this->mdl_user_id)) + $groupmember = $this->getGroupMember($groupid, $this->mdl_user_id); + if($groupmember === false) + continue; + + if($groupmember === -1) { //wenn nicht dann zuteilen $groupmembertoadd[] = array('groupid'=>$groupid,'userid'=>$this->mdl_user_id); //$this->createGroupMember($groupid, $this->mdl_user_id); $this->group_update++; - $this->log.="\nStudentIn $row_user->student_uid wurde der Gruppe $gruppenbezeichnung ($groupid) zugeordnet"; - $this->log_public.="\nStudentIn $row_user->student_uid wurde der Gruppe $gruppenbezeichnung zugeordnet"; + $this->log.="\nStudentIn $row_user->vorname $row_user->nachname ($row_user->student_uid) wurde der Gruppe $gruppenbezeichnung ($groupid) zugeordnet"; + $this->log_public.="\nStudentIn $row_user->vorname $row_user->nachname ($row_user->student_uid) wurde der Gruppe $gruppenbezeichnung zugeordnet"; } } } @@ -456,9 +463,11 @@ class moodle24_user extends basis_db $client = new SoapClient($this->serverurl); $client->enrol_manual_enrol_users($userstoenroll); // Wenn User zum Kurs hinzugefuegt werden, muss eine kleine Pause eingelegt werden - // damit sich Moodle wieder beruhigt, sonst werden die Gruppenzuordnungen nicht korrekt gesetzt - // die Pause ist abgaengig von der Anzahl der User die neu angelegt werden - usleep(count($userstoenroll)*1000); + // Die User werden nicht gleich zugeordnet, diese werden nach + // abschluss des SOAP Requests von Moodle noch weiterverarbeitet und + // erst zeitversetzt zugeordnet. + // Die Pause ist abgaengig von der Anzahl der User die hinzugefuegt werden + usleep(count($userstoenroll)*150000); } catch (SoapFault $E) { @@ -469,11 +478,17 @@ class moodle24_user extends basis_db if(count($groupmembertoadd)>0) { - $client = new SoapClient($this->serverurl); - $groupresult = $client->core_group_add_group_members($groupmembertoadd); - //$this->log.="\n\n".print_r($groupmembertoadd,true)."\n".print_r($groupresult,true); + try + { + $client = new SoapClient($this->serverurl); + $groupresult = $client->core_group_add_group_members($groupmembertoadd); + } + catch (SoapFault $E) + { + $this->errormsg.="SOAP Fehler beim Zuteilen der Teilnehmer zu Gruppen"; + return false; + } } - return true; } else @@ -488,7 +503,7 @@ class moodle24_user extends basis_db * existiert * @param grouid ID der Gruppe * userid MoodleID des Users - * @return true wenn zugeteilt sonst false + * @return true wenn zugeteilt, -1 wenn nicht, false im Fehlerfall */ public function getGroupMember($groupid, $userid) { @@ -514,11 +529,13 @@ class moodle24_user extends basis_db foreach($this->gruppenzuordnungen[$groupid] as $id) { - if($id==$userid) + if ($id == $userid) + { return true; + } } - return false; + return -1; } /** @@ -550,7 +567,7 @@ class moodle24_user extends basis_db * Holt die ID einer MoodleGruppe * @param $mdl_course_id ID des Kurses * $gruppenbezeichnung Name der Gruppe - * @return GruppenID wenn ok, false im Fehlerfall + * @return GruppenID wenn ok, -1 wenn nicht gefunden, false im Fehlerfall */ public function getGroup($mdl_course_id, $gruppenbezeichnung) { @@ -563,15 +580,15 @@ class moodle24_user extends basis_db if($row['name']==$gruppenbezeichnung) return $row['id']; } + + $this->errormsg = "Gruppe wurde nicht gefunden $gruppenbezeichnung"; + return -1; } catch (SoapFault $E) { - $this->log.="Fehler beim Laden der Gruppe $mdl_course_id, $gruppenbezeichnung: ".$E->faultstring; - return false; + $this->log.="Fehler beim Laden der Gruppe $mdl_course_id, $gruppenbezeichnung: ".$E->faultstring; + return false; } - - $this->errormsg = "Gruppe wurde nicht gefunden $gruppenbezeichnung"; - return false; } /** @@ -636,12 +653,19 @@ class moodle24_user extends basis_db Dieses wird beim Login nicht verwendet da ueber ldap authentifiziert wird. Prefix ist noetig damit es nicht zu Problemen kommt wenn im Moodle die Passwort Policy aktiviert ist + + Wenn das Passwort uebergeben wird, dann versucht Moodle das auch + im LDAP zu setzen. Das fuehrt dazu dass der Account nicht mehr funktioniert. + Anlegen eines Users ohne Passwortuebergabe ist jedoch nicht moeglich- + Deshalb wird die Authentifizierungsmethode beim Anlegen auf manual + gesetzt und nach dem anlegen auf ldap geändert */ $user->password = "FHCv!A2".hash('sha512', rand()); $user->firstname = $vorname; $user->lastname = $nachname; $user->email = $username.'@'.DOMAIN; - $user->auth = 'ldap'; + //$user->auth = 'ldap'; + $user->auth = 'manual'; $user->idnumber = $username; $user->lang = 'en'; @@ -654,6 +678,14 @@ class moodle24_user extends basis_db if(isset($response[0])) { $this->mdl_user_id = $response[0]['id']; + + // User nach dem anlegen auf LDAP Auth umstellen + $user = new stdClass(); + $user->id = $this->mdl_user_id; + $user->auth = 'ldap'; + $client = new SoapClient($this->serverurl); + $response = $client->core_user_update_users(array($user)); + return true; } else @@ -774,14 +806,16 @@ class moodle24_user extends basis_db { //Leitung laden die zu diesem Kurs zugeteilt sind $qry = "SELECT - distinct uid as mitarbeiter_uid + distinct tbl_benutzer.uid as mitarbeiter_uid FROM public.tbl_organisationseinheit JOIN public.tbl_benutzerfunktion USING (oe_kurzbz) JOIN lehre.tbl_lehrveranstaltung USING(oe_kurzbz) JOIN lehre.tbl_lehreinheit USING (lehrveranstaltung_id) + JOIN public.tbl_benutzer ON(tbl_benutzerfunktion.uid=tbl_benutzer.uid) WHERE - organisationseinheittyp_kurzbz in('Institut','Fachbereich') + tbl_benutzer.aktiv + AND organisationseinheittyp_kurzbz in('Institut','Fachbereich') AND funktion_kurzbz='Leitung' AND (tbl_benutzerfunktion.datum_von<=now() OR tbl_benutzerfunktion.datum_von is null) AND (tbl_benutzerfunktion.datum_bis>=now() OR tbl_benutzerfunktion.datum_bis is null) @@ -821,7 +855,6 @@ class moodle24_user extends basis_db { while($row_ma = $this->db_fetch_object($result_ma)) { - $user_zugeteilt=false; foreach($enrolled_users as $user) { diff --git a/system/sync/sync_moodle24_user.php b/system/sync/sync_moodle24_user.php index 90748ab25..9478bcd08 100644 --- a/system/sync/sync_moodle24_user.php +++ b/system/sync/sync_moodle24_user.php @@ -40,7 +40,7 @@ $lektoren=array(); //ini_set('soap.wsdl_cache_enabled',0); //ini_set('soap.wsdl_cache_ttl',0); - +set_time_limit(1000); echo "-- Start ".date('Y-m-d H:i:s')."--"; //nur Synchronisieren wenn ein aktuelles Studiensemester existiert damit keine @@ -152,7 +152,7 @@ if($stsem_kurzbz=$stsem->getakt()) //Mail an die Lektoren foreach ($lektoren as $uid=>$message_lkt) { - if($message_lkt!='') + if($message_lkt!='' && $uid!='_DummyLektor') { $header = "Dies ist eine automatische Mail!\n"; $header.= "Es wurden folgende Aktualisierungen an Ihren Moodle-Kursen durchgeführt:\n\n"; diff --git a/system/sync/sync_moodle_kurse.php b/system/sync/sync_moodle_kurse.php index a989b1981..51d4c9d2e 100644 --- a/system/sync/sync_moodle_kurse.php +++ b/system/sync/sync_moodle_kurse.php @@ -24,6 +24,7 @@ * Aber nur wenn die Lehrform der Lehreinheit=Lehrform der LV */ require_once(dirname(__FILE__).'/../../config/cis.config.inc.php'); +require_once(dirname(__FILE__).'/../../config/global.config.inc.php'); require_once(dirname(__FILE__).'/../../include/studiensemester.class.php'); require_once(dirname(__FILE__).'/../../include/moodle.class.php'); require_once(dirname(__FILE__).'/../../include/moodle24_course.class.php'); @@ -43,31 +44,37 @@ if(php_sapi_name() != 'cli') die('Sie haben keine Berechtigung fuer diese Seite'); } +set_time_limit(10000); + $db = new basis_db(); $stsem_obj = new studiensemester(); $stsem = $stsem_obj->getAktOrNext(); +$neue_kurse = 0; +$vorhandene_kurse = 0; +$anzahl_fehler = 0; $qry = "SELECT - distinct lehrveranstaltung_id, tbl_lehrveranstaltung.bezeichnung, tbl_lehrveranstaltung.kurzbz, - tbl_lehrveranstaltung.studiengang_kz, tbl_lehrveranstaltung.orgform_kurzbz, tbl_lehrveranstaltung.semester, - tbl_lehreinheit.lehreinheit_id, trim(string_agg(vorname||nachname,'_')) AS lektoren - FROM - lehre.tbl_lehreinheit - JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id) -JOIN lehre.tbl_lehreinheitmitarbeiter USING (lehreinheit_id) -JOIN public.tbl_mitarbeiter USING (mitarbeiter_uid) -JOIN public.tbl_benutzer ON (uid=mitarbeiter_uid) -JOIN public.tbl_person USING (person_id) - WHERE - studiensemester_kurzbz=".$db->db_add_param($stsem)." - AND semester is not null - AND semester!=0 - AND tbl_lehreinheit.lehrform_kurzbz=tbl_lehrveranstaltung.lehrform_kurzbz - AND uid not like '_Dummy%' -GROUP BY lehrveranstaltung_id, tbl_lehrveranstaltung.bezeichnung, tbl_lehrveranstaltung.kurzbz, - tbl_lehrveranstaltung.studiengang_kz, tbl_lehrveranstaltung.orgform_kurzbz, tbl_lehrveranstaltung.semester, - tbl_lehreinheit.lehreinheit_id;"; + distinct lehrveranstaltung_id, tbl_lehrveranstaltung.bezeichnung, tbl_lehrveranstaltung.kurzbz, + tbl_lehrveranstaltung.studiengang_kz, tbl_lehrveranstaltung.orgform_kurzbz, tbl_lehrveranstaltung.semester, + tbl_lehreinheit.lehreinheit_id, trim(string_agg(vorname||nachname,'_')) AS lektoren + FROM + lehre.tbl_lehreinheit + JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id) + JOIN lehre.tbl_lehreinheitmitarbeiter USING (lehreinheit_id) + JOIN public.tbl_mitarbeiter USING (mitarbeiter_uid) + JOIN public.tbl_benutzer ON (uid=mitarbeiter_uid) + JOIN public.tbl_person USING (person_id) + WHERE + studiensemester_kurzbz=".$db->db_add_param($stsem)." + AND semester is not null + AND semester!=0 + AND tbl_lehreinheit.lehrform_kurzbz=tbl_lehrveranstaltung.lehrform_kurzbz + AND uid not like '_Dummy%' + GROUP BY lehrveranstaltung_id, tbl_lehrveranstaltung.bezeichnung, tbl_lehrveranstaltung.kurzbz, + tbl_lehrveranstaltung.studiengang_kz, tbl_lehrveranstaltung.orgform_kurzbz, tbl_lehrveranstaltung.semester, + tbl_lehreinheit.lehreinheit_id + "; if($result = $db->db_query($qry)) { @@ -84,6 +91,10 @@ if($result = $db->db_query($qry)) $shortname = $studiengang->kuerzel.($row->orgform_kurzbz!=''?'-'.$row->orgform_kurzbz:'').($row->semester!=''?'-'.$row->semester:'').'-'.$stsem.'-'.$row->kurzbz.'-'.$row->lehreinheit_id.'-'.$row->lektoren; $bezeichnung = $studiengang->kuerzel.($row->orgform_kurzbz!=''?'-'.$row->orgform_kurzbz:'').($row->semester!=''?'-'.$row->semester:'').'-'.$stsem.'-'.$row->bezeichnung.'-'.$row->lehreinheit_id.'-'.$row->lektoren; + // Bezeichnung kuerzen wenn zu lange + $shortname = mb_substr($shortname,0,254); + $bezeichnung = mb_substr($bezeichnung,0,254); + //$mdl_course->lehrveranstaltung_id = $row->lehrveranstaltung_id; $mdl_course->studiensemester_kurzbz = $stsem; $mdl_course->lehreinheit_id = $row->lehreinheit_id; @@ -93,33 +104,55 @@ if($result = $db->db_query($qry)) $mdl_course->insertvon = 'auto'; $mdl_course->gruppen = true; - echo "\nCreate Course: $bezeichnung"; + echo "\n
Create Course: $bezeichnung"; //Moodlekurs anlegen if($mdl_course->create_moodle()) { + $neue_kurse++; //Eintrag in der Vilesci DB $mdl_course->create_vilesci(); $mdl_user = new moodle24_user(); //Lektoren Synchronisieren if(!$mdl_user->sync_lektoren($mdl_course->mdl_course_id)) - echo $mdl_user->errormsg; + { + $anzahl_fehler++; + echo "\n
Lektor Sync Failed:".$mdl_user->errormsg; + } - $mdl_user = new moodle24_user(); - //Fachbereichsleitung Synchronisieren - if(!$mdl_user->sync_fachbereichsleitung($mdl_course->mdl_course_id)) - echo $mdl_user->errormsg; + if(MOODLE_SYNC_FACHBEREICHSLEITUNG) + { + $mdl_user = new moodle24_user(); + //Fachbereichsleitung Synchronisieren + if(!$mdl_user->sync_fachbereichsleitung($mdl_course->mdl_course_id)) + { + $anzahl_fehler++; + echo "\n
FBL Sync Failed:".$mdl_user->errormsg; + } + } $mdl_user = new moodle24_user(); //Studenten Synchronisieren if(!$mdl_user->sync_studenten($mdl_course->mdl_course_id)) - echo $mdl_user->errormsg; + { + $anzahl_fehler++; + echo "\n
Student Sync Failed:".$mdl_user->errormsg; + } } else { - echo $mdl_course->errormsg; + $anzahl_fehler++; + echo "\nFailed:".$mdl_course->errormsg; } } + else + { + $vorhandene_kurse++; + } } } +echo "\n
Fertig"; +echo "\n
Neue Kurse:".$neue_kurse; +echo "\n
Vorhandene Kurse:".$vorhandene_kurse; +echo "\n
Anzahl Fehler:".$anzahl_fehler; diff --git a/vilesci/cronjobs/cronjob.php b/vilesci/cronjobs/cronjob.php index d2d19bb79..ccfeda4ce 100644 --- a/vilesci/cronjobs/cronjob.php +++ b/vilesci/cronjobs/cronjob.php @@ -22,7 +22,7 @@ */ /** * Cronjob.php - * + * * Dieses Script muss in der Crontab eingetragen werden. Von hier aus werden dann * die entsprechenden anderen Scripte aufgerufen. */ @@ -43,11 +43,12 @@ foreach ($cj->result as $cronjob) //Starten des Jobs if($cronjob->execute()) { - echo date('d.m.Y H:i:s').' '.$cronjob->titel.'('.$cronjob->cronjob_id.') executed
'."\n"; + echo "\n".date('d.m.Y H:i:s').' '.$cronjob->titel.'('.$cronjob->cronjob_id.') executed
'."\n"; + echo implode($cronjob->output,"\n"); } - else + else { - echo date('d.m.Y H:i:s').' '.$cronjob->titel.'('.$cronjob->cronjob_id.') failed
'."\n"; + echo "\n".date('d.m.Y H:i:s').' '.$cronjob->titel.'('.$cronjob->cronjob_id.') failed
'."\n"; } } }