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 '
';
- 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 '' . get_string('yourmarkis', 'lamslesson') . ' ' . round($gradebookmark, 2) . ' ' . get_string('outofmark', 'lamslesson') . ' ' . $lamslesson->grade . '.
';
+
+ // Put this into gradebook
+
+ lamslesson_update_grades($lamslesson, $USER->id, $gradebookmark);
+
+ }
+ }
+ echo $OUTPUT->box_end();
+
+}
+
+echo $OUTPUT->footer();
+