Moodle Schnittstelle

- Fehler behoben wodurch es passieren konnte dass bei Verbindungsabbrüchen Kurse in falschen Kategorien angelegt wurden
- Nach dem zuordnen von Personen zu Kursen wird nun länger gewartet, da sonst die Gruppenzuordnung fehlschlägt
- User werden nun standardmäßig als lokale User im Moodle erstellt und dann auf LDAP User geändert da es sonst zu Passwortänderungen im LDAP kommt wenn diese gleich als LDAP User angelegt werden. (Neue Webservice-Funktion core_user_update_users muss im Moodle zugeordnet werden!)
- E-Mail Benachrichtigung über neue Teilnehmer in den Kursen enthalten nun den vollen Namen anstatt nur der UID
- Inaktive Personen werden nicht mehr in Moodle Kurse übertragen
- Bei Cronjobs wird nun auch der Output der Jobs ausgegeben/geloggt
This commit is contained in:
oesi
2016-11-11 13:16:57 +01:00
parent b6694a600b
commit 2f4b0b573e
7 changed files with 305 additions and 174 deletions
+1
View File
@@ -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
+84 -84
View File
@@ -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;
}
}
+85 -22
View File
@@ -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 "<br>$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 "<br>$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 "<br>$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 "<br>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 "<br>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 "<br>$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 "<br>$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))
{
+68 -35
View File
@@ -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)
{
+2 -2
View File
@@ -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";
+60 -27
View File
@@ -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<br>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<br>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<br>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<br>Student Sync Failed:".$mdl_user->errormsg;
}
}
else
{
echo $mdl_course->errormsg;
$anzahl_fehler++;
echo "\nFailed:".$mdl_course->errormsg;
}
}
else
{
$vorhandene_kurse++;
}
}
}
echo "\n<hr>Fertig";
echo "\n<br>Neue Kurse:".$neue_kurse;
echo "\n<br>Vorhandene Kurse:".$vorhandene_kurse;
echo "\n<br>Anzahl Fehler:".$anzahl_fehler;
+5 -4
View File
@@ -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<br>'."\n";
echo "\n".date('d.m.Y H:i:s').' '.$cronjob->titel.'('.$cronjob->cronjob_id.') executed<br>'."\n";
echo implode($cronjob->output,"\n");
}
else
else
{
echo date('d.m.Y H:i:s').' '.$cronjob->titel.'('.$cronjob->cronjob_id.') <b>failed</b><br>'."\n";
echo "\n".date('d.m.Y H:i:s').' '.$cronjob->titel.'('.$cronjob->cronjob_id.') <b>failed</b><br>'."\n";
}
}
}