diff --git a/include/moodle24_user.class.php b/include/moodle24_user.class.php index 043ac4855..1db380e58 100644 --- a/include/moodle24_user.class.php +++ b/include/moodle24_user.class.php @@ -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; diff --git a/system/sync/sync_moodle24_user.php b/system/sync/sync_moodle24_user.php index 657148ecf..03fce0a86 100644 --- a/system/sync/sync_moodle24_user.php +++ b/system/sync/sync_moodle24_user.php @@ -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.'
'; + echo "
\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 "
\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 "
\n-- Studenten --"; flush(); - ob_flush(); - - echo "

--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')." --"; ?>