MDL-16651 - add in delete attempt capability - thanks Dan/Tim. backport 1.9.

This commit is contained in:
piers
2008-11-29 17:56:43 +00:00
parent cecd63c9f2
commit d45250b531
5 changed files with 219 additions and 114 deletions
+1
View File
@@ -133,6 +133,7 @@ $string['scorm:skipview'] = 'Skip overview';
$string['scorm:viewreport'] = 'View reports';
$string['scorm:viewscores'] = 'View scores';
$string['scormcourse'] = 'Learning Course';
$string['scormresponsedeleted'] = 'Deleted user attempts';
$string['scrollbars'] = 'Allow the window to be scrolled';
$string['sided'] = 'On the left side';
$string['skipview'] = 'Student skip content structure page';
+11 -2
View File
@@ -75,8 +75,17 @@ $mod_scorm_capabilities = array(
'editingteacher' => CAP_ALLOW,
'admin' => CAP_ALLOW
)
)
),
'mod/scorm:deleteresponses' => array(
'captype' => 'read',
'contextlevel' => CONTEXT_MODULE,
'legacy' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'admin' => CAP_ALLOW
)
)
);
?>
?>
+118 -71
View File
@@ -22,18 +22,18 @@ define('LASTATTEMPT', '3');
/**
* Returns an array of the popup options for SCORM and each options default value
*
*
* @return array an array of popup options as the key and their defaults as the value
*/
function scorm_get_popup_options_array(){
global $CFG;
return array('resizable'=> isset($CFG->scorm_resizable) ? $CFG->scorm_resizable : 0,
'scrollbars'=> isset($CFG->scorm_scrollbars) ? $CFG->scorm_scrollbars : 0,
'directories'=> isset($CFG->scorm_directories) ? $CFG->scorm_directories : 0,
return array('resizable'=> isset($CFG->scorm_resizable) ? $CFG->scorm_resizable : 0,
'scrollbars'=> isset($CFG->scorm_scrollbars) ? $CFG->scorm_scrollbars : 0,
'directories'=> isset($CFG->scorm_directories) ? $CFG->scorm_directories : 0,
'location'=> isset($CFG->scorm_location) ? $CFG->scorm_location : 0,
'menubar'=> isset($CFG->scorm_menubar) ? $CFG->scorm_menubar : 0,
'toolbar'=> isset($CFG->scorm_toolbar) ? $CFG->scorm_toolbar : 0,
'status'=> isset($CFG->scorm_status) ? $CFG->scorm_status : 0);
'menubar'=> isset($CFG->scorm_menubar) ? $CFG->scorm_menubar : 0,
'toolbar'=> isset($CFG->scorm_toolbar) ? $CFG->scorm_toolbar : 0,
'status'=> isset($CFG->scorm_status) ? $CFG->scorm_status : 0);
}
$stdoptions = '';
@@ -59,19 +59,19 @@ if (!isset($CFG->scorm_windowsettings)) {
/// Local Library of functions for module scorm
/**
* Returns an array of the array of what grade options
*
*
* @return array an array of what grade options
*/
function scorm_get_grade_method_array(){
return array (GRADESCOES => get_string('gradescoes', 'scorm'),
GRADEHIGHEST => get_string('gradehighest', 'scorm'),
GRADEAVERAGE => get_string('gradeaverage', 'scorm'),
GRADESUM => get_string('gradesum', 'scorm'));
GRADESUM => get_string('gradesum', 'scorm'));
}
/**
* Returns an array of the array of what grade options
*
*
* @return array an array of what grade options
*/
function scorm_get_what_grade_array(){
@@ -83,7 +83,7 @@ function scorm_get_what_grade_array(){
/**
* Returns an array of the array of skip view options
*
*
* @return array an array of skip view options
*/
function scorm_get_skip_view_array(){
@@ -94,7 +94,7 @@ function scorm_get_skip_view_array(){
/**
* Returns an array of the array of hide table of contents options
*
*
* @return array an array of hide table of contents options
*/
function scorm_get_hidetoc_array(){
@@ -105,7 +105,7 @@ function scorm_get_hidetoc_array(){
/**
* Returns an array of the array of update frequency options
*
*
* @return array an array of update frequency options
*/
function scorm_get_updatefreq_array(){
@@ -116,7 +116,7 @@ function scorm_get_updatefreq_array(){
/**
* Returns an array of the array of popup display options
*
*
* @return array an array of popup display options
*/
function scorm_get_popup_display_array(){
@@ -126,17 +126,17 @@ function scorm_get_popup_display_array(){
/**
* Returns an array of the array of attempt options
*
*
* @return array an array of attempt options
*/
function scorm_get_attempts_array(){
$attempts = array(0 => get_string('nolimit','scorm'),
1 => get_string('attempt1','scorm'));
for ($i=2; $i<=6; $i++) {
$attempts[$i] = get_string('attemptsx','scorm', $i);
}
return $attempts;
}
@@ -211,7 +211,7 @@ function scorm_tempdir($strPath)
}
$randstring .= $char;
$lchar = $char;
}
}
$datadir='/'.$randstring;
} while (file_exists($strPath.$datadir));
mkdir($strPath.$datadir, $CFG->directorypermissions);
@@ -279,7 +279,7 @@ function scorm_get_sco($id,$what=SCO_ALL) {
$sco->{$scodata->name} = $scodata->value;
}
} else if (($what != SCO_ONLY) && (!($scodatas = get_records('scorm_scoes_data','scoid',$id)))) {
$sco->parameters = '';
$sco->parameters = '';
}
return $sco;
} else {
@@ -332,15 +332,15 @@ function scorm_insert_track($userid,$scormid,$scoid,$attempt,$element,$value) {
$track->timemodified = time();
$id = insert_record('scorm_scoes_track',$track);
}
if (strstr($element, '.score.raw') ||
if (strstr($element, '.score.raw') ||
(($element == 'cmi.core.lesson_status' || $element == 'cmi.completion_status') && ($track->value == 'completed' || $track->value == 'passed'))) {
$scorm = get_record('scorm', 'id', $scormid);
$grademethod = $scorm->grademethod % 10;
include_once('lib.php');
scorm_update_grades($scorm, $userid);
}
return $id;
}
@@ -358,7 +358,7 @@ function scorm_get_tracks($scoid,$userid,$attempt='') {
$attemptsql = ' AND attempt=' . $attempt;
if ($tracks = get_records_select('scorm_scoes_track',"userid=$userid AND scoid=$scoid".$attemptsql,'element ASC')) {
$usertrack->userid = $userid;
$usertrack->scoid = $scoid;
$usertrack->scoid = $scoid;
// Defined in order to unify scorm1.2 and scorm2004
$usertrack->score_raw = '';
$usertrack->status = '';
@@ -373,27 +373,27 @@ function scorm_get_tracks($scoid,$userid,$attempt='') {
case 'cmi.completion_status':
if ($track->value == 'not attempted') {
$track->value = 'notattempted';
}
}
$usertrack->status = $track->value;
break;
break;
case 'cmi.core.score.raw':
case 'cmi.score.raw':
$usertrack->score_raw = $track->value;
break;
break;
case 'cmi.core.session_time':
case 'cmi.session_time':
$usertrack->session_time = $track->value;
break;
break;
case 'cmi.core.total_time':
case 'cmi.total_time':
$usertrack->total_time = $track->value;
break;
}
break;
}
if (isset($track->timemodified) && ($track->timemodified > $usertrack->timemodified)) {
$usertrack->timemodified = $track->timemodified;
}
}
}
if (is_array($usertrack)) {
if (is_array($usertrack)) {
ksort($usertrack);
}
return $usertrack;
@@ -410,13 +410,13 @@ function scorm_get_user_data($userid) {
}
function scorm_grade_user_attempt($scorm, $userid, $attempt=1, $time=false) {
$attemptscore = NULL;
$attemptscore = NULL;
$attemptscore->scoes = 0;
$attemptscore->values = 0;
$attemptscore->max = 0;
$attemptscore->sum = 0;
$attemptscore->lastmodify = 0;
if (!$scoes = get_records('scorm_scoes','scorm',$scorm->id)) {
return NULL;
}
@@ -426,11 +426,11 @@ function scorm_grade_user_attempt($scorm, $userid, $attempt=1, $time=false) {
// and 1s are grademethod
$grademethod = $scorm->grademethod % 10;
foreach ($scoes as $sco) {
foreach ($scoes as $sco) {
if ($userdata = scorm_get_tracks($sco->id, $userid, $attempt)) {
if (($userdata->status == 'completed') || ($userdata->status == 'passed')) {
$attemptscore->scoes++;
}
}
if (!empty($userdata->score_raw)) {
$attemptscore->values++;
$attemptscore->sum += $userdata->score_raw;
@@ -440,23 +440,23 @@ function scorm_grade_user_attempt($scorm, $userid, $attempt=1, $time=false) {
} else {
$attemptscore->lastmodify = 0;
}
}
}
}
}
}
switch ($grademethod) {
case GRADEHIGHEST:
$score = $attemptscore->max;
break;
break;
case GRADEAVERAGE:
if ($attemptscore->values > 0) {
$score = $attemptscore->sum/$attemptscore->values;
} else {
$score = 0;
}
break;
}
break;
case GRADESUM:
$score = $attemptscore->sum;
break;
break;
case GRADESCOES:
$score = $attemptscore->scoes;
break;
@@ -480,17 +480,17 @@ function scorm_grade_user($scorm, $userid, $time=false) {
// and so whatgrade and grademethod are combined in grademethod 10s are whatgrade
// and 1s are grademethod
$whatgrade = intval($scorm->grademethod / 10);
// insure we dont grade user beyond $scorm->maxattempt settings
$lastattempt = scorm_get_last_attempt($scorm->id, $userid);
if($scorm->maxattempt != 0 && $lastattempt >= $scorm->maxattempt){
$lastattempt = $scorm->maxattempt;
}
switch ($whatgrade) {
case FIRSTATTEMPT:
return scorm_grade_user_attempt($scorm, $userid, 1, $time);
break;
break;
case LASTATTEMPT:
return scorm_grade_user_attempt($scorm, $userid, scorm_get_last_attempt($scorm->id, $userid), $time);
break;
@@ -575,7 +575,7 @@ function scorm_course_format_display($user,$course) {
echo '<div class="mod-scorm">';
if ($scorms = get_all_instances_in_course('scorm', $course)) {
// The module SCORM activity with the least id is the course
// The module SCORM activity with the least id is the course
$scorm = current($scorms);
if (! $cm = get_coursemodule_from_instance('scorm', $scorm->id, $course->id)) {
error('Course Module ID was incorrect');
@@ -601,7 +601,7 @@ function scorm_course_format_display($user,$course) {
$headertext .= '<td class="reportlink">'.get_string('noreports','scorm');
}
$colspan = ' colspan="2"';
}
}
$headertext .= '</td></tr><tr><td'.$colspan.'>'.format_text(get_string('summary').':<br />'.$scorm->summary).'</td></tr></table>';
print_simple_box($headertext,'','100%');
scorm_view_display($user, $scorm, 'view.php?id='.$course->id, $cm, '100%');
@@ -707,9 +707,9 @@ function scorm_view_display ($user, $scorm, $action, $cm, $boxwidth='') {
}
function scorm_simple_play($scorm,$user) {
$result = false;
$scoes = get_records_select('scorm_scoes','scorm='.$scorm->id.' AND launch<>\''.sql_empty().'\'');
if ($scoes && (count($scoes) == 1)) {
if ($scorm->skipview >= 1) {
$sco = current($scoes);
@@ -835,7 +835,7 @@ function scorm_validate($data) {
}
$reference = $data['reference']; // Package/manifest path/location
$scormid = $data['instance']; // scorm ID
$scormid = $data['instance']; // scorm ID
$scorm = new stdClass();
if (!empty($scormid)) {
if (!$scorm = get_record('scorm','id',$scormid)) {
@@ -899,7 +899,7 @@ function scorm_validate($data) {
$validation->result = false;
}
break;
default:
default:
$validation->errors['reference'] = get_string('badpackage','scorm');
$validation->result = false;
break;
@@ -925,7 +925,7 @@ function scorm_check_package($data) {
$courseid = $data->course; // Course Module ID
$reference = $data->reference; // Package path
$scormid = $data->instance; // scorm ID
$scormid = $data->instance; // scorm ID
$validation = new stdClass();
@@ -947,12 +947,12 @@ function scorm_check_package($data) {
$reference = $CFG->dataroot.'/'.$courseid.'/'.$reference;
}
if (!empty($scormid)) {
if (!empty($scormid)) {
//
// SCORM Update
//
if ((!empty($validation)) && (is_file($reference) || $externalpackage)){
if (!$externalpackage) {
$mdcheck = md5_file($reference);
} else if ($externalpackage){
@@ -964,7 +964,7 @@ function scorm_check_package($data) {
}
}
}
if ($scorm = get_record('scorm','id',$scormid)) {
if ($scorm->reference[0] == '#') {
if (isset($CFG->repositoryactivate) && $CFG->repositoryactivate) {
@@ -1050,7 +1050,7 @@ function scorm_check_package($data) {
$validation = null;
}
break;
default:
default:
$validation = null;
break;
}
@@ -1076,23 +1076,23 @@ function scorm_check_package($data) {
function scorm_get_count_users($scormid, $groupingid=null) {
global $CFG;
if (!empty($CFG->enablegroupings) && !empty($groupingid)) {
$sql = "SELECT COUNT(DISTINCT st.userid)
FROM {$CFG->prefix}scorm_scoes_track st
INNER JOIN {$CFG->prefix}groups_members gm ON st.userid = gm.userid
INNER JOIN {$CFG->prefix}groupings_groups gg ON gm.groupid = gg.groupid
INNER JOIN {$CFG->prefix}groupings_groups gg ON gm.groupid = gg.groupid
WHERE st.scormid = $scormid AND gg.groupingid = $groupingid
";
} else {
$sql = "SELECT COUNT(DISTINCT st.userid)
FROM {$CFG->prefix}scorm_scoes_track st
FROM {$CFG->prefix}scorm_scoes_track st
WHERE st.scormid = $scormid
";
}
return(count_records_sql($sql));
}
@@ -1104,7 +1104,7 @@ function scorm_get_count_users($scormid, $groupingid=null) {
* @param string $element_name Name of array element to get values for
* @param array $children list of sub elements of this array element that also need instantiating
* @return None
*/
*/
function scorm_reconstitute_array_element($sversion, $userdata, $element_name, $children) {
// reconstitute comments_from_learner and comments_from_lms
$current = '';
@@ -1112,7 +1112,7 @@ function scorm_reconstitute_array_element($sversion, $userdata, $element_name, $
$current_sub = '';
$count = 0;
$count_sub = 0;
// filter out the ones we want
$element_list = array();
foreach($userdata as $element => $value){
@@ -1120,10 +1120,10 @@ function scorm_reconstitute_array_element($sversion, $userdata, $element_name, $
$element_list[$element] = $value;
}
}
// sort elements in .n array order
uksort($element_list, "scorm_element_cmp");
// generate JavaScript
foreach($element_list as $element => $value){
if ($sversion == 'scorm_13') {
@@ -1137,7 +1137,7 @@ function scorm_reconstitute_array_element($sversion, $userdata, $element_name, $
if ($count_sub > 0) {
echo ' '.$element_name.'_'.$current.'.'.$current_subelement.'._count = '.$count_sub.";\n";
}
$current = $matches[1];
$current = $matches[1];
$count++;
$current_subelement = '';
$current_sub = '';
@@ -1151,7 +1151,7 @@ function scorm_reconstitute_array_element($sversion, $userdata, $element_name, $
echo ' '.$subelement.".".$child."._children = ".$child."_children;\n";
}
}
// now - flesh out the second level elements if there are any
if ($sversion == 'scorm_13') {
$element = preg_replace('/(.*?\.N\d+\..*?)\.(\d+)\./', "\$1.N\$2.", $element);
@@ -1160,7 +1160,7 @@ function scorm_reconstitute_array_element($sversion, $userdata, $element_name, $
$element = preg_replace('/(.*?\_\d+\..*?)\.(\d+)\./', "\$1_\$2.", $element);
preg_match('/.*?\_\d+\.(.*?)\_(\d+)\./', $element, $matches);
}
// check the sub element type
if (count($matches) > 0 && $current_subelement != $matches[1]) {
if ($count_sub > 0) {
@@ -1173,16 +1173,16 @@ function scorm_reconstitute_array_element($sversion, $userdata, $element_name, $
$subelement = substr($element,0,$end);
echo ' '.$subelement." = new Object();\n";
}
// now check the subelement subscript
if (count($matches) > 0 && $current_sub != $matches[2]) {
$current_sub = $matches[2];
$current_sub = $matches[2];
$count_sub++;
$end = strrpos($element,$matches[2])+strlen($matches[2]);
$subelement = substr($element,0,$end);
echo ' '.$subelement." = new Object();\n";
}
echo ' '.$element.' = \''.$value."';\n";
}
if ($count_sub > 0) {
@@ -1199,7 +1199,7 @@ function scorm_reconstitute_array_element($sversion, $userdata, $element_name, $
* @param string $a left array element
* @param string $b right array element
* @return comparator - 0,1,-1
*/
*/
function scorm_element_cmp($a, $b) {
preg_match('/.*?(\d+)\./', $a, $matches);
$left = intval($matches[1]);
@@ -1235,4 +1235,51 @@ function scorm_element_cmp($a, $b) {
}
}
/**
* Delete Scorm tracks for selected users
*
* @param array $attemptids list of attempts that need to be deleted
* @param int $scormid ID of Scorm
*
* return bool true deleted all responses, false failed deleting an attempt - stopped here
*/
function scorm_delete_responses($attemptids, $scormid) {
if(!is_array($attemptids) || empty($attemptids)) {
return false;
}
foreach($attemptids as $num => $attemptid) {
if(empty($attemptid)) {
unset($attemptids[$num]);
}
}
foreach($attemptids as $attempt) {
$keys = explode(':', $attempt);
if (count($keys) == 2) {
$userid = clean_param($keys[0], PARAM_INT);
$attemptid = clean_param($keys[1], PARAM_INT);
if (!$userid || !$attemptid || !scorm_delete_attempt($userid, $scormid, $attemptid)) {
return false;
}
} else {
return false;
}
}
return true;
}
/**
* Delete Scorm tracks for selected users
*
* @param int $userid ID of User
* @param int $scormid ID of Scorm
* @param int $attemptid user attempt that need to be deleted
*
* return bool true suceeded
*/
function scorm_delete_attempt($userid, $scormid, $attemptid) {
delete_records('scorm_scoes_track', 'userid', $userid, 'scormid', $scormid, 'attempt', $attemptid);
return true;
}
?>
+87 -39
View File
@@ -10,6 +10,8 @@
$b = optional_param('b', '', PARAM_INT); // SCO ID
$user = optional_param('user', '', PARAM_INT); // User ID
$attempt = optional_param('attempt', '1', PARAM_INT); // attempt number
$action = optional_param('action', '', PARAM_ALPHA);
$attemptids = optional_param('attemptid', array(), PARAM_RAW); //get array of responses to delete.
if (!empty($id)) {
if (! $cm = get_coursemodule_from_id('scorm', $id)) {
@@ -43,9 +45,9 @@
require_login($course->id, false, $cm);
if (!has_capability('mod/scorm:viewreport', get_context_instance(CONTEXT_MODULE,$cm->id))) {
error('You are not allowed to use this script');
}
$contextmodule = get_context_instance(CONTEXT_MODULE,$cm->id);
require_capability('mod/scorm:viewreport', $contextmodule);
add_to_log($course->id, 'scorm', 'report', 'report.php?id='.$cm->id, $scorm->id, $cm->id);
@@ -63,65 +65,84 @@
$strreport = get_string('report', 'scorm');
$strattempt = get_string('attempt', 'scorm');
$strname = get_string('name');
if (empty($b)) {
if (empty($a)) {
$navigation = build_navigation('', $cm);
print_header("$course->shortname: ".format_string($scorm->name), $course->fullname,$navigation,
'', '', true);
} else {
$navlinks = array();
$navlinks[] = array('name' => $strreport, 'link' => "report.php?id=$cm->id", 'type' => 'title');
$navlinks[] = array('name' => $strreport, 'link' => "report.php?id=$cm->id", 'type' => 'title');
$navlinks[] = array('name' => "$strattempt $attempt - ".fullname($userdata), 'link' => '', 'type' => 'title');
$navigation = build_navigation($navlinks, $cm);
print_header("$course->shortname: ".format_string($scorm->name), $course->fullname,
$navigation, '', '', true);
}
} else {
$navlinks = array();
$navlinks[] = array('name' => $strreport, 'link' => "report.php?id=$cm->id", 'type' => 'title');
$navlinks[] = array('name' => $strreport, 'link' => "report.php?id=$cm->id", 'type' => 'title');
$navlinks[] = array('name' => "$strattempt $attempt - ".fullname($userdata), 'link' => "report.php?a=$a&amp;user=$user&amp;attempt=$attempt", 'type' => 'title');
$navlinks[] = array('name' => $sco->title, 'link' => '', 'type' => 'title');
$navigation = build_navigation($navlinks, $cm);
print_header("$course->shortname: ".format_string($scorm->name), $course->fullname, $navigation,
'', '', true);
}
print_heading(format_string($scorm->name));
}
if ($action == 'delete' && has_capability('mod/scorm:deleteresponses',$contextmodule)) {
if (scorm_delete_responses($attemptids, $scorm->id)) { //delete responses.
notify(get_string('scormresponsedeleted', 'scorm'), 'notifysuccess');
}
}
$scormpixdir = $CFG->modpixpath.'/scorm/pix';
if (empty($b)) {
if (empty($a)) {
// No options, show the global scorm report
if (!empty($CFG->enablegroupings) && !empty($cm->groupingid)) {
$sql = "SELECT st.userid, st.scormid
FROM {$CFG->prefix}scorm_scoes_track st
INNER JOIN {$CFG->prefix}groups_members gm ON st.userid = gm.userid
INNER JOIN {$CFG->prefix}groupings_groups gg ON gm.groupid = gg.groupid
INNER JOIN {$CFG->prefix}groupings_groups gg ON gm.groupid = gg.groupid
WHERE st.scormid = {$scorm->id} AND gg.groupingid = {$cm->groupingid}
GROUP BY st.userid,st.scormid
";
} else {
$sql = "SELECT st.userid, st.scormid
FROM {$CFG->prefix}scorm_scoes_track st
FROM {$CFG->prefix}scorm_scoes_track st
WHERE st.scormid = {$scorm->id}
GROUP BY st.userid,st.scormid
";
}
if ($scousers=get_records_sql($sql)) {
$table = new stdClass();
$table->head = array('&nbsp;', get_string('name'));
$table->align = array('center', 'left');
$table->wrap = array('nowrap', 'nowrap');
$table->head = array();
$table->width = '100%';
$table->size = array(10, '*');
if (has_capability('mod/scorm:deleteresponses',$contextmodule)) {
$table->head[] = '&nbsp;';
$table->align[] = 'center';
$table->wrap[] = 'nowrap';
$table->size[] = '10';
}
$table->head[] = '&nbsp;';
$table->align[] = 'center';
$table->wrap[] = 'nowrap';
$table->size[] = '10';
$table->head[] = get_string('name');
$table->align[] = 'left';
$table->wrap[] = 'nowrap';
$table->size[] = '*';
$table->head[]= get_string('attempt','scorm');
$table->align[] = 'center';
@@ -145,24 +166,51 @@
foreach($scousers as $scouser){
$userdata = scorm_get_user_data($scouser->userid);
$attempt = scorm_get_last_attempt($scorm->id,$scouser->userid);
$attempt = scorm_get_last_attempt($scorm->id,$scouser->userid);
for ($a = 1; $a<=$attempt; $a++) {
$row = array();
if (has_capability('mod/scorm:deleteresponses',$contextmodule)) {
$row[] = '<input type="checkbox" name="attemptid[]" value="'. $scouser->userid . ':' . $a . '" />';
}
$row[] = print_user_picture($scouser->userid, $course->id, $userdata->picture, false, true);
$row[] = '<a href="'.$CFG->wwwroot.'/user/view.php?id='.$scouser->userid.'&amp;course='.$course->id.'">'.
fullname($userdata).'</a>';
$row[] = '<a href="report.php?a='.$scorm->id.'&amp;user='.$scouser->userid.'&amp;attempt='.$a.'">'.$a.'</a>';
$select = 'scormid = '.$scorm->id.' and userid = '.$scouser->userid.' and attempt = '.$a;
$timetracks = get_record_select('scorm_scoes_track', $select,'min(timemodified) as started, max(timemodified) as last');
$timetracks = get_record_select('scorm_scoes_track', $select,'min(timemodified) as started, max(timemodified) as last');
// jump out here if this attempt doesnt exist
if (!$timetracks->started) {
continue;
}
$row[] = userdate($timetracks->started, get_string('strftimedaydatetime'));
$row[] = userdate($timetracks->last, get_string('strftimedaydatetime'));
$row[] = scorm_grade_user_attempt($scorm, $scouser->userid, $a);
$table->data[] = $row;
}
}
echo '<div id="scormtablecontainer">';
if (has_capability('mod/scorm:deleteresponses',$contextmodule)) {
echo '<form id="attemptsform" method="post" action="'.$_SERVER['PHP_SELF'].'" onsubmit="var menu = document.getElementById(\'menuaction\'); return (menu.options[menu.selectedIndex].value == \'delete\' ? \''.addslashes(get_string('deleteattemptcheck','quiz')).'\' : true);">';
echo '<input type="hidden" name="id" value="'.$id.'">';
print_table($table);
echo '<a href="javascript:select_all_in(\'DIV\',null,\'scormtablecontainer\');">'.get_string('selectall', 'quiz').'</a> / ';
echo '<a href="javascript:deselect_all_in(\'DIV\',null,\'scormtablecontainer\');">'.get_string('selectnone', 'quiz').'</a> ';
echo '&nbsp;&nbsp;';
$options = array('delete' => get_string('delete'));
echo choose_from_menu($options, 'action', '', get_string('withselected', 'quiz'), 'if(this.selectedIndex > 0) submitFormById(\'attemptsform\');', '', true);
echo '<noscript id="noscriptmenuaction" style="display: inline;">';
echo '<div>';
echo '<input type="submit" value="'.get_string('go').'" /></div></noscript>';
echo '<script type="text/javascript">'."\n<!--\n".'document.getElementById("noscriptmenuaction").style.display = "none";'."\n-->\n".'</script>';
echo '</form>';
} else {
print_table($table);
}
echo '</div>';
} else {
notify(get_string('noactivity', 'scorm'));
}
print_table($table);
} else {
if (!empty($user)) {
// User SCORM report
@@ -230,7 +278,7 @@
if (!empty($userdata)) {
print_simple_box_start('center');
//print_heading(format_string($sco->title));
print_heading('<a href="'.$CFG->wwwroot.'/mod/scorm/player.php?a='.$scorm->id.'&amp;mode=browse&amp;scoid='.$sco->id.'" target="_new">'.format_string($sco->title).'</a>');
print_heading('<a href="'.$CFG->wwwroot.'/mod/scorm/player.php?a='.$scorm->id.'&amp;mode=browse&amp;scoid='.$sco->id.'" target="_new">'.format_string($sco->title).'</a>');
echo '<div align="center">'."\n";
print_user_picture($user, $course->id, $userdata->picture, false, false);
echo "<a href=\"$CFG->wwwroot/user/view.php?id=$user&amp;course=$course->id\">".
@@ -252,7 +300,7 @@
$strstatus.'" />&nbsp;'.$trackdata->total_time.'<br />'.$scoreview.'<br />';
echo '</div>'."\n";
echo '<hr /><h2>'.get_string('details','scorm').'</h2>';
// Print general score data
$table = new stdClass();
$table->head = array(get_string('element','scorm'), get_string('value','scorm'));
@@ -260,7 +308,7 @@
$table->wrap = array('nowrap', 'nowrap');
$table->width = '100%';
$table->size = array('*', '*');
$existelements = false;
if ($scorm->version == 'SCORM_1.3') {
$elements = array('raw' => 'cmi.score.raw',
@@ -289,8 +337,8 @@
if ($existelements) {
echo '<h3>'.get_string('general','scorm').'</h3>';
print_table($table);
}
}
// Print Interactions data
$table = new stdClass();
$table->head = array(get_string('identifier','scorm'),
@@ -301,12 +349,12 @@
$table->wrap = array('nowrap', 'nowrap', 'nowrap', 'nowrap');
$table->width = '100%';
$table->size = array('*', '*', '*', '*', '*');
$existinteraction = false;
$i = 0;
$interactionid = 'cmi.interactions.'.$i.'.id';
while (isset($trackdata->$interactionid)) {
$existinteraction = true;
$printedelements[]=$interactionid;
@@ -324,7 +372,7 @@
}
}
$table->data[] = $row;
$i++;
$interactionid = 'cmi.interactions.'.$i.'.id';
}
@@ -333,7 +381,7 @@
echo '<h3>'.get_string('interactions','scorm').'</h3>';
print_table($table);
}
// Print Objectives data
$table = new stdClass();
$table->head = array(get_string('identifier','scorm'),
@@ -345,12 +393,12 @@
$table->wrap = array('nowrap', 'nowrap', 'nowrap', 'nowrap', 'nowrap');
$table->width = '100%';
$table->size = array('*', '*', '*', '*', '*');
$existobjective = false;
$i = 0;
$objectiveid = 'cmi.objectives.'.$i.'.id';
while (isset($trackdata->$objectiveid)) {
$existobjective = true;
$printedelements[]=$objectiveid;
@@ -369,7 +417,7 @@
}
}
$table->data[] = $row;
$i++;
$objectiveid = 'cmi.objectives.'.$i.'.id';
}
@@ -383,11 +431,11 @@
$table->wrap = array('nowrap', 'wrap');
$table->width = '100%';
$table->size = array('*', '*');
$existelements = false;
foreach($trackdata as $element => $value) {
if (substr($element,0,3) == 'cmi') {
if (substr($element,0,3) == 'cmi') {
if (!(in_array ($element, $printedelements))) {
$existelements = true;
$row = array();
@@ -400,7 +448,7 @@
if ($existelements) {
echo '<h3>'.get_string('othertracks','scorm').'</h3>';
print_table($table);
}
}
print_simple_box_end();
} else {
error('Missing script parameter');
+2 -2
View File
@@ -10,8 +10,8 @@
// catch up now, so until 27th October please only increment in very tiny steps
// in HEAD, until we get past that date..
$module->version = 2007110501; // The (date) version of this module
$module->version = 2007110502; // The (date) version of this module
$module->requires = 2007101509; // The version of Moodle that is required
$module->cron = 300; // How often should cron check this module (seconds)?
?>
?>