Moodle 2.4 Sync Optimierungen

This commit is contained in:
Andreas Österreicher
2013-09-10 14:54:33 +00:00
parent ed93999d5e
commit 8f0ba54186
2 changed files with 100 additions and 68 deletions
+86 -53
View File
@@ -170,35 +170,37 @@ class moodle24_user extends basis_db
{
while($row_ma = $this->db_fetch_object($result_ma))
{
//MoodleID des Users holen bzw ggf neu anlegen
if(!$this->loaduser($row_ma->mitarbeiter_uid))
{
//User anlegen
if(!$this->createUser($row_ma->mitarbeiter_uid))
{
$this->errormsg = "Fehler beim Anlegen des Users $row_ma->mitarbeiter_uid: $this->errormsg";
return false;
}
else
$this->errormsg = '';
}
if($mitarbeiter!='')
$mitarbeiter.=',';
$mitarbeiter.=$this->mdl_user_id;
$user_zugeteilt=false;
foreach($enrolled_users as $user)
{
if($user['id']==$this->mdl_user_id)
if($user['username']==$row_ma->mitarbeiter_uid)
{
$user_zugeteilt=true;
break;
}
}
if(!$user_zugeteilt)
{
//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;
//Mitarbeiter ist noch nicht zugeteilt.
$data = new stdClass();
$data->roleid=3; // 3=Lektor
@@ -231,6 +233,11 @@ class moodle24_user extends basis_db
*/
public function sync_studenten($mdl_course_id)
{
$vorhandenegruppen=array();
$this->gruppenzuordnungen=array();
$groupmembertoadd = array();
$userstoenroll=array();
//Studentengruppen laden die zu diesem Kurs zugeteilt sind
$qry = "SELECT
studiengang_kz, semester, verband, gruppe, gruppe_kurzbz, tbl_moodle.studiensemester_kurzbz, tbl_moodle.gruppen
@@ -258,6 +265,8 @@ class moodle24_user extends basis_db
{
while($row_std = $this->db_fetch_object($result_std))
{
$this->mdl_user_id='';
//Schauen ob fuer diesen Kurs die Gruppen mitgesynct werden sollen
$gruppensync = $this->db_parse_bool($row_std->gruppen);
@@ -302,68 +311,81 @@ class moodle24_user extends basis_db
{
while($row_user = $this->db_fetch_object($result_user))
{
//MoodleID des Users holen bzw ggf neu anlegen
if(!$this->loaduser($row_user->student_uid))
{
//User anlegen
if(!$this->createUser($row_user->student_uid))
{
$this->errormsg = "Fehler beim Anlegen des Users $row_user->student_uid: $this->errormsg";
return false;
}
else
$this->errormsg = '';
}
if($studenten!='')
$studenten.=',';
$studenten.=$this->mdl_user_id;
//Nachschauen ob dieser Student bereits zugeteilt ist
$user_zugeteilt=false;
foreach($enrolled_users as $user)
{
if($user['id']==$this->mdl_user_id)
if($user['username']==$row_user->student_uid)
{
$user_zugeteilt=true;
$this->mdl_user_id=$user['id'];
break;
}
}
if(!$user_zugeteilt)
{
//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;
//Student ist noch nicht zugeteilt.
$data = new stdClass();
$data->roleid=5; // 5=Teilnehmer/Student
$data->userid=$this->mdl_user_id;
$data->courseid=$mdl_course_id;
$client->enrol_manual_enrol_users(array($data));
$userstoenroll[]=$data;
$this->log.="\nStudentIn $row_user->student_uid wurde zum Kurs hinzugefügt";
$this->log_public.="\nStudentIn $row_user->student_uid wurde zum Kurs hinzugefügt";
$this->sync_create++;
}
//Gruppenzuteilung
if($gruppensync)
{
//Schauen ob die Gruppe vorhanden ist
if(!$groupid = $this->getGroup($mdl_course_id, $gruppenbezeichnung))
if(!array_search($gruppenbezeichnung, $vorhandenegruppen))
{
//wenn nicht dann anlegen
if(!$groupid = $this->createGroup($mdl_course_id, $gruppenbezeichnung))
continue;
$this->group_update++;
$this->log.="\nes wurde eine neue Gruppe angelgt: $gruppenbezeichnung";
$this->log_public.="\nes wurde eine neue Gruppe angelgt: $gruppenbezeichnung";
//Schauen ob die Gruppe vorhanden ist
if(!$groupid = $this->getGroup($mdl_course_id, $gruppenbezeichnung))
{
//wenn nicht dann anlegen
if(!$groupid = $this->createGroup($mdl_course_id, $gruppenbezeichnung))
continue;
$this->group_update++;
$this->log.="\nes wurde eine neue Gruppe angelgt: $gruppenbezeichnung";
$this->log_public.="\nes wurde eine neue Gruppe angelgt: $gruppenbezeichnung";
}
$vorhandenegruppen[]=$gruppenbezeichnung;
}
//if($this->mdl_user_id=='')
// $this->loaduser($row_user->student_uid);
//Schauen ob eine Zuteilung zu dieser Gruppe vorhanden ist
if(!$this->getGroupMember($groupid, $this->mdl_user_id))
{
//wenn nicht dann zuteilen
$this->createGroupMember($groupid, $this->mdl_user_id);
$groupmembertoadd[] = array('groupid'=>$groupid,'userid'=>$this->mdl_user_id);
//$this->createGroupMember($groupid, $this->mdl_user_id);
$this->group_update++;
$this->log.="\nStudentIn $row_user->student_uid wurde der Gruppe $gruppenbezeichnung zugeordnet";
$this->log_public.="\nStudentIn $row_user->student_uid wurde der Gruppe $gruppenbezeichnung zugeordnet";
@@ -372,7 +394,12 @@ class moodle24_user extends basis_db
}
}
}
if(count($userstoenroll)>0)
$client->enrol_manual_enrol_users($userstoenroll);
if(count($groupmembertoadd)>0)
$client->core_group_add_group_members($groupmembertoadd);
return true;
}
else
@@ -391,12 +418,18 @@ class moodle24_user extends basis_db
*/
public function getGroupMember($groupid, $userid)
{
$client = new SoapClient($this->serverurl);
$response = $client->core_group_get_group_members(array($groupid));
if(!isset($this->gruppenzuordnungen[$groupid]))
{
$client = new SoapClient($this->serverurl);
$response = $client->core_group_get_group_members(array($groupid));
if(isset($response[0]['userids']))
if(isset($response[0]['userids']))
{
$this->gruppenzuordnungen[$groupid]=$response[0]['userids'];
}
}
foreach($response[0]['userids'] as $id)
foreach($this->gruppenzuordnungen[$groupid] as $id)
{
if($id==$userid)
return true;
+14 -15
View File
@@ -40,7 +40,7 @@ $lektoren=array();
//ini_set('soap.wsdl_cache_enabled',0);
//ini_set('soap.wsdl_cache_ttl',0);
echo "Start um ".date('Y-m-d H:i:s');
echo "-- Start ".date('Y-m-d H:i:s')."--";
//nur Synchronisieren wenn ein aktuelles Studiensemester existiert damit keine
//Probleme durch die Vorrueckung entstehen
@@ -55,26 +55,27 @@ if($stsem_kurzbz=$stsem->getakt())
{
while($row = $db->db_fetch_object($result))
{
$course = new moodle24_course();
echo 'Sync fuer kurs '.$row->mdl_course_id.'<br>';
echo "<br>\nSync fuer Kurs $row->mdl_course_id";
flush();
ob_flush();
$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);
echo "<br>\n-- Mitarbeiter --";
flush();
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";
$message.="\nKurs: $course->mdl_fullname ($course->mdl_shortname) $course->mdl_course_id:\n".$mdluser->log."\n";
$message_lkt.="\nKurs: $course->mdl_fullname ($course->mdl_shortname) $course->mdl_course_id:\n".$mdluser->log_public."\n";
}
}
else
@@ -83,10 +84,9 @@ if($stsem_kurzbz=$stsem->getakt())
$fehler++;
}
echo $mdluser->log;
echo "<br>\n-- Studenten --";
flush();
ob_flush();
echo "<br><br>--studenten--";
//Studenten
$mdluser = new moodle24_user();
if($mdluser->sync_studenten($row->mdl_course_id))
@@ -107,7 +107,6 @@ if($stsem_kurzbz=$stsem->getakt())
echo $mdluser->log;
flush();
ob_flush();
foreach ($mitarbeiter as $uid)
{
if(!isset($lektoren[$uid]))
@@ -121,7 +120,7 @@ if($stsem_kurzbz=$stsem->getakt())
$fehler++;
}
}
/*
if($sync_lektoren_gesamt>0 || $sync_studenten_gesamt>0 || $fehler>0 || $group_updates>0)
{
//Mail an die Lektoren
@@ -161,7 +160,7 @@ if($stsem_kurzbz=$stsem->getakt())
else
{
echo 'Alle Zuteilungen sind auf dem neuesten Stand';
}
}*/
}
else
{
@@ -170,5 +169,5 @@ if($stsem_kurzbz=$stsem->getakt())
}
else
echo "Kein aktuelles Studiensemester vorhanden->kein Syncro";
echo "Ende um ".date('Y-m-d H:i:s');
echo "-- Ende ".date('d.m.Y H:i:s')." --";
?>