Index: moodle/mod/lamslesson/db/install.xml =================================================================== diff -u -r20bde60c3dbe2e313af866c46adb96d048da0e83 -rac9cc783d562d4fd7112b2dff43b34b64dfdedbc --- moodle/mod/lamslesson/db/install.xml (.../install.xml) (revision 20bde60c3dbe2e313af866c46adb96d048da0e83) +++ moodle/mod/lamslesson/db/install.xml (.../install.xml) (revision ac9cc783d562d4fd7112b2dff43b34b64dfdedbc) @@ -10,8 +10,9 @@ - - + + + Index: moodle/mod/lamslesson/lang/en/lamslesson.php =================================================================== diff -u -r3d9bff42a178790991088c19a24651e0dc5ed9ee -rac9cc783d562d4fd7112b2dff43b34b64dfdedbc --- moodle/mod/lamslesson/lang/en/lamslesson.php (.../lamslesson.php) (revision 3d9bff42a178790991088c19a24651e0dc5ed9ee) +++ moodle/mod/lamslesson/lang/en/lamslesson.php (.../lamslesson.php) (revision ac9cc783d562d4fd7112b2dff43b34b64dfdedbc) @@ -43,6 +43,11 @@ $string['availablesequences'] = 'Sequences'; $string['openauthor'] = 'Author new LAMS lessons'; +// Capabilities +$string['lamslesson:manage'] = 'Manage lessons'; +$string['lamslesson:participate'] = 'Participate in lessons'; + + // Admin interface $string['adminheader'] = 'LAMS Server Configuration'; $string['admindescription'] = 'Configure your LAMS server settings. Make sure that the values you enter here correspond with the once you already entered in your LAMS server. Otherwise the integration might not work.'; @@ -97,4 +102,6 @@ $string['lessonincompleted'] = 'Lesson is not yet completed'; $string['lessoncompleted'] = 'You have completed this lesson'; $string['activities'] = 'activities'; -$string['ymmv'] = 'Total activities depend on your learning path.'; \ No newline at end of file +$string['ymmv'] = 'Total activities depend on your learning path.'; +$string['yourmarkis'] = 'Your final mark/grade is:'; +$string['outofmark'] = 'out of'; Index: moodle/mod/lamslesson/lib.php =================================================================== diff -u -r3d9bff42a178790991088c19a24651e0dc5ed9ee -rac9cc783d562d4fd7112b2dff43b34b64dfdedbc --- moodle/mod/lamslesson/lib.php (.../lib.php) (revision 3d9bff42a178790991088c19a24651e0dc5ed9ee) +++ moodle/mod/lamslesson/lib.php (.../lib.php) (revision ac9cc783d562d4fd7112b2dff43b34b64dfdedbc) @@ -60,6 +60,7 @@ define('LAMSLESSON_LD_SERVICE', '/services/xml/LearningDesignRepository'); define('LAMSLESSON_LESSON_MANAGER', '/services/xml/LessonManager'); define('LAMSLESSON_POPUP_OPTIONS', 'location=0,toolbar=0,menubar=0,statusbar=0,width=996,height=700,resizable'); +define('LAMSLESSON_OUTPUT_METHOD', 'toolOutputsUser'); /** * If you for some reason need to use global variables instead of constants, do not forget to make them @@ -86,7 +87,11 @@ # You may have to add extra stuff in here # - return $DB->insert_record('lamslesson', $lamslesson); + $lamslesson->id = $DB->insert_record('lamslesson', $lamslesson); + + lamslesson_grade_item_update($lamslesson); + + return $lamslesson->id; } /** @@ -543,6 +548,39 @@ return file_get_contents($request); } +function lamslesson_get_outputs($username, $lang, $country, $lessonid, $courseid, $method,$foruser) { + global $CFG; + + $datetime = date('F d,Y g:i a'); + $plaintext = trim($datetime) + .trim($username) + .trim($CFG->lamslesson_serverid) + .trim($CFG->lamslesson_serverkey); + $hash = sha1(strtolower($plaintext)); + $request = $CFG->lamslesson_serverurl. LAMSLESSON_LESSON_MANAGER + .'?serverId='.$CFG->lamslesson_serverid + .'&courseId='.$courseid + .'&username='.$username + .'&datetime='.urlencode(strtolower($datetime)) + .'&hashValue='.$hash + .'&lang='.$lang + .'&country='.$country + .'&method='.$method + .'&lsId='.$lessonid + .'&outputsUser='.$foruser; + + // GET call to LAMS + + $xml = file_get_contents($request); + + $xml_array = xmlize($xml); + + return $xml_array; + + +} + + /** * Return URL to join a LAMS lesson as a learner or staff depending on method. * URL redirects LAMS to learner or monitor interface depending on method. @@ -638,10 +676,6 @@ $response = $xml_array['LessonProgress']['#']; $learnerProgress = $response['LearnerProgress']['0']; - // print_r($learnerProgress['@']['activitiesCompleted']); - // die(); - - return $learnerProgress['@']; } @@ -687,5 +721,101 @@ } +/** + * @param string $feature FEATURE_xx constant for requested feature + * @return mixed True if module supports feature, null if doesn't know + */ +function lamslesson_supports($feature) { + switch($feature) { + case FEATURE_GROUPS: return true; + case FEATURE_GROUPINGS: return true; + case FEATURE_GROUPMEMBERSONLY: return true; + case FEATURE_MOD_INTRO: return true; + case FEATURE_COMPLETION_TRACKS_VIEWS: return true; + case FEATURE_COMPLETION_HAS_RULES: return false; + case FEATURE_GRADE_HAS_GRADE: return true; + case FEATURE_GRADE_OUTCOMES: return true; + case FEATURE_RATE: return false; + case FEATURE_BACKUP_MOODLE2: return false; + default: return null; + } +} + +/** + * Create/update grade item for given lamslesson + * + * @global object + * @uses GRADE_TYPE_NONE + * @uses GRADE_TYPE_VALUE + * @uses GRADE_TYPE_SCALE + * @param object $lamslesson object with extra cmidnumber + * @param mixed $grades optional array/object of grade(s); 'reset' means reset grades in gradebook + * @return int 0 if ok + */ +function lamslesson_grade_item_update($lamslesson, $grades=NULL) { + global $CFG; + if (!function_exists('grade_update')) { //workaround for buggy PHP versions + require_once($CFG->libdir.'/gradelib.php'); + } + + $params = array('itemname'=>$lamslesson->name); + + if ($lamslesson->grade > 0 ) { + $params['gradetype'] = GRADE_TYPE_VALUE; + $params['grademax'] = $lamslesson->grade; + $params['grademin'] = 0; + } else { + $params['gradetype'] = GRADE_TYPE_NONE; + } + + if ($grades === 'reset') { + $params['reset'] = true; + $grades = NULL; + } + + + return grade_update('mod/lamslesson', $lamslesson->course, 'mod', 'lamslesson', $lamslesson->id, 0, $grades, $params); +} + +/** + * Delete grade item for given lamslesson + * + * @global object + * @param object $lamslesson object + * @return object grade_item + */ +function lamslesson_grade_item_delete($lamslesson) { + global $CFG; + require_once($CFG->libdir.'/gradelib.php'); + + return grade_update('mod/lamslesson', $lamslesson->course, 'mod', 'lamslesson', $lamslesson->id, 0, NULL, array('deleted'=>1)); +} + +/** + * Update grades in central gradebook + * + * @global stdclass + * @global object + * @param object $lamslesson + * @param int $userid specific user only, 0 means all + */ +function lamslesson_update_grades($lamslesson, $userid, $usermark) { + global $CFG, $DB; + require_once($CFG->libdir.'/gradelib.php'); + + if ($lamslesson->grade == 0) { + lamslesson_grade_item_update($lamslesson); + + } else if ($userid) { + $grade = new stdClass(); + $grade->userid = $userid; + $grade->rawgrade = $usermark; + lamslesson_grade_item_update($lamslesson, $grade); + + } else { + lamslesson_grade_item_update($lamslesson); + } +} + Index: moodle/mod/lamslesson/mod_form.php =================================================================== diff -u -r3d9bff42a178790991088c19a24651e0dc5ed9ee -rac9cc783d562d4fd7112b2dff43b34b64dfdedbc --- moodle/mod/lamslesson/mod_form.php (.../mod_form.php) (revision 3d9bff42a178790991088c19a24651e0dc5ed9ee) +++ moodle/mod/lamslesson/mod_form.php (.../mod_form.php) (revision ac9cc783d562d4fd7112b2dff43b34b64dfdedbc) @@ -212,6 +212,8 @@ $mform->addElement('static', 'sequencemessage', '', $html); //------------------------------------------------------------------------------- + $this->standard_grading_coursemodule_elements(); + // add standard elements, common to all modules $this->standard_coursemodule_elements(); //------------------------------------------------------------------------------- Index: moodle/mod/lamslesson/view.php =================================================================== diff -u -rbdc9050840d232c543a6653f35e2e98390b5a0b7 -rac9cc783d562d4fd7112b2dff43b34b64dfdedbc --- moodle/mod/lamslesson/view.php (.../view.php) (revision bdc9050840d232c543a6653f35e2e98390b5a0b7) +++ moodle/mod/lamslesson/view.php (.../view.php) (revision ac9cc783d562d4fd7112b2dff43b34b64dfdedbc) @@ -141,20 +141,66 @@ if ($moodle_completion->completionstate == 0){ lamslesson_set_as_completed($cm,$course,$lamslesson); } + echo '
' . get_string('lessoncompleted','lamslesson') . ' ' . $OUTPUT->pix_icon('i/tick_green_big', get_string('lessoncompleted','lamslesson')) . '
'; - echo $OUTPUT->box_end(); -} -/* -print($progress['activitiesCompleted']); -print($progress['activityCount']); -print($progress['attemptedActivities']); -print($progress['lessonComplete']); -*/ + // Does this lesson has to record a score in Moodle? + if ($lamslesson->grade != 0) { + // Now let's get the score from LAMS and add it into gradebook + // Getting result from LAMS -echo $OUTPUT->footer(); + $results = lamslesson_get_outputs($USER->username,'en','AU',$lamslesson->lesson_id,$cm->course,LAMSLESSON_OUTPUT_METHOD,$USER->username); -/// Mark as viewed -// lamslesson_set_as_completed($cm, $course, $lamslesson); + // Get the outputs from the activities + $learneroutputs = $results['ToolOutputs']['#']['LearnerOutput']; + $activityoutputs = $learneroutputs['0']['#']['Activity']; + + $maxresult = 0; + $userresult = 0; + + // Calculate max and user results (if they exist) + + foreach ($activityoutputs as $k => $v){ + // If activities don't have or produce any output then we just ignore them + if (!empty($v['#'])) { + foreach ($v['#']['ToolOutput'] as $k2 => $v2) { + $activityoutputname = $v2['@']['name']; + // The only numeric outputs we get from LAMS are for the MCQ and Assessment activities + // learner.total.score = Assessment + // learner.mark = MCQ + if ($activityoutputname == 'learner.mark' || $activityoutputname == 'learner.total.score') { + $actname = $v2['@']['name']; + $actmaxresult = $v2['@']['marksPossible']; + $actuserresult = $v2['@']['output']; + $userresult += $actuserresult; + $maxresult += $actmaxresult; + + } + } + } + + } + + // If there's outputs from LAMS, then we process them and add them to the gradebook + if (!$maxresult == 0) { + + //print("Max total result: " . $maxresult . "
User total result: " . $userresult . " " . $lamslesson->grade); + + // Now calculate the percentage and then multiply it by the lamslesson grade. + $gradebookmark = ($userresult / $maxresult) * $lamslesson->grade; + echo ''; + + // Put this into gradebook + + lamslesson_update_grades($lamslesson, $USER->id, $gradebookmark); + + } + } + echo $OUTPUT->box_end(); + +} + +echo $OUTPUT->footer(); +