Anpassungen Moodle2.4

This commit is contained in:
Andreas Österreicher
2013-03-15 11:34:57 +00:00
parent c1bbd7e2f1
commit f21e21ae9b
22 changed files with 5177 additions and 188 deletions
+51 -5
View File
@@ -3981,9 +3981,54 @@ if(!@$db->db_query("SELECT 1 FROM public.tbl_service LIMIT 1"))
";
if(!$db->db_query($qry))
echo '<strong>public.tl_service: '.$db->db_last_error().'</strong><br>';
echo '<strong>public.tbl_service: '.$db->db_last_error().'</strong><br>';
else
echo 'Tabelle public.service hinzugefuegt, campus.tbl_zeitaufzeichnung geaendert<br>';
echo 'Tabelle public.tbl_service hinzugefuegt, campus.tbl_zeitaufzeichnung geaendert<br>';
}
// Service zusaetzliche Verknuepfung zu einem Content
if(!@$db->db_query("SELECT content_id FROM public.tbl_service LIMIT 1"))
{
$qry ="ALTER TABLE public.tbl_service ADD COLUMN content_id integer;
ALTER TABLE public.tbl_service ADD CONSTRAINT fk_content_service FOREIGN KEY(content_id) REFERENCES campus.tbl_content(content_id) ON DELETE RESTRICT ON UPDATE CASCADE;
";
if(!$db->db_query($qry))
echo '<strong>public.tbl_service: '.$db->db_last_error().'</strong><br>';
else
echo 'Tabelle public.tbl_service Spalte content_id hinzugefuegt<br>';
}
// Erweiterung der Moodle Tabelle zur Verwaltung von mehreren Moodle Instanzen
if(!@$db->db_query("SELECT * FROM lehre.tbl_moodle_version LIMIT 1"))
{
$qry ="
CREATE TABLE lehre.tbl_moodle_version
(
moodle_version varchar(8) NOT NULL,
bezeichnung varchar(256),
pfad varchar(256)
);
ALTER TABLE lehre.tbl_moodle_version ADD CONSTRAINT pk_moodle_version PRIMARY KEY (moodle_version);
ALTER TABLE lehre.tbl_moodle ADD COLUMN moodle_version varchar(8);
ALTER TABLE lehre.tbl_moodle ADD CONSTRAINT fk_moodle_version_moodle FOREIGN KEY(moodle_version) REFERENCES lehre.tbl_moodle_version(moodle_version) ON DELETE RESTRICT ON UPDATE CASCADE;
INSERT INTO lehre.tbl_moodle_version(moodle_version, bezeichnung, pfad) VALUES('1.9','Moodle 1.9','http://localhost/moodle/');
INSERT INTO lehre.tbl_moodle_version(moodle_version, bezeichnung, pfad) VALUES('2.4','Moodle 2.4','http://localhost/moodle24/');
UPDATE lehre.tbl_moodle SET moodle_version='1.9' WHERE moodle_version is null;
ALTER TABLE lehre.tbl_moodle ALTER COLUMN moodle_version SET NOT NULL;
GRANT SELECT ON lehre.tbl_moodle_version TO vilesci;
GRANT SELECT ON lehre.tbl_moodle_version TO web;
";
if(!$db->db_query($qry))
echo '<strong>lehre.tbl_moodle_version: '.$db->db_last_error().'</strong><br>';
else
echo 'Tabelle lehre.tbl_moodle_version hinzugefuegt; Spalte moodle_version zu Tabelle tbl_moodle hinzugefuegt<br>';
}
echo '<br>';
@@ -4079,7 +4124,8 @@ $tabellen=array(
"lehre.tbl_lehrform" => array("lehrform_kurzbz","bezeichnung","verplanen"),
"lehre.tbl_lehrfunktion" => array("lehrfunktion_kurzbz","beschreibung","standardfaktor","sort"),
"lehre.tbl_lehrveranstaltung" => array("lehrveranstaltung_id","kurzbz","bezeichnung","lehrform_kurzbz","studiengang_kz","semester","sprache","ects","semesterstunden","anmerkung","lehre","lehreverzeichnis","aktiv","planfaktor","planlektoren","planpersonalkosten","plankostenprolektor","koordinator","sort","zeugnis","projektarbeit","updateamum","updatevon","insertamum","insertvon","ext_id","bezeichnung_english","orgform_kurzbz","incoming"),
"lehre.tbl_moodle" => array("lehrveranstaltung_id","lehreinheit_id","moodle_id","mdl_course_id","studiensemester_kurzbz","gruppen","insertamum","insertvon"),
"lehre.tbl_moodle" => array("lehrveranstaltung_id","lehreinheit_id","moodle_id","mdl_course_id","studiensemester_kurzbz","gruppen","insertamum","insertvon","moodle_version"),
"lehre.tbl_moodle_version" => array("moodle_version","bezeichnung","pfad"),
"lehre.tbl_note" => array("note","bezeichnung","anmerkung","farbe"),
"lehre.tbl_projektarbeit" => array("projektarbeit_id","projekttyp_kurzbz","titel","lehreinheit_id","student_uid","firma_id","note","punkte","beginn","ende","faktor","freigegeben","gesperrtbis","stundensatz","gesamtstunden","themenbereich","anmerkung","updateamum","updatevon","insertamum","insertvon","ext_id","titel_english","seitenanzahl","abgabedatum","kontrollschlagwoerter","schlagwoerter","schlagwoerter_en","abstract", "abstract_en", "sprache"),
"lehre.tbl_projektbetreuer" => array("person_id","projektarbeit_id","betreuerart_kurzbz","note","faktor","name","punkte","stunden","stundensatz","updateamum","updatevon","insertamum","insertvon","ext_id"),
@@ -4149,7 +4195,7 @@ $tabellen=array(
"public.tbl_reihungstest" => array("reihungstest_id","studiengang_kz","ort_kurzbz","anmerkung","datum","uhrzeit","updateamum","updatevon","insertamum","insertvon","ext_id","freigeschaltet"),
"public.tbl_status" => array("status_kurzbz","beschreibung","anmerkung","ext_id"),
"public.tbl_semesterwochen" => array("semester","studiengang_kz","wochen"),
"public.tbl_service" => array("service_id", "bezeichnung","beschreibung","ext_id","oe_kurzbz"),
"public.tbl_service" => array("service_id", "bezeichnung","beschreibung","ext_id","oe_kurzbz","content_id"),
"public.tbl_sprache" => array("sprache","locale","flagge","index","content","bezeichnung"),
"public.tbl_standort" => array("standort_id","adresse_id","kurzbz","bezeichnung","insertvon","insertamum","updatevon","updateamum","ext_id", "firma_id"),
"public.tbl_statistik" => array("statistik_kurzbz","bezeichnung","url","r","gruppe","sql","php","content_id","insertamum","insertvon","updateamum","updatevon","berechtigung_kurzbz"),
@@ -4252,4 +4298,4 @@ if (!$result=@$db->db_query($sql_query))
echo 'Attribut '.$fulltablename.'.<strong>'.$fieldnameDB.'</strong> existiert in der DB, aber nicht in diesem Skript!<BR>';
}
}
?>
?>
@@ -23,6 +23,15 @@
// We defined the web service functions to install.
$functions = array(
'fhcomplete_get_course_grades' => array(
'classname' => 'local_fhcompletews_external',
'methodname' => 'get_course_grades',
'classpath' => 'local/fhcompletews/externallib.php',
'description' => 'Get Grades of a course',
'type' => 'read',
'capabilities'=> 'moodle/course:update,moodle/course:viewhiddencourses',
),
'fhcomplete_courses_by_shortname' => array(
'classname' => 'local_fhcompletews_external',
'methodname' => 'get_courses_by_shortname',
+185 -38
View File
@@ -1,5 +1,4 @@
<?php
// Moodle 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 3 of the License, or
@@ -22,12 +21,147 @@
*/
require_once($CFG->libdir . "/externallib.php");
class local_fhcompletews_external extends external_api {
class local_fhcompletews_external extends external_api
{
/**************************************************
* Webservice get_course_grades
*
* Laedt die Noten eines Kurses
**************************************************/
public static function get_course_grades_parameters()
{
return new external_function_parameters(
array('courseid' => new external_value(PARAM_INT, 'CourseID')), 'ID of the Course'
);
}
/**
* Get course Grades
* @param int courseid
* @return array
*/
public static function get_course_grades($courseid)
{
global $CFG, $DB;
require_once($CFG->dirroot . "/course/lib.php");
require_once($CFG->dirroot.'/grade/export/lib.php');
public static function get_courses_by_shortname_parameters() {
//validate parameter
$params = self::validate_parameters(self::get_course_grades_parameters(),
array('courseid' => $courseid));
$notenart=3; // 2=Prozent; 3=Endnote nach Skala
$gui=array();
$final_id='';
$data = array();
// Kursdaten Laden
if (!$course = $DB->get_record('course', array('id'=>$courseid)))
{
throw new moodle_exception('Course not found', '', '', null, 'The course ' . $courseid . ' is not found');
return false;
}
$id=$course->id;
$kursname=$course->fullname;
$shortname=$course->shortname;
//ODS Notenexport starten
require_login($course);
$context = get_context_instance(CONTEXT_COURSE, $courseid);
require_once($CFG->dirroot.'/grade/export/ods/grade_export_ods.php');
if (!$export = new grade_export_ods($course, 0, 0, false, false, $notenart, 2))
{
throw new moodle_exception('Fehler', '', '', null, "Moodle-Kurs ".$id." ".$shortname." - keine Export Information gefunden");
return false;
}
$grad =$export->columns;
// Im Export sind die Noten fuer alle Abgaben, Quiz, etc enthalten
// Wir brauchen hier nur die Gesamtnote fuer die ganzen Kurs
foreach ($export->columns as $key=>$grade_item)
{
// Gesamtnote hat den itemtype "course"
if($grade_item->itemtype=='course')
{
$final_id=$key;
break;
}
}
if($final_id=='')
{
throw new moodle_exception('Fehler', '', '', null,"Moodle-Kurs ".$id." ".$shortname." - keine Endnote gefunden");
return false;
}
// Liste mit allen Studierenden des Kurses durchlaufen
$geub = new grade_export_update_buffer();
$gui = new graded_users_iterator($export->course, $export->columns, $export->groupid);
$gui->init();
$kursgrad =array();
while ($userdata = $gui->next_user())
{
$user_item=array();
$user = $userdata->user;
$user_item['vorname']=$user->firstname;
$user_item['nachname']=$user->lastname;
$user_item['idnummer']=$user->idnumber;
$user_item['username']=$user->username;
// Aus den vorhanden Noten wird die Endnote fuer den Kurs herausgesucht
if(isset($userdata->grades[$final_id]))
{
$gradestr = $export->format_grade($userdata->grades[$final_id]);
$user_item['note']=$gradestr;
}
$data[]=$user_item;
}
$gui->close();
$geub->close();
if (count($data)==0)
{
throw new moodle_exception('Fehler', '', '', null,"Moodle-Kurs ".$id." ".$shortname." - keine Kurs-Noten Informationen gefunden ");
return false;
}
return $data;
}
/**
* Returns description of method result value
* @return external_description
*/
public static function get_course_grades_returns()
{
return new external_multiple_structure(
new external_single_structure(
array(
'vorname' => new external_value(PARAM_TEXT, 'vorname'),
'nachname' => new external_value(PARAM_TEXT, 'nachname'),
'idnummer' => new external_value(PARAM_TEXT, 'idnummer'),
'username' => new external_value(PARAM_TEXT, 'username'),
'note' => new external_value(PARAM_TEXT, 'note'),
), 'course'
)
);
}
/**************************************************
* Webservice get_courses_by_shortname
*
* Laedt Kurse anhand der Kurzbezeichnung
**************************************************/
public static function get_courses_by_shortname_parameters()
{
return new external_function_parameters(
array('options' => new external_single_structure(
array('shortnames' => new external_multiple_structure(
@@ -45,7 +179,8 @@ class local_fhcompletews_external extends external_api {
* @param array $options
* @return array
*/
public static function get_courses_by_shortname($options) {
public static function get_courses_by_shortname($options)
{
global $CFG, $DB;
require_once($CFG->dirroot . "/course/lib.php");
@@ -63,13 +198,17 @@ class local_fhcompletews_external extends external_api {
//create return value
$coursesinfo = array();
foreach ($courses as $course) {
foreach ($courses as $course)
{
// now security checks
$context = get_context_instance(CONTEXT_COURSE, $course->id);
try {
try
{
self::validate_context($context);
} catch (Exception $e) {
}
catch (Exception $e)
{
$exceptionparam = new stdClass();
$exceptionparam->message = $e->getMessage();
$exceptionparam->shortname = $course->shortname;
@@ -91,7 +230,8 @@ class local_fhcompletews_external extends external_api {
//some field should be returned only if the user has update permission
$courseadmin = has_capability('moodle/course:update', $context);
if ($courseadmin) {
if ($courseadmin)
{
$courseinfo['categorysortorder'] = $course->sortorder;
$courseinfo['idnumber'] = $course->idnumber;
$courseinfo['showgrades'] = $course->showgrades;
@@ -113,7 +253,8 @@ class local_fhcompletews_external extends external_api {
}
if ($courseadmin or $course->visible
or has_capability('moodle/course:viewhiddencourses', $context)) {
or has_capability('moodle/course:viewhiddencourses', $context))
{
$coursesinfo[] = $courseinfo;
}
}
@@ -125,7 +266,8 @@ class local_fhcompletews_external extends external_api {
* Returns description of method result value
* @return external_description
*/
public static function get_courses_by_shortname_returns() {
public static function get_courses_by_shortname_returns()
{
return new external_multiple_structure(
new external_single_structure(
array(
@@ -186,12 +328,21 @@ class local_fhcompletews_external extends external_api {
)
);
}
/**
* Returns description of get_users() parameters.
*
* @return external_function_parameters
* @since Moodle 2.5
*/
/***********************************************************************
* get_users - Laedt User Anhand des Usernamens
* Backport von Moodle 2.5
* Ab Moodle 2.5 sollte dieses Webservice bereits integriert sein
***********************************************************************/
/**
* Returns description of get_users() parameters.
*
* @return external_function_parameters
* @since Moodle 2.5
*/
public static function get_users_parameters() {
return new external_function_parameters(
array(
@@ -221,12 +372,12 @@ It could very slow or timeout. The function is designed to search some specific
}
/**
* Retrieve matching user.
*
* @param array $criteria the allowed array keys are id/lastname/firstname/idnumber/username/email/auth.
* @return array An array of arrays containing user profiles.
* @since Moodle 2.5
*/
* Retrieve matching user.
*
* @param array $criteria the allowed array keys are id/lastname/firstname/idnumber/username/email/auth.
* @return array An array of arrays containing user profiles.
* @since Moodle 2.5
*/
public static function get_users($criteria = array()) {
global $CFG, $USER, $DB;
@@ -345,11 +496,11 @@ It could very slow or timeout. The function is designed to search some specific
}
/**
* Returns description of get_users result value.
*
* @return external_description
* @since Moodle 2.5
*/
* Returns description of get_users result value.
*
* @return external_description
* @since Moodle 2.5
*/
public static function get_users_returns() {
return new external_single_structure(
array('users' => new external_multiple_structure(
@@ -360,12 +511,12 @@ It could very slow or timeout. The function is designed to search some specific
);
}
/**
* Create user return value description.
*
* @param array $additionalfields some additional field
* @return single_structure_description
*/
/**
* Create user return value description.
*
* @param array $additionalfields some additional field
* @return single_structure_description
*/
public static function user_description($additionalfields = array()) {
$userfields = array(
'id' => new external_value(PARAM_INT, 'ID of the user'),
@@ -423,8 +574,6 @@ It could very slow or timeout. The function is designed to search some specific
}
return new external_single_structure($userfields);
}
}
/**
@@ -480,5 +629,3 @@ function can_view_user_details_cap($user, $course = null) {
}
return $result;
}
+2 -2
View File
@@ -12,7 +12,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
$plugin->version = 2013022105; // The (date) version of this module + 2 extra digital for daily versions
$plugin->version = 2013031302; // The (date) version of this module + 2 extra digital for daily versions
// This version number is displayed into /admin/forms.php
// TODO: if ever this plugin get branched, the old branch number
// will not be updated to the current date but just incremented. We will
@@ -20,5 +20,5 @@ $plugin->version = 2013022105; // The (date) version of this module + 2 extra
// display this version number with userdate (dev friendly)
$plugin->requires = 2010112400; // Requires this Moodle version - at least 2.0
$plugin->cron = 0;
$plugin->release = '1.0 (Build: 2013022105)';
$plugin->release = '1.0 (Build: 2013031302)';
$plugin->maturity = MATURITY_STABLE;
+157
View File
@@ -0,0 +1,157 @@
<?php
/* Copyright (C) 2013 FH 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: Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at> and
*/
/*
* Synchronisiert die Lektoren und Studenten der aktuellen MoodleKurse
* wenn kein aktuelles Studiensemester vorhanden ist, wird NICHT Synchronisiert
*/
require_once('../../config/vilesci.config.inc.php');
require_once('../../include/moodle24_course.class.php');
require_once('../../include/moodle24_user.class.php');
require_once('../../include/studiensemester.class.php');
require_once('../../include/studiengang.class.php');
require_once('../../include/mail.class.php');
$db = new basis_db();
$sync_lektoren_gesamt=0;
$sync_studenten_gesamt=0;
$group_updates=0;
$fehler=0;
$message='';
$message_lkt='';
$lektoren=array();
//nur Synchronisieren wenn ein aktuelles Studiensemester existiert damit keine
//Probleme durch die Vorrueckung entstehen
$stsem = new studiensemester();
if($stsem_kurzbz=$stsem->getakt())
{
//nur die Eintraege des aktuellen Studiensemesters syncen
$qry = "SELECT distinct mdl_course_id FROM lehre.tbl_moodle
WHERE studiensemester_kurzbz=".$db->db_add_param($stsem_kurzbz)."
AND moodle_version='2.4'";
if($result = $db->db_query($qry))
{
while($row = $db->db_fetch_object($result))
{
$course = new moodle24_course();
if($course->load($row->mdl_course_id))
{
$message_lkt='';
//Lektoren
$mdluser = new moodle24_user();
$mitarbeiter = $mdluser->getMitarbeiter($row->mdl_course_id);
if($mdluser->sync_lektoren($row->mdl_course_id))
{
$sync_lektoren_gesamt+=$mdluser->sync_create;
$group_updates+=$mdluser->group_update;
if($mdluser->sync_create>0 || $mdluser->group_update>0)
{
$message.="\nKurs: $course->mdl_fullname ($course->mdl_shortname):\n".$mdluser->log."\n";
$message_lkt.="\nKurs: $course->mdl_fullname ($course->mdl_shortname):\n".$mdluser->log_public."\n";
}
}
else
{
$message.="\nFehler: $mdluser->errormsg";
$fehler++;
}
//Studenten
$mdluser = new moodle24_user();
if($mdluser->sync_studenten($row->mdl_course_id))
{
$sync_studenten_gesamt+=$mdluser->sync_create;
$group_updates+=$mdluser->group_update;
if($mdluser->sync_create>0 || $mdluser->group_update>0)
{
$message.="\nKurs: $course->mdl_fullname ($course->mdl_shortname):\n".$mdluser->log."\n";
$message_lkt.="\nKurs: $course->mdl_fullname ($course->mdl_shortname):\n".$mdluser->log_public."\n";
}
}
else
{
$message.="\nFehler: $mdluser->errormsg";
$fehler++;
}
foreach ($mitarbeiter as $uid)
{
if(!isset($lektoren[$uid]))
$lektoren[$uid]='';
$lektoren[$uid].=$message_lkt;
}
}
else
{
$message.="\nFehler: in der Tabelle lehre.tbl_moodle wird auf den Kurs $row->mdl_course_id verwiesen, dieser existiert jedoch nicht im Moodle!";
$fehler++;
}
}
if($sync_lektoren_gesamt>0 || $sync_studenten_gesamt>0 || $fehler>0 || $group_updates>0)
{
//Mail an die Lektoren
foreach ($lektoren as $uid=>$message_lkt)
{
if($message_lkt!='')
{
$header = "Dies ist eine automatische Mail!\n";
$header.= "Es wurden folgende Aktualisierungen an Ihren Moodle-Kursen durchgeführt:\n\n";
$to = "$uid@".DOMAIN;
//$to = 'oesi@technikum-wien.at';
$mail = new mail($to, 'vilesci@'.DOMAIN,'Moodle - Aktualisierungen',$header.$message_lkt);
if($mail->send())
echo "Mail wurde an $to versandt<br>";
else
echo "Fehler beim Senden des Mails an $to<br>";
}
}
//Mail an Admin
$header = "Dies ist eine automatische Mail!\n";
$header.= "Folgende Syncros mit den MoodleKursen wurde durchgeführt:\n\n";
$header.= "Anzahl der aktualisierten Lektoren: $sync_lektoren_gesamt\n";
$header.= "Anzahl der aktualisierten Studenten: $sync_studenten_gesamt\n";
$header.= "Anzahl der Fehler: $fehler\n";
$to = MAIL_ADMIN;
//$to = 'oesi@technikum-wien.at';
$mail = new mail($to, 'vilesci@'.DOMAIN,'Moodle Syncro',$header.$message);
if($mail->send())
echo "Mail wurde an $to versandt:<br>".nl2br($header.$message);
else
echo "Fehler beim Senden des Mails an $to:<br>".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";
?>
+9 -7
View File
@@ -24,8 +24,8 @@
* wenn kein aktuelles Studiensemester vorhanden ist, wird NICHT Synchronisiert
*/
require_once('../../config/vilesci.config.inc.php');
require_once('../../include/moodle_course.class.php');
require_once('../../include/moodle_user.class.php');
require_once('../../include/moodle19_course.class.php');
require_once('../../include/moodle19_user.class.php');
require_once('../../include/studiensemester.class.php');
require_once('../../include/studiengang.class.php');
require_once('../../include/mail.class.php');
@@ -45,17 +45,19 @@ $stsem = new studiensemester();
if($stsem_kurzbz=$stsem->getakt())
{
//nur die Eintraege des aktuellen Studiensemesters syncen
$qry = "SELECT distinct mdl_course_id FROM lehre.tbl_moodle WHERE studiensemester_kurzbz='".addslashes($stsem_kurzbz)."'";
$qry = "SELECT distinct mdl_course_id FROM lehre.tbl_moodle
WHERE studiensemester_kurzbz=".$db->db_add_param($stsem_kurzbz)."
AND moodle_version='1.9';";
if($result = $db->db_query($qry))
{
while($row = $db->db_fetch_object($result))
{
$course = new moodle_course();
$course = new moodle19_course();
if($course->load($row->mdl_course_id))
{
$message_lkt='';
//Lektoren
$mdluser = new moodle_user();
$mdluser = new moodle19_user();
$mitarbeiter = $mdluser->getMitarbeiter($row->mdl_course_id);
if($mdluser->sync_lektoren($row->mdl_course_id))
@@ -75,7 +77,7 @@ if($stsem_kurzbz=$stsem->getakt())
}
//Studenten
$mdluser = new moodle_user();
$mdluser = new moodle19_user();
if($mdluser->sync_studenten($row->mdl_course_id))
{
$sync_studenten_gesamt+=$mdluser->sync_create;
@@ -154,4 +156,4 @@ if($stsem_kurzbz=$stsem->getakt())
}
else
echo "Kein aktuelles Studiensemester vorhanden->kein Syncro";
?>
?>