From a69b6ab08c74e56f3b34903d4b10e9c172a4ea9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Wed, 3 Sep 2008 15:13:35 +0000 Subject: [PATCH] --- cis/private/lehre/moodle_wartung.php | 299 ++++++++ content/ToDo_FASo.html | 5 +- content/lvplanung/lehrveranstaltungDBDML.php | 29 +- content/pdfExport.php | 86 ++- include/fop.class.php | 68 ++ include/moodle_course.class.php | 652 ++++++++++++++++++ include/moodle_user.class.php | 463 +++++++++++++ include/tw/cis_menu_lv.inc.php | 190 ++--- system/sync_moodle_user.php | 114 +++ vilesci/personen/preinteressent_anlegen.php | 96 ++- .../personen/preinteressent_uebersicht.php | 19 +- 11 files changed, 1881 insertions(+), 140 deletions(-) create mode 100644 cis/private/lehre/moodle_wartung.php create mode 100644 include/fop.class.php create mode 100644 include/moodle_course.class.php create mode 100644 include/moodle_user.class.php create mode 100644 system/sync_moodle_user.php diff --git a/cis/private/lehre/moodle_wartung.php b/cis/private/lehre/moodle_wartung.php new file mode 100644 index 000000000..8a73b91fc --- /dev/null +++ b/cis/private/lehre/moodle_wartung.php @@ -0,0 +1,299 @@ +, + * Andreas Oesterreicher and + * Rudolf Hangl . + */ +require_once('../../config.inc.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'); + +if(!$conn = pg_pconnect(CONN_STRING)) + die('Fehler beim Connecten zur DB'); + +//$conn_moodle=''; +if(!$conn_moodle = pg_pconnect(CONN_STRING_MOODLE)) + die('Fehler beim Connecten zur DB'); + +$user = get_uid(); + +if(isset($_GET['lvid'])) + $lvid=$_GET['lvid']; +else + die('lvid muss uebergeben werden'); + +if(isset($_GET['stsem'])) + $stsem = $_GET['stsem']; +else + die('Es wurde kein Studiensemester uebergeben'); + +$art = (isset($_POST['art'])?$_POST['art']:'le'); + +$berechtigt = false; + +//Pruefen ob Rechte fuer diese LV vorhanden sind +$qry = "SELECT distinct vorname, nachname, tbl_benutzer.uid as uid FROM lehre.tbl_lehreinheit, lehre.tbl_lehreinheitmitarbeiter, public.tbl_benutzer, public.tbl_person WHERE tbl_lehreinheit.lehreinheit_id=tbl_lehreinheitmitarbeiter.lehreinheit_id AND tbl_lehreinheitmitarbeiter.mitarbeiter_uid=tbl_benutzer.uid AND tbl_person.person_id=tbl_benutzer.person_id AND lehrveranstaltung_id='$lvid' AND tbl_lehreinheitmitarbeiter.mitarbeiter_uid NOT like '_Dummy%' AND tbl_person.aktiv=true AND studiensemester_kurzbz='$stsem' ORDER BY nachname, vorname"; + +if($result = pg_query($conn, $qry)) +{ + while($row_lector = pg_fetch_object($result)) + { + if($user==$row_lector->uid) + $berechtigt=true; + } +} + +$rechte = new benutzerberechtigung($conn); +$rechte->getBerechtigungen($user); + +if($rechte->isBerechtigt('admin')) + $berechtigt=true; + +$lv = new lehrveranstaltung($conn); +$lv->load($lvid); + +echo ' + + + + + + + + + + + + + + + + + + + + +
 '.$lv->bezeichnung.' ('.$stsem.')
 
  + + + + '; + +echo '
'; +if(isset($_POST['neu'])) +{ + if($_POST['bezeichnung']=='') + { + echo 'Bezeichnung muss angegeben werden
'; + } + else + { + $lehrveranstaltung = new lehrveranstaltung($conn); + $lehrveranstaltung->load($lvid); + $studiengang = new studiengang($conn); + $studiengang->load($lehrveranstaltung->studiengang_kz); + + $shortname = $stsem.'-'.$studiengang->kuerzel.'-'.$lehrveranstaltung->semester.'-'.$lehrveranstaltung->kurzbz; + //Gesamte LV zu einem Moodle Kurs zusammenlegen + if($art=='lv') + { + $mdl_course = new moodle_course($conn, $conn_moodle); + + $mdl_course->lehrveranstaltung_id = $lvid; + $mdl_course->studiensemester_kurzbz = $stsem; + $mdl_course->mdl_fullname = $_POST['bezeichnung']; + $mdl_course->mdl_shortname = $shortname; + $mdl_course->insertamum = date('Y-m-d H:i:s'); + $mdl_course->insertvon = $user; + + //Moodlekurs anlegen + if($mdl_course->create_moodle()) + { + //Eintrag in der Vilesci DB + $mdl_course->create_vilesci(); + + $mdl_user = new moodle_user($conn, $conn_moodle); + //Lektoren Synchronisieren + if(!$mdl_user->sync_lektoren($mdl_course->mdl_course_id)) + echo $mdl_user->errormsg; + + $mdl_user = new moodle_user($conn, $conn_moodle); + //Studenten Synchronisieren + if(!$mdl_user->sync_studenten($mdl_course->mdl_course_id)) + echo $mdl_user->errormsg; + } + } + elseif($art=='le') //Getrennte Kurse fuer die Lehreinheiten + { + $lehreinheiten=array(); + + foreach ($_POST as $key=>$value) + { + if(strstr($key, 'lehreinheit_')) + { + $lehreinheiten[]=$value; + } + } + + if(count($lehreinheiten)>0) + { + $mdl_course = new moodle_course($conn, $conn_moodle); + + $mdl_course->mdl_fullname = $_POST['bezeichnung']; + $mdl_course->mdl_shortname = $shortname; + $mdl_course->studiensemester_kurzbz = $stsem; + $mdl_course->insertamum = date('Y-m-d H:i:s'); + $mdl_course->insertvon = $user; + $mdl_course->lehreinheit_id=$lehreinheiten[0]; + + //Kurs im Moodle anlegen + if($mdl_course->create_moodle()) + { + //fuer jede Lehreinheit einen Eintrag in VilesciDB anlegen + foreach ($lehreinheiten as $value) + { + $mdl_course->lehreinheit_id = $value; + if(!$mdl_course->create_vilesci()) + echo '
Fehler beim Anlegen:'.$mdl_course->errormsg; + } + + $mdl_user = new moodle_user($conn, $conn_moodle); + //Lektoren Synchronisieren + if(!$mdl_user->sync_lektoren($mdl_course->mdl_course_id)) + echo $mdl_user->errormsg; + + $mdl_user = new moodle_user($conn, $conn_moodle); + //Studenten Synchronisieren + if(!$mdl_user->sync_studenten($mdl_course->mdl_course_id)) + echo $mdl_user->errormsg; + } + } + else + { + echo 'Es muss mindestens eine Lehreinheit markiert sein
'; + } + } + else + die('art ist unbekannt'); + } +} + +$mdl_course = new moodle_course($conn, $conn_moodle); +if($mdl_course->course_exists_for_lv($lvid, $stsem) || $mdl_course->course_exists_for_allLE($lvid, $stsem)) +{ + echo 'Es ist bereits ein Moodle Kurs für die Gesamt LV vorhanden'; +} +else +{ + //wenn bereits ein Moodle Kurs fuer eine Lehreinheit angelegt wurde, dann dass + //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)."')"; + $disable_lv=''; + if($result = pg_query($conn, $qry)) + if(pg_num_rows($result)>0) + $disable_lv='disabled="true"'; + + echo 'Moodle Kurs anlegen:

+
+ einen Moodle Kurs für die gesamte LV anlegen
+ einen Moodle Kurs für einzelne Lehreinheiten anlegen + '; + + $le = new lehreinheit($conn); + $le->load_lehreinheiten($lv->lehrveranstaltung_id, $stsem); + echo ''; + + echo '
Kursbezeichnung:

'; + echo ' +
'; +} +echo '
'; +echo 'Vorhandene Moodle Kurse für diese LV'; +if(!$mdl_course->getAll($lvid, $stsem)) + echo $mdl_course->errormsg; +echo '
'; +foreach ($mdl_course->result as $course) +{ + echo '
'.$course->mdl_fullname.''; +} +echo '
'; + + + +echo '
+ +'; +?> \ No newline at end of file diff --git a/content/ToDo_FASo.html b/content/ToDo_FASo.html index 55f14b10b..52764f600 100644 --- a/content/ToDo_FASo.html +++ b/content/ToDo_FASo.html @@ -182,7 +182,8 @@ mehrere Studenten auf einmal möglich sein
-
+ Bei Lehreinheiten in der Übersichtsliste eine Spalte mit +der Anzahl teilnehmenden der Studenten anzeigen

@@ -272,7 +273,7 @@ alle Lektoren eines Studienganges Aufwand [h] -
+ Lehrfächer im DropDown nach der Bezeichnung sortieren

diff --git a/content/lvplanung/lehrveranstaltungDBDML.php b/content/lvplanung/lehrveranstaltungDBDML.php index b6ce3513b..b0daa29c3 100644 --- a/content/lvplanung/lehrveranstaltungDBDML.php +++ b/content/lvplanung/lehrveranstaltungDBDML.php @@ -807,7 +807,7 @@ if(!$error) } else { - // LE loeschen + // Loeschen verhindern wenn diese Lehreinheit schon verplant ist $qry = "SELECT stundenplandev_id as id FROM lehre.tbl_stundenplandev WHERE lehreinheit_id='".$_POST['lehreinheit_id']."' UNION SELECT stundenplan_id as id FROM lehre.tbl_stundenplan WHERE lehreinheit_id='".$_POST['lehreinheit_id']."'"; @@ -820,14 +820,27 @@ if(!$error) } else { - if ($leDAO->delete($_POST['lehreinheit_id'])) + //Loeschen verhindern wenn ein MoodleKurs existiert + $qry = "SELECT 1 FROM lehre.tbl_moodle WHERE lehreinheit_id='".addslashes($_POST['lehreinheit_id'])."'"; + if($result = pg_query($conn, $qry)) { - $return = true; - } - else - { - $return = false; - $errormsg = 'Fehler beim Loeschen der Lehreinheit '.$leDAO->errormsg; + if(pg_num_rows($result)>0) + { + $return = false; + $errormsg = 'Lehreinheit kann nicht geloescht werden, da dazu bereits ein Moodle-Kurs angelegt wurde'; + } + else + { + if ($leDAO->delete($_POST['lehreinheit_id'])) + { + $return = true; + } + else + { + $return = false; + $errormsg = 'Fehler beim Loeschen der Lehreinheit '.$leDAO->errormsg; + } + } } } } diff --git a/content/pdfExport.php b/content/pdfExport.php index 745a92c61..1a4810032 100644 --- a/content/pdfExport.php +++ b/content/pdfExport.php @@ -29,6 +29,7 @@ require_once('../vilesci/config.inc.php'); require_once('../include/functions.inc.php'); require_once('../include/benutzerberechtigung.class.php'); require_once('../include/xslfo2pdf/xslfo2pdf.php'); +require_once('../include/fop.class.php'); require_once('../include/akte.class.php'); // Datenbank Verbindung @@ -176,7 +177,7 @@ $rechte->getBerechtigungen($user); // die("Keine Berechtigung"); $xml_url=XML_ROOT.$xml.$params; -//echo $xml_url; + // Load the XML source $xml_doc = new DOMDocument; @@ -195,26 +196,9 @@ if(!$result = pg_query($conn, $qry)) if(!$row = pg_fetch_object($result)) die('Vorlage wurde nicht gefunden'.$qry); -// Load the XSL source -$xsl_doc = new DOMDocument; -//if(!$xsl_doc->load('../../../../xsl/collection.xsl')) -if(!$xsl_doc->loadXML($row->text)) - die('unable to load xsl'); -//echo 'XSL:'.$xsl_doc->saveXML().':'; - - -// Configure the transformer -$proc = new XSLTProcessor; -$proc->importStyleSheet($xsl_doc); // attach the xsl rules - -$buffer = $proc->transformToXml($xml_doc); -//in $buffer steht nun das xsl-fo file mit den daten -/*$buffer = ''.substr($buffer, strpos($buffer,"\n"),strlen($buffer));*/ -//$buffer = html_entity_decode($buffer); -//echo "XSL-FO: $buffer"; +$xsl_content = $row->text; //Pdf erstellen -$fo2pdf = new XslFo2Pdf(); //wenn uid gefunden wird, dann den Nachnamen zum Dateinamen dazuhaengen $nachname=''; @@ -235,10 +219,35 @@ $filename=$xsl.$nachname; if (!isset($_REQUEST["archive"])) { - if (!$fo2pdf->generatePdf($buffer, $filename, "D")) - { - echo('Failed to generate PDF'); - } + if(PDF_CREATE_FUNCTION=='FOP') + { + $fop = new fop(); + $xml = $xml_doc->saveXML(); + //$xml = ''; + //$xsl='foobar'; + $fop->generatePdf($xml, $xsl_content, $filename, "D"); + } + else + { + $fo2pdf = new XslFo2Pdf(); + + // Load the XSL source + $xsl_doc = new DOMDocument; + + if(!$xsl_doc->loadXML($xsl_content)) + die('unable to load xsl'); + + // Configure the transformer + $proc = new XSLTProcessor; + $proc->importStyleSheet($xsl_doc); // attach the xsl rules + + $buffer = $proc->transformToXml($xml_doc); + + if (!$fo2pdf->generatePdf($buffer, $filename, "D")) + { + echo('Failed to generate PDF'); + } + } } else { @@ -267,12 +276,35 @@ else if($rechte->isBerechtigt('admin', $studiengang_kz, 'suid') || $rechte->isBerechtigt('assistenz', $studiengang_kz, 'suid')) { - $filename = $user; - if (!$fo2pdf->generatePdf($buffer, $filename, 'F')) + + if(PDF_CREATE_FUNCTION=='FOP') { - echo('Failed to generate PDF'); + $fop = new fop(); + $file = $fop->generatePdf($xml_doc->saveXML(), $xsl_content, $filename, "F"); + } + else + { + $filename = $user; + $fo2pdf = new XslFo2Pdf(); + + // Load the XSL source + $xsl_doc = new DOMDocument; + //if(!$xsl_doc->load('../../../../xsl/collection.xsl')) + if(!$xsl_doc->loadXML($xsl_content)) + die('unable to load xsl'); + //echo 'XSL:'.$xsl_doc->saveXML().':'; + + // Configure the transformer + $proc = new XSLTProcessor; + $proc->importStyleSheet($xsl_doc); // attach the xsl rules + + $buffer = $proc->transformToXml($xml_doc); + if (!$fo2pdf->generatePdf($buffer, $filename, 'F')) + { + echo('Failed to generate PDF'); + } + $file = "/tmp/".$filename.".pdf"; } - $file = "/tmp/".$filename.".pdf"; $handle = fopen($file, "rb"); $string = fread($handle, filesize($file)); fclose($handle); diff --git a/include/fop.class.php b/include/fop.class.php new file mode 100644 index 000000000..3cadd9fb8 --- /dev/null +++ b/include/fop.class.php @@ -0,0 +1,68 @@ +create_pdf($xml, $xsl); +*/ +class fop +{ + var $xml; + var $xsl; + + function fop() + { + //Apache FOP + } + + function generatePdf($xml, $xsl, $filename, $destination) + { + $tmppdf = tempnam('/tmp', 'FAS_FOP'); + + $tmpxml = tempnam('/tmp', 'FAS_FOP'); + $tmpxsl = tempnam('/tmp', 'FAS_FOP'); + + file_put_contents($tmpxml, $xml); + file_put_contents($tmpxsl, $xsl); + + + exec("fop -xml {$tmpxml} -xsl {$tmpxsl} -pdf {$tmppdf} 2>&1", $output); + + @unlink($tmpxml); + @unlink($tmpxsl); + + switch($destination) + { + case "D": // Download + $buffer = file_get_contents($tmppdf); + if(headers_sent()) + { + echo 'Some data has already been output to browser, can\'t send PDF file'; + break; + } + + if(isset($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'],'MSIE')) + header('Content-Type: application/force-download'); + else + header('Content-Type: application/octet-stream'); + + header('Content-Length: '.strlen($buffer)); + header('Content-disposition: attachment; filename="'.$filename.'.pdf"'); + + + echo $buffer; + unlink($tmppdf); + break; + case "F": // im Filesystem speichern + break; + + case "I": //auf Stdout ausgeben + echo file_get_contents($tmppdf); + break; + } + + return($tmppdf); + } +} +?> \ No newline at end of file diff --git a/include/moodle_course.class.php b/include/moodle_course.class.php new file mode 100644 index 000000000..0713280a5 --- /dev/null +++ b/include/moodle_course.class.php @@ -0,0 +1,652 @@ +, + * Andreas Oesterreicher and + * Rudolf Hangl . + */ +/* + * + */ +class moodle_course +{ + var $conn; + var $conn_moodle; + var $errormsg; + var $result = array(); + + //Vilesci Attribute + var $moodle_id; + var $mdl_course_id; + var $lehreinheit_id; + var $lehrveranstaltung_id; + var $studiensemester_kurzbz; + var $insertamum; + var $insertvon; + + //Moodle Attribute + var $mdl_fullname; + var $mdl_shortname; + + var $mdl_context_id; + var $mdl_context_level; + var $mdl_context_instanceid; + var $mdl_context_path; + var $mdl_context_depth; + + // ********************************************** + // * moodle_course + // * @param $conn Connection zur Vilesci DB + // * $conn_moodle Connection zur Moodle DB + // ********************************************** + function moodle_course($conn, $conn_moodle) + { + $this->conn = $conn; + $this->conn_moodle = $conn_moodle; + + $qry = "SET CLIENT_ENCODING TO 'LATIN9';"; + pg_query($this->conn_moodle, $qry); + } + + // ********************************************** + // * Laedt alle MoodleKurse die zu einer LV/Stsem + // * plus die MoodleKurse die auf dessen LE haengen + // * @param lehrveranstaltung_id + // * studiensemester_kurzbz + // * @return true wenn ok, false im Fehlerfall + // ********************************************** + function getAll($lehrveranstaltung_id, $studiensemester_kurzbz) + { + $qry = "SELECT distinct on(mdl_course_id) * + FROM + lehre.tbl_lehrveranstaltung, lehre.tbl_lehreinheit, lehre.tbl_moodle + WHERE + tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id AND + tbl_lehrveranstaltung.lehrveranstaltung_id = '".addslashes($lehrveranstaltung_id)."' AND + tbl_lehreinheit.studiensemester_kurzbz='".addslashes($studiensemester_kurzbz)."' AND + ((tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_moodle.lehrveranstaltung_id AND tbl_moodle.studiensemester_kurzbz=tbl_lehreinheit.studiensemester_kurzbz) + OR + (tbl_lehreinheit.lehreinheit_id=tbl_moodle.lehreinheit_id) + )"; + if($result = pg_query($this->conn, $qry)) + { + while($row=pg_fetch_object($result)) + { + $obj = new moodle_course($this->conn, $this->conn_moodle); + $obj->moodle_id = $row->moodle_id; + $obj->mdl_course_id = $row->mdl_course_id; + $obj->lehreinheit_id = $row->lehreinheit_id; + $obj->lehrveranstaltung_id = $row->lehrveranstaltung_id; + $obj->studiensemester_kurzbz = $row->studiensemester_kurzbz; + $obj->insertamum = $row->insertamum; + $obj->insertvon = $row->insertvon; + + $qry_mdl = "SELECT * FROM public.mdl_course WHERE id='".addslashes($row->mdl_course_id)."'"; + if($result_mdl = pg_query($this->conn_moodle, $qry_mdl)) + { + if($row_mdl = pg_fetch_object($result_mdl)) + { + $obj->mdl_fullname = $row_mdl->fullname; + $obj->mdl_shortname = $row_mdl->shortname; + } + } + $this->result[] = $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + + } + + // ********************************************** + // * Schaut ob fuer diese LV/StSem schon ein + // * Moodle Kurs existiert + // * @param lehrveranstaltung_id + // * studiensemester_kurzbz + // * @return true wenn vorhanden, false wenn nicht + // ********************************************** + function course_exists_for_lv($lehrveranstaltung_id, $studiensemester_kurzbz) + { + $qry = "SELECT 1 FROM lehre.tbl_moodle WHERE lehrveranstaltung_id='".addslashes($lehrveranstaltung_id)."' AND studiensemester_kurzbz='".addslashes($studiensemester_kurzbz)."'"; + if($result = pg_query($this->conn, $qry)) + { + if(pg_num_rows($result)>0) + return true; + else + return false; + } + else + { + $this->errormsg = 'Fehler bei SELECT Abfrage in moodle_course.class.php / course_exists_for_lv'; + return false; + } + } + + // ********************************************** + // * Schaut ob fuer diese LE schon ein Moodle + // * Kurs existiert + // * @param lehreinheit_id + // * @return true wenn vorhanden, false wenn nicht + // ********************************************** + function course_exists_for_le($lehreinheit_id) + { + $qry = "SELECT 1 FROM lehre.tbl_moodle WHERE lehreinheit_id='".addslashes($lehreinheit_id)."'"; + if($result = pg_query($this->conn, $qry)) + { + if(pg_num_rows($result)>0) + return true; + else + return false; + } + else + { + $this->errormsg = 'Fehler bei SELECT Abfrage in moodle_course.class.php / course_exists_for_le'; + return false; + } + } + + // ********************************************** + // * Schaut ob fuer diese LV/StSem schon ein + // * Moodle Kurs existiert + // * @param lehrveranstaltung_id + // * studiensemester_kurzbz + // * @return true wenn vorhanden, false wenn nicht + // ********************************************** + function course_exists_for_allLE($lehrveranstaltung_id, $studiensemester_kurzbz) + { + $qry = "SELECT 1 FROM lehre.tbl_lehreinheit + WHERE lehrveranstaltung_id='".addslashes($lehrveranstaltung_id)."' + AND studiensemester_kurzbz='".addslashes($studiensemester_kurzbz)."' + AND lehreinheit_id NOT IN (SELECT lehreinheit_id FROM lehre.tbl_moodle WHERE lehreinheit_id=tbl_lehreinheit.lehreinheit_id)"; + if($result = pg_query($this->conn, $qry)) + { + if(pg_num_rows($result)>0) + return false; + else + return true; + } + else + { + $this->errormsg = 'Fehler bei SELECT Abfrage in moodle_course.class.php / course_exists_for_allLE'; + return false; + } + } + + // ************************************************ + // * wenn $var '' ist wird "null" zurueckgegeben + // * wenn $var !='' ist werden datenbankkritische + // * Zeichen mit backslash versehen und das Ergebnis + // * unter Hochkomma gesetzt. + // ************************************************ + function addslashes($var) + { + return ($var!=''?"'".addslashes($var)."'":'null'); + } + + // ************************************************ + // * Legt einen Eintrag in der tbl_moodle an + // * @return true wenn ok, false im Fehlerfall + // ************************************************ + function create_vilesci() + { + if($this->mdl_course_id=='') + { + $this->errormsg='mdl_course_id muss angegeben sein'; + return false; + } + + $qry = 'BEGIN; INSERT INTO lehre.tbl_moodle(mdl_course_id, lehreinheit_id, lehrveranstaltung_id, + studiensemester_kurzbz, insertamum, insertvon) + 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).');'; + + if(pg_query($this->conn, $qry)) + { + $qry = "SELECT currval('lehre.tbl_moodle_moodle_id_seq') as id;"; + if($result = pg_query($this->conn, $qry)) + { + if($row = pg_fetch_object($result)) + { + $this->moodle_id = $row->id; + pg_query($this->conn, 'COMMIT;'); + return true; + } + else + { + pg_query($this->conn, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Lesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Lesen der Sequence'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Einfuegen des Datensatzes'; + return false; + } + } + + // *********************************************** + // * Legt einen Kurs im Moodle an + // *********************************************** + function create_moodle() + { + pg_query($this->conn_moodle, 'BEGIN;'); + + //CourseCategorie ermitteln + + //lehrveranstalung ID holen falls die nur die lehreinheit_id angegeben wurde + if($this->lehrveranstaltung_id=='') + { + $qry = "SELECT lehrveranstaltung_id FROM lehre.tbl_lehreinheit + WHERE lehreinheit_id='".addslashes($this->lehreinheit_id)."'"; + if($result = pg_query($this->conn, $qry)) + { + if($row = pg_fetch_object($result)) + { + $lvid = $row->lehrveranstaltung_id; + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Ermitteln der LehrveranstaltungID'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Ermitteln der LehrveranstaltungID'; + return false; + } + } + else + $lvid = $this->lehrveranstaltung_id; + + //Studiengang und Semester holen + $qry = "SELECT tbl_lehrveranstaltung.semester, UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as stg FROM lehre.tbl_lehrveranstaltung JOIN public.tbl_studiengang USING(studiengang_kz) + WHERE lehrveranstaltung_id='$lvid'"; + + if($result = pg_query($this->conn, $qry)) + { + if($row = pg_fetch_object($result)) + { + $semester = $row->semester; + $stg = $row->stg; + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Ermitteln von Studiengang und Semester'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Ermitteln von Studiengang und Semester'; + return false; + } + + //Studiensemester Categorie holen + if(!$id_stsem = $this->getCategorie($this->studiensemester_kurzbz, '0')) + { + $id_stsem = $this->createCategorie($this->studiensemester_kurzbz, '0'); + } + //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) + VALUES (".$this->addslashes($id_sem).", (SELECT max(sortorder)+1 FROM public.mdl_course), ".$this->addslashes($this->mdl_fullname).", ". + $this->addslashes($this->mdl_shortname).",'weeks', 1, 5);"; + + if($result = pg_query($this->conn_moodle, $qry)) + { + $qry = "SELECT currval('mdl_course_id_seq') as id"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + $this->mdl_course_id = $row->id; + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim INSERT'; + return false; + } + + //zum vorherigen Pfad die aktuelle id hinzufuegen + $path = "(SELECT '$this->mdl_context_path' || '/' || currval('mdl_context_id_seq'))"; + //vorherige tiefe um 1 erhoehen + $depth = $this->mdl_context_depth+1; + + //Context eintragen + $qry = "INSERT INTO public.mdl_context(contextlevel, instanceid, path, depth) VALUES('50', ". + $this->addslashes($this->mdl_course_id).",".$path.",".$this->addslashes($depth).");"; + + if(pg_query($this->conn_moodle, $qry)) + { + $qry = "SELECT currval('mdl_context_id_seq') as id"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + $this->mdl_context_id = $row->id; + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim INSERT'; + return false; + } + + //Bloecke hinzufuegen + $qry = + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(20, $this->mdl_course_id, 'course-view', 'l', 0, 1);". //Teilnehmer + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(1, $this->mdl_course_id, 'course-view', 'l', 1, 1);". //Aktivitäten + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(25, $this->mdl_course_id, 'course-view', 'l', 2, 1);". //Forumssuche + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(2, $this->mdl_course_id, 'course-view', 'l', 3, 1);". //Admin + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(9, $this->mdl_course_id, 'course-view', 'l', 4, 1);". //Kursliste + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(18, $this->mdl_course_id, 'course-view', 'r', 0, 1);". //Neueste Nachrichten + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(8, $this->mdl_course_id, 'course-view', 'r', 1, 1);". //Kalender / Bald aktuell... + "INSERT INTO public.mdl_block_instance(blockid, pageid, pagetype, position, weight, visible) VALUES(22, $this->mdl_course_id, 'course-view', 'r', 2, 1);"; //Neueste Aktivitäten + + if(!pg_query($this->conn_moodle, $qry)) + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim INSERT der bloecke'; + return false; + } + else + { + pg_query($this->conn_moodle, 'COMMIT'); + return true; + } + + } + + // ************************************************************ + // * Laedt eine CourseCategorie anhand der Bezeichnung und der + // * ParentID + // ************************************************************ + function getCategorie($bezeichnung, $parent) + { + if($bezeichnung=='') + { + $this->errormsg = 'Bezeichnung muss angegeben werden'; + return false; + } + if($parent=='') + { + $this->errormsg = 'getCategorie: parent wurde nicht uebergeben'; + return false; + } + $qry = "SELECT id FROM public.mdl_course_categories WHERE name='".addslashes($bezeichnung)."' AND parent='".addslashes($parent)."'"; + + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + return $row->id; + } + else + { + $this->errormsg = 'Fehler beim Laden der KursKategorie'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden der KursKategorie'; + return false; + } + } + + // ************************************************************ + // * Erzeugt eine CourseCategorie anhand der Bezeichnung und der + // * ParentID + // ************************************************************ + function createCategorie($bezeichnung, $parent) + { + if($bezeichnung=='') + { + $this->errormsg = 'Bezeichnung muss angegeben werden'; + return false; + } + if($parent=='') + { + $this->errormsg = 'createCategorie: parent wurde nicht uebergeben'; + return false; + } + //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; + } + + //KursKategorie anlegen + $qry = "BEGIN; INSERT INTO public.mdl_course_categories(name, parent, sortorder, + coursecount, visible, timemodified, depth, path, theme) + VALUES(".$this->addslashes($bezeichnung).",".$this->addslashes($parent).",". + "'999',0,1,0,".$this->addslashes($depth+1). + ", (SELECT ".$this->addslashes($path.'/')." || currval('mdl_course_categories_id_seq')), null);"; + + if(pg_query($this->conn_moodle, $qry)) + { + $qry = "SELECT currval('mdl_course_categories_id_seq') as id"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + $coursecatid = $row->id; + + //Context anlegen + //wenn Parent 0 ist, dann den SYSTEM Eintrag holen + if($parent!='0') + $qry = "SELECT path, depth FROM public.mdl_context WHERE contextlevel='40' AND instanceid='".addslashes($parent)."'"; + else + $qry = "SELECT path, depth FROM public.mdl_context WHERE contextlevel='10' AND instanceid='".addslashes($parent)."'"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + $path = $row->path; + $depth = $row->depth; + + //zum vorherigen Pfad die aktuelle id hinzufuegen + $path = "(SELECT '$path' || '/' || currval('mdl_context_id_seq'))"; + //vorherige tiefe um 1 erhoehen + $depth=$depth+1; + + //Context eintragen + $qry = "INSERT INTO public.mdl_context(contextlevel, instanceid, path, depth) VALUES('40', ". + $this->addslashes($coursecatid).",".$path.",".$this->addslashes($depth).");"; + + if(pg_query($this->conn_moodle, $qry)) + { + $qry = "SELECT currval('mdl_context_id_seq') as id"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + pg_query($this->conn_moodle,'COMMIT;'); + return $coursecatid; + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim INSERT'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK;'); + $this->errormsg = 'Fehler beim Auslesen des Contextes'.$qry; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK;'); + $this->errormsg = 'Fehler beim Auslesen des Contextes'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle, 'ROLLBACK'); + $this->errormsg = 'Fehler beim Speichern der KursKategorie'; + return false; + } + } + + // ************************************************************ + // * Laedt einen Context anhand des contextlevels und der instanceid + // ************************************************************ + function getContext($contextlevel, $instanceid) + { + $qry ="SELECT * FROM public.mdl_context WHERE contextlevel='".addslashes($contextlevel)."' + AND instanceid='".addslashes($instanceid)."'"; + + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + $this->mdl_context_id = $row->id; + $this->mdl_context_contextlevelid = $row->id; + $this->mdl_context_instanceid = $row->instanceid; + $this->mdl_context_path = $row->path; + $this->mdl_context_depth = $row->depth; + + return true; + } + else + { + $this->errormsg = 'Eintrag wurde nicht gefunden'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Auslesen des Contexts'; + return false; + } + } +} \ No newline at end of file diff --git a/include/moodle_user.class.php b/include/moodle_user.class.php new file mode 100644 index 000000000..4dbd98010 --- /dev/null +++ b/include/moodle_user.class.php @@ -0,0 +1,463 @@ +, + * Andreas Oesterreicher and + * Rudolf Hangl . + */ +/* + * requires moodle_course.class.php + */ +class moodle_user +{ + var $conn; + var $conn_moodle; + var $errormsg; + var $log=''; //log message fuer Syncro + var $sync_create=0; //anzahl der durchgefuehrten zuteilungen beim syncro + + var $mdl_user_id; + var $mdl_user_username; + + + // ********************************************** + // * moodle_user + // * @param $conn Connection zur Vilesci DB + // * $conn_moodle Connection zur Moodle DB + // ********************************************** + function moodle_user($conn, $conn_moodle) + { + $this->conn = $conn; + $this->conn_moodle = $conn_moodle; + + $qry = "SET CLIENT_ENCODING TO 'LATIN9';"; + pg_query($this->conn_moodle, $qry); + } + + function loaduser($uid) + { + $qry = "SELECT * FROM public.mdl_user WHERE username='".addslashes($uid)."'"; + + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + $this->mdl_user_id = $row->id; + $this->mdl_user_username = $row->username; + return true; + } + else + { + $this->errormsg = 'User wurde nicht gefunden: '.$uid; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden des Users'; + return false; + } + } + + // ************************************************ + // * Synchronisiert die Lektoren der Lehreinheiten + // * mit denen des Moodle Kurses + // * @param $mdl_course_id ID des MoodleKurses + // * @return true wenn ok, false wenn Fehler + // ************************************************ + function sync_lektoren($mdl_course_id) + { + //Mitarbeiter laden die zu diesem Kurs zugeteilt sind + $qry = "SELECT + mitarbeiter_uid + FROM + lehre.tbl_lehreinheitmitarbeiter JOIN lehre.tbl_moodle USING(lehreinheit_id) + WHERE + mdl_course_id='".addslashes($mdl_course_id)."' + UNION + SELECT + mitarbeiter_uid + FROM + lehre.tbl_lehreinheitmitarbeiter JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + JOIN lehre.tbl_moodle USING(lehrveranstaltung_id) + WHERE + tbl_lehreinheit.studiensemester_kurzbz=tbl_moodle.studiensemester_kurzbz + AND mdl_course_id='".addslashes($mdl_course_id)."'"; + $mitarbeiter=''; + if($result_ma = pg_query($this->conn, $qry)) + { + //Context des Kurses holen + $mdlcourse = new moodle_course($this->conn, $this->conn_moodle); + if(!$mdlcourse->getContext(50, $mdl_course_id)) + { + $this->errormsg = 'Fehler beim Laden des Contexts'; + return false; + } + + while($row_ma = pg_fetch_object($result_ma)) + { + //MoodleID des Users holen bzw ggf neu anlegen + if(!$this->loaduser($row_ma->mitarbeiter_uid)) + { + //User anlegen + if(!$this->createUser($row_ma->mitarbeiter_uid)) + { + $this->errormsg = "Fehler beim Anlegen des Users $row_ma->mitarbeiter_uid: $this->errormsg"; + return false; + } + else + $this->errormsg = ''; + } + + if($mitarbeiter!='') + $mitarbeiter.=','; + $mitarbeiter.=$this->mdl_user_id; + + //Nachschauen ob dieser Lektor bereits zugeteilt ist + $qry = "SELECT 1 FROM public.mdl_role_assignments + WHERE + userid='".addslashes($this->mdl_user_id)."' AND + contextid='".addslashes($mdlcourse->mdl_context_id)."'"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if(pg_num_rows($result)==0) + { + //Mitarbeiter ist noch nicht zugeteilt. + + if($this->createZuteilung($this->mdl_user_id, $mdlcourse->mdl_context_id, 3)) + { + $this->log.="\nerzeuge Lektoren-Zuteilung für User $this->mdl_user_id zum Context $mdlcourse->mdl_context_id"; + $this->sync_create++; + } + else + $this->log.="\nFehler beim Anlegen der Lektoren-Zuteilung: $this->errormsg"; + } + } + else + { + $this->errormsg = 'Fehler beim Auslesen der Rollen'; + return false; + } + + } + + //Lektoren loeschen die nicht mehr zugeordnet sind + /* Derzeit werden zugeteilte Personen nicht geloescht + $qry = "SELECT * FROM mdl_role_assignments + WHERE + contextid='".addslashes($mdlcourse->mdl_context_id)."' AND + userid NOT in ($mitarbeiter)"; + + if($result = pg_query($this->conn_moodle, $qry)) + { + while($row = pg_fetch_object($result)) + { + $this->deleteZuteilung($row->userid, $mdlcourse->mdl_context_id); + } + } + else + { + $this->errormsg = 'Fehler beim Ermitteln der Lektoren die nicht mehr zugeteilt sind'; + return false; + } + */ + return true; + } + else + { + $this->errormsg = 'Fehler beim Ermitteln der Zugeteilten Lektoren'; + return false; + } + } + + // ************************************************ + // * Synchronisiert die Studenten der Lehreinheiten + // * mit denen des Moodle Kurses + // * @param $mdl_course_id ID des MoodleKurses + // * @return true wenn ok, false wenn Fehler + // ************************************************ + function sync_studenten($mdl_course_id) + { + //Studentengruppen laden die zu diesem Kurs zugeteilt sind + $qry = "SELECT + studiengang_kz, semester, verband, gruppe, gruppe_kurzbz, tbl_moodle.studiensemester_kurzbz + FROM + lehre.tbl_lehreinheitgruppe JOIN lehre.tbl_moodle USING(lehreinheit_id) + WHERE + mdl_course_id='".addslashes($mdl_course_id)."' + UNION + SELECT + studiengang_kz, semester, verband, gruppe, gruppe_kurzbz, tbl_moodle.studiensemester_kurzbz + FROM + lehre.tbl_lehreinheitgruppe JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + JOIN lehre.tbl_moodle USING(lehrveranstaltung_id) + WHERE + tbl_lehreinheit.studiensemester_kurzbz=tbl_moodle.studiensemester_kurzbz + AND mdl_course_id='".addslashes($mdl_course_id)."'"; + $studenten=''; + if($result_std = pg_query($this->conn, $qry)) + { + //Context des Kurses holen + $mdlcourse = new moodle_course($this->conn, $this->conn_moodle); + if(!$mdlcourse->getContext(50, $mdl_course_id)) + { + $this->errormsg = 'Fehler beim Laden des Contexts'; + return false; + } + + while($row_std = pg_fetch_object($result_std)) + { + //Studenten dieser Gruppe holen + + if($row_std->gruppe_kurzbz=='') //LVB Gruppe + { + $qry = "SELECT + distinct student_uid + FROM + public.tbl_studentlehrverband + WHERE + studiensemester_kurzbz='$row_std->studiensemester_kurzbz' AND + studiengang_kz = '$row_std->studiengang_kz' AND + semester = '$row_std->semester'"; + if(trim($row_std->verband)!='') + { + $qry.=" AND verband = '$row_std->verband'"; + if(trim($row_std->gruppe)!='') + { + $qry.=" AND gruppe = '$row_std->gruppe'"; + } + } + } + else //Spezialgruppe + { + $qry = "SELECT + distinct uid as student_uid + FROM + public.tbl_benutzergruppe + WHERE + gruppe_kurzbz='$row_std->gruppe_kurzbz' AND + studiensemester_kurzbz='$row_std->studiensemester_kurzbz' + "; + } + + if($result_user = pg_query($this->conn, $qry)) + { + while($row_user = pg_fetch_object($result_user)) + { + + //MoodleID des Users holen bzw ggf neu anlegen + if(!$this->loaduser($row_user->student_uid)) + { + //User anlegen + if(!$this->createUser($row_user->student_uid)) + { + $this->errormsg = "Fehler beim Anlegen des Users $row_user->student_uid: $this->errormsg"; + return false; + } + else + $this->errormsg = ''; + } + + if($studenten!='') + $studenten.=','; + $studenten.=$this->mdl_user_id; + + //Nachschauen ob dieser Student bereits zugeteilt ist + $qry = "SELECT 1 FROM public.mdl_role_assignments + WHERE + userid='".addslashes($this->mdl_user_id)."' AND + contextid='".addslashes($mdlcourse->mdl_context_id)."'"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if(pg_num_rows($result)==0) + { + //Student ist noch nicht zugeteilt. + + if($this->createZuteilung($this->mdl_user_id, $mdlcourse->mdl_context_id, 5)) + { + $this->log.="\nerzeuge Studenten-Zuteilung für User $this->mdl_user_id zum Context $mdlcourse->mdl_context_id"; + $this->sync_create++; + } + else + $this->log.="\nFehler beim Anlegen der Studenten-Zuteilung: $this->errormsg"; + } + } + else + { + $this->errormsg = 'Fehler beim Auslesen der Rollen'; + return false; + } + } + } + } + + //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; + } + } + + // ************************************************ + // * wenn $var '' ist wird "null" zurueckgegeben + // * wenn $var !='' ist werden datenbankkritische + // * Zeichen mit backslash versehen und das Ergebnis + // * unter Hochkomma gesetzt. + // ************************************************ + function addslashes($var) + { + return ($var!=''?"'".addslashes($var)."'":'null'); + } + + // ******************************************** + // * Legt einen User im Moodle an + // * @param $uid UID der Person die angelegt werden soll + // * @return true wenn ok, false wenn Fehler + // ******************************************** + function createUser($uid) + { + $qry = "SELECT uid, vorname, nachname FROM campus.vw_benutzer WHERE uid='".addslashes($uid)."'"; + if($result = pg_query($this->conn, $qry)) + { + if($row = pg_fetch_object($result)) + { + $username = $row->uid; + $vorname = $row->vorname; + $nachname = $row->nachname; + + $qry = "BEGIN; INSERT INTO public.mdl_user(auth, username, idnumber, firstname, lastname, email, mnethostid, confirmed, lang) + VALUES('ldap', ". + $this->addslashes($username).", ". + $this->addslashes($username).",". + $this->addslashes($vorname).",". + $this->addslashes($nachname).",". + $this->addslashes($username.'@'.DOMAIN).", 1, 1, 'de_utf8');"; + + if(pg_query($this->conn_moodle, $qry)) + { + $qry ="SELECT currval('mdl_user_id_seq') as id;"; + if($result = pg_query($this->conn_moodle, $qry)) + { + if($row = pg_fetch_object($result)) + { + pg_query($this->conn_moodle, 'COMMIT;'); + $this->mdl_user_id = $row->id; + return true; + } + else + { + pg_query($this->conn_moodle,'ROLLBACK'); + $this->errormsg = 'Fehler beim Lesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle,'ROLLBACK'); + $this->errormsg = 'Fehler beim Lesen der Sequence'; + return false; + } + } + else + { + pg_query($this->conn_moodle,'ROLLBACK'); + $this->errormsg = 'Fehler beim Anlegen des Users'; + return false; + } + } + else + { + $this->errormsg = 'User wurde nicht gefunden: '.$uid; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden des Users'; + return false; + } + } + + // ********************************************* + // * Teilt den User mit der ID $mdl_user_id zum + // * Kurs mit der ContextID $mdl_context_id zu. + // * @param $mdl_user_id Moodle ID des Users + // * $mdl_context_id ContextID des Kurses + // * $role Rolle der Zuteilung (1=Admin/3=Lektor/5=Student) + // * @return true wenn ok, false wenn Fehler + // ********************************************* + function createZuteilung($mdl_user_id, $mdl_context_id, $role) + { + $qry = "INSERT INTO public.mdl_role_assignments(roleid, contextid, userid) + VALUES(". + $this->addslashes($role).",". + $this->addslashes($mdl_context_id).",". + $this->addslashes($mdl_user_id).");"; + + if(pg_query($this->conn_moodle, $qry)) + { + return true; + } + else + { + $this->errormsg = 'Fehler beim Speichern der Zuteilung'; + return false; + } + } + + // ************************************************* + // * Loescht die Zuteilung eines Users zu einem Kurs + // * @param $mdl_user_id MoodleID des Users + // * $mdl_context_id ContextID des Users + // * @return true wenn ok, false wenn Fehler + // ************************************************* + function deleteZuteilung($mdl_user_id, $mdl_context_id) + { + $qry = "DELETE FROM public.mdl_role_assignments + WHERE userid='".addslashes($mdl_user_id)."' AND contextid='".addslashes($mdl_context_id)."'"; + if(pg_query($this->conn_moodle, $qry)) + return true; + else + { + $this->errormsg = 'Fehler beim Loeschen der Zuteilung'; + return false; + } + } + +} \ No newline at end of file diff --git a/include/tw/cis_menu_lv.inc.php b/include/tw/cis_menu_lv.inc.php index ca9529b42..a19725436 100644 --- a/include/tw/cis_menu_lv.inc.php +++ b/include/tw/cis_menu_lv.inc.php @@ -26,6 +26,46 @@ ?> + - + + ' //Studentenabgabe $dest_dir = @dir('../../../documents/'.strtolower($kurzbz).'/'.$term_id.'/'.strtolower($short_short_name).'/upload'); @@ -343,95 +398,70 @@ "; } } + echo '

 

+ '; + */ ?> -

 

- - - - - - - - + + + -
+ +
Lehrveranstaltungsinformation
"; + + $qry = "SELECT * FROM campus.tbl_lvinfo WHERE lehrveranstaltung_id='$lvid' AND genehmigt=true AND sprache='German' AND aktiv=true"; + $need_br=false; + + if($result=pg_query($sql_conn,$qry)) + { + if(pg_num_rows($result)>0) + { + echo "Deutsch "; + $need_br=true; + } + } + $qry = "SELECT * FROM campus.tbl_lvinfo WHERE lehrveranstaltung_id='$lvid' AND genehmigt=true AND sprache='English' AND aktiv=true"; + if($result=pg_query($sql_conn,$qry)) + { + if(pg_num_rows($result)>0) + { + $row1=pg_fetch_object($result); + echo "Englisch"; + $need_br=true; + } + } + + if($user_is_allowed_to_upload || $rechte->isBerechtigt('admin',$course_id) || $rechte->isBerechtigt('lehre',$course_id)) + { + if($need_br) + echo "
"; + echo "Bearbeiten"; + } + ?> + +

 

+
path.'/" target="_blank">'; + echo ''; echo '
'; echo 'Download'; echo '
'; @@ -249,8 +289,23 @@

 

+ kurzbzlang).'.'.$term_id.'sem.'.strtolower($short_short_name).'" class="Item"> +
+ Newsgroups + '; + } + ?> +

 

+
+
Feedback'; + echo '
Feedback
'; ?>

 

- -" > -
- Benotungstool
("Kreuzerl"-Tool)

- ">Handbuch [PDF] - -" > -
- "Kreuzerl"-Tool
- - -

 

-
+ -
Lehrveranstaltungsinformation
"; - - $qry = "SELECT * FROM campus.tbl_lvinfo WHERE lehrveranstaltung_id='$lvid' AND genehmigt=true AND sprache='German' AND aktiv=true"; - $need_br=false; - - if($result=pg_query($sql_conn,$qry)) - { - if(pg_num_rows($result)>0) - { - echo "Deutsch "; - $need_br=true; - } - } - $qry = "SELECT * FROM campus.tbl_lvinfo WHERE lehrveranstaltung_id='$lvid' AND genehmigt=true AND sprache='English' AND aktiv=true"; - if($result=pg_query($sql_conn,$qry)) - { - if(pg_num_rows($result)>0) - { - $row1=pg_fetch_object($result); - echo "Englisch"; - $need_br=true; - } - } - - if($user_is_allowed_to_upload || $rechte->isBerechtigt('admin',$course_id) || $rechte->isBerechtigt('lehre',$course_id)) - { - if($need_br) - echo "
"; - echo "Bearbeiten"; - } - ?> +
+ +
+ Benotungstool
("Kreuzerl"-Tool)

+ Handbuch [PDF]'; + } + else + { + echo ' +
+ "Kreuzerl"-Tool
'; + } + ?>

 

-
- kurzbzlang).'.'.$term_id.'sem.'.strtolower($short_short_name).'"> -
- Newsgroups - '; - } - ?> -

 

-
+ +
+ Moodle
'; + if($is_lector) + echo 'Wartung'; + + ?> +

 

+
+ +
+ Gesamtnote
'; + } + ?> +

 

+
\ No newline at end of file diff --git a/system/sync_moodle_user.php b/system/sync_moodle_user.php new file mode 100644 index 000000000..5670637f7 --- /dev/null +++ b/system/sync_moodle_user.php @@ -0,0 +1,114 @@ +, + * Andreas Oesterreicher and + * Rudolf Hangl . + */ +/* + * Synchronisiert die Lektoren und Studenten der aktuellen MoodleKurse + * wenn kein aktuelles Studiensemester vorhanden ist, wird NICHT Synchronisiert + */ +require_once('../vilesci/config.inc.php'); +require_once('../include/moodle_course.class.php'); +require_once('../include/moodle_user.class.php'); +require_once('../include/studiensemester.class.php'); + +if(!$conn = pg_pconnect(CONN_STRING)) + die('Fehler beim Connecten zur DB'); + +if(!$conn_moodle = pg_pconnect(CONN_STRING_MOODLE)) + die('Fehler beim Connecten zur DB'); + +$sync_lektoren_gesamt=0; +$sync_studenten_gesamt=0; +$fehler=0; +$message=''; + +//nur Synchronisieren wenn ein aktuelles Studiensemester existiert damit keine +//Probleme durch die Vorrueckung entstehen +$stsem = new studiensemester($conn); +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='$stsem_kurzbz'"; + if($result = pg_query($conn, $qry)) + { + while($row = pg_fetch_object($result)) + { + //Lektoren + $mdluser = new moodle_user($conn, $conn_moodle); + if($mdluser->sync_lektoren($row->mdl_course_id)) + { + $sync_lektoren_gesamt+=$mdluser->sync_create; + if($mdluser->sync_create>0) + { + $message.="\nCourse $row->mdl_course_id:\n".$mdluser->log."\n"; + } + } + else + { + $message.="\nFehler: $mdluser->errormsg"; + $fehler++; + } + + //Studenten + $mdluser = new moodle_user($conn, $conn_moodle); + if($mdluser->sync_studenten($row->mdl_course_id)) + { + $sync_studenten_gesamt+=$mdluser->sync_create; + if($mdluser->sync_create>0) + { + $message.="\nCourse $row->mdl_course_id:\n".$mdluser->log."\n"; + } + } + else + { + $message.="\nFehler: $mdluser->errormsg"; + $fehler++; + } + } + + if($sync_lektoren_gesamt>0 || $sync_studenten_gesamt>0 || $fehler>0) + { + $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'; + + if(mail($to,'Moodle Syncro', $header.$message, 'From: vilesci@'.DOMAIN)) + 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"; +?> \ No newline at end of file diff --git a/vilesci/personen/preinteressent_anlegen.php b/vilesci/personen/preinteressent_anlegen.php index 6034b5c02..eb1849102 100644 --- a/vilesci/personen/preinteressent_anlegen.php +++ b/vilesci/personen/preinteressent_anlegen.php @@ -141,6 +141,7 @@ $nachname = (isset($_POST['nachname'])?$_POST['nachname']:''); $vorname = (isset($_POST['vorname'])?$_POST['vorname']:''); $geschlecht = (isset($_POST['geschlecht'])?$_POST['geschlecht']:''); $geburtsdatum = (isset($_POST['geburtsdatum'])?$_POST['geburtsdatum']:''); +$nation = (isset($_POST['nation'])?$_POST['nation']:'A'); $adresse = (isset($_POST['adresse'])?$_POST['adresse']:''); $plz = (isset($_POST['plz'])?$_POST['plz']:''); $ort = (isset($_POST['ort'])?$_POST['ort']:''); @@ -185,6 +186,7 @@ if(isset($_POST['save'])) $person->titelpost = $titelpost; $person->geschlecht = $geschlecht; $person->gebdatum = $geburtsdatum; + $person->staatsbuergerschaft = $nation; $person->svnr = $svnr; $person->ersatzkennzeichen = $ersatzkennzeichen; $person->aktiv = true; @@ -349,22 +351,25 @@ if(isset($_POST['save'])) $errormsg = "Fehler beim Anlegen des Preinteressenten: $preinteressent->errormsg"; } - foreach ($_POST as $key=>$param) + if(!$error) { - if(substr($key,0,4)=='stg_') + foreach ($_POST as $key=>$param) { - $stg_kz = substr($key, 4); - $zuordnung = new preinteressent($conn); - $zuordnung->preinteressent_id = $preinteressent->preinteressent_id; - $zuordnung->studiengang_kz = $stg_kz; - $zuordnung->prioritaet = 1; - $zuordnung->insertamum = date('Y-m-d H:i:s'); - $zuordnung->insertvon = $user; - - if(!$zuordnung->saveZuordnung(true)) + if(substr($key,0,4)=='stg_') { - $errormsg.="Fehler beim Speichern der Zuordnung zum Studiengang $stg_kz"; - $error=true; + $stg_kz = substr($key, 4); + $zuordnung = new preinteressent($conn); + $zuordnung->preinteressent_id = $preinteressent->preinteressent_id; + $zuordnung->studiengang_kz = $stg_kz; + $zuordnung->prioritaet = 1; + $zuordnung->insertamum = date('Y-m-d H:i:s'); + $zuordnung->insertvon = $user; + + if(!$zuordnung->saveZuordnung(true)) + { + $errormsg.="Fehler beim Speichern der Zuordnung zum Studiengang $stg_kz"; + $error=true; + } } } } @@ -427,6 +432,22 @@ echo ''; echo ''; echo ''; echo ''; +echo 'Staatsbuergerschaft'; echo 'Ersatzkennzeichen'; echo 'Geburtsdatum (Format dd.mm.JJJJ)'; @@ -491,10 +512,18 @@ if($result = pg_query($conn, $qry)) echo ''; echo 'Schule ID:'; echo ''; -if(($geburtsdatum=='' && $vorname=='' && $nachname=='') || $geburtsdatum_error) +if(($vorname!='' && $geburtsdatum=='' && $nachname=='') + //|| ($vorname=='' && $geburtsdatum=='' && $nachname!='') + || ($nachname=='' && $geburtsdatum=='') + || ($geburtsdatum=='' && $nachname=='' && $vorname=='') + || $geburtsdatum_error) echo ''; else +{ + echo ''; echo ''; +} + echo ''; echo ''; @@ -523,6 +552,13 @@ if($vorname!='' && $nachname!='') $where.=" (LOWER(vorname)=LOWER('".$vorname."') AND LOWER(nachname)=LOWER('".$nachname."'))"; } +if($vorname=='' && $nachname!='') +{ + if($where!='') + $where.=' OR'; + $where.=" (LOWER(nachname)=LOWER('".$nachname."'))"; +} + if($where!='') { $qry = "SELECT * FROM public.tbl_person WHERE $where ORDER BY nachname, vorname, gebdatum"; @@ -567,18 +603,36 @@ if($where!='') echo ''; echo '
'; //Studiengaenge anzeigen - $studiengang = new studiengang($conn); - $studiengang->getAll('typ, bezeichnung'); - echo ''; + $qry = "SELECT *, UPPER(typ::varchar(1) || kurzbz) as kuerzel FROM public.tbl_studiengang + WHERE aktiv AND typ in('b','m') ORDER BY typ, bezeichnung"; + if($result = pg_query($conn, $qry)) + { + echo '
'; + echo ''; + $lasttyp=''; + while($row = pg_fetch_object($result)) + { + if($lasttyp!=$row->typ) + { + if($lasttyp!='') + echo '
'; + $lasttyp = $row->typ; + } + echo ""; + } + echo '
$row->kuerzel$row->bezeichnung
'; + } + + /* foreach ($studiengang->result as $row) { echo "$row->kuerzel$row->bezeichnung"; - } - echo ''; + }*/ + } } -//else -// echo 'Zum Erstellen des Vorschlags bitte Geburtsdatum oder Vorname und Nachname eingeben'; +else + echo 'Zum Erstellen des Vorschlags bitte Geburtsdatum oder Vorname und Nachname eingeben'; ?> diff --git a/vilesci/personen/preinteressent_uebersicht.php b/vilesci/personen/preinteressent_uebersicht.php index 99770a724..7f4552813 100644 --- a/vilesci/personen/preinteressent_uebersicht.php +++ b/vilesci/personen/preinteressent_uebersicht.php @@ -241,11 +241,12 @@ echo '
'; echo " + - + @@ -286,11 +287,25 @@ foreach ($preinteressent->result as $row) echo ''; $person = new person($conn); $person->load($row->person_id); + echo ""; echo ""; echo ""; - echo ""; + //echo ""; echo ""; echo ""; + //EMail + $qry = "SELECT kontakt FROM public.tbl_kontakt WHERE person_id='$person->person_id' AND kontakttyp='email' + ORDER BY zustellung DESC LIMIT 1"; + echo ''; + //Status $status=''; $prestudent = new prestudent($conn); if($prestudent->getPrestudenten($row->person_id))
PersonID Nachname VornameGeburtsdatum Studiensemester ErfassungsdatumE-Mail Status Freigabe Übernahme
$person->person_id$person->nachname$person->vorname".$datum_obj->convertISODate($person->gebdatum)."".$datum_obj->convertISODate($person->gebdatum)."$row->studiensemester_kurzbz".$datum_obj->formatDatum($row->erfassungsdatum,'d.m.Y')."'; + if($result_mail = pg_query($conn, $qry)) + { + if($row_mail = pg_fetch_object($result_mail)) + { + echo ''.$row_mail->kontakt.''; + } + } + echo '