diff --git a/include/moodle_course.class.php b/include/moodle_course.class.php index 514762f57..2b20cfce0 100644 --- a/include/moodle_course.class.php +++ b/include/moodle_course.class.php @@ -1142,12 +1142,15 @@ class moodle_course extends basis_db */ public function loadNoten($lehrveranstaltung_id='', $studiensemester_kurzbz='',$student_uid='',$bDetailinfo=false,$bServerinfo=false) { - + // Init $this->lehrveranstaltung_id=trim($lehrveranstaltung_id); $this->studiensemester_kurzbz=trim($studiensemester_kurzbz); + $student_uid=trim($student_uid); + $this->errormsg=''; + $this->result=null; // plausib if (empty($this->lehrveranstaltung_id) @@ -1158,71 +1161,59 @@ class moodle_course extends basis_db $this->errormsg.=(empty($this->studiensemester_kurzbz)?' Semester (Kurzbz.) ':$this->studiensemester_kurzbz); return false; } - -/* - if (empty($this->lehrveranstaltung_id) - || empty($this->studiensemester_kurzbz) - || empty($student_uid) ) - { - $this->errormsg = 'Es fehlt die Eingabe von '; - $this->errormsg.=(empty($this->lehrveranstaltung_id)?' Lehrveranstaltung ':$this->lehrveranstaltung_id); - $this->errormsg.=(empty($this->studiensemester_kurzbz)?' Semester (Kurzbz.) ':$this->studiensemester_kurzbz); - $this->errormsg.=(empty($student_uid)?' Student ':$student_uid); - return false; - } -*/ // -------------------------------------------------------------------- // Ermitteln die Lehreinheiten und Moodle ID // mit dem studiensemester_kurzbz ( bsp WS2008 ) // und der lehrveranstaltung_id aus FAS ( bsp 23802 ) // -------------------------------------------------------------------- + $qry = " - SELECT tbl_lehreinheit.lehreinheit_id, mdl_course_id,studiensemester_kurzbz,tbl_moodle.lehrveranstaltung_id + SELECT tbl_lehreinheit.lehreinheit_id, mdl_course_id,tbl_lehreinheit.studiensemester_kurzbz,tbl_lehreinheit.lehrveranstaltung_id FROM lehre.tbl_moodle JOIN lehre.tbl_lehreinheit USING(lehrveranstaltung_id, studiensemester_kurzbz) WHERE tbl_moodle.lehrveranstaltung_id like '".addslashes($this->lehrveranstaltung_id)."' AND tbl_moodle.studiensemester_kurzbz like '".addslashes($this->studiensemester_kurzbz)."' UNION - SELECT tbl_lehreinheit.lehreinheit_id, mdl_course_id,tbl_lehreinheit.studiensemester_kurzbz,tbl_moodle.lehrveranstaltung_id + SELECT tbl_lehreinheit.lehreinheit_id, mdl_course_id,tbl_lehreinheit.studiensemester_kurzbz,tbl_lehreinheit.lehrveranstaltung_id FROM lehre.tbl_moodle JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) WHERE tbl_lehreinheit.lehrveranstaltung_id like '".addslashes($this->lehrveranstaltung_id)."' AND tbl_lehreinheit.studiensemester_kurzbz like '".addslashes($this->studiensemester_kurzbz)."' ;"; - -#exit($qry); - if(!$result=$this->db_query($qry)) + if(!$result_moodle=$this->db_query($qry)) { - $this->errormsg = 'Fehler beim Lesen der Kurse , '.$this->errormsg; + + $this->errormsg = 'Fehler beim Lesen der Moodle Kurse , '.$this->errormsg; return false; } // init - $lehreinheit_kpl = array(); // Gesamte Information der Lehreinheit und Moodle IDs - $lehreinheit=array(); // Lehreinheiten zum lesen Studenten im Campus (Student und LE im FAS) - //echo $qry; - while($row = $this->db_fetch_object($result)) + $_lehreinheit=array(); // Lehreinheiten zum lesen Studenten im Campus (Student und LE im FAS) + $_lehrveranstaltung = array(); // Gesamte Information der Lehreinheit und Moodle IDs + $_studiensemester_kurzbz=array(); + $_lehreinheit_kpl=array(); + while($row = $this->db_fetch_object($result_moodle)) { + $row->lehreinheit_id=trim($row->lehreinheit_id); - $lehreinheit[$row->lehreinheit_id]=$row->lehreinheit_id; // Fuer Select Campus - $lehreinheit_kpl[$row->lehreinheit_id]=$row; // Fuer GesamtDaten wird Ergaenzt von Campus, - } + $_lehreinheit_kpl[$row->lehreinheit_id]=$row; + + $_lehreinheit[$row->lehreinheit_id]=$row->lehreinheit_id; // Fuer Select Campus - if (count($lehreinheit)<1) // Es gibt keine Lehreinheiten + $row->lehrveranstaltung_id=trim($row->lehrveranstaltung_id); + $_lehrveranstaltung[$row->lehrveranstaltung_id]=$row->lehrveranstaltung_id; // Fuer Select Campus + + $row->studiensemester_kurzbz=trim($row->studiensemester_kurzbz); + $_studiensemester_kurzbz[$row->studiensemester_kurzbz]=$row->studiensemester_kurzbz; // Fuer Select Campus + + } + if (count($_lehreinheit)<1) // Es gibt keine Lehreinheiten { $this->errormsg='Es wurde kein passenden Moodle-Kurs gefunden'; return false; } - - // Fuer die naechste Verarbeitung die Array Sortieren - asort($lehreinheit); - reset($lehreinheit); - - asort($lehreinheit_kpl); - reset($lehreinheit_kpl); - // -------------------------------------------------------------------- // // Suchen Studenten Lehreinheiten zu Moodle - LE @@ -1230,28 +1221,32 @@ class moodle_course extends basis_db // die einen Moodlekurs besuchen der auch eine Lehrveranstaltung ist // Als Ergebnis sind alle Studenten mit gemeinsame Moodle und FAS LV // -------------------------------------------------------------------- - - $qry = "SELECT * FROM campus.vw_student_lehrveranstaltung "; - $qry.= " WHERE lehreinheit_id in (".implode(",",$lehreinheit).") "; + $qry = "SELECT distinct vw_student_lehrveranstaltung.lehreinheit_id,lehrveranstaltung_id,studiensemester_kurzbz,kurzbz,bezeichnung,semester,studiengang_kz + FROM campus.vw_student_lehrveranstaltung + "; + $qry.= " WHERE vw_student_lehrveranstaltung.lehreinheit_id in (".implode(",",$_lehreinheit).") "; + $qry.= " AND lehrveranstaltung_id in (".implode(",",$_lehrveranstaltung).") "; + $qry.= " AND vw_student_lehrveranstaltung.studiensemester_kurzbz in ('".implode("','",$_studiensemester_kurzbz)."') "; if (!empty($student_uid)) - $qry.= " AND uid like '".addslashes($student_uid)."' ; "; + $qry.= " AND uid ='".addslashes($student_uid)."' "; - if(!$result=$this->db_query($qry)) + if(!$result_moodle=$this->db_query($qry)) { $this->errormsg = 'Fehler beim Lesen der Studenten mit Lehreinheit(en) '; return false; } - - if (!$anz=$this->db_num_rows($result)) + + if (!$anz=$this->db_num_rows($result_moodle)) { - $this->errormsg ="keine Moodle Kursdaten gefunden!"; + $this->errormsg ="keine Lehrveranstaltung (Lehreinheit) fuer Moodle Kursdaten gefunden!"; return false; } - - + + if (!function_exists('xu_load_extension')) include_once("xmlrpcutils/utils.php"); - + + // Aktuellen Moodle Server ermitteln. if (defined('MOODLE_PATH')) // Eintrag MOODLE_PATH in Vilesci config.inc.php. Hostname herausfiltern { @@ -1271,14 +1266,19 @@ class moodle_course extends basis_db $method = "NotenCourseByID"; - while($row = $this->db_fetch_object($result)) + $last_moodle_id=false; + while($row = $this->db_fetch_object($result_moodle)) { // Von der Lehreinheit kann der Moodle-Kurs ermittelt werden - $this->moodle_id=trim($lehreinheit_kpl[$row->lehreinheit_id]->mdl_course_id); - $m_user['CourseID']=$this->moodle_id; - - + $this->mdl_course_id=trim($_lehreinheit_kpl[$row->lehreinheit_id]->mdl_course_id); + if ($last_moodle_id==$this->mdl_course_id) + continue; + $last_moodle_id=$this->mdl_course_id; + + $m_user=array(); + $m_user['CourseID']=$this->mdl_course_id; + $mdl_username=trim($student_uid); $m_user['UserId']=$mdl_username; @@ -1316,250 +1316,47 @@ class moodle_course extends basis_db $kursname=(isset($result[7])?$result[7]:''); $shortname=(isset($result[8])?$result[8]:''); $courseArr=(isset($result[9])?$result[9]:array()); - $note=(isset($userArr) && isset($userArr[6])?$userArr[6]:'?'); - #$showHTML.="

Ende xmlrpc


Fehler ::=".$error."
Studtent::= ".$student_uid."
Studiensemester::= ".$this->studiensemester_kurzbz."
Lehrveranstaltung::= ".$this->lehrveranstaltung_id."
Detail : " .($bDetailinfo?'Ja':'Nein')."
Note::= ".$note."
"; - - $this->mdl_fullname=$kursname; - $this->mdl_shortname=$shortname; - $this->note=$note; - - $this->errormsg = (isset($result[1])?$result[1]:""); - - if ($bDetailinfo) - return $result; + + if (!empty($student_uid)) + $note=(isset($userArr) && isset($userArr[6])?$userArr[6]:'?'); else - return $userArr; + $note=0; + + $obj = new moodle_course(); + + $obj->mdl_course_id = $this->mdl_course_id; + $obj->lehreinheit_id=$row->lehreinheit_id; + + $obj->lehrveranstaltung_id = $row->lehrveranstaltung_id; + $obj->studiensemester_kurzbz = $row->studiensemester_kurzbz; + + $obj->lehrveranstaltung_kurzbz=$row->kurzbz; + $obj->lehrveranstaltung_bezeichnung=$row->bezeichnung; + $obj->lehrveranstaltung_semester=$row->semester; + $obj->lehrveranstaltung_studiengang_kz=$row->studiengang_kz; + + $obj->mdl_fullname=$kursname; + $obj->mdl_shortname=$shortname; + $obj->note=$note; + + $obj->errormsg=(isset($result[1])?$result[1]:""); + $obj->note=$note; + + if ($bDetailinfo || empty($student_uid)) + $obj->result=$result; + else + $obj->result=$userArr; + + $this->errormsg.=(!empty($this->errormsg)?", \n":"").$obj->errormsg; + $this->result[]=$obj; } else { - $this->errormsg = (isset($result[1])?$result[1]:"Fehler Kurs Info ".$this->moodle_id); - return false; - } - } -/* - // Lehreinheit und Moodlekurs zusammenfuehren - $lehrveranstaltUSER=array(); // Detailinformation fuer das Noten-Ergebnis - $lehrveranstaltMOODLE=array(); // Je Student alle Moodle IDs - while($row = $this->db_fetch_object()) - { - // Von der Lehreinheit kann der Moodle-Kurs ermittelt werden - $mdl_course_id=trim($lehreinheit_kpl[$row->lehreinheit_id]->mdl_course_id); - $this->moodle_id=$mdl_course_id; - - // Die Moodle Kurs ID zu den Lehreinheitdaten hinzufuegen ( DatenSelect erweitern ) - $row->mdl_course_id=$mdl_course_id; - $mdl_username=trim($row->uid); - // Campusdaten merken fuer Student und MoodleID ( wird fuer merge mit Moodlenoten benotigt ) - $lehrveranstaltUSER[$mdl_username][$mdl_course_id]=$row; - // Alle Moodle IDs zum Studenten sammeln fuer Noten Select - $lehrveranstaltMOODLE[$mdl_username][$mdl_course_id]=$mdl_course_id; - } - - unset($lehreinheit_kpl); // Wird nicht mehr benoetigt (die Daten sind nun in LV,LE ) - - // Fuer die naechste Verarbeitung die Array Sortieren - asort($lehrveranstaltUSER); - reset($lehrveranstaltUSER); - - if (count($lehrveranstaltMOODLE)<1) // Es gibt keine Moodle - LV,LE - return false; - - // -------------------------------------------------------------------- - // Moodle Noten - Uebersetztungstabellen einlesen (min. ein Record ) - // -------------------------------------------------------------------- - $qry = "SELECT * FROM mdl_grade_letters ORDER BY contextid, lowerboundary desc; "; - if(!$result = $this->db_query($this->conn_moodle, $qry)) - { - $this->errormsg = 'Fehler beim Lesen der Noten '; - return false; - } - - $mdl_grade_letters_first=null; - // Init - $mdl_grade_letters=array(); - while($row = $this->db_fetch_object($result)) - { - if ($mdl_grade_letters_first==null) - $mdl_grade_letters_first=$row->contextid; - $mdl_grade_letters[$row->contextid][]=$row; - } - asort($mdl_grade_letters); - reset($mdl_grade_letters); - - if (!isset($mdl_grade_letters[$mdl_grade_letters_first])) - { - $this->errormsg = ' Keinen Notenschluessel gefunden! ( Tabelle: mdl_grade_letters ist leer. )'; - return false; - } - // -------------------------------------------------------------------- - // - // Moodle zu User, und MoodleIDs lesen - // aus der Tabelle GRADE "Noten werden die Benotungen geholt - // - // - // -------------------------------------------------------------------- - $qry = "SELECT mdl_grade_items.courseid, - mdl_user.username,mdl_user.lastname,mdl_user.firstname, - mdl_grade_grades.userid, - mdl_grade_grades.rawgrade, - mdl_grade_grades.rawgrademax, - mdl_grade_grades.rawgrademin, - mdl_grade_grades.finalgrade, - mdl_course.fullname,mdl_course.shortname - FROM mdl_grade_items , mdl_grade_grades ,mdl_user,mdl_course - WHERE mdl_grade_items.itemtype='course' - AND mdl_grade_grades.finalgrade IS NOT NULL - AND mdl_course.id=mdl_grade_items.courseid - AND mdl_grade_grades.itemid=mdl_grade_items.id - AND mdl_grade_grades.userid=mdl_user.id - "; - $usr_qry=""; - while (list( $user_key, $course_ids ) = each($lehrveranstaltMOODLE) ) - { - if(empty($usr_qry)) - $usr_qry.=" AND ( (mdl_user.username like E'".addslashes($user_key)."' AND mdl_grade_items.courseid in (".implode(",",$course_ids).") ) "; - else - $usr_qry.=" OR (mdl_user.username like E'".addslashes($user_key)."' AND mdl_grade_items.courseid in (".implode(",",$course_ids).") ) "; - } - if (!empty($usr_qry)) - $qry.=$usr_qry." )"; - $qry.= "ORDER BY mdl_grade_items.courseid,mdl_user.lastname,mdl_user.firstname;"; // Ende SQL String - - if (isset($lehrveranstaltMOODLE)) // wird nicht mehr benoetigt - unset($lehrveranstaltMOODLE); - - if(!$result = $this->db_query($this->conn_moodle, $qry)) - { - $this->errormsg = 'Fehler beim Lesen der Moodle Benutzer und Noten '; - return false; - } - - // Init - $mdl_course=array(); - $mdl_noten=array(); - $mdl_noten_course=array(); - while($row = $this->db_fetch_object($result)) - { - $mdl_course_id=trim($row->courseid); - $mdl_username=trim($row->username); - $mdl_finalgrade=trim($row->finalgrade); - - if (empty($mdl_finalgrade)) - continue; // Keine Notenfindung - - // Vergleichswerte fuer die Noten aus der Tabelle mdl_grade_letters suchen - $arrTmpDefaultNoten=array(); - $mdl_grade_letters_first=1; // Es muss einen Default geben (Administrator Noten) - if (isset($mdl_grade_letters[$mdl_grade_letters_first])) - $arrTmpDefaultNoten=$mdl_grade_letters[$mdl_grade_letters_first]; - - if($this->getContext(50, $mdl_course_id)) - $mdl_grade_letters_first = $this->mdl_context_id; - - if (isset($mdl_grade_letters[$mdl_grade_letters_first])) - { - $arrTmpDefaultNoten=$mdl_grade_letters[$mdl_grade_letters_first]; - } - if (!is_array($arrTmpDefaultNoten) || count($arrTmpDefaultNoten)<1) - { - $this->errormsg = 'Keinen Notenschluessel gefunden! ( Tabelle: mdl_grade_letters ist leer, oder kein Eintrag zu Kurs '.$mdl_course_id.'. ) '; - return false; - } - $row->NotenermittlungTabIndex=$mdl_grade_letters_first; - $row->NotenermittlungTab=$arrTmpDefaultNoten; - $row->note=0; - - for ($iTmpIndex=0;$iTmpIndexlowerboundary; - $iTmpFaktor=(!empty($row->rawgrademax)?(int)(100/$row->rawgrademax):1); + $this->errormsg.=(!empty($this->errormsg)?", \n":"").(isset($result[1])?$result[1]:"Fehler Kurs Info ".$this->moodle_id); + } - if ($mdl_finalgrade>=( $iTmpVergl / $iTmpFaktor) ) - { - if (is_numeric($arrTmpDefaultNoten[$iTmpIndex]->letter)) - { - $row->note=($iTmpIndex + 1); - if($row->note>5 || $row->note<1) - { - echo "FOOOO"; - $this->errormsg = 'Unbekannter Notenschluessel'; - return false; - } - } - else - { - if ( mb_substr($arrTmpDefaultNoten[$iTmpIndex]->letter,0,1)=="A") - $row->note=1; - elseif (mb_substr($arrTmpDefaultNoten[$iTmpIndex]->letter,0,1)=="B") - $row->note=2; - elseif (mb_substr($arrTmpDefaultNoten[$iTmpIndex]->letter,0,1)=="C") - $row->note=3; - elseif (mb_substr($arrTmpDefaultNoten[$iTmpIndex]->letter,0,1)=="D") - $row->note=4; - elseif (mb_substr($arrTmpDefaultNoten[$iTmpIndex]->letter,0,1)=="E" - || mb_substr($arrTmpDefaultNoten[$iTmpIndex]->letter,0,1)=="F" ) - $row->note=5; - else - { - $this->errormsg = ' Unbekannter Notenschluessel "'.$arrTmpDefaultNoten[$iTmpIndex]->letter.'" ( Erlaubt sind 1 bis 5, oder A bis F ) ! '; - return false; - } - } - break; - } - } - - // Wenn kein Detail werden nur die Noten genommen Moodle Noten - if (!$bDetailinfo) - { - $mdl_noten_course[]=array("courseid"=>$row->courseid,"fullname"=>$row->fullname,"shortname"=>$row->shortname,"userid"=>$row->userid,"username"=>$row->username,"firstname"=>$row->firstname,"lasttname"=>$row->lastname,"note"=>$row->note); - $mdl_noten[]=$row->note; - $mdl_course[]=$row; - } - else // Fuer Detailinformation Moodle Noten und Lehrveranstaltung mischen zu einem Datensatz - { - if ($bDetailinfo && isset($lehrveranstaltUSER[$mdl_username][$mdl_course_id])) - { - $lehrverantstaltung=$lehrveranstaltUSER[$mdl_username][$mdl_course_id]; - while (list( $key, $value ) = each($lehrverantstaltung) ) - $row->$key=$value; - unset($lehrverantstaltung); - $mdl_course[$mdl_course_id][]=$row; - } - elseif($bDetailinfo) // Wenn Detailinformation werden auch die ohne FAS LV genommen - { - $mdl_course['ohneLV'][]=$row; - } - } - - } - - unset($result); - - if (isset($qry)) unset($qry); - if (isset($moodle_id)) unset($moodle_id); - if (isset($lehreinheit_id)) unset($lehreinheit_id); - if (isset($lehrveranstaltUSER)) unset($lehrveranstaltUSER); - - // Fuer Detail wird die gesamte Information geliefert, oder ohne Detail nur die Noten - if (!is_array($mdl_course) || count($mdl_course)<1) - { - $this->errormsg = ' keine Informationen gefunden'. count($mdl_course) ; - return true; - } - - if($bDetailinfo) // Alle Informationen Retour - return $this->note=$mdl_course; - - // Nur die Noten senden wenn 1 Datensatz gefunden wird, - // ansonst weitere Informationen zum zuordnen der Note zu einem Studenten - return (count($mdl_noten)>1?$this->note=$mdl_noten_course:$this->note=$mdl_noten[0]); -*/ - + } + return $this->result; } // Ende moodle Noten - - } // Ende moodle_course class \ No newline at end of file