From f21e21ae9b3f86e82ac35a500a2fd0f73f73013d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Fri, 15 Mar 2013 11:34:57 +0000 Subject: [PATCH] Anpassungen Moodle2.4 --- .../benotungstool/lvgesamtnoteverwalten.php | 4 +- cis/private/lehre/lesson.php | 2 +- cis/private/lehre/moodle2_4_wartung.php | 70 +- cis/private/lehre/moodle_choice.php | 72 +- cis/private/lehre/moodle_wartung.php | 164 +- include/moodle.class.php | 278 +++ include/moodle19_course.class.php | 2205 +++++++++++++++++ include/moodle19_user.class.php | 788 ++++++ include/moodle24_course.class.php | 691 ++++++ include/moodle24_user.class.php | 568 +++++ include/tw/cis_menu_lv.inc.php | 27 +- locale/de-AT/moodle.php | 9 +- system/checksystem.php | 56 +- .../moodlePlugin/fhcompletews/db/services.php | 9 + .../moodlePlugin/fhcompletews/externallib.php | 223 +- system/moodlePlugin/fhcompletews/version.php | 4 +- system/sync/sync_moodle24_user.php | 157 ++ system/sync/sync_moodle_user.php | 16 +- vilesci/moodle/account_verwaltung.php | 4 +- vilesci/moodle/kurs_verwaltung.php | 6 +- vilesci/moodle/zuteilung_verwaltung.php | 6 +- vilesci/moodle/zuteilung_warten.php | 6 +- 22 files changed, 5177 insertions(+), 188 deletions(-) create mode 100644 include/moodle.class.php create mode 100644 include/moodle19_course.class.php create mode 100644 include/moodle19_user.class.php create mode 100644 include/moodle24_course.class.php create mode 100644 include/moodle24_user.class.php create mode 100644 system/sync/sync_moodle24_user.php diff --git a/cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php b/cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php index 28851254c..a87e534d2 100644 --- a/cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php +++ b/cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php @@ -38,7 +38,7 @@ require_once('../../../../include/pruefung.class.php'); require_once('../../../../include/person.class.php'); require_once('../../../../include/benutzer.class.php'); require_once('../../../../include/mitarbeiter.class.php'); -require_once('../../../../include/moodle_course.class.php'); +require_once('../../../../include/moodle19_course.class.php'); require_once('../../../../include/mail.class.php'); require_once('../../../../include/phrasen.class.php'); @@ -839,7 +839,7 @@ echo ''; { //Noten aus Moodle if (!isset($moodle_course)) - $moodle_course = new moodle_course(); + $moodle_course = new moodle19_course(); if (!$mdldaten = $moodle_course->loadNoten($lvid, $stsem, '', true,$debg)) $mdldaten=''; diff --git a/cis/private/lehre/lesson.php b/cis/private/lehre/lesson.php index 4ab925957..50793819b 100644 --- a/cis/private/lehre/lesson.php +++ b/cis/private/lehre/lesson.php @@ -26,7 +26,7 @@ require_once('../../../include/benutzerberechtigung.class.php'); require_once('../../../include/studiensemester.class.php'); require_once('../../../include/lehrveranstaltung.class.php'); require_once('../../../include/studiengang.class.php'); -require_once('../../../include/moodle_course.class.php'); +require_once('../../../include/moodle.class.php'); require_once('../../../include/phrasen.class.php'); require_once('../../../include/lehre_tools.class.php'); diff --git a/cis/private/lehre/moodle2_4_wartung.php b/cis/private/lehre/moodle2_4_wartung.php index 67bbbc706..4f6695e46 100644 --- a/cis/private/lehre/moodle2_4_wartung.php +++ b/cis/private/lehre/moodle2_4_wartung.php @@ -25,14 +25,15 @@ require_once('../../../config/cis.config.inc.php'); require_once('../../../include/basis_db.class.php'); require_once('../../../include/functions.inc.php'); require_once('../../../include/benutzerberechtigung.class.php'); -require_once('../../../include/moodle2_4_course.class.php'); -require_once('../../../include/moodle2_4_user.class.php'); +require_once('../../../include/moodle24_course.class.php'); +require_once('../../../include/moodle24_user.class.php'); require_once('../../../include/lehrveranstaltung.class.php'); require_once('../../../include/lehreinheit.class.php'); require_once('../../../include/lehreinheitgruppe.class.php'); require_once('../../../include/lehreinheitmitarbeiter.class.php'); require_once('../../../include/studiengang.class.php'); require_once('../../../include/phrasen.class.php'); +require_once('../../../include/moodle.class.php'); $sprache = getSprache(); $p = new phrasen($sprache); @@ -94,10 +95,16 @@ function togglediv()

'.$db->convert_html_chars($lv->bezeichnung).' ('.$db->convert_html_chars($stsem).')

-
-
+ +MOODLE 2.4 - TESTBETRIEB
+Alle Einstellungen auf dieser Seite betreffen Moodle 2.4
+Zur Verwaltung der aktuellen Moodlekurse verwenden Sie diese Seite +
+

+
+
-'; echo '
'; +'; if(isset($_POST['neu'])) { @@ -121,7 +128,7 @@ if(isset($_POST['neu'])) //Gesamte LV zu einem Moodle Kurs zusammenlegen if($art=='lv') { - $mdl_course = new moodle_course(); + $mdl_course = new moodle24_course(); $mdl_course->lehrveranstaltung_id = $lvid; $mdl_course->studiensemester_kurzbz = $stsem; @@ -137,12 +144,12 @@ if(isset($_POST['neu'])) //Eintrag in der Vilesci DB $mdl_course->create_vilesci(); - $mdl_user = new moodle_user(); + $mdl_user = new moodle24_user(); //Lektoren Synchronisieren if(!$mdl_user->sync_lektoren($mdl_course->mdl_course_id)) echo $mdl_user->errormsg; - $mdl_user = new moodle_user(); + $mdl_user = new moodle24_user(); //Studenten Synchronisieren if(!$mdl_user->sync_studenten($mdl_course->mdl_course_id)) echo $mdl_user->errormsg; @@ -167,7 +174,7 @@ if(isset($_POST['neu'])) if(count($lehreinheiten)>0) { - $mdl_course = new moodle_course(); + $mdl_course = new moodle24_course(); $mdl_course->mdl_fullname = $_POST['bezeichnung']; $mdl_course->mdl_shortname = $shortname; @@ -188,12 +195,12 @@ if(isset($_POST['neu'])) echo '
'.$p->t('moodle/fehlerBeimAnlegenAufgetreten').':'.$mdl_course->errormsg; } - $mdl_user = new moodle_user(); + $mdl_user = new moodle24_user(); //Lektoren Synchronisieren if(!$mdl_user->sync_lektoren($mdl_course->mdl_course_id)) echo $mdl_user->errormsg; - $mdl_user = new moodle_user(); + $mdl_user = new moodle24_user(); //Studenten Synchronisieren if(!$mdl_user->sync_studenten($mdl_course->mdl_course_id)) echo $mdl_user->errormsg; @@ -213,7 +220,7 @@ if(isset($_POST['changegruppe'])) { if(isset($_POST['moodle_id']) && is_numeric($_POST['moodle_id'])) { - $mcourse = new moodle_course(); + $mcourse = new moodle24_course(); if($mcourse->updateGruppenSync($_POST['moodle_id'], isset($_POST['gruppen']))) echo ''.$p->t('moodle/datenWurdenAktualisiert').'
'; else @@ -228,7 +235,7 @@ if(isset($_POST['changegruppe'])) //Anlegen eines Testkurses if(isset($_GET['action']) && $_GET['action']=='createtestkurs') { - $mdl_course = new moodle_course(); + $mdl_course = new moodle24_course(); if(!$mdl_course->loadTestkurs($lvid, $stsem)) { $lehrveranstaltung = new lehrveranstaltung(); @@ -252,7 +259,7 @@ if(isset($_GET['action']) && $_GET['action']=='createtestkurs') $id=$mdl_course->mdl_course_id; $errormsg=''; - $mdl_user = new moodle_user(); + $mdl_user = new moodle24_user(); //Lektoren zuweisen if(!$mdl_user->sync_lektoren($id, $lvid, $stsem)) $errormsg.=$p->t('moodle/fehlerBeiDerLektorenZuordnung').':'.$mdl_user->errormsg.'
'; @@ -272,8 +279,8 @@ if(isset($_GET['action']) && $_GET['action']=='createtestkurs') } } -$mdl_course = new moodle_course(); -if($mdl_course->course_exists_for_lv($lvid, $stsem) || $mdl_course->course_exists_for_allLE($lvid, $stsem)) +$moodle = new moodle(); +if($moodle->course_exists_for_lv($lvid, $stsem) || $moodle->course_exists_for_allLE($lvid, $stsem)) { echo $p->t('moodle/esIstBereitsEinMoodleKursVorhanden'); } @@ -330,7 +337,7 @@ else $lektoren.= ' '.$ma->mitarbeiter_uid; } - if($mdl_course->course_exists_for_le($row->lehreinheit_id)) + if($moodle->course_exists_for_le($row->lehreinheit_id)) $disabled='disabled'; else $disabled=''; @@ -354,24 +361,35 @@ echo '
'; echo ''.$p->t('moodle/vorhandeneMoodleKurse').''; -if(!$mdl_course->getAll($lvid, $stsem)) - echo $mdl_course->errormsg; +if(!$moodle->getAll($lvid, $stsem)) + echo $moodle->errormsg; echo ''; -foreach ($mdl_course->result as $course) +foreach ($moodle->result as $course) { - echo ''; - echo ''; - echo ""; + + switch($course->moodle_version) + { + case '2.4': + $mdlcourse = new moodle24_course(); + $mdlcourse->load($course->mdl_course_id); + echo ''; + echo ''; + echo ""; + break; + default: + echo ''; + break; + } } echo '
'.$course->mdl_fullname.'
gruppen?'checked':'').">Gruppen übernehmen
'.$mdlcourse->mdl_fullname.'
gruppen?'checked':'').">Gruppen übernehmen
Moodle v'.$course->moodle_version.' - '.$course->mdl_course_id.'
'; echo '
'; echo '


'; -echo ''.$p->t('moodle/testkurse').'

'; -$mdlcourse = new moodle_course(); +echo ''.$p->t('moodle/testkurse24').'

'; +$mdlcourse = new moodle24_course(); if($mdlcourse->loadTestkurs($lvid, $stsem)) { - echo ''.$db->convert_html_chars($mdlcourse->mdl_fullname).''; + echo ''.$db->convert_html_chars($mdlcourse->mdl_fullname).''; } else { diff --git a/cis/private/lehre/moodle_choice.php b/cis/private/lehre/moodle_choice.php index 1c4cf16a6..75d717105 100644 --- a/cis/private/lehre/moodle_choice.php +++ b/cis/private/lehre/moodle_choice.php @@ -21,19 +21,20 @@ * Gerald Simane-Sequens < gerald.simane-sequens@technikum-wien.at > */ require_once('../../../config/cis.config.inc.php'); -// ------------------------------------------------------------------------------------------ -// Datenbankanbindung -// ------------------------------------------------------------------------------------------ - require_once('../../../include/basis_db.class.php'); - if (!$db = new basis_db()) - die('Fehler beim Herstellen der Datenbankverbindung'); - +require_once('../../../include/basis_db.class.php'); require_once('../../../include/functions.inc.php'); -require_once('../../../include/moodle_course.class.php'); -require_once('../../../include/moodle_user.class.php'); +require_once('../../../include/moodle.class.php'); +require_once('../../../include/moodle19_course.class.php'); +require_once('../../../include/moodle24_course.class.php'); +require_once('../../../include/phrasen.class.php'); + +if (!$db = new basis_db()) + die('Fehler beim Herstellen der Datenbankverbindung'); $user = get_uid(); +$p = new phrasen(getSprache()); + if(isset($_GET['lvid'])) $lvid=$_GET['lvid']; else @@ -51,37 +52,40 @@ echo ' - - - - - - - - - - - - -
 MOODLE Kurse
 
  - - - - +echo '
'; +

'.$p->t('moodle/kursUebersicht').'

-$mdlcourse = new moodle_course(); -$mdlcourse->getAll($lvid, $stsem); + + + - -
'; -foreach ($mdlcourse->result as $row) +$moodle = new moodle(); +$moodle->getAll($lvid, $stsem); + +foreach ($moodle->result as $row) { - echo "$row->mdl_fullname
"; + switch($row->moodle_version) + { + case '1.9': + $mdlcourse19=new moodle19_course(); + $mdlcourse19->load($row->mdl_course_id); + echo "$mdlcourse19->mdl_fullname
"; + break; + + case '2.4': + $mdlcourse24=new moodle24_course(); + $mdlcourse24->load($row->mdl_course_id); + echo "$mdlcourse24->mdl_fullname
"; + break; + + default: + echo $p->t('moodle/ungueltigeVersion',array($row->moodle_version)).'
'; + break; + } } -echo '
-
'; -?> \ No newline at end of file +?> diff --git a/cis/private/lehre/moodle_wartung.php b/cis/private/lehre/moodle_wartung.php index 1eaaa5722..0658f7551 100644 --- a/cis/private/lehre/moodle_wartung.php +++ b/cis/private/lehre/moodle_wartung.php @@ -1,5 +1,5 @@ */ /* - * Erstellt eine Liste mit den Noten des eingeloggten Studenten - * das betreffende Studiensemester kann ausgewaehlt werden + * Verwaltungsseite zum Anlegen von Moodle Kursen */ require_once('../../../config/cis.config.inc.php'); require_once('../../../include/basis_db.class.php'); require_once('../../../include/functions.inc.php'); require_once('../../../include/benutzerberechtigung.class.php'); -require_once('../../../include/moodle_course.class.php'); -require_once('../../../include/moodle_user.class.php'); require_once('../../../include/lehrveranstaltung.class.php'); require_once('../../../include/lehreinheit.class.php'); require_once('../../../include/lehreinheitgruppe.class.php'); require_once('../../../include/lehreinheitmitarbeiter.class.php'); require_once('../../../include/studiengang.class.php'); require_once('../../../include/phrasen.class.php'); +require_once('../../../include/moodle.class.php'); +require_once('../../../include/moodle19_course.class.php'); +require_once('../../../include/moodle19_user.class.php'); +require_once('../../../include/moodle24_course.class.php'); +require_once('../../../include/moodle24_user.class.php'); $sprache = getSprache(); $p = new phrasen($sprache); @@ -102,22 +104,11 @@ function togglediv() - +

'.$lv->bezeichnung.' ('.$stsem.')

+
- - - - - - - - - - - -
 '.$lv->bezeichnung.' ('.$stsem.')
 
  - - - - '; echo '
'; + '; + if(isset($_POST['neu'])) { if($_POST['bezeichnung']=='') @@ -140,7 +131,7 @@ if(isset($_POST['neu'])) //Gesamte LV zu einem Moodle Kurs zusammenlegen if($art=='lv') { - $mdl_course = new moodle_course(); + $mdl_course = new moodle19_course(); $mdl_course->lehrveranstaltung_id = $lvid; $mdl_course->studiensemester_kurzbz = $stsem; @@ -156,12 +147,12 @@ if(isset($_POST['neu'])) //Eintrag in der Vilesci DB $mdl_course->create_vilesci(); - $mdl_user = new moodle_user(); + $mdl_user = new moodle19_user(); //Lektoren Synchronisieren if(!$mdl_user->sync_lektoren($mdl_course->mdl_course_id)) echo $mdl_user->errormsg; - $mdl_user = new moodle_user(); + $mdl_user = new moodle19_user(); //Studenten Synchronisieren if(!$mdl_user->sync_studenten($mdl_course->mdl_course_id)) echo $mdl_user->errormsg; @@ -186,7 +177,7 @@ if(isset($_POST['neu'])) if(count($lehreinheiten)>0) { - $mdl_course = new moodle_course(); + $mdl_course = new moodle19_course(); $mdl_course->mdl_fullname = $_POST['bezeichnung']; $mdl_course->mdl_shortname = $shortname; @@ -194,7 +185,8 @@ if(isset($_POST['neu'])) $mdl_course->insertamum = date('Y-m-d H:i:s'); $mdl_course->insertvon = $user; $mdl_course->lehreinheit_id=$lehreinheiten[0]; - + $mdl_course->gruppen = isset($_POST['gruppen']); + //Kurs im Moodle anlegen if($mdl_course->create_moodle()) { @@ -206,12 +198,12 @@ if(isset($_POST['neu'])) echo '
'.$p->t('moodle/fehlerBeimAnlegenAufgetreten').':'.$mdl_course->errormsg; } - $mdl_user = new moodle_user(); + $mdl_user = new moodle19_user(); //Lektoren Synchronisieren if(!$mdl_user->sync_lektoren($mdl_course->mdl_course_id)) echo $mdl_user->errormsg; - $mdl_user = new moodle_user(); + $mdl_user = new moodle19_user(); //Studenten Synchronisieren if(!$mdl_user->sync_studenten($mdl_course->mdl_course_id)) echo $mdl_user->errormsg; @@ -231,7 +223,7 @@ if(isset($_POST['changegruppe'])) { if(isset($_POST['moodle_id']) && is_numeric($_POST['moodle_id'])) { - $mcourse = new moodle_course(); + $mcourse = new moodle19_course(); if($mcourse->updateGruppenSync($_POST['moodle_id'], isset($_POST['gruppen']))) echo ''.$p->t('moodle/datenWurdenAktualisiert').'
'; else @@ -246,7 +238,7 @@ if(isset($_POST['changegruppe'])) //Anlegen eines Testkurses if(isset($_GET['action']) && $_GET['action']=='createtestkurs') { - $mdl_course = new moodle_course(); + $mdl_course = new moodle19_course(); if(!$mdl_course->loadTestkurs($lvid, $stsem)) { $lehrveranstaltung = new lehrveranstaltung(); @@ -270,7 +262,7 @@ if(isset($_GET['action']) && $_GET['action']=='createtestkurs') $id=$mdl_course->mdl_course_id; $errormsg=''; - $mdl_user = new moodle_user(); + $mdl_user = new moodle19_user(); //Lektoren zuweisen if(!$mdl_user->sync_lektoren($id, $lvid, $stsem)) $errormsg.=$p->t('moodle/fehlerBeiDerLektorenZuordnung').':'.$mdl_user->errormsg.'
'; @@ -290,8 +282,57 @@ if(isset($_GET['action']) && $_GET['action']=='createtestkurs') } } -$mdl_course = new moodle_course(); -if($mdl_course->course_exists_for_lv($lvid, $stsem) || $mdl_course->course_exists_for_allLE($lvid, $stsem)) +//Anlegen eines Testkurses fuer Moodle 24 +if(isset($_GET['action']) && $_GET['action']=='createtestkurs24') +{ + $mdl_course24 = new moodle24_course(); + if(!$mdl_course24->loadTestkurs($lvid, $stsem)) + { + $lehrveranstaltung = new lehrveranstaltung(); + $lehrveranstaltung->load($lvid); + $studiengang = new studiengang(); + $studiengang->load($lehrveranstaltung->studiengang_kz); + + //$orgform = ($lehrveranstaltung->orgform_kurzbz!=''?$lehrveranstaltung->orgform_kurzbz:$studiengang->orgform_kurzbz); + + //Kurzbezeichnung generieren Format: STSEM-STG-SEM-LV/LEID/LEID/LEID... + $shortname = 'TK-'.$stsem.'-'.$studiengang->kuerzel.'-'.$lehrveranstaltung->semester.'-'.$lehrveranstaltung->kurzbz; + + $mdl_course24->lehrveranstaltung_id = $lvid; + $mdl_course24->studiensemester_kurzbz = $stsem; + $mdl_course24->mdl_fullname = 'Testkurs - '.$lehrveranstaltung->bezeichnung; + $mdl_course24->mdl_shortname = $shortname; + + //TestKurs erstellen + if($mdl_course24->createTestkurs($lvid, $stsem)) + { + $id=$mdl_course24->mdl_course_id; + $errormsg=''; + + $mdl_user24 = new moodle24_user(); + //Lektoren zuweisen + if(!$mdl_user24->sync_lektoren($id, $lvid, $stsem)) + $errormsg.=$p->t('moodle/fehlerBeiDerLektorenZuordnung').':'.$mdl_user24->errormsg.'
'; + //Teststudenten zuweisen + if(!$mdl_user24->createTestStudentenZuordnung($id)) + $errormsg.=$p->t('moodle/fehlerBeiDerStudentenZuordnung').':'.$mdl_user24->errormsg.'
'; + + if($errormsg!='') + echo $errormsg; + else + echo ''.$p->t('moodle/testkursWurdeErfolgreichAngelegt').'
'; + } + } + else + { + echo ''.$p->t('moodle/esExistiertBereitsEinTestkurs').'
'; + } +} + +$moodle = new moodle(); + +// Pruefen ob bereits fuer alle Lehreinheiten oder fuer die gesamte LV ein Moodle Kurs angelegt ist +if($moodle->course_exists_for_lv($lvid, $stsem) || $moodle->course_exists_for_allLE($lvid, $stsem)) { echo $p->t('moodle/esIstBereitsEinMoodleKursVorhanden'); } @@ -301,8 +342,8 @@ else //anlegen fuer die Lehrveranstaltung verhindern $qry = "SELECT 1 FROM lehre.tbl_moodle WHERE lehreinheit_id in(SELECT lehreinheit_id FROM lehre.tbl_lehreinheit - WHERE lehrveranstaltung_id='".addslashes($lvid)."' - AND studiensemester_kurzbz='".addslashes($stsem)."')"; + WHERE lehrveranstaltung_id=".$db->db_add_param($lvid)." + AND studiensemester_kurzbz=".$db->db_add_param($stsem).")"; $disable_lv=''; if($result = $db->db_query($qry)) if($db->db_num_rows($result)>0) @@ -348,7 +389,7 @@ else $lektoren.= ' '.$ma->mitarbeiter_uid; } - if($mdl_course->course_exists_for_le($row->lehreinheit_id)) + if($moodle->course_exists_for_le($row->lehreinheit_id)) $disabled='disabled'; else $disabled=''; @@ -372,32 +413,61 @@ echo '
'; echo ''.$p->t('moodle/vorhandeneMoodleKurse').''; -if(!$mdl_course->getAll($lvid, $stsem)) - echo $mdl_course->errormsg; +if(!$moodle->getAll($lvid, $stsem)) + echo $moodle->errormsg; echo ''; -foreach ($mdl_course->result as $course) +foreach ($moodle->result as $course) { - echo ''; - echo ''; - echo ""; + switch($course->moodle_version) + { + case '1.9': + $moodlecourse = new moodle19_course(); + $moodlecourse->load($course->mdl_course_id); + echo ''; + echo ''; + echo ""; + echo ''; + break; + + case '2.4': + $moodlecourse = new moodle24_course(); + $moodlecourse->load($course->mdl_course_id); + echo ''; + echo ''; + echo ''; + break; + + default: + // andere Moodle Version + echo ''; + } } echo '
'.$course->mdl_fullname.'
gruppen?'checked':'').">Gruppen übernehmen
'.$moodlecourse->mdl_fullname.'gruppen?'checked':'').">Gruppen übernehmen
'.$moodlecourse->mdl_fullname.'
Unknown Moodle Version - ID '.$course->mdl_course_id.'
'; echo '
'; echo '


'; echo ''.$p->t('moodle/testkurse').'

'; -$mdlcourse = new moodle_course(); +$mdlcourse = new moodle19_course(); if($mdlcourse->loadTestkurs($lvid, $stsem)) { - echo ''.$mdlcourse->mdl_fullname.''; + echo ''.$mdlcourse->mdl_fullname.''; } else { echo "".$p->t('moodle/klickenSieHierUmTestkursErstellen').""; } -echo '
+ +echo '


'.$p->t('moodle/testkurse24').'

'; +$mdlcourse24 = new moodle24_course(); +if($mdlcourse24->loadTestkurs($lvid, $stsem)) +{ + echo ''.$mdlcourse24->mdl_fullname.''; +} +else +{ + echo "".$p->t('moodle/klickenSieHierUmTestkursErstellen24').""; +} +echo ' '; -?> \ No newline at end of file +?> diff --git a/include/moodle.class.php b/include/moodle.class.php new file mode 100644 index 000000000..3c5f2f17e --- /dev/null +++ b/include/moodle.class.php @@ -0,0 +1,278 @@ + + */ +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; + public $lehrveranstaltung_id; + public $studiensemester_kurzbz; + public $insertamum; + public $insertvon; + public $gruppen; + public $moodle_version; + + public $version; + + /** + * Konstruktor + * + */ + public function __construct() + { + $this->getVersionen(); + return true; + } + + /** + * Laedt alle Moodlekurse zu einer LV/Stsem + * plus die Moodlekurse die auf dessen LE haengen + * + * @param lehrveranstaltung_id + * @param studiensemester_kurzbz + * + * @return true wenn ok, false im Fehlerfall + */ + public function getAll($lehrveranstaltung_id, $studiensemester_kurzbz) + { + $qry = "SELECT + distinct on(mdl_course_id) * + FROM + lehre.tbl_lehrveranstaltung, lehre.tbl_lehreinheit, lehre.tbl_moodle + WHERE + tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id + AND tbl_lehrveranstaltung.lehrveranstaltung_id = ".$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; + $obj->lehrveranstaltung_id = $row->lehrveranstaltung_id; + $obj->studiensemester_kurzbz = $row->studiensemester_kurzbz; + $obj->insertamum = $row->insertamum; + $obj->insertvon = $row->insertvon; + $obj->gruppen = $this->db_parse_bool($row->gruppen); + $obj->moodle_version = $row->moodle_version; + + $this->result[] = $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Schaut ob fuer diese LV/StSem schon ein + * Moodle Kurs existiert + * + * @param lehrveranstaltung_id + * @param studiensemester_kurzbz + * @return true wenn vorhanden, false wenn nicht + */ + public function course_exists_for_lv($lehrveranstaltung_id, $studiensemester_kurzbz) + { + $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 false; + } + else + { + $this->errormsg = 'Fehler bei einer Datenbankabfrage'; + return false; + } + } + + /** + * Schaut ob fuer diese LE schon ein Moodle + * Kurs existiert + * @param lehreinheit_id + * @return true wenn vorhanden, false wenn nicht + */ + public function course_exists_for_le($lehreinheit_id) + { + $qry = "SELECT 1 FROM lehre.tbl_moodle WHERE lehreinheit_id=".$this->db_add_param($lehreinheit_id, FHC_INTEGER); + if($this->db_query($qry)) + { + if($this->db_num_rows()>0) + return true; + else + return false; + } + else + { + $this->errormsg = 'Fehler bei Datenbankabfrage'; + return false; + } + } + + /** + * Prueft ob fuer alle Lehreinheiten dieser LV bereits ein Moodlekurs existiert + * + * @param lehrveranstaltung_id + * @param studiensemester_kurzbz + * @return true wenn vorhanden, false wenn nicht + */ + public function course_exists_for_allLE($lehrveranstaltung_id, $studiensemester_kurzbz) + { + $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 + WHERE lehreinheit_id=tbl_lehreinheit.lehreinheit_id)"; + + if($this->db_query($qry)) + { + if($this->db_num_rows()>0) + return false; + else + return true; + } + else + { + $this->errormsg = 'Fehler bei einer Datenbankabfrage'; + return false; + } + } + + /** + * 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)) + { + $this->version[$row->moodle_version]['bezeichnung']=$row->bezeichnung; + $this->version[$row->moodle_version]['pfad']=$row->pfad; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Versionsdaten'; + return false; + } + } + + /** + * Liefert den Pfad zur Moodle Installation + * @param version Versionsnummer + * @return pfad (URL) zur Moodle Installation + */ + public function getPfad($version) + { + if(isset($this->version[$version]['pfad'])) + return $this->version[$version]['pfad']; + } + + + /** + * Liefert alle Kurse dieser LV zu denen der Student + * zugeteilt ist + * + * @param lehrveranstaltung_id + * @param studiensemester_kurzbz + * @param student_uid + * @return array mit Moodle Kurs IDs + */ + public function getCourse($lehrveranstaltung_id, $studiensemester_kurzbz, $student_uid) + { + //alle betreffenden Kurse holen + $qry = "SELECT + tbl_lehreinheit.lehreinheit_id, mdl_course_id, tbl_moodle.moodle_version + FROM + lehre.tbl_moodle + JOIN lehre.tbl_lehreinheit USING(lehrveranstaltung_id, studiensemester_kurzbz) + 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 + tbl_lehreinheit.lehreinheit_id, mdl_course_id, tbl_moodle.moodle_version + 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)." + AND lehreinheit_id=".$this->db_add_param($row->lehreinheit_id, FHC_INTEGER); + + if($result_vw = $this->db_query($qry)) + { + if($this->db_num_rows($result_vw)>0) + { + if(!array_key_exists($row->mdl_course_id, $courses)) + { + $obj = new stdClass(); + $obj->mdl_course_id = $row->mdl_course_id; + $obj->moodle_version = $row->moodle_version; + $this->result[] = $obj; + } + } + } + } + } + return true; + } +} diff --git a/include/moodle19_course.class.php b/include/moodle19_course.class.php new file mode 100644 index 000000000..3d147dab9 --- /dev/null +++ b/include/moodle19_course.class.php @@ -0,0 +1,2205 @@ +, + * Andreas Oesterreicher and + * Rudolf Hangl . + */ +/* + * Moodle 1.9 Kurs Verwaltung + */ +require_once(dirname(__FILE__).'/basis_db.class.php'); + +if (!function_exists('xu_load_extension')) + include_once(dirname(__FILE__)."/xmlrpcutils/utils.php"); + +class moodle19_course extends basis_db +{ + private $conn_moodle; + public $result = array(); + + //Vilesci Attribute + public $moodle_id; + public $mdl_course_id; + public $lehreinheit_id; + public $lehrveranstaltung_id; + public $studiensemester_kurzbz; + public $insertamum; + public $insertvon; + public $gruppen; + + //Moodle Attribute + public $mdl_fullname; + public $mdl_shortname; + + public $mdl_context_id; + public $mdl_context_level; + public $mdl_context_instanceid; + public $mdl_context_path; + public $mdl_context_depth; + + public $lehrveranstaltung_bezeichnung; + public $lehrveranstaltung_semester; + public $lehrveranstaltung_studiengang_kz; + + // Kurs Resourcen - Anzahl + public $mdl_benotungen; + public $mdl_resource; + public $mdl_quiz; + public $mdl_chat; + public $mdl_forum; + public $mdl_choice; + + public $note; + + /** + * Konstruktor + * + */ + public function __construct($conn_moodle=null) + { + if(is_null($conn_moodle)) + { + if(!$this->conn_moodle = pg_pconnect(CONN_STRING_MOODLE)) + { + $this->errormsg = 'Fehler beim Herstellen der Moodle Connection'; + return false; + } + else + return true; + } + else + $this->conn_moodle = $conn_moodle; + + return true; + } + + /** + * Laedt einen MoodleKurs + * @param mdl_course_id ID des Moodle Kurses + * @return true wenn ok, false im Fehlerfall + */ + public function load($mdl_course_id=null) + { + $this->mdl_fullname = ''; + $this->mdl_shortname = ''; + + $this->errormsg=''; + $this->result=array(); + + if (!is_null($mdl_course_id)) + $this->mdl_course_id=$mdl_course_id; + if (is_null($this->mdl_course_id) || empty($this->mdl_course_id) || !is_numeric($this->mdl_course_id)) + { + $this->errormsg='Moodle Kurs ID fehlt'; + return false; + } + + $qry = "SELECT * FROM public.mdl_course WHERE id='".addslashes($mdl_course_id)."'"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + $this->mdl_fullname = $row->fullname; + $this->mdl_shortname = $row->shortname; + $this->mdl_course_id = $row->id; + return true; + } + else + { + $this->errormsg = 'Kurs wurde nicht gefunden'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden des Kurses'; + return false; + } + } + + /** + * Laedt einen MoodleKurs + * @param mdl_course_id ID des Moodle Kurses + * @return true wenn ok, false im Fehlerfall + */ + public function loadMoodle($mdl_course_id=null) + { + $this->mdl_fullname = ''; + $this->mdl_shortname = ''; + + $this->errormsg=''; + $this->result=array(); + + if (!is_null($mdl_course_id)) + $this->mdl_course_id=$mdl_course_id; + if (is_null($this->mdl_course_id) || empty($this->mdl_course_id) || !is_numeric($this->mdl_course_id)) + { + $this->errormsg='Moodle Kurs ID fehlt'; + return false; + } + + // Variable Daten Initialisieren + $args=array(); + $args['CourseID']=$this->mdl_course_id; + $method = "ReadCourseByID"; + $bServerinfo=false; // Debug + $result=$this->callMoodleXMLRPC($method,$args,$bServerinfo); + if (!$result || !is_array($result) || count($result)<1 || !isset($result[0])) + { + $this->errormsg='Fehler xmlrpc Aufruf.'; + return false; + } + if (isset($result[1])) + $this->errormsg=$result[1]; + if (!isset($result[0]) || empty($result[0])) // Methodenaufruf nicht erfolgreich + return false; + if (isset($result[2]) && is_array($result[2]) ) // Methodenaufruf erfolgreich + { + + $this->result[]=(object)$result[2]; + $this->result[0]->mdl_fullname=(isset($this->result[0]->fullname)?$this->result[0]->fullname:'Fehler ID '.$this->mdl_course_id); + $this->result[0]->mdl_shortname=(isset($this->result[0]->shortname)?$this->result[0]->shortname:'Fehler'); + + $this->mdl_fullname=(isset($this->result[0]->fullname)?$this->result[0]->fullname:'Fehler ID '.$this->mdl_course_id); + $this->mdl_shortname=(isset($this->result[0]->shortname)?$this->result[0]->shortname:'Fehler'); + + } + else // Result = 0 ein Fehler im RFC wurde festgestellt + { + $this->errormsg=(isset($result[1])?$result[1]:" - Fehler beim Kurs ".$this->mdl_course_id." lesen "); + return false; + } +# return $this->result; + return true; +} + /** + * 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 + */ + public function getAll($lehrveranstaltung_id, $studiensemester_kurzbz) + { + $qry = "SELECT distinct on(mdl_course_id) * + FROM + lehre.tbl_lehrveranstaltung, lehre.tbl_lehreinheit, lehre.tbl_moodle + WHERE + tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id AND + tbl_lehrveranstaltung.lehrveranstaltung_id = '".addslashes($lehrveranstaltung_id)."' AND + tbl_lehreinheit.studiensemester_kurzbz='".addslashes($studiensemester_kurzbz)."' AND + ((tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_moodle.lehrveranstaltung_id AND tbl_moodle.studiensemester_kurzbz=tbl_lehreinheit.studiensemester_kurzbz) + OR + (tbl_lehreinheit.lehreinheit_id=tbl_moodle.lehreinheit_id) + )"; + + if($result=$this->db_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + $obj = new moodle19_course($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->moodle_version = $row->moodle_version; + + if($obj->moodle_version=='1.9') + { + $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; + } + } + } + else + { + $obj->mdl_fullname = 'ID '.$obj->mdl_course_id.' Moodle v'.$obj->moodle_version; + $obj->mdl_shortname = 'ID '.$obj->mdl_course_id.' Moodle v'.$obj->moodle_version; + } + $this->result[] = $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + + } + + + /** + * Laedt alle MoodleKurse die zu einer LV/Stsem + * plus die MoodleKurse die auf dessen LE haengen + * @param lehrveranstaltung_id + * studiensemester_kurzbz + * @return true wenn ok, false im Fehlerfall + */ + public function getAllVariant($lehrveranstaltung_id='',$studiensemester_kurzbz='',$studiengang='',$semester='',$detail=false) + { + // Initialisierung + $this->errormsg = ''; + $this->result=array(); + + $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.=";"; + + if(!$result = $this->db_query($qry)) + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + + while($row = $this->db_fetch_object($result)) + { + $obj = new moodle19_course($this->conn_moodle); + + $obj->mdl_course_id = $row->mdl_course_id; + $obj->lehrveranstaltung_id = $row->lehrveranstaltung_id; + $obj->studiensemester_kurzbz = $row->studiensemester_kurzbz; + $obj->lehrveranstaltung_kurzbz=$row->kurzbz; + + $obj->lehrveranstaltung_bezeichnung=$row->bezeichnung; + $obj->lehrveranstaltung_semester=$row->semester; + $obj->lehrveranstaltung_studiengang_kz=$row->studiengang_kz; + + $obj->mdl_fullname = 'DB fehler ID '.$obj->mdl_course_id; + $obj->mdl_shortname =$obj->mdl_fullname; + + // Anzahl Benotungen + $obj->mdl_benotungen = 0; + // Anzahl Aktivitaeten und Lehrmaterial + $obj->mdl_resource = 0; + $obj->mdl_quiz = 0; + $obj->mdl_chat = 0; + $obj->mdl_forum = 0; + $obj->mdl_choice= 0; + + $moddle= new moodle19_course(); + if ($moddle->load($obj->mdl_course_id)) + { + $obj->mdl_fullname = $moddle->mdl_fullname; + $obj->mdl_shortname = $moddle->mdl_shortname; + } + else + { + $obj->mdl_fullname =$moddle->errormsg; + $obj->mdl_course_id = 0; + $this->result[] = $obj; + continue; + } + + if(!$detail) + { + $this->result[] = $obj; + continue; + } + + // 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); + } + } + + $qry_mdl = "SELECT count(course) as anz FROM public.mdl_forum WHERE mdl_forum.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_forum = (empty($row_mdl->anz)?0:$row_mdl->anz); + } + } + + $qry_mdl = "SELECT count(course) as anz FROM public.mdl_choice WHERE mdl_choice.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_choice = (empty($row_mdl->anz)?0:$row_mdl->anz); + } + } + + + $this->result[] = $obj; + } + return true; + } + +// ---------------------------------------------------------------------------------------------------------------- + /** + * 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 + */ + public function getAllMoodleVariant($mdl_course_id='',$lehrveranstaltung_id='',$studiensemester_kurzbz='',$lehreinheit_id='',$studiengang='',$semester='',$detail=false,$lehre=true,$aktiv=true) + { + // Initialisierung + $this->errormsg = ''; + $this->result=array(); + +/* $qry = "SELECT distinct tbl_moodle.lehrveranstaltung_id as moodle_lehrveranstaltung_id,tbl_moodle.lehreinheit_id as moodle_lehreinheit_id, tbl_moodle.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,tbl_moodle.lehreinheit_id,tbl_moodle.gruppen + 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))"; +*/ + $where=''; + if ($mdl_course_id!='') + $where.=" and tbl_moodle.mdl_course_id='".addslashes($mdl_course_id)."' "; + + if ($lehreinheit_id!='') + $where.=" and tbl_lehreinheit.lehreinheit_id='".addslashes($lehreinheit_id)."' "; + + if ($lehrveranstaltung_id!='') + $where.=" and tbl_lehrveranstaltung.lehrveranstaltung_id='".addslashes($lehrveranstaltung_id)."' "; + + if ($studiensemester_kurzbz!='') + $where.=" and tbl_lehreinheit.studiensemester_kurzbz='".addslashes($studiensemester_kurzbz)."' "; + + if ($studiengang!='') + $where.=" and tbl_lehrveranstaltung.studiengang_kz='".addslashes($studiengang)."' "; + + if ($semester!='') + $where.=" and tbl_lehrveranstaltung.semester='".addslashes($semester)."' "; + + if ($lehre) + $where.=" and tbl_lehrveranstaltung.lehre "; + + if ($aktiv) + $where.=" and tbl_lehrveranstaltung.aktiv "; + + $qry =''; + $qry.=' SELECT distinct tbl_moodle.studiensemester_kurzbz + ,tbl_lehrveranstaltung.studiengang_kz + ,tbl_lehrveranstaltung.semester + ,tbl_moodle.mdl_course_id + ,tbl_lehrveranstaltung.lehrveranstaltung_id + ,tbl_moodle.lehreinheit_id as moodle_lehreinheit_id + ,tbl_moodle.lehrveranstaltung_id as moodle_lehrveranstaltung_id + ,tbl_moodle.lehreinheit_id as lehreinheit_id,tbl_lehrveranstaltung.bezeichnung,tbl_lehrveranstaltung.kurzbz,tbl_moodle.gruppen + ,tbl_lehrveranstaltung.lehrform_kurzbz,tbl_lehrveranstaltung.orgform_kurzbz + ,tbl_moodle.moodle_id + FROM lehre.tbl_lehrveranstaltung, lehre.tbl_lehreinheit,lehre.tbl_moodle + + where tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_moodle.lehrveranstaltung_id + and tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_moodle.lehrveranstaltung_id + and tbl_moodle.studiensemester_kurzbz=tbl_lehreinheit.studiensemester_kurzbz + and tbl_moodle.lehreinheit_id is null + '; + $qry.=$where; + + $qry.=' UNION '; + $qry.=' SELECT distinct tbl_moodle.studiensemester_kurzbz + ,tbl_lehrveranstaltung.studiengang_kz + ,tbl_lehrveranstaltung.semester + ,tbl_moodle.mdl_course_id + ,tbl_lehrveranstaltung.lehrveranstaltung_id + ,tbl_moodle.lehreinheit_id as moodle_lehreinheit_id + ,tbl_moodle.lehrveranstaltung_id as moodle_lehrveranstaltung_id + ,tbl_moodle.lehreinheit_id as lehreinheit_id,tbl_lehrveranstaltung.bezeichnung,tbl_lehrveranstaltung.kurzbz,tbl_moodle.gruppen + ,tbl_lehrveranstaltung.lehrform_kurzbz,tbl_lehrveranstaltung.orgform_kurzbz + ,tbl_moodle.moodle_id + FROM lehre.tbl_lehrveranstaltung, lehre.tbl_lehreinheit,lehre.tbl_moodle + + where tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id + and tbl_moodle.lehreinheit_id=tbl_lehreinheit.lehreinheit_id + and tbl_moodle.lehrveranstaltung_id is null + '; + $qry.=$where; + + $qry.=' order by 1,2,3,4,5,6,7; '; + + +#echo "
$qry
"; + + if(!$result = $this->db_query($qry)) + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + + while($row = $this->db_fetch_object($result)) + { + + $obj = new moodle19_course($this->conn_moodle); + + $obj->mdl_course_id = $row->mdl_course_id; + $obj->lehrveranstaltung_id = $row->lehrveranstaltung_id; + $obj->lehreinheit_id = $row->lehreinheit_id; + $obj->studiensemester_kurzbz = $row->studiensemester_kurzbz; + $obj->lehrveranstaltung_kurzbz=$row->kurzbz; + $obj->lehrveranstaltung_bezeichnung=$row->bezeichnung; + $obj->lehrveranstaltung_semester=$row->semester; + $obj->lehrveranstaltung_studiengang_kz=$row->studiengang_kz; + $obj->lehrveranstaltung_lehrform_kurzbz=$row->lehrform_kurzbz; + + $obj->lehrveranstaltung_orgform_kurzbz=$row->orgform_kurzbz; + + $obj->moodle_lehrveranstaltung_id=$row->moodle_lehrveranstaltung_id; + $obj->moodle_lehreinheit_id=$row->moodle_lehreinheit_id; + $obj->moodle_mdl_course_id = $row->mdl_course_id; + $obj->mdl_fullname = 'Moodle Kurs nicht vorhanden ID '.$obj->mdl_course_id; + $obj->mdl_shortname =$obj->mdl_fullname; + $obj->gruppen=($row->gruppen=='t'?true:false);; + + // Anzahl Benotungen + $obj->mdl_benotungen = 0; + // Anzahl Aktivitaeten und Lehrmaterial + $obj->mdl_resource = 0; + $obj->mdl_quiz = 0; + $obj->mdl_chat = 0; + $obj->mdl_forum = 0; + $obj->mdl_choice= 0; + + $moddle= new moodle19_course(); + if ($moddle->load($obj->mdl_course_id)) + { + $obj->mdl_fullname = $moddle->mdl_fullname; + $obj->mdl_shortname = $moddle->mdl_shortname; + } + else + { + $obj->mdl_course_id = 0; + $obj->mdl_fullname =$moddle->errormsg; + $this->result[] = $obj; + continue; + } + + if(!$detail) + { + $this->result[] = $obj; + continue; + } + + + // 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); + } + } + + $qry_mdl = "SELECT count(course) as anz FROM public.mdl_forum WHERE mdl_forum.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_forum = (empty($row_mdl->anz)?0:$row_mdl->anz); + } + } + + $qry_mdl = "SELECT count(course) as anz FROM public.mdl_choice WHERE mdl_choice.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_choice = (empty($row_mdl->anz)?0:$row_mdl->anz); + } + } + $this->result[] = $obj; + } + return true; + + } + + /** + * Schaut ob fuer diese LV/StSem schon ein + * Moodle Kurs existiert + * @param lehrveranstaltung_id + * studiensemester_kurzbz + * @return true wenn vorhanden, false wenn nicht + */ + public function course_exists_for_lv($lehrveranstaltung_id, $studiensemester_kurzbz) + { + $qry = "SELECT 1 FROM lehre.tbl_moodle WHERE lehrveranstaltung_id='".addslashes($lehrveranstaltung_id)."' AND studiensemester_kurzbz='".addslashes($studiensemester_kurzbz)."'"; + if($this->db_query($qry)) + { + if($this->db_num_rows()>0) + return true; + else + return false; + } + else + { + $this->errormsg = 'Fehler bei SELECT Abfrage in moodle_course.class.php / course_exists_for_lv'; + return false; + } + } + + /** + * Schaut ob fuer diese LE schon ein Moodle + * Kurs existiert + * @param lehreinheit_id + * @return true wenn vorhanden, false wenn nicht + */ + public function course_exists_for_le($lehreinheit_id) + { + $qry = "SELECT 1 FROM lehre.tbl_moodle WHERE lehreinheit_id='".addslashes($lehreinheit_id)."'"; + if($this->db_query($qry)) + { + if($this->db_num_rows()>0) + return true; + else + return false; + } + else + { + $this->errormsg = 'Fehler bei SELECT Abfrage in moodle_course.class.php / course_exists_for_le'; + return false; + } + } + + /** + * Schaut ob fuer diese LV/StSem schon ein + * Moodle Kurs existiert + * @param lehrveranstaltung_id + * studiensemester_kurzbz + * @return true wenn vorhanden, false wenn nicht + */ + public function course_exists_for_allLE($lehrveranstaltung_id, $studiensemester_kurzbz) + { + $qry = "SELECT 1 FROM lehre.tbl_lehreinheit + WHERE lehrveranstaltung_id='".addslashes($lehrveranstaltung_id)."' + AND studiensemester_kurzbz='".addslashes($studiensemester_kurzbz)."' + AND lehreinheit_id NOT IN (SELECT lehreinheit_id FROM lehre.tbl_moodle WHERE lehreinheit_id=tbl_lehreinheit.lehreinheit_id)"; + if($this->db_query($qry)) + { + if($this->db_num_rows()>0) + return false; + else + return true; + } + else + { + $this->errormsg = 'Fehler bei SELECT Abfrage in moodle_course.class.php / course_exists_for_allLE'; + return false; + } + } + + /** + * Legt einen Eintrag in der tbl_moodle an + * @return true wenn ok, false im Fehlerfall + */ + public function create_vilesci() + { + if($this->mdl_course_id=='') + { + $this->errormsg='mdl_course_id muss angegeben sein'; + return false; + } + + $qry = 'BEGIN; INSERT INTO lehre.tbl_moodle(mdl_course_id, lehreinheit_id, lehrveranstaltung_id, + studiensemester_kurzbz, insertamum, insertvon, gruppen, moodle_version) + VALUES('. + $this->addslashes($this->mdl_course_id).','. + $this->addslashes($this->lehreinheit_id).','. + $this->addslashes($this->lehrveranstaltung_id).','. + $this->addslashes($this->studiensemester_kurzbz).','. + $this->addslashes($this->insertamum).','. + $this->addslashes($this->insertvon).','. + ($this->gruppen?'true':'false').", '1.9');"; + + if($this->db_query($qry)) + { + $qry = "SELECT currval('lehre.tbl_moodle_moodle_id_seq') as id;"; + if($this->db_query($qry)) + { + if($row = $this->db_fetch_object()) + { + $this->moodle_id = $row->id; + $this->db_query('COMMIT;'); + return true; + } + else + { + $this->db_query('ROLLBACK'); + $this->errormsg = 'Fehler beim Lesen der Sequence'; + return false; + } + } + else + { + $this->db_query('ROLLBACK'); + $this->errormsg = 'Fehler beim Lesen der Sequence'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Einfuegen des Datensatzes'; + return false; + } + } + + /** + * Entfernt einen Eintrag in der tbl_moodle an + * @return true wenn ok, false im Fehlerfall + */ + public function delete_vilesci($mdl_course_id=null,$lehrveranstaltung_id=null,$lehreinheit_id=null) + { + $this->errormsg = ''; + if (!is_null($mdl_course_id) && !empty($mdl_course_id)) + $this->mdl_course_id=$mdl_course_id; + if (!is_null($lehrveranstaltung_id) && !empty($lehrveranstaltung_id)) + $this->lehrveranstaltung_id=$lehrveranstaltung_id; + if (!is_null($lehreinheit_id) && !empty($lehreinheit_id)) + $this->lehreinheit_id=$lehreinheit_id; + $where=''; + if (!is_null($this->mdl_course_id) && !empty($this->mdl_course_id)) + $where.=($where?' and ':' where '). ' mdl_course_id='.$this->addslashes($this->mdl_course_id); + else + $where.=($where?' and ':' where '). ' mdl_course_id=0'; + if (!is_null($this->lehrveranstaltung_id) && !empty($this->lehrveranstaltung_id)) + $where.=($where?' and ':' where '). ' lehrveranstaltung_id='.$this->addslashes($this->lehrveranstaltung_id); + if (!is_null($this->lehreinheit_id) && !empty($this->lehreinheit_id)) + $where.=($where?' and ':' where '). ' lehreinheit_id='.$this->addslashes($this->lehreinheit_id); + if (empty($where)) + { + $this->errormsg='mdl_course_id oder LV oder LE muss angegeben sein'; + return false; + } + + $qry='DELETE FROM lehre.tbl_moodle '.$where; + if(!$this->db_query($qry)) + { + $this->errormsg = 'Fehler beim loeschen Moodle Lehrveranstaltung ! '.$qry.' '. $this->db_last_error().' in File:='.__FILE__.' Line:='.__LINE__; + return false; + } + + return true; + } + + /** + * Aendert einen Eintrag in der tbl_moodle an + * @return true wenn ok, false im Fehlerfall + */ + public function update_vilesci() + { + if($this->mdl_course_id=='') + { + $this->errormsg='mdl_course_id muss angegeben sein'; + return false; + } + if (is_null($this->new) || empty($this->new)) + $this->new=false; + + $this->db_query('BEGIN;'); + $qry = ''; + $res=0; + + if (!$this->new) + { + $qrySel = 'SELECT 1 FROM lehre.tbl_moodle WHERE mdl_course_id='.$this->addslashes($this->mdl_course_id); + if(!$res=$this->db_query($qrySel)) + { + $this->errormsg = 'Fehler bei SELECT Abfrage! '. $this->db_last_error().' in File:='.__FILE__.' Line:='.__LINE__; + return false; + } + if($this->db_num_rows($res)>0) + { + if ($this->lehrveranstaltung_id!='' && !is_null($this->lehrveranstaltung_id)) + { + $qry.= 'DELETE from lehre.tbl_moodle where mdl_course_id='.$this->addslashes($this->mdl_course_id).' and not lehreinheit_id = '.$this->addslashes($this->lehrveranstaltung_id) .' ; '; + } + else + { + $qry.= 'DELETE from lehre.tbl_moodle where mdl_course_id='.$this->addslashes($this->mdl_course_id).' and not lehreinheit_id in ('. (is_array($this->lehreinheit_id)? implode(',',$this->lehreinheit_id) :$this->lehreinheit_id) .') ; '; + } + } + } + + if ( ($this->lehrveranstaltung_id!='' && !is_null($this->lehrveranstaltung_id)) + OR !is_array($this->lehreinheit_id) ) + { + $qrySel = 'SELECT 1 FROM lehre.tbl_moodle WHERE mdl_course_id='.$this->addslashes($this->mdl_course_id); + if ($this->new) + { + if ( $this->lehrveranstaltung_id!='' && !is_null($this->lehrveranstaltung_id) ) + $qrySel.= ' and lehrveranstaltung_id='.$this->addslashes($this->lehrveranstaltung_id); + else + $qrySel.= ' and lehreinheit_id='.$this->addslashes($this->lehreinheit_id); + } + + if(!$res=$this->db_query($qrySel)) + { + $this->errormsg = 'Fehler beim Select Moodle Lehrveranstaltung ! '.$qrySel.' '. $this->db_last_error().' in File:='.__FILE__.' Line:='.__LINE__; + $this->db_query('ROLLBACK'); + return false; + + } + if($this->db_num_rows($res)>0) + { + $qry.= 'UPDATE lehre.tbl_moodle set + lehreinheit_id='.$this->addslashes($this->lehreinheit_id).', + lehrveranstaltung_id='.$this->addslashes($this->lehrveranstaltung_id).', + studiensemester_kurzbz='.$this->addslashes($this->studiensemester_kurzbz).' + '; + if (!is_null($this->gruppen)) + $qry.= ',gruppen='.($this->gruppen?'true':'false'); + $qry.= ' where mdl_course_id='.$this->addslashes($this->mdl_course_id).'; '; + } + else + { + $qry.= 'INSERT INTO lehre.tbl_moodle(mdl_course_id, lehreinheit_id, lehrveranstaltung_id, + studiensemester_kurzbz, insertamum, insertvon, gruppen, moodle_version) + VALUES('. + $this->addslashes($this->mdl_course_id).','. + $this->addslashes($this->lehreinheit_id).','. + $this->addslashes($this->lehrveranstaltung_id).','. + $this->addslashes($this->studiensemester_kurzbz).','. + $this->addslashes($this->insertamum).','. + $this->addslashes($this->insertvon).','. + ($this->gruppen?'true':'false').",'1.9'); "; + } + } + // Lehreinheiten anlegen - Array + else + { + foreach ($this->lehreinheit_id as $key=>$value) + { + $qrySel = 'SELECT 1 FROM lehre.tbl_moodle WHERE mdl_course_id='.$this->addslashes($this->mdl_course_id). ' and lehreinheit_id='.$this->addslashes($value); + if(!$res=$this->db_query($qrySel)) + { + $this->errormsg = 'Fehler beim Select Moodle Lehreinheit ! '. $this->db_last_error().' in File:='.__FILE__.' Line:='.__LINE__; + $this->db_query('ROLLBACK'); + return false; + } + if($this->db_num_rows($res)>0) + { + $qry.= 'UPDATE lehre.tbl_moodle set + lehrveranstaltung_id='.$this->addslashes($this->lehrveranstaltung_id).', + studiensemester_kurzbz='.$this->addslashes($this->studiensemester_kurzbz).' + '; + if (!is_null($this->gruppen)) + $qry.= ',gruppen='.($this->gruppen?'true':'false'); + $qry.= ' where mdl_course_id='.$this->addslashes($this->mdl_course_id); + $qry.= ' and lehreinheit_id='.$this->addslashes($value).'; '; + + } + else + { + $qry.= 'INSERT INTO lehre.tbl_moodle(mdl_course_id, lehreinheit_id, lehrveranstaltung_id, + studiensemester_kurzbz, insertamum, insertvon, gruppen, moodle_version) + VALUES('. + $this->addslashes($this->mdl_course_id).','. + $this->addslashes($value).','. + $this->addslashes($this->lehrveranstaltung_id).','. + $this->addslashes($this->studiensemester_kurzbz).','. + $this->addslashes($this->insertamum).','. + $this->addslashes($this->insertvon).','. + ($this->gruppen?'true':'false').",'1.9'); "; + } + } + } + + if(!$this->db_query($qry)) + { + $this->db_query('ROLLBACK'); + $this->errormsg = 'Fehler beim aendern des Datensatzes! '. $this->db_last_error().' in File:='.__FILE__.' Line:='.__LINE__; + return false; + } + +#echo $qry; + $this->db_query('COMMIT;'); + return true; + + } + + /** + * Aendert einen Kurs im Moodle an + * @return true wenn ok, false im Fehlerfall + */ + public function update_moodle($oldPath = null) + { + if($this->mdl_course_id=='') + { + $this->errormsg='mdl_course_id muss angegeben sein'; + return false; + } + + if( (is_null($this->lehrveranstaltung_id) || $this->lehrveranstaltung_id=='') + && (is_null($this->lehreinheit_id) && $this->lehreinheit_id=='')) + { + $this->errormsg='LvID oder LeID muss uebergeben werden'; + return false; + } + + pg_query($this->conn_moodle, 'BEGIN;'); + + //CourseCategorie ermitteln + + //lehrveranstalung ID holen falls die nur die lehreinheit_id angegeben wurde + if($this->lehrveranstaltung_id=='' || is_null($this->lehrveranstaltung_id)) + { + $qry = "SELECT lehrveranstaltung_id FROM lehre.tbl_lehreinheit + WHERE lehreinheit_id='".addslashes($this->lehreinheit_id)."'"; + if($res=$this->db_query($qry)) + { + if($row = $this->db_fetch_object($res)) + { + $lvid = $row->lehrveranstaltung_id; + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Ermitteln der LehrveranstaltungID'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Ermitteln der LehrveranstaltungID'; + return false; + } + } + else + $lvid = $this->lehrveranstaltung_id; + + //Studiengang und Semester holen + $qry = "SELECT tbl_lehrveranstaltung.semester, UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as stg + FROM lehre.tbl_lehrveranstaltung JOIN public.tbl_studiengang USING(studiengang_kz) + WHERE lehrveranstaltung_id='$lvid'"; + + if($res=$this->db_query($qry)) + { + if($row = $this->db_fetch_object($res)) + { + $semester = $row->semester; + $stg = $row->stg; + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Ermitteln von Studiengang und Semester'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Ermitteln von Studiengang und Semester'; + return false; + } + + //Studiensemester Categorie holen + if(!$id_stsem = $this->getCategorie($this->studiensemester_kurzbz, '0')) + { + if(!$id_stsem = $this->createCategorie($this->studiensemester_kurzbz, '0')) + echo "
Fehler beim Anlegen des Studiensemesters"; + } + + //Studiengang Categorie holen + if(!$id_stg = $this->getCategorie($stg, $id_stsem)) + { + if(!$id_stg = $this->createCategorie($stg, $id_stsem)) + echo "
$this->errormsg"; + } + + //Semester Categorie holen + if(!$id_sem = $this->getCategorie($semester, $id_stg)) + { + if(!$id_sem = $this->createCategorie($semester, $id_stg)) + echo "
$this->errormsg"; + } + + //CourseCategorie Context holen + $this->getContext(40, $id_sem); + + + $qry = 'UPDATE public.mdl_course set + category='.$this->addslashes($id_sem).', + fullname='. $this->addslashes($this->mdl_fullname) .', + shortname='.$this->addslashes($this->mdl_shortname).' + '; + $qry.= " WHERE id='".addslashes($this->mdl_course_id)."'; "; + +#echo $qry; +#return true; + + if(!$result = pg_query($this->conn_moodle, $qry)) + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Update'; + return false; + } + + /* + $qry = "DELETE FROM public.mdl_context where contextlevel='50' and instanceid=".$this->addslashes($this->mdl_course_id)." ;"; + if(!pg_query($this->conn_moodle, $qry)) + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Entfernen des Context eintrages. '. pg_last_error(); + return false; + } + */ + + $update=false; + $qry = "SELECT id FROM public.mdl_context WHERE contextlevel='50' and instanceid=".$this->addslashes($this->mdl_course_id)." ;"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + $this->mdl_context_id = $row->id; + $update=true; + } + } + + if($update) + { + //zum vorherigen Pfad die aktuelle id hinzufuegen + $path = $this->mdl_context_path.'/'.$this->mdl_context_id; + //vorherige tiefe um 1 erhoehen + $depth = $this->mdl_context_depth+1; + + $qry = "UPDATE public.mdl_context SET + contextlevel=50, + instanceid=".$this->addslashes($this->mdl_course_id).", + path=".$this->addslashes($path).", + depth=".$this->addslashes($depth)." + WHERE id='".addslashes($this->mdl_context_id)."';"; + if(!pg_query($this->conn_moodle, $qry)) + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Update des Contexts'; + return false; + } + + $qry = "UPDATE public.mdl_context SET + path=".$this->addslashes($path)."|| '/' || mdl_context.id + WHERE path LIKE '".$oldPath."%';"; + if(!pg_query($this->conn_moodle, $qry)) + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Update des Contexts'; + return false; + } + } + else + { + $qry ="SELECT nextval('mdl_context_id_seq') as nextId"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row=pg_fetch_object($result)) + { + // nächste id herausfinden -> wegen insert + $path = $this->mdl_context_path.'/'.$row->nextId; + // tiefe um 1 erhoehen + $depth = $this->mdl_context_depth+1; + } + else + { + $this->errormsg = 'Fehler beim Select der Sequence :'. pg_last_error(); + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Select der Sequence :'. pg_last_error(); + return false; + } + + //Context eintragen + $qry = "INSERT INTO public.mdl_context(contextlevel, instanceid, path, depth) VALUES('50', ". + $this->addslashes($this->mdl_course_id).",'".$this->addslashes($path)."',".$this->addslashes($depth).");"; + if(pg_query($this->conn_moodle, $qry)) + { + $qry = "SELECT currval('mdl_context_id_seq') as id"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + $this->mdl_context_id = $row->id; + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence ::'. pg_last_error($result).' '. pg_last_error(); + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Select der Sequence :'. pg_last_error(); + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim INSERT'; + return false; + } + } + + + pg_query($this->conn_moodle, 'COMMIT;'); + return true; + } + + + + /** + * Legt einen Kurs im Moodle an + * @return true wenn ok, false im Fehlerfall + */ + public function create_moodle() + { + pg_query($this->conn_moodle, 'BEGIN;'); + + //CourseCategorie ermitteln + + //lehrveranstalung ID holen falls die nur die lehreinheit_id angegeben wurde + if($this->lehrveranstaltung_id=='') + { + $qry = "SELECT lehrveranstaltung_id FROM lehre.tbl_lehreinheit + WHERE lehreinheit_id='".addslashes($this->lehreinheit_id)."'"; + if($res=$this->db_query($qry)) + { + if($row = $this->db_fetch_object($res)) + { + $lvid = $row->lehrveranstaltung_id; + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Ermitteln der LehrveranstaltungID'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Ermitteln der LehrveranstaltungID'; + return false; + } + } + else + $lvid = $this->lehrveranstaltung_id; + + //Studiengang und Semester holen + $qry = "SELECT tbl_lehrveranstaltung.semester, UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as stg + FROM lehre.tbl_lehrveranstaltung JOIN public.tbl_studiengang USING(studiengang_kz) + WHERE lehrveranstaltung_id='$lvid'"; + + if($res=$this->db_query($qry)) + { + if($row = $this->db_fetch_object($res)) + { + $semester = $row->semester; + $stg = $row->stg; + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Ermitteln von Studiengang und Semester'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Ermitteln von Studiengang und Semester'; + return false; + } + + //Studiensemester Categorie holen + if(!$id_stsem = $this->getCategorie($this->studiensemester_kurzbz, '0')) + { + if(!$id_stsem = $this->createCategorie($this->studiensemester_kurzbz, '0')) + echo "
Fehler beim Anlegen des Studiensemesters"; + } + //Studiengang Categorie holen + if(!$id_stg = $this->getCategorie($stg, $id_stsem)) + { + if(!$id_stg = $this->createCategorie($stg, $id_stsem)) + echo "
$this->errormsg"; + } + //Semester Categorie holen + if(!$id_sem = $this->getCategorie($semester, $id_stg)) + { + if(!$id_sem = $this->createCategorie($semester, $id_stg)) + echo "
$this->errormsg"; + } + + //CourseCategorie Context holen + $this->getContext(40, $id_sem); + + //Eintrag in tbl_mdl_course + $qry = "INSERT INTO public.mdl_course(category, sortorder, fullname, shortname, format, showgrades, newsitems, enrollable, guest) + VALUES (".$this->addslashes($id_sem).", (SELECT max(sortorder)+1 FROM public.mdl_course), ".$this->addslashes($this->mdl_fullname).", ". + $this->addslashes($this->mdl_shortname).",'topics', 1, 5, 0, 1);"; + + if($result = pg_query($this->conn_moodle, $qry)) + { + $qry = "SELECT currval('mdl_course_id_seq') as id"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + $this->mdl_course_id = $row->id; + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim INSERT'; + return false; + } + + //zum vorherigen Pfad die aktuelle id hinzufuegen + $path = "(SELECT '$this->mdl_context_path' || '/' || currval('mdl_context_id_seq'))"; + //vorherige tiefe um 1 erhoehen + $depth = $this->mdl_context_depth+1; + + //Context eintragen + $qry = "INSERT INTO public.mdl_context(contextlevel, instanceid, path, depth) VALUES('50', ". + $this->addslashes($this->mdl_course_id).",".$path.",".$this->addslashes($depth).");"; + + if(pg_query($this->conn_moodle, $qry)) + { + $qry = "SELECT currval('mdl_context_id_seq') as id"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + $this->mdl_context_id = $row->id; + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim INSERT'; + return false; + } + + //Bloecke hinzufuegen + $qry = + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(20, $this->mdl_course_id, 'course-view', 'l', 0, 1);". //Teilnehmer + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(1, $this->mdl_course_id, 'course-view', 'l', 1, 1);". //Aktivit�ten + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(25, $this->mdl_course_id, 'course-view', 'l', 2, 1);". //Forumssuche + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(2, $this->mdl_course_id, 'course-view', 'l', 3, 1);". //Admin + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(9, $this->mdl_course_id, 'course-view', 'l', 4, 1);". //Kursliste + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(18, $this->mdl_course_id, 'course-view', 'r', 0, 1);". //Neueste Nachrichten + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(8, $this->mdl_course_id, 'course-view', 'r', 1, 1);". //Kalender / Bald aktuell... + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(22, $this->mdl_course_id, 'course-view', 'r', 2, 1);"; //Neueste Aktivit�ten + if(!pg_query($this->conn_moodle, $qry)) + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim INSERT der bloecke'; + return false; + } + else + { + pg_query($this->conn_moodle, 'COMMIT'); + return true; + } + + } + + + /** + * Laedt eine CourseCategorie anhand der Bezeichnung und der + * ParentID + */ + public function deleteCategorie($bezeichnung, $parent) + { + if($bezeichnung=='') + { + $this->errormsg = 'Bezeichnung muss angegeben werden'; + return false; + } + if($parent=='') + { + $this->errormsg = 'getCategorie: parent wurde nicht uebergeben'; + return false; + } + $qry = "DELETE FROM public.mdl_course_categories WHERE name='".addslashes($bezeichnung)."' AND parent='".addslashes($parent)."'"; + + if($result = pg_query($this->conn_moodle, $qry)) + { + return true; + } + else + { + $this->errormsg = 'Fehler beim loeschen der KursKategorie'; + return false; + } + } + + /** + * Laedt eine CourseCategorie anhand der Bezeichnung und der + * ParentID + */ + public function getCategorie($bezeichnung, $parent) + { + if($bezeichnung=='') + { + $this->errormsg = 'Bezeichnung muss angegeben werden'; + return false; + } + if($parent=='') + { + $this->errormsg = 'getCategorie: parent wurde nicht uebergeben'; + return false; + } + $qry = "SELECT id FROM public.mdl_course_categories WHERE name='".addslashes($bezeichnung)."' AND parent='".addslashes($parent)."'"; + + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + return $row->id; + } + else + { + $this->errormsg = 'Fehler beim Laden der KursKategorie'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden der KursKategorie'; + return false; + } + } + + /** + * Erzeugt eine CourseCategorie anhand der Bezeichnung und der + * ParentID + */ + public function createCategorie($bezeichnung, $parent) + { + if($bezeichnung=='') + { + $this->errormsg = 'Bezeichnung muss angegeben werden'; + return false; + } + if($parent=='') + { + $this->errormsg = 'createCategorie: parent wurde nicht uebergeben: '.$bezeichnung.' '.$parent; + return false; + } + if($parent!='0') + { + //Parent laden + $qry = "SELECT * FROM public.mdl_course_categories WHERE id='".addslashes($parent)."'"; + //echo $qry; + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + $depth = $row->depth; + $path = $row->path; + } + else + { + $this->errormsg = 'Fehler beim Laden der KursKategorie'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden der KursKategorie'; + return false; + } + } + else + { + $depth=0; + $path=''; + } + + //KursKategorie anlegen + $qry = "BEGIN; INSERT INTO public.mdl_course_categories(name, parent, sortorder, + coursecount, visible, timemodified, depth, path, theme) + VALUES(".$this->addslashes($bezeichnung).",".$this->addslashes($parent).",". + "'999',0,1,0,".$this->addslashes($depth+1). + ", (SELECT ".$this->addslashes($path.'/')." || currval('mdl_course_categories_id_seq')), null);"; + + if($res=pg_query($this->conn_moodle, $qry)) + { + $qry = "SELECT currval('mdl_course_categories_id_seq') as id"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + $coursecatid = $row->id; + + //Context anlegen + //wenn Parent 0 ist, dann den SYSTEM Eintrag holen + if($parent!='0') + $qry = "SELECT path, depth FROM public.mdl_context WHERE contextlevel='40' AND instanceid='".addslashes($parent)."'"; + else + $qry = "SELECT path, depth FROM public.mdl_context WHERE contextlevel='10' AND instanceid='".addslashes($parent)."'"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + $path = $row->path; + $depth = $row->depth; + + //zum vorherigen Pfad die aktuelle id hinzufuegen + $path = "(SELECT '$path' || '/' || currval('mdl_context_id_seq'))"; + //vorherige tiefe um 1 erhoehen + $depth=$depth+1; + + //Context eintragen + $qry = "INSERT INTO public.mdl_context(contextlevel, instanceid, path, depth) VALUES('40', ". + $this->addslashes($coursecatid).",".$path.",".$this->addslashes($depth).");"; + + if(pg_query($this->conn_moodle, $qry)) + { + $qry = "SELECT currval('mdl_context_id_seq') as id"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + pg_query($this->conn_moodle,'COMMIT;'); + return $coursecatid; + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim INSERT'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK;'); + $this->errormsg = 'Fehler beim Auslesen des Contextes'.$qry; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK;'); + $this->errormsg = 'Fehler beim Auslesen des Contextes'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Speichern der KursKategorie'; + return false; + } + } + + /** + * Laedt einen Context anhand des contextlevels und der instanceid + */ + public function getContext($contextlevel, $instanceid) + { + + $qry ="SELECT * FROM public.mdl_context WHERE contextlevel='".addslashes($contextlevel)."' + AND instanceid='".addslashes($instanceid)."'"; + + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + $this->mdl_context_id = $row->id; + $this->mdl_context_contextlevelid = $row->id; + $this->mdl_context_instanceid = $row->instanceid; + $this->mdl_context_path = $row->path; + $this->mdl_context_depth = $row->depth; + + return true; + } + else + { + $this->errormsg = 'Eintrag wurde nicht gefunden'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Auslesen des Contexts'; + return false; + } + } + + /** + * Aktualisiert die Spalte gruppen in der tbl_moodle + * @param moodle_id ID der MoodleZuteilung + * gruppen boolean true wenn syncronisiert + * werden soll, false wenn nicht + * @return true wenn ok, false im Fehlerfall + */ + public function updateGruppenSync($moodle_id, $gruppen) + { + if(!is_numeric($moodle_id)) + { + $this->errormsg = 'Moodle_id muss eine gueltige Zahl sein'; + return false; + } + + $qry = "UPDATE lehre.tbl_moodle SET gruppen=".($gruppen?'true':'false')." WHERE moodle_id='".addslashes($moodle_id)."'"; + + if($this->db_query($qry)) + { + return true; + } + else + { + $this->errormsg = 'Fehler beim Update'; + return false; + } + } + + + + /** + * Liefert den Path zur Übergebenen InstanceId und Contextlevel zurück + * @param instanceId Kurs ID + * @param contextLevel Integer + * @return path wenn ok, false im Fehlerfall + */ + public function getPath($instanceId, $contextLevel = '50') + { + if(!is_numeric($instanceId)) + { + $this->errormsg = 'Moodle_id muss eine gueltige Zahl sein'; + return false; + } + + $qry = "SELECT * FROM public.mdl_context WHERE + instanceid=".$this->addslashes($instanceId)." AND + contextlevel = ".$this->addslashes($contextLevel).";"; + + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + return $row->path; + } + } + else + { + $this->errormsg = 'Fehler bei der Abfrage aufgetreten'; + return false; + } + } + + + + /** + * Legt einen Testkurs an + */ + public function createTestkurs($lehrveranstaltung_id, $studiensemester_kurzbz) + { + pg_query($this->conn_moodle, 'BEGIN;'); + + //CourseCategorie ermitteln + + //Studiengang und Semester holen + + $qry = "SELECT tbl_lehrveranstaltung.semester, UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as stg FROM lehre.tbl_lehrveranstaltung JOIN public.tbl_studiengang USING(studiengang_kz) + WHERE lehrveranstaltung_id='$lehrveranstaltung_id'"; + + if($this->db_query($qry)) + { + if($row = $this->db_fetch_object()) + { + $semester = $row->semester; + $stg = $row->stg; + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Ermitteln von Studiengang und Semester'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Ermitteln von Studiengang und Semester'; + return false; + } + + //Testkurs Categorie holen + if(!$id_testkurs = $this->getCategorie('Testkurse', '0')) + { + if(!$id_testkurs = $this->createCategorie('Testkurse', '0')) + echo "
Fehler beim Anlegen der Testkurskategorie"; + } + //StSem Categorie holen + if(!$id_stsem = $this->getCategorie($studiensemester_kurzbz, $id_testkurs)) + { + if(!$id_stsem = $this->createCategorie($studiensemester_kurzbz, $id_testkurs)) + echo "
$this->errormsg"; + } + + //CourseCategorie Context holen + $this->getContext(40, $id_stsem); + + //Eintrag in tbl_mdl_course + $qry = "INSERT INTO public.mdl_course(category, sortorder, fullname, shortname, format, showgrades, newsitems, enrollable, guest) + VALUES (".$this->addslashes($id_stsem).", (SELECT max(sortorder)+1 FROM public.mdl_course), ".$this->addslashes($this->mdl_fullname).", ". + $this->addslashes($this->mdl_shortname).",'topics', 1, 5, 0, 1);"; + + if($result = pg_query($this->conn_moodle, $qry)) + { + $qry = "SELECT currval('mdl_course_id_seq') as id"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + $this->mdl_course_id = $row->id; + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim INSERT'; + return false; + } + + //zum vorherigen Pfad die aktuelle id hinzufuegen + $path = "(SELECT '$this->mdl_context_path' || '/' || currval('mdl_context_id_seq'))"; + //vorherige tiefe um 1 erhoehen + $depth = $this->mdl_context_depth+1; + + //Context eintragen + $qry = "INSERT INTO public.mdl_context(contextlevel, instanceid, path, depth) VALUES('50', ". + $this->addslashes($this->mdl_course_id).",".$path.",".$this->addslashes($depth).");"; + + if(pg_query($this->conn_moodle, $qry)) + { + $qry = "SELECT currval('mdl_context_id_seq') as id"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + $this->mdl_context_id = $row->id; + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim INSERT'; + return false; + } + + //Bloecke hinzufuegen + $qry = + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(20, $this->mdl_course_id, 'course-view', 'l', 0, 1);". //Teilnehmer + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(1, $this->mdl_course_id, 'course-view', 'l', 1, 1);". //Aktivit�ten + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(25, $this->mdl_course_id, 'course-view', 'l', 2, 1);". //Forumssuche + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(2, $this->mdl_course_id, 'course-view', 'l', 3, 1);". //Admin + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(9, $this->mdl_course_id, 'course-view', 'l', 4, 1);". //Kursliste + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(18, $this->mdl_course_id, 'course-view', 'r', 0, 1);". //Neueste Nachrichten + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(8, $this->mdl_course_id, 'course-view', 'r', 1, 1);". //Kalender / Bald aktuell... + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(22, $this->mdl_course_id, 'course-view', 'r', 2, 1);"; //Neueste Aktivit�ten + + if(!pg_query($this->conn_moodle, $qry)) + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim INSERT der Bloecke'; + return false; + } + else + { + pg_query($this->conn_moodle, 'COMMIT'); + return true; + } + } + + /** + * Laedt den Testkurs zu dieser Lehrveranstaltung + * @param lehrveranstaltung_id + * studiensemester_kurzbz + * @return ID wenn gefunden, false wenn nicht vorhanden + */ + public function loadTestkurs($lehrveranstaltung_id, $studiensemester_kurzbz) + { + $qry = "SELECT + UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as kuerzel, + tbl_lehrveranstaltung.semester, tbl_lehrveranstaltung.kurzbz + FROM + lehre.tbl_lehrveranstaltung JOIN public.tbl_studiengang USING(studiengang_kz) + WHERE + lehrveranstaltung_id='".addslashes($lehrveranstaltung_id)."'"; + + if($this->db_query($qry)) + { + if($row = $this->db_fetch_object()) + { + $shortname = mb_strtoupper('TK-'.$studiensemester_kurzbz.'-'.$row->kuerzel.'-'.$row->semester.'-'.$row->kurzbz); + } + else + { + $this->errormsg = 'Fehler beim Laden des Testkurses'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden des Testkurses'; + return false; + } + + //Testkurs Categorie holen + if(!$id_testkurs = $this->getCategorie('Testkurse', '0')) + { + $this->errormsg = 'Categorie nicht gefunden'; + return false; + } + + //StSem Categorie holen + if(!$id_stsem = $this->getCategorie($studiensemester_kurzbz, $id_testkurs)) + { + $this->errormsg = 'Categorie nicht gefunden'; + return false; + } + + $qry = "SELECT id, fullname, shortname FROM public.mdl_course WHERE shortname='".addslashes($shortname)."' AND category='$id_stsem' LIMIT 1"; + + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + $this->mdl_fullname = $row->fullname; + $this->mdl_shortname = $row->shortname; + $this->mdl_course_id = $row->id; + return true; + } + else + { + $this->errormsg = 'Es wurde kein Testkurs gefunden'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Abfragen der Kurse'; + return false; + } + } + + + /** + * Laedt die Noten zu einem Moodle Course ID + * @param mdl_course_id + * + * @return objekt mit den Noten der Teilnehmer dieses Kurses + */ + public function loadNoten($lehrveranstaltung_id=null, $studiensemester_kurzbz=null,$student_uid='',$bDetailinfo=false,$bServerinfo=false) + { + + + $this->errormsg=''; + $this->result=null; + + // Init + if (!is_null($lehrveranstaltung_id)) + $this->lehrveranstaltung_id=trim($lehrveranstaltung_id); + if (!is_null($studiensemester_kurzbz)) + $this->studiensemester_kurzbz=trim($studiensemester_kurzbz); + $student_uid=trim($student_uid); + + + + // plausib + if (empty($this->lehrveranstaltung_id) + || empty($this->studiensemester_kurzbz) ) + { + $this->errormsg = 'Es fehlt die Eingabe von '; + $this->errormsg.=(empty($this->lehrveranstaltung_id)?' Lehrveranstaltung ':$this->lehrveranstaltung_id); + $this->errormsg.=(empty($this->studiensemester_kurzbz)?' Semester (Kurzbz.) ':$this->studiensemester_kurzbz); + return false; + } + + // -------------------------------------------------------------------- + // Ermitteln die Lehreinheiten und Moodle ID + // mit dem studiensemester_kurzbz ( bsp WS2008 ) + // und der lehrveranstaltung_id aus FAS ( bsp 23802 ) + // -------------------------------------------------------------------- + + $qry = " + SELECT tbl_lehreinheit.lehreinheit_id, mdl_course_id,tbl_lehreinheit.studiensemester_kurzbz,tbl_lehreinheit.lehrveranstaltung_id + FROM lehre.tbl_moodle + JOIN lehre.tbl_lehreinheit USING(lehrveranstaltung_id, studiensemester_kurzbz) + WHERE + moodle_version='1.9' AND + tbl_moodle.lehrveranstaltung_id > 0 "; + if ($this->lehrveranstaltung_id) + $qry.= " and tbl_moodle.lehrveranstaltung_id ='".addslashes($this->lehrveranstaltung_id)."' "; + if ($this->studiensemester_kurzbz) + $qry.= " and tbl_moodle.studiensemester_kurzbz ='".addslashes($this->studiensemester_kurzbz)."' "; + $qry.= " + UNION + SELECT tbl_lehreinheit.lehreinheit_id, mdl_course_id,tbl_lehreinheit.studiensemester_kurzbz,tbl_lehreinheit.lehrveranstaltung_id + FROM lehre.tbl_moodle + JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + WHERE moodle_version='1.9' AND tbl_lehreinheit.lehrveranstaltung_id > 0 "; + if ($this->lehrveranstaltung_id) + $qry.= " and tbl_lehreinheit.lehrveranstaltung_id ='".addslashes($this->lehrveranstaltung_id)."' "; + if ($this->studiensemester_kurzbz) + $qry.= " and tbl_moodle.studiensemester_kurzbz ='".addslashes($this->studiensemester_kurzbz)."' "; + + if(!$result_moodle=$this->db_query($qry)) + { + $this->errormsg = 'Fehler beim Lesen der Moodle Kurse , '.$this->errormsg; + return false; + } + + + // init + $_lehreinheit=array(); // Lehreinheiten zum lesen Studenten im Campus (Student und LE im FAS) + $_lehrveranstaltung = array(); // Gesamte Information der Lehreinheit und Moodle IDs + $_studiensemester_kurzbz=array(); + $_lehreinheit_kpl=array(); + while($row = $this->db_fetch_object($result_moodle)) + { + + $row->lehreinheit_id=trim($row->lehreinheit_id); + $_lehreinheit_kpl[$row->lehreinheit_id]=$row; + + $_lehreinheit[$row->lehreinheit_id]=$row->lehreinheit_id; // Fuer Select Campus + + $row->lehrveranstaltung_id=trim($row->lehrveranstaltung_id); + $_lehrveranstaltung[$row->lehrveranstaltung_id]=$row->lehrveranstaltung_id; // Fuer Select Campus + + $row->studiensemester_kurzbz=trim($row->studiensemester_kurzbz); + $_studiensemester_kurzbz[$row->studiensemester_kurzbz]=$row->studiensemester_kurzbz; // Fuer Select Campus + + } + if (count($_lehreinheit)<1) // Es gibt keine Lehreinheiten + { + $this->errormsg='Es wurde kein passender Moodle-Kurs gefunden'; + return false; + } + + // -------------------------------------------------------------------- + // + // Suchen Studenten Lehreinheiten zu Moodle - LE + // Fuer die Notenermittlung sind nur Studenten wichtig + // die einen Moodlekurs besuchen der auch eine Lehrveranstaltung ist + // Als Ergebnis sind alle Studenten mit gemeinsame Moodle und FAS LV + // -------------------------------------------------------------------- + $qry = "SELECT distinct vw_student_lehrveranstaltung.lehreinheit_id,lehrveranstaltung_id,studiensemester_kurzbz,kurzbz,bezeichnung,semester,studiengang_kz + FROM campus.vw_student_lehrveranstaltung + "; + $qry.= " WHERE vw_student_lehrveranstaltung.lehreinheit_id in (".implode(",",$_lehreinheit).") "; + $qry.= " AND lehrveranstaltung_id in (".implode(",",$_lehrveranstaltung).") "; + $qry.= " AND vw_student_lehrveranstaltung.studiensemester_kurzbz in ('".implode("','",$_studiensemester_kurzbz)."') "; + if (!empty($student_uid)) + $qry.= " AND uid ='".addslashes($student_uid)."' "; + + if(!$result_moodle=$this->db_query($qry)) + { + $this->errormsg = 'Fehler beim Lesen der Studenten mit Lehreinheit(en) '; + return false; + } + + if (!$anz=$this->db_num_rows($result_moodle)) + { + $this->errormsg ="keine Lehrveranstaltung (Lehreinheit) fuer Moodle Kursdaten gefunden!"; + return false; + } + + $last_moodle_id=false; + while($row = $this->db_fetch_object($result_moodle)) + { + + // Von der Lehreinheit kann der Moodle-Kurs ermittelt werden + $this->mdl_course_id=trim($_lehreinheit_kpl[$row->lehreinheit_id]->mdl_course_id); + if ($last_moodle_id==$this->mdl_course_id) + continue; + $last_moodle_id=$this->mdl_course_id; + + // XML RPC - Call + $method = "NotenCourseByID"; + + $m_user=array(); + $m_user['CourseID']=$this->mdl_course_id; + $mdl_username=trim($student_uid); + $m_user['UserId']=$mdl_username; + + if (!$result=$this->callMoodleXMLRPC($method,$m_user,$bServerinfo)) + return false; + + if ($result[0]==1) + { + + $error=(isset($result[1])?$result[1]:"Kurs Info "); + $kursArr=(isset($result[2])?$result[2]:array()); + $kursasObj=(isset($result[3])?$result[3]:array()); + $userArr=(isset($result[4])?$result[4]:array()); + $userasObj=(isset($result[5])?$result[5]:array()); + $id=(isset($result[6])?$result[6]:''); + $kursname=(isset($result[7])?$result[7]:''); + $shortname=(isset($result[8])?$result[8]:''); + $courseArr=(isset($result[9])?$result[9]:array()); + + if (!empty($student_uid)) + $note=(isset($userArr) && isset($userArr[6])?$userArr[6]:'?'); + else + $note=0; + + $obj = new moodle19_course($this->conn_moodle); + + $obj->mdl_course_id = $this->mdl_course_id; + $obj->lehreinheit_id=$row->lehreinheit_id; + + $obj->lehrveranstaltung_id = $row->lehrveranstaltung_id; + $obj->studiensemester_kurzbz = $row->studiensemester_kurzbz; + + $obj->lehrveranstaltung_kurzbz=$row->kurzbz; + $obj->lehrveranstaltung_bezeichnung=$row->bezeichnung; + $obj->lehrveranstaltung_semester=$row->semester; + $obj->lehrveranstaltung_studiengang_kz=$row->studiengang_kz; + + $obj->mdl_fullname=$kursname; + $obj->mdl_shortname=$shortname; + $obj->note=$note; + + $obj->errormsg=(isset($result[1])?$result[1]:""); + $obj->note=$note; + + if ($bDetailinfo || empty($student_uid)) + $obj->result=$result; + else + $obj->result=$userArr; + + $this->errormsg.=(!empty($this->errormsg)?", \n":"").$obj->errormsg; + $this->result[]=$obj; + + } + else + { + $this->errormsg.=(!empty($this->errormsg)?", \n":"").(isset($result[1])?$result[1]:"Fehler Kurs Info ".$this->moodle_id); + } + + } + return $this->result; + } // Ende moodle Noten + + + /** + * Loescht einen Moodle Course im Moodel und in der DB + * @param mdl_course_id + * @param bServerinfo Detail xmlrpc Debug informationen + * + * @return objekt mit den Noten der Teilnehmer dieses Kurses + */ + public function deleteKurs($mdl_course_id=null,$moodle_id=null,$bServerinfo=false) + { + $this->errormsg=''; + $this->result=array(); + + if (!is_null($mdl_course_id)) + $this->mdl_course_id=$mdl_course_id; + + + if (!is_null($moodle_id)) + $this->moodle_id=$moodle_id; + + if (is_null($this->mdl_course_id) || empty($this->mdl_course_id) || !is_numeric($this->mdl_course_id)) + { + $this->errormsg='Moodle Kurs ID fehlt'; + return false; + } + + // Variable Daten Initialisieren + $args=array(); + $args['CourseID']=$this->mdl_course_id; + $method = "DeleteCourseByID"; + + if (!$result=$this->callMoodleXMLRPC($method,$args,$bServerinfo)) + return false; + + if (isset($result[1])) + $this->errormsg=$result[1]; + + if ($result[0]==1 || !$this->load($this->mdl_course_id)) // Methodenaufruf erfolgreich + { + $qry = "DELETE FROM lehre.tbl_moodle WHERE moodle_version='1.9' AND mdl_course_id='". addslashes($this->mdl_course_id) ."' "; + if (!is_null($this->moodle_id) && $this->moodle_id!='') + $qry.= " and moodle_id='".addslashes($this->moodle_id)."'"; + if(!$this->db_query($qry)) + { + $this->errormsg=$this->errormsg." Moodlekurs $mdl_course_id wurde NICHT gelöscht in Lehre. "; + return false; + } + } + else // Result = 0 ein Fehler im RFC wurde festgestellt + { + $this->errormsg=(isset($result[1])?$result[1]:" - Fehler beim Kurs ".$this->mdl_course_id." löschen "); + return false; + } + + if (empty($this->errormsg)) + $this->errormsg.="Moodlekurs ".$this->mdl_course_id." wurde gelöscht."; + return true; + + } + + /** + * ruft eine XMLRPC Methode im Moodle auf + * @param methode + * @param argumente - parameter + * @param server debug informationen + * + * @return objekt mit den Noten der Teilnehmer dieses Kurses + */ + public function callMoodleXMLRPC($method=null,$args=null,$debug=false) + { + if (is_null($method) || empty($method)) + { + $this->errormsg ="Fehler xmlrpc call - Methode fehlt"; + return false; + } + + // Aktuellen Moodle Server ermitteln. + if (defined('MOODLE_PATH')) // Eintrag MOODLE_PATH in Vilesci config.inc.php. Hostname herausfiltern + { + $host = parse_url(MOODLE_PATH, PHP_URL_HOST); + $path = parse_url(MOODLE_PATH, PHP_URL_PATH); + } + + $port = ''; + $uri = $path."xmlrpc/xmlrpc.php"; + + // Ausgabeeinstellungen + $output=array('encoding' => 'UTF-8' ); + + + + $result=false; + $callspec = array( + 'user' => (isset($_SERVER['PHP_AUTH_USER'])?$_SERVER['PHP_AUTH_USER']:'') , + 'pass' => (isset($_SERVER['PHP_AUTH_PW'])?$_SERVER['PHP_AUTH_PW']:''), + 'method' => $method, + 'host' => $host, + 'port' => $port, + 'uri' => $uri, + 'secure' => false, + 'debug' => $debug, + 'args' => (!is_null($args)?$args:''), + 'output'=>$output); + + $result = xu_rpc_http_concise($callspec); + if (!is_array($result)) + { + $this->errormsg ="Fehler xmlrpc call "; + return false; + } + return $result; + } + +} // Ende moodle_course class diff --git a/include/moodle19_user.class.php b/include/moodle19_user.class.php new file mode 100644 index 000000000..6a87040c1 --- /dev/null +++ b/include/moodle19_user.class.php @@ -0,0 +1,788 @@ +, + * Andreas Oesterreicher and + * Rudolf Hangl . + */ +/* + * requires moodle_course.class.php + * studiengang.class.php + * + * Klasse zur Kommunikation mit Moodle 1.9 + */ +require_once(dirname(__FILE__).'/basis_db.class.php'); + +class moodle19_user extends basis_db +{ + private $conn_moodle; + public $log=''; //log message fuer Syncro + public $log_public=''; //log message fuer Syncro + public $sync_create=0; //anzahl der durchgefuehrten zuteilungen beim syncro + public $group_update=0; //anzahl der updates an gruppen + + public $mdl_user_id; + public $mdl_user_username; + public $mdl_user_firstname; + public $mdl_user_lastname; + + /** + * Konstruktor + */ + public function __construct() + { + if(!$this->conn_moodle=pg_pconnect(CONN_STRING_MOODLE)) + { + $this->errormsg = 'Fehler beim Herstellen der Moodle Verbindung'; + return false; + } + else + return true; + } + + /** + * Laedt einen Moodle User + * + * @param $uid + * @return boolean + */ + public 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 + */ + public 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 + moodle_version='1.9' + AND 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 + moodle_version='1.9' + AND tbl_lehreinheit.studiensemester_kurzbz=tbl_moodle.studiensemester_kurzbz + AND mdl_course_id='".addslashes($mdl_course_id)."'"; + $mitarbeiter=array(); + if($this->db_query($qry)) + { + while($row_ma = $this->db_fetch_object()) + { + $mitarbeiter[] = $row_ma->mitarbeiter_uid; + } + return $mitarbeiter; + } + else + { + $this->errormsg='Fehler beim Laden der Mitarbeiter'; + return false; + } + } + + /** + * 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 + */ + public 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 + moodle_version='1.9' + AND 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 + moodle_version='1.9' + AND tbl_lehreinheit.studiensemester_kurzbz=tbl_moodle.studiensemester_kurzbz + AND mdl_course_id='".addslashes($mdl_course_id)."'"; + } + $mitarbeiter=''; + if($result_ma = $this->db_query($qry)) + { + //Context des Kurses holen + $mdlcourse = new moodle19_course(); + if(!$mdlcourse->getContext(50, $mdl_course_id)) + { + $this->errormsg = 'Fehler beim Laden des Contexts'; + return false; + } + + while($row_ma = $this->db_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 + */ + public 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 + moodle_version='1.9' + AND 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 + moodle_version='1.9' + AND tbl_lehreinheit.studiensemester_kurzbz=tbl_moodle.studiensemester_kurzbz + AND mdl_course_id='".addslashes($mdl_course_id)."'"; + $studenten=''; + if($result_std = $this->db_query($qry)) + { + //Context des Kurses holen + $mdlcourse = new moodle19_course(); + if(!$mdlcourse->getContext(50, $mdl_course_id)) + { + $this->errormsg = 'Fehler beim Laden des Contexts'; + return false; + } + + while($row_std = $this->db_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='".addslashes($row_std->studiensemester_kurzbz)."' AND + studiengang_kz = '".addslashes($row_std->studiengang_kz)."' AND + semester = '".addslashes($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(); + $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='".addslashes($row_std->gruppe_kurzbz)."' AND + studiensemester_kurzbz='".addslashes($row_std->studiensemester_kurzbz)."'"; + $gruppenbezeichnung = $row_std->gruppe_kurzbz; + } + + if($result_user = $this->db_query($qry)) + { + while($row_user = $this->db_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 + */ + public 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 + */ + public 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 + */ + public 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 nicht 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 + */ + public 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; + } + } + + /** + * Legt einen User im Moodle an + * @param $uid UID der Person die angelegt werden soll + * @return true wenn ok, false wenn Fehler + */ + public function createUser($uid) + { + $qry = "SELECT uid, vorname, nachname FROM campus.vw_benutzer WHERE uid='".addslashes($uid)."'"; + if($this->db_query($qry)) + { + if($row = $this->db_fetch_object()) + { + $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).", 3, 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 + */ + public 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 + */ + public 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"; + } + return true; + } + 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 + */ + public 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 + */ + public function createTestStudentenZuordnung($mdl_course_id) + { + //Context des Kurses holen + $mdlcourse = new moodle19_course(); + 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; + } +} diff --git a/include/moodle24_course.class.php b/include/moodle24_course.class.php new file mode 100644 index 000000000..44e622371 --- /dev/null +++ b/include/moodle24_course.class.php @@ -0,0 +1,691 @@ + and + */ +/* + * Moodle 2.4 Connector Klasse + * + * FHComplete Moodle Plugin muss installiert sein fuer + * Webservice Funktion 'fhcomplete_courses_by_shortname' + * 'fhcomplete_get_course_grades' + */ +require_once(dirname(__FILE__).'/basis_db.class.php'); +require_once(dirname(__FILE__).'/moodle.class.php'); + +class moodle24_course extends basis_db +{ + public $result = array(); + public $serverurl; + + //Vilesci Attribute + public $moodle_id; + public $mdl_course_id; + public $lehreinheit_id; + public $lehrveranstaltung_id; + public $studiensemester_kurzbz; + public $insertamum; + public $insertvon; + public $gruppen; + + //Moodle Attribute + public $mdl_fullname; + public $mdl_shortname; + + public $lehrveranstaltung_bezeichnung; + public $lehrveranstaltung_semester; + public $lehrveranstaltung_studiengang_kz; + + // Kurs Resourcen - Anzahl + public $mdl_benotungen; + public $mdl_resource; + public $mdl_quiz; + public $mdl_chat; + public $mdl_forum; + public $mdl_choice; + + public $note; + + /** + * Konstruktor + * + */ + public function __construct() + { + $moodle = new moodle(); + $pfad = $moodle->getPfad('2.4'); + $this->serverurl=$pfad.'/webservice/soap/server.php?wsdl=1&wstoken='.MOODLE_TOKEN24.'&'.microtime(true); + return true; + } + + /** + * Laedt einen MoodleKurs + * @param mdl_course_id ID des Moodle Kurses + * @return true wenn ok, false im Fehlerfall + */ + public function load($mdl_course_id) + { + $this->mdl_fullname = ''; + $this->mdl_shortname = ''; + + $this->errormsg=''; + $this->result=array(); + + if (!is_null($mdl_course_id)) + $this->mdl_course_id=$mdl_course_id; + if (is_null($this->mdl_course_id) + || empty($this->mdl_course_id) + || !is_numeric($this->mdl_course_id)) + { + $this->errormsg='Moodle Kurs ID fehlt'; + return false; + } + + $client = new SoapClient($this->serverurl); + $response = $client->core_course_get_courses(array('ids'=>array($this->mdl_course_id))); + + if($response) + { + if(isset($response[0])) + { + $this->mdl_fullname = $response[0]['fullname']; + $this->mdl_shortname = $response[0]['shortname']; + $this->mdl_course_id = $response[0]['id']; + return true; + } + else + { + $this->errormsg = 'Kurs wurde nicht gefunden'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden des Kurses'; + return false; + } + } + + /** + * Legt einen Eintrag in der tbl_moodle an + * @return true wenn ok, false im Fehlerfall + */ + public function create_vilesci() + { + if($this->mdl_course_id=='') + { + $this->errormsg='mdl_course_id muss angegeben sein'; + return false; + } + + $qry = 'BEGIN; INSERT INTO lehre.tbl_moodle(mdl_course_id, lehreinheit_id, lehrveranstaltung_id, + studiensemester_kurzbz, insertamum, insertvon, gruppen, moodle_version) + VALUES('. + $this->db_add_param($this->mdl_course_id, FHC_INTEGER).','. + $this->db_add_param($this->lehreinheit_id, FHC_INTEGER).','. + $this->db_add_param($this->lehrveranstaltung_id, FHC_INTEGER).','. + $this->db_add_param($this->studiensemester_kurzbz).','. + $this->db_add_param($this->insertamum).','. + $this->db_add_param($this->insertvon).','. + $this->db_add_param($this->gruppen, FHC_BOOLEAN).", '2.4');"; + + if($this->db_query($qry)) + { + $qry = "SELECT currval('lehre.tbl_moodle_moodle_id_seq') as id;"; + if($this->db_query($qry)) + { + if($row = $this->db_fetch_object()) + { + $this->moodle_id = $row->id; + $this->db_query('COMMIT;'); + return true; + } + else + { + $this->db_query('ROLLBACK'); + $this->errormsg = 'Fehler beim Lesen der Sequence'; + return false; + } + } + else + { + $this->db_query('ROLLBACK'); + $this->errormsg = 'Fehler beim Lesen der Sequence'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Einfuegen des Datensatzes'; + return false; + } + } + + /** + * Legt einen Kurs im Moodle an + * @return true wenn ok, false im Fehlerfall + */ + public function create_moodle() + { + //CourseCategorie ermitteln + + //lehrveranstalung ID holen falls die nur die lehreinheit_id angegeben wurde + if($this->lehrveranstaltung_id=='') + { + $qry = "SELECT lehrveranstaltung_id FROM lehre.tbl_lehreinheit + WHERE lehreinheit_id=".$this->db_add_param($this->lehreinheit_id, FHC_INTEGER); + if($res=$this->db_query($qry)) + { + if($row = $this->db_fetch_object($res)) + { + $lvid = $row->lehrveranstaltung_id; + } + else + { + $this->errormsg = 'Fehler beim Ermitteln der LehrveranstaltungID'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Ermitteln der LehrveranstaltungID'; + return false; + } + } + else + $lvid = $this->lehrveranstaltung_id; + + //Studiengang und Semester holen + $qry = "SELECT tbl_lehrveranstaltung.semester, UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as stg + FROM lehre.tbl_lehrveranstaltung JOIN public.tbl_studiengang USING(studiengang_kz) + WHERE lehrveranstaltung_id=".$this->db_add_param($lvid, FHC_INTEGER); + + if($res=$this->db_query($qry)) + { + if($row = $this->db_fetch_object($res)) + { + $semester = $row->semester; + $stg = $row->stg; + } + else + { + $this->errormsg = 'Fehler beim Ermitteln von Studiengang und Semester'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Ermitteln von Studiengang und Semester'; + return false; + } + + //Studiensemester Categorie holen + if(!$id_stsem = $this->getCategorie($this->studiensemester_kurzbz, '0')) + { + if(!$id_stsem = $this->createCategorie($this->studiensemester_kurzbz, '0')) + echo "
Fehler beim Anlegen des Studiensemesters"; + } + //Studiengang Categorie holen + if(!$id_stg = $this->getCategorie($stg, $id_stsem)) + { + if(!$id_stg = $this->createCategorie($stg, $id_stsem)) + echo "
$this->errormsg"; + } + //Semester Categorie holen + if(!$id_sem = $this->getCategorie($semester, $id_stg)) + { + if(!$id_sem = $this->createCategorie($semester, $id_stg)) + echo "
$this->errormsg"; + } + + + $client = new SoapClient($this->serverurl); + + $data = new stdClass(); + $data->fullname=$this->mdl_fullname; + $data->shortname=$this->mdl_shortname; + $data->categoryid=$id_sem; + $data->format='topics'; + + $response = $client->core_course_create_courses(array($data)); + if(isset($response[0])) + { + $this->mdl_course_id=$response[0]['id']; + return true; + } + else + { + $this->errormsg = 'Fehler beim Anlegen des Kurses'; + return false; + } + + return true; + } + + /** + * Laedt die ID einer Kurskategorie anhand der Bezeichnung und der ParentID + * + * @param bezeichnung Bezeichnung der Kategorie + * @param parent ID der uebergeordneten Kurskategorie + * + * @return id der Kategorie oder false im Fehlerfall + */ + public function getCategorie($bezeichnung, $parent) + { + if($bezeichnung=='') + { + $this->errormsg = 'Bezeichnung muss angegeben werden'; + return false; + } + if($parent=='') + { + $this->errormsg = 'getCategorie: parent wurde nicht uebergeben'; + return false; + } + + $client = new SoapClient($this->serverurl); + $response = $client->core_course_get_categories(array(array('key'=>'name','value'=>$bezeichnung),array('key'=>'parent','value'=>$parent))); + + if(isset($response[0])) + { + return $response[0]['id']; + } + else + { + $this->errormsg = 'Fehler beim Laden der Kurskategorie'; + return false; + } + } + + /** + * Erzeugt eine Kurskategorie anhand der Bezeichnung und der ParentID + * @param bezeichnung Bezeichnung der Kategorie + * @param parent ID der uebergeordneten Kategorie + */ + public function createCategorie($bezeichnung, $parent) + { + if($bezeichnung=='') + { + $this->errormsg = 'Bezeichnung muss angegeben werden'; + return false; + } + if($parent=='') + { + $this->errormsg = 'createCategorie: parent wurde nicht uebergeben'; + return false; + } + + $client = new SoapClient($this->serverurl); + $response = $client->core_course_create_categories(array(array('name'=>$bezeichnung,'parent'=>$parent))); + + if(isset($response[0])) + { + return $response[0]['id']; + } + else + { + $this->errormsg = 'Fehler beim Anlegen der Kategorie'; + return false; + } + } + + + /** + * Aktualisiert die Spalte gruppen in der tbl_moodle + * @param moodle_id ID der MoodleZuteilung + * gruppen boolean true wenn syncronisiert + * werden soll, false wenn nicht + * @return true wenn ok, false im Fehlerfall + * + * TODO eventuell auslagern in moodle.class + */ + public function updateGruppenSync($moodle_id, $gruppen) + { + if(!is_numeric($moodle_id)) + { + $this->errormsg = 'Moodle_id muss eine gueltige Zahl sein'; + return false; + } + + $qry = "UPDATE lehre.tbl_moodle SET gruppen=".$this->db_add_param($gruppen, FHC_BOOLEAN)." + WHERE moodle_id=".$this->db_add_param($moodle_id, FHC_INTEGER); + + if($this->db_query($qry)) + { + return true; + } + else + { + $this->errormsg = 'Fehler beim Update'; + return false; + } + } + + /** + * Legt einen Testkurs an + */ + public function createTestkurs($lehrveranstaltung_id, $studiensemester_kurzbz) + { + //CourseCategorie ermitteln + + //Studiengang und Semester holen + + $qry = "SELECT + tbl_lehrveranstaltung.semester, + UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as stg + FROM + lehre.tbl_lehrveranstaltung + JOIN public.tbl_studiengang USING(studiengang_kz) + WHERE + lehrveranstaltung_id=".$this->db_add_param($lehrveranstaltung_id, FHC_INTEGER); + + if($this->db_query($qry)) + { + if($row = $this->db_fetch_object()) + { + $semester = $row->semester; + $stg = $row->stg; + } + else + { + $this->errormsg = 'Fehler beim Ermitteln von Studiengang und Semester'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Ermitteln von Studiengang und Semester'; + return false; + } + + //Testkurs Categorie holen + if(!$id_testkurs = $this->getCategorie('Testkurse', '0')) + { + if(!$id_testkurs = $this->createCategorie('Testkurse', '0')) + { + $this->errormsg= "Fehler beim Anlegen der Testkurskategorie"; + return false; + } + } + //StSem Categorie holen + if(!$id_stsem = $this->getCategorie($studiensemester_kurzbz, $id_testkurs)) + { + if(!$id_stsem = $this->createCategorie($studiensemester_kurzbz, $id_testkurs)) + { + $this->errormsg = 'Fehler beim Anlegen der Studiensemester Kategorie'; + return false; + } + } + + $client = new SoapClient($this->serverurl); + + $data = new stdClass(); + $data->fullname=$this->mdl_fullname; + $data->shortname=$this->mdl_shortname; + $data->categoryid=$id_stsem; + $data->format='topics'; + + $response = $client->core_course_create_courses(array($data)); + if(isset($response[0])) + { + $this->mdl_course_id=$response[0]['id']; + return true; + } + else + { + $this->errormsg = 'Fehler beim Anlegen des Testkurses'; + return false; + } + } + + /** + * Laedt den Testkurs zu dieser Lehrveranstaltung + * @param lehrveranstaltung_id + * studiensemester_kurzbz + * @return ID wenn gefunden, false wenn nicht vorhanden + */ + public function loadTestkurs($lehrveranstaltung_id, $studiensemester_kurzbz) + { + $qry = "SELECT + UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as kuerzel, + tbl_lehrveranstaltung.semester, tbl_lehrveranstaltung.kurzbz + FROM + lehre.tbl_lehrveranstaltung JOIN public.tbl_studiengang USING(studiengang_kz) + WHERE + lehrveranstaltung_id=".$this->db_add_param($lehrveranstaltung_id, FHC_INTEGER, false); + + if($this->db_query($qry)) + { + if($row = $this->db_fetch_object()) + { + $shortname = mb_strtoupper('TK-'.$studiensemester_kurzbz.'-'.$row->kuerzel.'-'.$row->semester.'-'.$row->kurzbz); + } + else + { + $this->errormsg = 'Fehler beim Laden des Testkurses'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden des Testkurses'; + return false; + } + + //Testkurs Categorie holen + if(!$id_testkurs = $this->getCategorie('Testkurse', '0')) + { + $this->errormsg = 'Categorie nicht gefunden'; + return false; + } + + //StSem Categorie holen + if(!$id_stsem = $this->getCategorie($studiensemester_kurzbz, $id_testkurs)) + { + $this->errormsg = 'Categorie nicht gefunden'; + return false; + } + + $client = new SoapClient($this->serverurl); + $response = $client->fhcomplete_courses_by_shortname(array('shortnames'=>array($shortname))); + + if(isset($response[0])) + { + $this->mdl_fullname = $response[0]['fullname']; + $this->mdl_shortname = $response[0]['shortname']; + $this->mdl_course_id = $response[0]['id']; + return true; + } + else + { + $this->errormsg='Es wurde kein Testkurs gefunden'; + return false; + } + } + + + /** + * Laedt die Noten zu einem Moodle Course ID + * @param lehrveranstaltung_id + * @param $studiensemester_kurzbz + * + * @return objekt mit den Noten der Teilnehmer dieses Kurses + * + * TODO Anpassung an Moodle 2.4 fertigstellen + */ + public function loadNoten($lehrveranstaltung_id, $studiensemester_kurzbz) + { + $this->errormsg=''; + $this->result=null; + + if($lehrveranstaltung_id=='' || $studiensemester_kurzbz=='') + { + $this->errormsg = 'LehrveranstaltungID und Studiensemester_kurzbz muss uebergeben werden'; + return false; + } + + // Ermitteln die Lehreinheiten und Moodle ID + $qry = " + SELECT tbl_lehreinheit.lehreinheit_id, mdl_course_id,tbl_lehreinheit.studiensemester_kurzbz,tbl_lehreinheit.lehrveranstaltung_id + FROM lehre.tbl_moodle + JOIN lehre.tbl_lehreinheit USING(lehrveranstaltung_id, studiensemester_kurzbz) + WHERE tbl_moodle.lehrveranstaltung_id > 0 "; + if ($this->lehrveranstaltung_id) + $qry.= " and tbl_moodle.lehrveranstaltung_id ='".addslashes($this->lehrveranstaltung_id)."' "; + if ($this->studiensemester_kurzbz) + $qry.= " and tbl_moodle.studiensemester_kurzbz ='".addslashes($this->studiensemester_kurzbz)."' "; + $qry.= " + UNION + SELECT tbl_lehreinheit.lehreinheit_id, mdl_course_id,tbl_lehreinheit.studiensemester_kurzbz,tbl_lehreinheit.lehrveranstaltung_id + FROM lehre.tbl_moodle + JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + WHERE tbl_lehreinheit.lehrveranstaltung_id > 0 "; + if ($this->lehrveranstaltung_id) + $qry.= " and tbl_lehreinheit.lehrveranstaltung_id ='".addslashes($this->lehrveranstaltung_id)."' "; + if ($this->studiensemester_kurzbz) + $qry.= " and tbl_moodle.studiensemester_kurzbz ='".addslashes($this->studiensemester_kurzbz)."' "; + + if(!$result_moodle=$this->db_query($qry)) + { + $this->errormsg = 'Fehler beim Lesen der Moodle Kurse , '.$this->errormsg; + return false; + } + + + // init + $_lehreinheit=array(); // Lehreinheiten zum lesen Studenten im Campus (Student und LE im FAS) + $_lehrveranstaltung = array(); // Gesamte Information der Lehreinheit und Moodle IDs + $_studiensemester_kurzbz=array(); + $_lehreinheit_kpl=array(); + while($row = $this->db_fetch_object($result_moodle)) + { + + $row->lehreinheit_id=trim($row->lehreinheit_id); + $_lehreinheit_kpl[$row->lehreinheit_id]=$row; + + $_lehreinheit[$row->lehreinheit_id]=$row->lehreinheit_id; // Fuer Select Campus + + $row->lehrveranstaltung_id=trim($row->lehrveranstaltung_id); + $_lehrveranstaltung[$row->lehrveranstaltung_id]=$row->lehrveranstaltung_id; // Fuer Select Campus + + $row->studiensemester_kurzbz=trim($row->studiensemester_kurzbz); + $_studiensemester_kurzbz[$row->studiensemester_kurzbz]=$row->studiensemester_kurzbz; // Fuer Select Campus + + } + if (count($_lehreinheit)<1) // Es gibt keine Lehreinheiten + { + $this->errormsg='Es wurde kein passender Moodle-Kurs gefunden'; + return false; + } + + + // Von der Lehreinheit kann der Moodle-Kurs ermittelt werden + $this->mdl_course_id=trim($_lehreinheit_kpl[$row->lehreinheit_id]->mdl_course_id); + if ($last_moodle_id==$this->mdl_course_id) + continue; + $last_moodle_id=$this->mdl_course_id; + + + $client = new SoapClient($serverurl); + $response = $client->fhcomplete_get_course_grades($this->mdl_course_id); + + if (count($response)>0) + { + + foreach($response as $row) + { + + $userobj = new stdClass(); + $userobj->vorname = $row->vorname; + $userobj->nachname = $row->nachname; + $userobj->idnummer = $row->idnummer; + $userobj->username = $row->username; + $userobj->note = $row->note; + + $this->result[]=$obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Moodle Noten'; + return false; + } + } + + + /** + * Loescht einen Moodle Course im Moodel und in der DB + * @param mdl_course_id + * @param bServerinfo Detail xmlrpc Debug informationen + * + * @return objekt mit den Noten der Teilnehmer dieses Kurses + * + * TODO anpassung moodle 2.4 eventuell Trennung in moodle.class + */ + public function deleteKurs($mdl_course_id=null,$moodle_id=null,$bServerinfo=false) + { + $this->errormsg=''; + $this->result=array(); + + if (!is_null($mdl_course_id)) + $this->mdl_course_id=$mdl_course_id; + + + if (!is_null($moodle_id)) + $this->moodle_id=$moodle_id; + + if (is_null($this->mdl_course_id) || empty($this->mdl_course_id) || !is_numeric($this->mdl_course_id)) + { + $this->errormsg='Moodle Kurs ID fehlt'; + return false; + } + + // Variable Daten Initialisieren + $args=array(); + $args['CourseID']=$this->mdl_course_id; + $method = "DeleteCourseByID"; + + if (!$result=$this->callMoodleXMLRPC($method,$args,$bServerinfo)) + return false; + + if (isset($result[1])) + $this->errormsg=$result[1]; + + if ($result[0]==1 || !$this->load($this->mdl_course_id)) // Methodenaufruf erfolgreich + { + $qry = "DELETE FROM lehre.tbl_moodle WHERE mdl_course_id='". addslashes($this->mdl_course_id) ."' "; + if (!is_null($this->moodle_id) && $this->moodle_id!='') + $qry.= " and moodle_id='".addslashes($this->moodle_id)."'"; + if(!$this->db_query($qry)) + { + $this->errormsg=$this->errormsg." Moodlekurs $mdl_course_id wurde NICHT gelöscht in Lehre. "; + return false; + } + } + else // Result = 0 ein Fehler im RFC wurde festgestellt + { + $this->errormsg=(isset($result[1])?$result[1]:" - Fehler beim Kurs ".$this->mdl_course_id." löschen "); + return false; + } + + if (empty($this->errormsg)) + $this->errormsg.="Moodlekurs ".$this->mdl_course_id." wurde gelöscht."; + return true; + + } +} diff --git a/include/moodle24_user.class.php b/include/moodle24_user.class.php new file mode 100644 index 000000000..be415d905 --- /dev/null +++ b/include/moodle24_user.class.php @@ -0,0 +1,568 @@ + and + */ +/* + * Connector fuer Moodle 2.4 User + * + * FHComplete Moodle Plugin muss installiert sein fuer + * Webservice Funktion 'fhcomplete_user_get_users' + */ +require_once(dirname(__FILE__).'/basis_db.class.php'); +require_once(dirname(__FILE__).'/moodle.class.php'); + +class moodle24_user extends basis_db +{ + public $log=''; //log message fuer Syncro + public $log_public=''; //log message fuer Syncro + public $sync_create=0; //anzahl der durchgefuehrten zuteilungen beim syncro + public $group_update=0; //anzahl der updates an gruppen + private $serverurl; + + public $mdl_user_id; + public $mdl_user_username; + public $mdl_user_firstname; + public $mdl_user_lastname; + + /** + * Konstruktor + */ + public function __construct() + { + $moodle = new moodle(); + $pfad = $moodle->getPfad('2.4'); + $this->serverurl=$pfad.'/webservice/soap/server.php?wsdl=1&wstoken='.MOODLE_TOKEN24.'&'.microtime(true); + return true; + } + + /** + * Laedt einen Moodle User + * + * @param $uid + * @return boolean + */ + public function loaduser($uid) + { + $client = new SoapClient($this->serverurl); + $response = $client->fhcomplete_user_get_users(array(array('key'=>'username', 'value'=>$uid))); + + if(isset($response['users'][0])) + { + $this->mdl_user_id = $response['users'][0]['id']; + $this->mdl_user_username = $response['users'][0]['username']; + $this->mdl_user_firstname = $response['users'][0]['firstname']; + $this->mdl_user_lastname = $response['users'][0]['lastname']; + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden des Users'; + return false; + } + } + + /** + * Liefert ein Array mit allen Lektoren die + * zu dem Moodle Kurs zugeteilt sind + */ + public 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 + moodle_version='2.4' + AND mdl_course_id=".$this->db_add_param($mdl_course_id, FHC_INTEGER)." + UNION + SELECT + mitarbeiter_uid + FROM + lehre.tbl_lehreinheitmitarbeiter JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + JOIN lehre.tbl_moodle USING(lehrveranstaltung_id) + WHERE + moodle_version='2.4' + AND tbl_lehreinheit.studiensemester_kurzbz=tbl_moodle.studiensemester_kurzbz + AND mdl_course_id=".$this->db_add_param($mdl_course_id, FHC_INTEGER); + $mitarbeiter=array(); + if($this->db_query($qry)) + { + while($row_ma = $this->db_fetch_object()) + { + $mitarbeiter[] = $row_ma->mitarbeiter_uid; + } + return $mitarbeiter; + } + else + { + $this->errormsg='Fehler beim Laden der Mitarbeiter'; + return false; + } + } + + /** + * 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 + */ + public 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=".$this->db_add_param($lehrveranstaltung_id, FHC_INTEGER)." + AND studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz); + } + else + { + $qry = "SELECT + mitarbeiter_uid + FROM + lehre.tbl_lehreinheitmitarbeiter JOIN lehre.tbl_moodle USING(lehreinheit_id) + WHERE + moodle_version='2.4' + AND mdl_course_id=".$this->db_add_param($mdl_course_id, FHC_INTEGER)." + UNION + SELECT + mitarbeiter_uid + FROM + lehre.tbl_lehreinheitmitarbeiter JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + JOIN lehre.tbl_moodle USING(lehrveranstaltung_id) + WHERE + moodle_version='2.4' + AND tbl_lehreinheit.studiensemester_kurzbz=tbl_moodle.studiensemester_kurzbz + AND mdl_course_id=".$this->db_add_param($mdl_course_id, FHC_INTEGER); + } + $mitarbeiter=''; + + $client = new SoapClient($this->serverurl); + $enrolled_users = $client->core_enrol_get_enrolled_users($mdl_course_id,array()); + + if($result_ma = $this->db_query($qry)) + { + while($row_ma = $this->db_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; + + $user_zugeteilt=false; + foreach($enrolled_users as $user) + { + if($user['id']==$this->mdl_user_id) + { + $user_zugeteilt=true; + break; + } + } + + if(!$user_zugeteilt) + { + //Mitarbeiter ist noch nicht zugeteilt. + $data = new stdClass(); + $data->roleid=3; // 3=Lektor + $data->userid=$this->mdl_user_id; + $data->courseid=$mdl_course_id; + + $client->enrol_manual_enrol_users(array($data)); + + $this->log.="\nLektorIn $this->mdl_user_firstname $this->mdl_user_lastname wurde zum Kurs hinzugefügt"; + $this->log_public.="\nLektorIn $this->mdl_user_firstname $this->mdl_user_lastname wurde zum Kurs hinzugefügt"; + $this->sync_create++; + + } + } + + 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 + */ + public 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 + moodle_version='2.4' + AND mdl_course_id=".$this->db_add_param($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 + moodle_version='2.4' + AND tbl_lehreinheit.studiensemester_kurzbz=tbl_moodle.studiensemester_kurzbz + AND mdl_course_id=".$this->db_add_param($mdl_course_id); + $studenten=''; + + $client = new SoapClient($this->serverurl); + $enrolled_users = $client->core_enrol_get_enrolled_users($mdl_course_id, array()); + + if($result_std = $this->db_query($qry)) + { + while($row_std = $this->db_fetch_object($result_std)) + { + //Schauen ob fuer diesen Kurs die Gruppen mitgesynct werden sollen + $gruppensync = $this->db_parse_bool($row_std->gruppen); + + //Studenten dieser Gruppe holen + + if($row_std->gruppe_kurzbz=='') //LVB Gruppe + { + $qry = "SELECT + distinct student_uid + FROM + public.tbl_studentlehrverband + WHERE + 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); + + if(trim($row_std->verband)!='') + { + $qry.=" AND verband = ".$this->db_add_param($row_std->verband); + if(trim($row_std->gruppe)!='') + { + $qry.=" AND gruppe = ".$this->db_add_param($row_std->gruppe); + } + } + $studiengang_obj = new studiengang(); + $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=".$this->db_add_param($row_std->gruppe_kurzbz)." AND + studiensemester_kurzbz=".$this->db_add_param($row_std->studiensemester_kurzbz); + $gruppenbezeichnung = $row_std->gruppe_kurzbz; + } + + if($result_user = $this->db_query($qry)) + { + while($row_user = $this->db_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 + + $user_zugeteilt=false; + foreach($enrolled_users as $user) + { + if($user['id']==$this->mdl_user_id) + { + $user_zugeteilt=true; + break; + } + } + + if(!$user_zugeteilt) + { + //Student ist noch nicht zugeteilt. + + $data = new stdClass(); + $data->roleid=5; // 5=Teilnehmer/Student + $data->userid=$this->mdl_user_id; + $data->courseid=$mdl_course_id; + $client->enrol_manual_enrol_users(array($data)); + + $this->log.="\nStudentIn $this->mdl_user_firstname $this->mdl_user_lastname wurde zum Kurs hinzugefügt"; + $this->log_public.="\nStudentIn $this->mdl_user_firstname $this->mdl_user_lastname wurde zum Kurs hinzugefügt"; + $this->sync_create++; + } + //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.="\nStudentIn $this->mdl_user_firstname $this->mdl_user_lastname wurde der Gruppe $gruppenbezeichnung zugeordnet"; + $this->log_public.="\nStudentIn $this->mdl_user_firstname $this->mdl_user_lastname wurde der Gruppe $gruppenbezeichnung zugeordnet"; + } + } + } + } + } + + 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 MoodleID des Users + * @return true wenn zugeteilt sonst false + */ + public function getGroupMember($groupid, $userid) + { + $client = new SoapClient($this->serverurl); + $response = $client->core_group_get_group_members(array($groupid)); + + if(isset($response[0]['userids'])) + + foreach($response[0]['userids'] as $id) + { + if($id==$userid) + return true; + } + + return false; + } + + /** + * Legt eine Zuteilung eines Users zu + * einer Gruppe an + * @param groupid ID der Gruppe + * userid ID des Users + * @return boolean + */ + public function createGroupMember($groupid, $userid) + { + $client = new SoapClient($this->serverurl); + $response = $client->core_group_add_group_members(array(array('groupid'=>$groupid, 'userid'=>$userid))); + if(isset($response[0])) + return true; + else + 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 + */ + public function getGroup($mdl_course_id, $gruppenbezeichnung) + { + $client = new SoapClient($this->serverurl); + $response = $client->core_group_get_course_groups($mdl_course_id); + + foreach($response as $row) + { + if($row['name']==$gruppenbezeichnung) + return $row['id']; + } + + $this->errormsg = "Gruppe wurde nicht gefunden $gruppenbezeichnung"; + 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 + */ + public function createGroup($mdl_course_id, $gruppenbezeichnung) + { + $client = new SoapClient($this->serverurl); + $data = new stdClass(); + $data->courseid=$mdl_course_id; + $data->name = $gruppenbezeichnung; + $data->description = $gruppenbezeichnung; + + $response = $client->core_group_create_groups(array($data)); + + if(isset($response[0])) + { + return $response[0]['id']; + } + else + { + $this->errormsg = 'Fehler beim Anlegen der Gruppe'; + return false; + } + } + + /** + * Legt einen User im Moodle an + * @param $uid UID der Person die angelegt werden soll + * @return true wenn ok, false wenn Fehler + */ + public function createUser($uid) + { + $qry = "SELECT uid, vorname, nachname FROM campus.vw_benutzer WHERE uid=".$this->db_add_param($uid); + if($this->db_query($qry)) + { + if($row = $this->db_fetch_object()) + { + $username = $row->uid; + $vorname = $row->vorname; + $nachname = $row->nachname; + + $user = new stdClass(); + $user->username = $username; + /* + Passwort muss gesetzt werden damit das Anlegen funktioniert. + Es wird ein random Passwort gesetzt + 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 + */ + $user->password = "FHCv!A2".hash('sha512', rand()); + $user->firstname = $vorname; + $user->lastname = $nachname; + $user->email = $username.'@'.DOMAIN; + $user->auth = 'ldap'; + $user->idnumber = $username; + $user->lang = 'de'; + + $client = new SoapClient($this->serverurl); + $response = $client->core_user_create_users(array($user)); + + if(isset($response[0])) + { + $this->mdl_user_id = $response[0]['id']; + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden des Users'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden des Users'; + return false; + } + } + else + { + $this->errormsg='Fehler beim Laden des Users'; + return false; + } + } + + /** + * Teilt die TestStudenten zu einem Testkurs zu + * @param mdl_course_id ID des Moodle Kurses + */ + public function createTestStudentenZuordnung($mdl_course_id) + { + //Context des Kurses holen + $mdlcourse = new moodle24_course(); + + $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; + } + + $data = new stdClass(); + $data->roleid=5; + $data->userid=$this->mdl_user_id; + $data->courseid=$mdl_course_id; + + $client = new SoapClient($this->serverurl); + $client->enrol_manual_enrol_users(array($data)); + // WS-Funktion enrol_manual_enrol_users liefert immer null zurück + // Fehler bei der Zuordnung koennen daher nicht abgefangen werden. + // Eventuell sollten hier nochmals die Teilnehmer des Kurses geladen werden + // um zu pruefen ob die Zuordnung erfolgreich war. + } + + return true; + } +} diff --git a/include/tw/cis_menu_lv.inc.php b/include/tw/cis_menu_lv.inc.php index 01280489e..496292deb 100644 --- a/include/tw/cis_menu_lv.inc.php +++ b/include/tw/cis_menu_lv.inc.php @@ -422,16 +422,16 @@ //wenn bereits eine Kreuzerlliste existiert, dann den Moodle link nicht anzeigen $qry = "SELECT * FROM campus.tbl_uebung WHERE lehreinheit_id IN(SELECT lehreinheit_id FROM lehre.tbl_lehreinheit - WHERE lehrveranstaltung_id='".addslashes($lvid)."' - AND studiensemester_kurzbz='".addslashes($angezeigtes_stsem)."')"; + WHERE lehrveranstaltung_id=".$db->db_add_param($lvid, FHC_INTEGER)." + AND studiensemester_kurzbz=".$db->db_add_param($angezeigtes_stsem).")"; if($result = $db->db_query($qry)) if($db->db_num_rows($result)>0) $showmoodle=false; - $mdlcourse = new moodle_course(); - $mdlcourse->getAll($lvid, $angezeigtes_stsem); - if(count($mdlcourse->result)>0) + $moodle = new moodle(); + $moodle->getAll($lvid, $angezeigtes_stsem); + if(count($moodle->result)>0) $showmoodle=true; } else @@ -439,21 +439,22 @@ if($showmoodle) { $link = "moodle_choice.php?lvid=$lvid&stsem=$angezeigtes_stsem"; - if(count($mdlcourse->result)>0) + if(count($moodle->result)>0) { if(!$is_lector) { - $course = $mdlcourse->getCourse($lvid, $angezeigtes_stsem, $user); - if(count($course)==1) - $link = MOODLE_PATH.'course/view.php?id='.$course[0]; + $moodle->getCourse($lvid, $angezeigtes_stsem, $user); + if(count($moodle->result)==1) + $link = $moodle->getPfad($moodle->result[0]->moodle_version).'course/view.php?id='.$moodle->result[0]->mdl_course_id; else $link = "moodle_choice.php?lvid=$lvid&stsem=$angezeigtes_stsem"; } else { - //$mdlcourse->getAll($lvid, $angezeigtes_stsem); - if(count($mdlcourse->result)==1) - $link = MOODLE_PATH.'course/view.php?id='.$mdlcourse->result[0]->mdl_course_id; + if(count($moodle->result)==1) + { + $link = $moodle->getPfad($moodle->result[0]->moodle_version).'course/view.php?id='.$moodle->result[0]->mdl_course_id; + } else $link = "moodle_choice.php?lvid=$lvid&stsem=$angezeigtes_stsem"; } @@ -658,4 +659,4 @@ } ?>
\ No newline at end of file + diff --git a/locale/de-AT/moodle.php b/locale/de-AT/moodle.php index 0721ed78d..5bbba05e7 100644 --- a/locale/de-AT/moodle.php +++ b/locale/de-AT/moodle.php @@ -6,7 +6,7 @@ $this->phrasen['moodle/esMussMindestensEineLehreinheitMarkiertSein']='Es muss mi $this->phrasen['moodle/esWurdeKeineGueltigeIdUebergeben']='Es wurde keine oder eine ungueltige ID übergeben'; $this->phrasen['moodle/testkursWurdeErfolgreichAngelegt']='Der Testkurs wurde erfolgreich angelegt'; $this->phrasen['moodle/esExistiertBereitsEinTestkurs']='Es existiert bereits ein Testkurs'; -$this->phrasen['moodle/esIstBereitsEinMoodleKursVorhanden']='Es ist bereits ein Moodle Kurs für die Gesamt LV vorhanden'; +$this->phrasen['moodle/esIstBereitsEinMoodleKursVorhanden']='Es ist bereits ein Moodle Kurs für die gesamte LV vorhanden'; $this->phrasen['moodle/moodleKursAnlegen']='Moodle Kurs anlegen'; $this->phrasen['moodle/kursbezeichnung']='Kursbezeichnung'; $this->phrasen['moodle/gruppenUebernehmen']='Gruppen übernehmen'; @@ -19,4 +19,9 @@ $this->phrasen['moodle/artIstUnbekannt']='art ist unbekannt'; $this->phrasen['moodle/datenWurdenAktualisiert']='Daten wurden aktualisiert'; $this->phrasen['moodle/fehlerBeiDerLektorenZuordnung']='Fehler bei der Lektorenzuordnung'; $this->phrasen['moodle/fehlerBeiDerStudentenZuordnung']='Fehler bei der Studentenzuordnung'; -?> \ No newline at end of file +$this->phrasen['moodle/testkurse24']='Testkurse für Moodle 2.4 - TESTBETRIEB'; +$this->phrasen['moodle/klickenSieHierUmTestkursErstellen24']='klicken Sie hier um einen Testkurs für Moodle 2.4 zu erstellen'; +$this->phrasen['moodle/kursUebersicht']='Moodle - Kursübersicht'; +$this->phrasen['moodle/ungueltigeVersion']='Moodlekurs mit ungültiger Versionsnummer: %s'; + +?> diff --git a/system/checksystem.php b/system/checksystem.php index 1489ca7cd..dd9bc1d78 100644 --- a/system/checksystem.php +++ b/system/checksystem.php @@ -3981,9 +3981,54 @@ if(!@$db->db_query("SELECT 1 FROM public.tbl_service LIMIT 1")) "; if(!$db->db_query($qry)) - echo 'public.tl_service: '.$db->db_last_error().'
'; + echo 'public.tbl_service: '.$db->db_last_error().'
'; else - echo 'Tabelle public.service hinzugefuegt, campus.tbl_zeitaufzeichnung geaendert
'; + echo 'Tabelle public.tbl_service hinzugefuegt, campus.tbl_zeitaufzeichnung geaendert
'; +} + +// Service zusaetzliche Verknuepfung zu einem Content +if(!@$db->db_query("SELECT content_id FROM public.tbl_service LIMIT 1")) +{ + $qry ="ALTER TABLE public.tbl_service ADD COLUMN content_id integer; + ALTER TABLE public.tbl_service ADD CONSTRAINT fk_content_service FOREIGN KEY(content_id) REFERENCES campus.tbl_content(content_id) ON DELETE RESTRICT ON UPDATE CASCADE; + "; + + if(!$db->db_query($qry)) + echo 'public.tbl_service: '.$db->db_last_error().'
'; + else + echo 'Tabelle public.tbl_service Spalte content_id hinzugefuegt
'; +} + +// Erweiterung der Moodle Tabelle zur Verwaltung von mehreren Moodle Instanzen +if(!@$db->db_query("SELECT * FROM lehre.tbl_moodle_version LIMIT 1")) +{ + $qry =" + CREATE TABLE lehre.tbl_moodle_version + ( + moodle_version varchar(8) NOT NULL, + bezeichnung varchar(256), + pfad varchar(256) + ); + + ALTER TABLE lehre.tbl_moodle_version ADD CONSTRAINT pk_moodle_version PRIMARY KEY (moodle_version); + + ALTER TABLE lehre.tbl_moodle ADD COLUMN moodle_version varchar(8); + ALTER TABLE lehre.tbl_moodle ADD CONSTRAINT fk_moodle_version_moodle FOREIGN KEY(moodle_version) REFERENCES lehre.tbl_moodle_version(moodle_version) ON DELETE RESTRICT ON UPDATE CASCADE; + + INSERT INTO lehre.tbl_moodle_version(moodle_version, bezeichnung, pfad) VALUES('1.9','Moodle 1.9','http://localhost/moodle/'); + INSERT INTO lehre.tbl_moodle_version(moodle_version, bezeichnung, pfad) VALUES('2.4','Moodle 2.4','http://localhost/moodle24/'); + UPDATE lehre.tbl_moodle SET moodle_version='1.9' WHERE moodle_version is null; + + ALTER TABLE lehre.tbl_moodle ALTER COLUMN moodle_version SET NOT NULL; + + GRANT SELECT ON lehre.tbl_moodle_version TO vilesci; + GRANT SELECT ON lehre.tbl_moodle_version TO web; + "; + + if(!$db->db_query($qry)) + echo 'lehre.tbl_moodle_version: '.$db->db_last_error().'
'; + else + echo 'Tabelle lehre.tbl_moodle_version hinzugefuegt; Spalte moodle_version zu Tabelle tbl_moodle hinzugefuegt
'; } echo '
'; @@ -4079,7 +4124,8 @@ $tabellen=array( "lehre.tbl_lehrform" => array("lehrform_kurzbz","bezeichnung","verplanen"), "lehre.tbl_lehrfunktion" => array("lehrfunktion_kurzbz","beschreibung","standardfaktor","sort"), "lehre.tbl_lehrveranstaltung" => array("lehrveranstaltung_id","kurzbz","bezeichnung","lehrform_kurzbz","studiengang_kz","semester","sprache","ects","semesterstunden","anmerkung","lehre","lehreverzeichnis","aktiv","planfaktor","planlektoren","planpersonalkosten","plankostenprolektor","koordinator","sort","zeugnis","projektarbeit","updateamum","updatevon","insertamum","insertvon","ext_id","bezeichnung_english","orgform_kurzbz","incoming"), - "lehre.tbl_moodle" => array("lehrveranstaltung_id","lehreinheit_id","moodle_id","mdl_course_id","studiensemester_kurzbz","gruppen","insertamum","insertvon"), + "lehre.tbl_moodle" => array("lehrveranstaltung_id","lehreinheit_id","moodle_id","mdl_course_id","studiensemester_kurzbz","gruppen","insertamum","insertvon","moodle_version"), + "lehre.tbl_moodle_version" => array("moodle_version","bezeichnung","pfad"), "lehre.tbl_note" => array("note","bezeichnung","anmerkung","farbe"), "lehre.tbl_projektarbeit" => array("projektarbeit_id","projekttyp_kurzbz","titel","lehreinheit_id","student_uid","firma_id","note","punkte","beginn","ende","faktor","freigegeben","gesperrtbis","stundensatz","gesamtstunden","themenbereich","anmerkung","updateamum","updatevon","insertamum","insertvon","ext_id","titel_english","seitenanzahl","abgabedatum","kontrollschlagwoerter","schlagwoerter","schlagwoerter_en","abstract", "abstract_en", "sprache"), "lehre.tbl_projektbetreuer" => array("person_id","projektarbeit_id","betreuerart_kurzbz","note","faktor","name","punkte","stunden","stundensatz","updateamum","updatevon","insertamum","insertvon","ext_id"), @@ -4149,7 +4195,7 @@ $tabellen=array( "public.tbl_reihungstest" => array("reihungstest_id","studiengang_kz","ort_kurzbz","anmerkung","datum","uhrzeit","updateamum","updatevon","insertamum","insertvon","ext_id","freigeschaltet"), "public.tbl_status" => array("status_kurzbz","beschreibung","anmerkung","ext_id"), "public.tbl_semesterwochen" => array("semester","studiengang_kz","wochen"), - "public.tbl_service" => array("service_id", "bezeichnung","beschreibung","ext_id","oe_kurzbz"), + "public.tbl_service" => array("service_id", "bezeichnung","beschreibung","ext_id","oe_kurzbz","content_id"), "public.tbl_sprache" => array("sprache","locale","flagge","index","content","bezeichnung"), "public.tbl_standort" => array("standort_id","adresse_id","kurzbz","bezeichnung","insertvon","insertamum","updatevon","updateamum","ext_id", "firma_id"), "public.tbl_statistik" => array("statistik_kurzbz","bezeichnung","url","r","gruppe","sql","php","content_id","insertamum","insertvon","updateamum","updatevon","berechtigung_kurzbz"), @@ -4252,4 +4298,4 @@ if (!$result=@$db->db_query($sql_query)) echo 'Attribut '.$fulltablename.'.'.$fieldnameDB.' existiert in der DB, aber nicht in diesem Skript!
'; } } -?> \ No newline at end of file +?> diff --git a/system/moodlePlugin/fhcompletews/db/services.php b/system/moodlePlugin/fhcompletews/db/services.php index 87aadd1f2..a454c724e 100644 --- a/system/moodlePlugin/fhcompletews/db/services.php +++ b/system/moodlePlugin/fhcompletews/db/services.php @@ -23,6 +23,15 @@ // We defined the web service functions to install. $functions = array( + 'fhcomplete_get_course_grades' => array( + 'classname' => 'local_fhcompletews_external', + 'methodname' => 'get_course_grades', + 'classpath' => 'local/fhcompletews/externallib.php', + 'description' => 'Get Grades of a course', + 'type' => 'read', + 'capabilities'=> 'moodle/course:update,moodle/course:viewhiddencourses', + ), + 'fhcomplete_courses_by_shortname' => array( 'classname' => 'local_fhcompletews_external', 'methodname' => 'get_courses_by_shortname', diff --git a/system/moodlePlugin/fhcompletews/externallib.php b/system/moodlePlugin/fhcompletews/externallib.php index b1d523aaa..919a9ff0a 100644 --- a/system/moodlePlugin/fhcompletews/externallib.php +++ b/system/moodlePlugin/fhcompletews/externallib.php @@ -1,5 +1,4 @@ libdir . "/externallib.php"); -class local_fhcompletews_external extends external_api { +class local_fhcompletews_external extends external_api +{ - +/************************************************** + * Webservice get_course_grades + * + * Laedt die Noten eines Kurses + **************************************************/ + public static function get_course_grades_parameters() + { + return new external_function_parameters( + array('courseid' => new external_value(PARAM_INT, 'CourseID')), 'ID of the Course' + ); + } + /** + * Get course Grades + * @param int courseid + * @return array + */ + public static function get_course_grades($courseid) + { + global $CFG, $DB; + require_once($CFG->dirroot . "/course/lib.php"); + require_once($CFG->dirroot.'/grade/export/lib.php'); - public static function get_courses_by_shortname_parameters() { + //validate parameter + $params = self::validate_parameters(self::get_course_grades_parameters(), + array('courseid' => $courseid)); + + $notenart=3; // 2=Prozent; 3=Endnote nach Skala + $gui=array(); + $final_id=''; + $data = array(); + + // Kursdaten Laden + if (!$course = $DB->get_record('course', array('id'=>$courseid))) + { + throw new moodle_exception('Course not found', '', '', null, 'The course ' . $courseid . ' is not found'); + return false; + } + + $id=$course->id; + $kursname=$course->fullname; + $shortname=$course->shortname; + + //ODS Notenexport starten + require_login($course); + $context = get_context_instance(CONTEXT_COURSE, $courseid); + require_once($CFG->dirroot.'/grade/export/ods/grade_export_ods.php'); + + if (!$export = new grade_export_ods($course, 0, 0, false, false, $notenart, 2)) + { + throw new moodle_exception('Fehler', '', '', null, "Moodle-Kurs ".$id." ".$shortname." - keine Export Information gefunden"); + return false; + } + + $grad =$export->columns; + + // Im Export sind die Noten fuer alle Abgaben, Quiz, etc enthalten + // Wir brauchen hier nur die Gesamtnote fuer die ganzen Kurs + foreach ($export->columns as $key=>$grade_item) + { + // Gesamtnote hat den itemtype "course" + if($grade_item->itemtype=='course') + { + $final_id=$key; + break; + } + } + + if($final_id=='') + { + throw new moodle_exception('Fehler', '', '', null,"Moodle-Kurs ".$id." ".$shortname." - keine Endnote gefunden"); + return false; + } + + // Liste mit allen Studierenden des Kurses durchlaufen + $geub = new grade_export_update_buffer(); + $gui = new graded_users_iterator($export->course, $export->columns, $export->groupid); + + $gui->init(); + $kursgrad =array(); + + while ($userdata = $gui->next_user()) + { + $user_item=array(); + $user = $userdata->user; + $user_item['vorname']=$user->firstname; + $user_item['nachname']=$user->lastname; + $user_item['idnummer']=$user->idnumber; + $user_item['username']=$user->username; + + // Aus den vorhanden Noten wird die Endnote fuer den Kurs herausgesucht + if(isset($userdata->grades[$final_id])) + { + $gradestr = $export->format_grade($userdata->grades[$final_id]); + $user_item['note']=$gradestr; + } + + $data[]=$user_item; + } + + $gui->close(); + $geub->close(); + + if (count($data)==0) + { + throw new moodle_exception('Fehler', '', '', null,"Moodle-Kurs ".$id." ".$shortname." - keine Kurs-Noten Informationen gefunden "); + return false; + } + + return $data; + } + + /** + * Returns description of method result value + * @return external_description + */ + public static function get_course_grades_returns() + { + return new external_multiple_structure( + new external_single_structure( + array( + 'vorname' => new external_value(PARAM_TEXT, 'vorname'), + 'nachname' => new external_value(PARAM_TEXT, 'nachname'), + 'idnummer' => new external_value(PARAM_TEXT, 'idnummer'), + 'username' => new external_value(PARAM_TEXT, 'username'), + 'note' => new external_value(PARAM_TEXT, 'note'), + ), 'course' + ) + ); + } + +/************************************************** + * Webservice get_courses_by_shortname + * + * Laedt Kurse anhand der Kurzbezeichnung + **************************************************/ + public static function get_courses_by_shortname_parameters() + { return new external_function_parameters( array('options' => new external_single_structure( array('shortnames' => new external_multiple_structure( @@ -45,7 +179,8 @@ class local_fhcompletews_external extends external_api { * @param array $options * @return array */ - public static function get_courses_by_shortname($options) { + public static function get_courses_by_shortname($options) + { global $CFG, $DB; require_once($CFG->dirroot . "/course/lib.php"); @@ -63,13 +198,17 @@ class local_fhcompletews_external extends external_api { //create return value $coursesinfo = array(); - foreach ($courses as $course) { + foreach ($courses as $course) + { // now security checks $context = get_context_instance(CONTEXT_COURSE, $course->id); - try { + try + { self::validate_context($context); - } catch (Exception $e) { + } + catch (Exception $e) + { $exceptionparam = new stdClass(); $exceptionparam->message = $e->getMessage(); $exceptionparam->shortname = $course->shortname; @@ -91,7 +230,8 @@ class local_fhcompletews_external extends external_api { //some field should be returned only if the user has update permission $courseadmin = has_capability('moodle/course:update', $context); - if ($courseadmin) { + if ($courseadmin) + { $courseinfo['categorysortorder'] = $course->sortorder; $courseinfo['idnumber'] = $course->idnumber; $courseinfo['showgrades'] = $course->showgrades; @@ -113,7 +253,8 @@ class local_fhcompletews_external extends external_api { } if ($courseadmin or $course->visible - or has_capability('moodle/course:viewhiddencourses', $context)) { + or has_capability('moodle/course:viewhiddencourses', $context)) + { $coursesinfo[] = $courseinfo; } } @@ -125,7 +266,8 @@ class local_fhcompletews_external extends external_api { * Returns description of method result value * @return external_description */ - public static function get_courses_by_shortname_returns() { + public static function get_courses_by_shortname_returns() + { return new external_multiple_structure( new external_single_structure( array( @@ -186,12 +328,21 @@ class local_fhcompletews_external extends external_api { ) ); } -/** -* Returns description of get_users() parameters. -* -* @return external_function_parameters -* @since Moodle 2.5 -*/ + + +/*********************************************************************** + * get_users - Laedt User Anhand des Usernamens + * Backport von Moodle 2.5 + * Ab Moodle 2.5 sollte dieses Webservice bereits integriert sein + ***********************************************************************/ + + + /** + * Returns description of get_users() parameters. + * + * @return external_function_parameters + * @since Moodle 2.5 + */ public static function get_users_parameters() { return new external_function_parameters( array( @@ -221,12 +372,12 @@ It could very slow or timeout. The function is designed to search some specific } /** -* Retrieve matching user. -* -* @param array $criteria the allowed array keys are id/lastname/firstname/idnumber/username/email/auth. -* @return array An array of arrays containing user profiles. -* @since Moodle 2.5 -*/ + * Retrieve matching user. + * + * @param array $criteria the allowed array keys are id/lastname/firstname/idnumber/username/email/auth. + * @return array An array of arrays containing user profiles. + * @since Moodle 2.5 + */ public static function get_users($criteria = array()) { global $CFG, $USER, $DB; @@ -345,11 +496,11 @@ It could very slow or timeout. The function is designed to search some specific } /** -* Returns description of get_users result value. -* -* @return external_description -* @since Moodle 2.5 -*/ + * Returns description of get_users result value. + * + * @return external_description + * @since Moodle 2.5 + */ public static function get_users_returns() { return new external_single_structure( array('users' => new external_multiple_structure( @@ -360,12 +511,12 @@ It could very slow or timeout. The function is designed to search some specific ); } -/** -* Create user return value description. -* -* @param array $additionalfields some additional field -* @return single_structure_description -*/ + /** + * Create user return value description. + * + * @param array $additionalfields some additional field + * @return single_structure_description + */ public static function user_description($additionalfields = array()) { $userfields = array( 'id' => new external_value(PARAM_INT, 'ID of the user'), @@ -423,8 +574,6 @@ It could very slow or timeout. The function is designed to search some specific } return new external_single_structure($userfields); } - - } /** @@ -480,5 +629,3 @@ function can_view_user_details_cap($user, $course = null) { } return $result; } - - diff --git a/system/moodlePlugin/fhcompletews/version.php b/system/moodlePlugin/fhcompletews/version.php index ba81bf08f..1118cf278 100644 --- a/system/moodlePlugin/fhcompletews/version.php +++ b/system/moodlePlugin/fhcompletews/version.php @@ -12,7 +12,7 @@ // You should have received a copy of the GNU General Public License // along with Moodle. If not, see . -$plugin->version = 2013022105; // The (date) version of this module + 2 extra digital for daily versions +$plugin->version = 2013031302; // The (date) version of this module + 2 extra digital for daily versions // This version number is displayed into /admin/forms.php // TODO: if ever this plugin get branched, the old branch number // will not be updated to the current date but just incremented. We will @@ -20,5 +20,5 @@ $plugin->version = 2013022105; // The (date) version of this module + 2 extra // display this version number with userdate (dev friendly) $plugin->requires = 2010112400; // Requires this Moodle version - at least 2.0 $plugin->cron = 0; -$plugin->release = '1.0 (Build: 2013022105)'; +$plugin->release = '1.0 (Build: 2013031302)'; $plugin->maturity = MATURITY_STABLE; diff --git a/system/sync/sync_moodle24_user.php b/system/sync/sync_moodle24_user.php new file mode 100644 index 000000000..44c503514 --- /dev/null +++ b/system/sync/sync_moodle24_user.php @@ -0,0 +1,157 @@ + and + */ +/* + * Synchronisiert die Lektoren und Studenten der aktuellen MoodleKurse + * wenn kein aktuelles Studiensemester vorhanden ist, wird NICHT Synchronisiert + */ +require_once('../../config/vilesci.config.inc.php'); +require_once('../../include/moodle24_course.class.php'); +require_once('../../include/moodle24_user.class.php'); +require_once('../../include/studiensemester.class.php'); +require_once('../../include/studiengang.class.php'); +require_once('../../include/mail.class.php'); + +$db = new basis_db(); +$sync_lektoren_gesamt=0; +$sync_studenten_gesamt=0; +$group_updates=0; +$fehler=0; +$message=''; +$message_lkt=''; +$lektoren=array(); + +//nur Synchronisieren wenn ein aktuelles Studiensemester existiert damit keine +//Probleme durch die Vorrueckung entstehen +$stsem = new studiensemester(); +if($stsem_kurzbz=$stsem->getakt()) +{ + //nur die Eintraege des aktuellen Studiensemesters syncen + $qry = "SELECT distinct mdl_course_id FROM lehre.tbl_moodle + WHERE studiensemester_kurzbz=".$db->db_add_param($stsem_kurzbz)." + AND moodle_version='2.4'"; + if($result = $db->db_query($qry)) + { + while($row = $db->db_fetch_object($result)) + { + $course = new moodle24_course(); + if($course->load($row->mdl_course_id)) + { + $message_lkt=''; + //Lektoren + $mdluser = new moodle24_user(); + $mitarbeiter = $mdluser->getMitarbeiter($row->mdl_course_id); + + if($mdluser->sync_lektoren($row->mdl_course_id)) + { + $sync_lektoren_gesamt+=$mdluser->sync_create; + $group_updates+=$mdluser->group_update; + if($mdluser->sync_create>0 || $mdluser->group_update>0) + { + $message.="\nKurs: $course->mdl_fullname ($course->mdl_shortname):\n".$mdluser->log."\n"; + $message_lkt.="\nKurs: $course->mdl_fullname ($course->mdl_shortname):\n".$mdluser->log_public."\n"; + } + } + else + { + $message.="\nFehler: $mdluser->errormsg"; + $fehler++; + } + + //Studenten + $mdluser = new moodle24_user(); + if($mdluser->sync_studenten($row->mdl_course_id)) + { + $sync_studenten_gesamt+=$mdluser->sync_create; + $group_updates+=$mdluser->group_update; + if($mdluser->sync_create>0 || $mdluser->group_update>0) + { + $message.="\nKurs: $course->mdl_fullname ($course->mdl_shortname):\n".$mdluser->log."\n"; + $message_lkt.="\nKurs: $course->mdl_fullname ($course->mdl_shortname):\n".$mdluser->log_public."\n"; + } + } + else + { + $message.="\nFehler: $mdluser->errormsg"; + $fehler++; + } + + foreach ($mitarbeiter as $uid) + { + if(!isset($lektoren[$uid])) + $lektoren[$uid]=''; + $lektoren[$uid].=$message_lkt; + } + } + else + { + $message.="\nFehler: in der Tabelle lehre.tbl_moodle wird auf den Kurs $row->mdl_course_id verwiesen, dieser existiert jedoch nicht im Moodle!"; + $fehler++; + } + } + + if($sync_lektoren_gesamt>0 || $sync_studenten_gesamt>0 || $fehler>0 || $group_updates>0) + { + //Mail an die Lektoren + foreach ($lektoren as $uid=>$message_lkt) + { + if($message_lkt!='') + { + $header = "Dies ist eine automatische Mail!\n"; + $header.= "Es wurden folgende Aktualisierungen an Ihren Moodle-Kursen durchgeführt:\n\n"; + + $to = "$uid@".DOMAIN; + //$to = 'oesi@technikum-wien.at'; + + $mail = new mail($to, 'vilesci@'.DOMAIN,'Moodle - Aktualisierungen',$header.$message_lkt); + if($mail->send()) + echo "Mail wurde an $to versandt
"; + else + echo "Fehler beim Senden des Mails an $to
"; + } + } + //Mail an Admin + $header = "Dies ist eine automatische Mail!\n"; + $header.= "Folgende Syncros mit den MoodleKursen wurde durchgeführt:\n\n"; + $header.= "Anzahl der aktualisierten Lektoren: $sync_lektoren_gesamt\n"; + $header.= "Anzahl der aktualisierten Studenten: $sync_studenten_gesamt\n"; + $header.= "Anzahl der Fehler: $fehler\n"; + + $to = MAIL_ADMIN; + //$to = 'oesi@technikum-wien.at'; + + $mail = new mail($to, 'vilesci@'.DOMAIN,'Moodle Syncro',$header.$message); + if($mail->send()) + echo "Mail wurde an $to versandt:
".nl2br($header.$message); + else + echo "Fehler beim Senden des Mails an $to:
".nl2br($header.$message); + } + else + { + echo 'Alle Zuteilungen sind auf dem neuesten Stand'; + } + } + else + { + echo 'Fehler bei Select:'.$qry; + } +} +else + echo "Kein aktuelles Studiensemester vorhanden->kein Syncro"; +?> diff --git a/system/sync/sync_moodle_user.php b/system/sync/sync_moodle_user.php index 1003f3fe1..e076747fa 100644 --- a/system/sync/sync_moodle_user.php +++ b/system/sync/sync_moodle_user.php @@ -24,8 +24,8 @@ * wenn kein aktuelles Studiensemester vorhanden ist, wird NICHT Synchronisiert */ require_once('../../config/vilesci.config.inc.php'); -require_once('../../include/moodle_course.class.php'); -require_once('../../include/moodle_user.class.php'); +require_once('../../include/moodle19_course.class.php'); +require_once('../../include/moodle19_user.class.php'); require_once('../../include/studiensemester.class.php'); require_once('../../include/studiengang.class.php'); require_once('../../include/mail.class.php'); @@ -45,17 +45,19 @@ $stsem = new studiensemester(); if($stsem_kurzbz=$stsem->getakt()) { //nur die Eintraege des aktuellen Studiensemesters syncen - $qry = "SELECT distinct mdl_course_id FROM lehre.tbl_moodle WHERE studiensemester_kurzbz='".addslashes($stsem_kurzbz)."'"; + $qry = "SELECT distinct mdl_course_id FROM lehre.tbl_moodle + WHERE studiensemester_kurzbz=".$db->db_add_param($stsem_kurzbz)." + AND moodle_version='1.9';"; if($result = $db->db_query($qry)) { while($row = $db->db_fetch_object($result)) { - $course = new moodle_course(); + $course = new moodle19_course(); if($course->load($row->mdl_course_id)) { $message_lkt=''; //Lektoren - $mdluser = new moodle_user(); + $mdluser = new moodle19_user(); $mitarbeiter = $mdluser->getMitarbeiter($row->mdl_course_id); if($mdluser->sync_lektoren($row->mdl_course_id)) @@ -75,7 +77,7 @@ if($stsem_kurzbz=$stsem->getakt()) } //Studenten - $mdluser = new moodle_user(); + $mdluser = new moodle19_user(); if($mdluser->sync_studenten($row->mdl_course_id)) { $sync_studenten_gesamt+=$mdluser->sync_create; @@ -154,4 +156,4 @@ if($stsem_kurzbz=$stsem->getakt()) } else echo "Kein aktuelles Studiensemester vorhanden->kein Syncro"; -?> \ No newline at end of file +?> diff --git a/vilesci/moodle/account_verwaltung.php b/vilesci/moodle/account_verwaltung.php index 9a4194bfa..fb1604179 100644 --- a/vilesci/moodle/account_verwaltung.php +++ b/vilesci/moodle/account_verwaltung.php @@ -38,7 +38,7 @@ require_once('../../include/functions.inc.php'); require_once('../../include/globals.inc.php'); // ---------------- Moodle Daten Classe - require_once('../../include/moodle_user.class.php'); + require_once('../../include/moodle19_user.class.php'); if (!$db = new basis_db()) die('

MOODLE Datenbank zurzeit NICHT Online.
Bitte etwas Geduld.
Danke
'); @@ -62,7 +62,7 @@ // Datenbankverbindungen zu Moodle und Vilesci und Classen // *********************************************************************************************** // Classen Instanzen - $objMoodle = new moodle_user(); + $objMoodle = new moodle19_user(); // *********************************************************************************************** // Verarbeitung einer Moodle-Account Anlageaktion // *********************************************************************************************** diff --git a/vilesci/moodle/kurs_verwaltung.php b/vilesci/moodle/kurs_verwaltung.php index 873fe9aa1..07f42d0ea 100644 --- a/vilesci/moodle/kurs_verwaltung.php +++ b/vilesci/moodle/kurs_verwaltung.php @@ -40,7 +40,7 @@ require_once('../../include/functions.inc.php'); require_once('../../include/globals.inc.php'); // ---------------- Moodle Daten Classe - include_once('../../include/moodle_course.class.php'); + include_once('../../include/moodle19_course.class.php'); require_once('../../include/studiensemester.class.php'); require_once('../../include/studiengang.class.php'); @@ -53,7 +53,7 @@ $content=''; $errormsg=array(); - $objMoodle = new moodle_course(); + $objMoodle = new moodle19_course(); // *********************************************************************************************** // POST oder GET Parameter einlesen @@ -344,4 +344,4 @@ '; exit($content); -?> \ No newline at end of file +?> diff --git a/vilesci/moodle/zuteilung_verwaltung.php b/vilesci/moodle/zuteilung_verwaltung.php index 5b3304bb8..763d5b1d9 100644 --- a/vilesci/moodle/zuteilung_verwaltung.php +++ b/vilesci/moodle/zuteilung_verwaltung.php @@ -46,12 +46,12 @@ require_once('../../include/lehreinheit.class.php'); require_once('../../include/lehreinheitgruppe.class.php'); require_once('../../include/lehreinheitmitarbeiter.class.php'); - include_once('../../include/moodle_course.class.php'); + include_once('../../include/moodle19_course.class.php'); // *********************************************************************************************** // Datenbankverbindungen zu Moodle und Vilesci und Classen // *********************************************************************************************** - if (!$objMoodle = new moodle_course()) + if (!$objMoodle = new moodle19_course()) die('Fehler beim Oeffnen der Moodleverbindung'); if (!$le_obj = new lehreinheit()) @@ -400,7 +400,7 @@ if (!is_array($arrMoodlekurs) || count($arrMoodlekurs)<1) return $content; - if (!$objMoodle = new moodle_course()) + if (!$objMoodle = new moodle19_course()) die('Fehler beim Oeffnen der Moodleverbindung'); if (!$le_obj = new lehreinheit()) diff --git a/vilesci/moodle/zuteilung_warten.php b/vilesci/moodle/zuteilung_warten.php index d9e149765..977d233f4 100644 --- a/vilesci/moodle/zuteilung_warten.php +++ b/vilesci/moodle/zuteilung_warten.php @@ -49,12 +49,12 @@ require_once('../../include/lehreinheit.class.php'); require_once('../../include/lehreinheitgruppe.class.php'); require_once('../../include/lehreinheitmitarbeiter.class.php'); - include_once('../../include/moodle_course.class.php'); + include_once('../../include/moodle19_course.class.php'); // *********************************************************************************************** // Datenbankverbindungen zu Moodle und Vilesci und Classen // *********************************************************************************************** - if (!$objMoodle = new moodle_course()) + if (!$objMoodle = new moodle19_course()) die('Fehler beim Oeffnen der Moodleverbindung'); $entfernen=(isset($_REQUEST['entfernen'])?trim($_REQUEST['entfernen']):''); @@ -625,7 +625,7 @@ return false; } - if (!$objMoodle = new moodle_course()) + if (!$objMoodle = new moodle19_course()) die('Fehler beim Oeffnen der Moodleverbindung'); if (!$le_obj = new lehreinheit())