This commit is contained in:
Andreas Österreicher
2008-09-03 15:13:35 +00:00
parent 219bda83a5
commit a69b6ab08c
11 changed files with 1881 additions and 140 deletions
+68
View File
@@ -0,0 +1,68 @@
<?php
/*
$xml = file_get_contents('/path/to/your/xmlfile.xml');
$xsl = file_get_contenst('/path/to/your/xslfile.xsl');
$fop = new fop();
$pdf_filename = $fop->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);
}
}
?>
+652
View File
@@ -0,0 +1,652 @@
<?php
/* Copyright (C) 2006 Technikum-Wien
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Christian Paminger <christian.paminger@technikum-wien.at>,
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at> and
* Rudolf Hangl <rudolf.hangl@technikum-wien.at>.
*/
/*
*
*/
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 "<br>$this->errormsg";
}
//Semester Categorie holen
if(!$id_sem = $this->getCategorie($semester, $id_stg))
{
if(!$id_sem = $this->createCategorie($semester, $id_stg))
echo "<br>$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;
}
}
}
+463
View File
@@ -0,0 +1,463 @@
<?php
/* Copyright (C) 2006 Technikum-Wien
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Christian Paminger <christian.paminger@technikum-wien.at>,
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at> and
* Rudolf Hangl <rudolf.hangl@technikum-wien.at>.
*/
/*
* 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;
}
}
}
+110 -80
View File
@@ -26,6 +26,46 @@
?>
<table class="tabcontent">
<tr>
<td class="tdvertical" align="center">
<?php
//Lehrveranstaltungsinformation
echo "<img src=\"../../../skin/images/button_i.jpg\" width=\"67\" height=\"45\"><br><strong>Lehrveranstaltungsinformation</strong><br>";
$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 "<a href=\"#\" class='Item' onClick=\"javascript:window.open('ects/preview.php?lv=$lvid&language=de','Lehrveranstaltungsinformation','width=700,height=750,resizable=yes,menuebar=no,toolbar=no,status=yes,scrollbars=yes');\">Deutsch&nbsp;</a>";
$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 "<a href=\"#\" class='Item' onClick=\"javascript:window.open('ects/preview.php?lv=$lvid&language=en','Lehrveranstaltungsinformation','width=700,height=750,resizable=yes,menuebar=no,toolbar=no,status=yes,scrollbars=yes');\">Englisch</a>";
$need_br=true;
}
}
if($user_is_allowed_to_upload || $rechte->isBerechtigt('admin',$course_id) || $rechte->isBerechtigt('lehre',$course_id))
{
if($need_br)
echo "<br>";
echo "<a href='ects/index.php?lvid=$lvid' target='_blank' class='Item'>Bearbeiten</a>";
}
?>
<p>&nbsp;</p>
</td>
<td class="tdvertical" align="center">
<?php
@@ -149,7 +189,7 @@
if(isset($dir_empty) && $dir_empty == false)
{
echo '<a href="'.$dest_dir->path.'/" target="_blank">';
echo '<a href="'.$dest_dir->path.'/" target="_blank" class="Item">';
echo '<img src="../../../skin/images/button_dl.jpg" width="67" height="45"><br>';
echo '<strong>Download</strong>';
echo '</a>';
@@ -249,8 +289,23 @@
<p>&nbsp;</p>
</td>
<td class="tdvertical" align="center">
<td class="tdvertical" align="center">
<?php
//Keine Newsgroups fuer Studiengang '0' (Freifaecher) anzeigen
if($course_id!='0')
{
echo '<a href="news://cis.technikum-wien.at/'.strtolower($stg_obj->kurzbzlang).'.'.$term_id.'sem.'.strtolower($short_short_name).'" class="Item">
<img src="../../../skin/images/button_ng.jpg" width="67" height="45"><br>
<strong>Newsgroups</strong>
</a>';
}
?>
<p>&nbsp;</p>
</td>
<?php
/*
echo '<td class="tdvertical" align="center">'
//Studentenabgabe
$dest_dir = @dir('../../../documents/'.strtolower($kurzbz).'/'.$term_id.'/'.strtolower($short_short_name).'/upload');
@@ -343,95 +398,70 @@
</a>";
}
}
echo '<p>&nbsp;</p>
</td>';
*/
?>
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td class="tdvertical" align="center">
<td class="tdvertical" align="center">
<?php
//FEEDBACK
echo '<a href="feedback.php?lvid='.$lvid.'" target="_blank"><img border="0" src="../../../skin/images/button_fb.jpg" width="67" height="45"><br><strong>Feedback</strong></a>';
echo '<a href="feedback.php?lvid='.$lvid.'" target="_blank" class="Item"><img border="0" src="../../../skin/images/button_fb.jpg" width="67" height="45"><br><strong>Feedback</strong></a>';
?>
<p>&nbsp;</p>
</td>
<td class="tdvertical" align="center">
<?php if($is_lector)
{
if(isset($angezeigtes_stsem))
$studiensem = '&stsem='.$angezeigtes_stsem;
else
$studiensem = '';
?>
<a href="benotungstool/verwaltung.php?<?php echo "lvid=$lvid$studiensem"?>" >
<img src="../../../skin/images/button_kt.jpg" width="67" height="45"><br>
<strong>Benotungstool<br>("Kreuzerl"-Tool)</strong></a><br>
<a href="lesson.php?handbuch=1&<?php echo "lvid=$lvid$studiensem"?>">Handbuch [PDF]</a>
<?php } else { ?>
<a href="benotungstool/studentenansicht.php?<?php echo "lvid=$lvid"?>" >
<img src="../../../skin/images/button_kt.jpg" width="67" height="45"><br>
<strong>"Kreuzerl"-Tool</strong></a>
<?php } ?>
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td class="tdvertical" align="center">
<?php
//Lehrveranstaltungsinformation
echo "<img src=\"../../../skin/images/button_i.jpg\" width=\"67\" height=\"45\"><br><strong>Lehrveranstaltungsinformation</strong><br>";
$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 "<a href=\"#\" class='Item' onClick=\"javascript:window.open('ects/preview.php?lv=$lvid&language=de','Lehrveranstaltungsinformation','width=700,height=750,resizable=yes,menuebar=no,toolbar=no,status=yes,scrollbars=yes');\">Deutsch&nbsp;</a>";
$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 "<a href=\"#\" class='Item' onClick=\"javascript:window.open('ects/preview.php?lv=$lvid&language=en','Lehrveranstaltungsinformation','width=700,height=750,resizable=yes,menuebar=no,toolbar=no,status=yes,scrollbars=yes');\">Englisch</a>";
$need_br=true;
}
}
if($user_is_allowed_to_upload || $rechte->isBerechtigt('admin',$course_id) || $rechte->isBerechtigt('lehre',$course_id))
{
if($need_br)
echo "<br>";
echo "<a href='ects/index.php?lvid=$lvid' target='_blank' class='Item'>Bearbeiten</a>";
}
?>
<td class="tdvertical" align="center">
<?php
//Kreuzerltool
if($is_lector)
{
if(isset($angezeigtes_stsem))
$studiensem = '&stsem='.$angezeigtes_stsem;
else
$studiensem = '';
echo '<a href="benotungstool/verwaltung.php?lvid='.$lvid.$studiensem.'" class="Item">
<img src="../../../skin/images/button_kt.jpg" width="67" height="45"><br>
<strong>Benotungstool<br>("Kreuzerl"-Tool)</strong></a><br>
<a href="lesson.php?handbuch=1&lvid='.$lvid.$studiensem.'" class="Item">Handbuch [PDF]</a>';
}
else
{
echo '<a href="benotungstool/studentenansicht.php?lvid='.$lvid.'" >
<img src="../../../skin/images/button_kt.jpg" width="67" height="45"><br>
<strong>"Kreuzerl"-Tool</strong></a>';
}
?>
<p>&nbsp;</p>
</td>
<td class="tdvertical" align="center">
<?php
//Keine Newsgroups fuer Studiengang '0' (Freifaecher) anzeigen
if($course_id!='0')
{
echo '<a href="news://cis.technikum-wien.at/'.strtolower($stg_obj->kurzbzlang).'.'.$term_id.'sem.'.strtolower($short_short_name).'">
<img src="../../../skin/images/button_ng.jpg" width="67" height="45"><br>
<strong>Newsgroups</strong>
</a>';
}
?>
<p>&nbsp;</p>
</td>
</td>
<td class="tdvertical" align="center">
<?php
//Moodle
echo '<a href="'.MOODLE_PATH.'" target="_blank" class="Item" >
<img src="../../../skin/images/button_moodle.jpg" width="68" height="45"><br>
<strong>Moodle</strong></a><br>';
if($is_lector)
echo '<a href="moodle_wartung.php?lvid='.$lvid.'&stsem='.$angezeigtes_stsem.'" class="Item">Wartung</a>';
?>
<p>&nbsp;</p>
</td>
<td class="tdvertical" align="center">
<?php
//Gesamtnote
if($is_lector)
{
echo '<a href="benotungstool/lvgesamtnoteverwalten.php?lvid='.$lvid.'&stsem='.$angezeigtes_stsem.'" class="Item" >
<img src="../../../skin/images/button_endnote.jpg" width="68" height="45"><br>
<strong>Gesamtnote</strong></a><br>';
}
?>
<p>&nbsp;</p>
</td>
</tr>
</table>