-
<?php // $Id$
+
define("VALUESCOES",0);
define("VALUEHIGHEST",1);
define("VALUEAVERAGE",2);
define("VALUESUM",3);
+// Functions added by Pham Minh Duc
+function scorm_get_score_from_parent($sco,$userid,$grademethod=VALUESCOES) {
+ $scores = NULL;
+ $scores->scoes = 0;
+ $scores->values = 0;
+ $scores->scaled = 0;
+ $scores->max = 0;
+ $scores->sum = 0;
+
+ $scoes_total = 0;
+ $scoes_count = 0;
+ $attempt = scorm_get_last_attempt($sco->scorm, $userid);
+ $scoes = get_records('scorm_scoes', 'parent', $sco->identifier);
+ foreach ($scoes as $sco)
+ {
+ $scoes_total++;
+ if ($userdata=scorm_get_tracks($sco->id, $userid,$attempt)) {
+ if (($userdata->status == 'completed') || ($userdata->success_status == 'passed')) {
+ $scoes_count++;
+ }
+
+ $scoreraw = $userdata->score_raw;
+
+ if (!empty($userdata->score_raw)) {
+ $scores->values++;
+ $scores->sum += $userdata->score_raw;
+ $scores->max = ($userdata->score_raw > $scores->max)?$userdata->score_raw:$scores->max;
+ }
+ if (!empty($userdata->score_scaled)) {
+ $scores->scaled = $scores->scaled + $userdata->score_scaled;
+ }
+ }
+ }
+ if ($scoes_count > 0) {
+ $scores->scaled = ($scores->scaled)/($scoes_count);
+ }
+ switch ($grademethod) {
+ case VALUEHIGHEST:
+ return $scores->max;
+ break;
+ case VALUEAVERAGE:
+ if ($scores->values > 0) {
+ return $scores->sum/$scores->values;
+ } else {
+ return 0;
+ }
+ break;
+ case VALUESUM:
+ return $scores->sum;
+ break;
+ case VALUESCOES:
+ return $scores->scaled;
+ break;
+ }
+}
+
+function scorm_get_user_sco_count($scormid, $userid) {
+ $scoes_count = 0;
+ $attempt = scorm_get_last_attempt($current->scorm, $userid);
+ $scoes = get_records('scorm_scoes', 'scorm', $scormid);
+
+ foreach ($scoes as $sco) {
+ if ($userdata=scorm_get_tracks($sco->id, $userid,$attempt)) {
+ if (($userdata->status == 'completed') || ($userdata->success_status == 'passed')) {
+ $scoes_count++;
+ }
+ }
+ }
+ return $scoes_count;
+}
+
+function scorm_grade_user_new($scoes, $userid, $grademethod=VALUESCOES) {
+ $scores = NULL;
+ $scores->scoes = 0;
+ $scores->values = 0;
+ $scores->scaled = 0;
+ $scores->max = 0;
+ $scores->sum = 0;
+
+ if (!$scoes) {
+ return '';
+ }
+ $current = current($scoes);
+ $attempt = scorm_get_last_attempt($current->scorm, $userid);
+ foreach ($scoes as $sco) {
+ if ($userdata=scorm_get_tracks($sco->id, $userid,$attempt)) {
+ if (($userdata->status == 'completed') || ($userdata->success_status == 'passed')) {
+ $scores->scoes++;
+ }
+ $scaled = $userdata->score_scaled;
+ $scoreraw = $userdata->score_raw;
+ if ($scaled ==0){
+ $scores->scaled = $scores->scaled / $scores->scoes;
+ }
+ if (!empty($userdata->score_raw)) {
+ $scores->values++;
+ $scores->sum += $userdata->score_raw;
+ $scores->max = ($userdata->score_raw > $scores->max)?$userdata->score_raw:$scores->max;
+ }
+ if (!empty($scaled)) {
+ $scores->scaled = (($scores->scaled) * ($scores->scoes-1) + $scaled)/($scores->scoes);
+ }
+ }
+ }
+ switch ($grademethod) {
+ case VALUEHIGHEST:
+ return $scores->max;
+ break;
+ case VALUEAVERAGE:
+ if ($scores->values > 0) {
+ return $scores->sum/$scores->values;
+ } else {
+ return 0;
+ }
+ break;
+ case VALUESUM:
+ return $scores->sum;
+ break;
+ case VALUESCOES:
+ return $scores->scaled;
+ break;
+ }
+}
+
+function scorm_insert_statistic($statisticInput){
+ $id = null;
+ if ($statistic = get_record_select('scorm_statistic',"userid='$statisticInput->userid' AND scormid='$statisticInput->scormid'")) {
+
+ $statistic->durationtime = $statisticInput->duration;
+ $statistic->accesstime = $statisticInput->accesstime;
+ $statistic->status = $statisticInput->status;
+ $statistic->attemptnumber = $statisticInput->attemptnumber;
+ $id = update_record('scorm_statistic',$statistic);
+ } else {
+ $id = insert_record('scorm_statistic',$statisticInput);
+ }
+ return $id;
+}
+
+function scorm_insert_trackmodel($userid,$scormid,$scoid,$attempt) {
+ $id = null;
+ if ($suspendtrack = get_record_select('scorm_suspendtrack',"userid='$userid' AND scormid='$scormid'")) {
+ $suspendtrack->suspendscoid = $scoid;
+ $suspendtrack->attempt = $attempt;
+ $id = update_record('scorm_suspendtrack',$suspendtrack);
+ } else {
+ $suspendtrack->scormid = $scormid;
+ $suspendtrack->suspendscoid = $scoid;
+ $suspendtrack->userid = $userid;
+ $suspendtrack->attempt = $attempt;
+ $id = insert_record('scorm_suspendtrack',$suspendtrack);
+ }
+ return $id;
+}
+
+function scorm_get_suspendscoid($scormid,$userid) {
+ if ($sco = get_record("scorm_suspendtrack","scormid",$scormid,"userid",$userid)) {
+ $suspendscoid = $sco->suspendscoid;
+ return $suspendscoid;
+ } else {
+ return 0;
+ }
+}
+
+function scorm_set_attempt($scoid,$userid) {
+ if ($scormid = get_field('scorm_scoes','scorm','id',$scoid)) {
+ $attempt = scorm_get_last_attempt($scormid,$userid);
+ } else {
+ $attempt = 1;
+ }
+ $scormtype = get_field('scorm_scoes','scormtype','id',$scoid) ;
+ if ($scormtype == 'sco'){
+ $element = 'cmi.attempt_status';
+ $value = 'attempted';
+ scorm_insert_track($userid,$scormid,$scoid,$attempt,$element,$value);
+ }
+}
+
+function scorm_get_AbsoluteTimeLimit($scoid){
+ $sco = get_record("scorm_scoes","id",$scoid);
+ if (!empty($sco)){
+ return $sco->attemptAbsoluteDurationLimit;
+ }
+ return 0;
+}
+
+function scorm_update_status($scormid,$scoid)
+{
+
+}
+
+function scorm_get_nextsco($scormid,$scoid)
+{
+
+}
+
+function scorm_get_presco($scormid,$scoid)
+{
+
+}
+
+function scorm_isChoice($scormid,$scoid)
+{
+ $sco = get_record("scorm_sequencing_controlmode","scormid",$scormid,"scoid",$scoid);
+ $scoparent = get_record("scorm_sequencing_controlmode","scormid",$scormid,"identifier",$sco->parent);
+
+ return $scoparent->choice;
+}
+
+function scorm_isChoiceexit($scormid,$scoid)
+{
+ $sco = get_record("scorm_sequencing_controlmode","scormid",$scormid,"scoid",$scoid);
+ $scoparent = get_record("scorm_sequencing_controlmode","scormid",$scormid,"identifier",$sco->parent);
+
+ return $scoparent->choiceexit;
+}
+// End add
+
/// Local Library of functions and constants for module scorm
/**
*/
function scorm_validate($packagedir) {
- ////$f = "D:\\test.txt";
- ////@$ft = fopen($f,"a");
- ////fwrite($ft,"\n Xu ly trong ham scorm_validate \n");
-
-
$validation = new stdClass();
if (is_file($packagedir.'/imsmanifest.xml')) {
$validation->result = 'found';
}
function scorm_eval_prerequisites($prerequisites,$usertracks) {
-
- //$f = "D:\\test.txt";
- //@$ft = fopen($f,"a");
- ////fwrite($ft,"\n Xu ly trong ham scorm_eval_prerequisites \n");
-
-
$element = '';
$stack = array();
$statuses = array(
case '(':
case ')':
case '*':
- //case '{':
- //case '}':
- //case ',':
$element = trim($element);
if (!empty($element)) {
return eval('return '.implode($stack).';');
}
-function scorm_insert_statistic($statisticInput){
-
- $id = null;
- if ($statistic = get_record_select('scorm_statistic',"userid='$statisticInput->userid' AND scormid='$statisticInput->scormid'")) {
-
- $statistic->durationtime = $statisticInput->duration;
- $statistic->accesstime = $statisticInput->accesstime;
- $statistic->status = $statisticInput->status;
- $statistic->attemptnumber = $statisticInput->attemptnumber;
- $id = update_record('scorm_statistic',$statistic);
- } else {
- ////fwrite($ft,"Insert trong ham scorm_insert_track \n");
- $id = insert_record('scorm_statistic',$statisticInput);
- }
- return $id;
-
-}
function scorm_insert_track($userid,$scormid,$scoid,$attempt,$element,$value) {
-
-// //$f = "D:\\test.txt";
-// //@$ft = fopen($f,"a");
- ////fwrite($ft,"\n Xu ly trong ham scorm_insert_track \n");
-
$id = null;
if ($track = get_record_select('scorm_scoes_track',"userid='$userid' AND scormid='$scormid' AND scoid='$scoid' AND attempt='$attempt' AND element='$element'")) {
$track->value = $value;
$track->timemodified = time();
- ////fwrite($ft,$userid."Update trong ham scorm_insert_track voi cac gia tri userid = ");
$id = update_record('scorm_scoes_track',$track);
} else {
$track->userid = $userid;
$track->element = $element;
$track->value = addslashes($value);
$track->timemodified = time();
- ////fwrite($ft,"Insert trong ham scorm_insert_track \n");
$id = insert_record('scorm_scoes_track',$track);
}
return $id;
}
-function scorm_insert_trackmodel($userid,$scormid,$scoid,$attempt) {
-
-// //$f = "D:\\test.txt";
-// //@$ft = fopen($f,"a");
-
- $id = null;
- if ($suspendtrack = get_record_select('scorm_suspendtrack',"userid='$userid' AND scormid='$scormid'")) {
- $suspendtrack->suspendscoid = $scoid;
- $suspendtrack->attempt = $attempt;
-
- $id = update_record('scorm_suspendtrack',$suspendtrack);
- } else {
- $suspendtrack->scormid = $scormid;
- $suspendtrack->suspendscoid = $scoid;
- $suspendtrack->userid = $userid;
- $suspendtrack->attempt = $attempt;
- $id = insert_record('scorm_suspendtrack',$suspendtrack);
- }
- return $id;
-}
-
-function scorm_get_suspendscoid($scormid,$userid) {
- if ($sco = get_record("scorm_suspendtrack","scormid",$scormid,"userid",$userid)) {
- $suspendscoid = $sco->suspendscoid;
- return $suspendscoid;
- } else {
- return 0;
- }
-}
-
function scorm_add_time($a, $b) {
$aes = explode(':',$a);
$bes = explode(':',$b);
$cents = $cents - ($change * 100);
if (floor($cents) < 10) {
$cents = '0'. $cents;
- }
-
- $secs = $aseconds[0] + $bseconds[0] + $change; //Seconds
- $change = floor($secs / 60);
- $secs = $secs - ($change * 60);
- if (floor($secs) < 10) {
- $secs = '0'. $secs;
- }
-
- $mins = $aes[1] + $bes[1] + $change; //Minutes
- $change = floor($mins / 60);
- $mins = $mins - ($change * 60);
- if ($mins < 10) {
- $mins = '0' . $mins;
- }
-
- $hours = $aes[0] + $bes[0] + $change; //Hours
- if ($hours < 10) {
- $hours = '0' . $hours;
- }
-
- if ($cents != '0') {
- return $hours . ":" . $mins . ":" . $secs . '.' . $cents;
- } else {
- return $hours . ":" . $mins . ":" . $secs;
- }
-}
-
-function scorm_external_link($link) {
-// check if a link is external
- $result = false;
- $link = strtolower($link);
- if (substr($link,0,7) == 'http://') {
- $result = true;
- } else if (substr($link,0,8) == 'https://') {
- $result = true;
- } else if (substr($link,0,4) == 'www.') {
- $result = true;
- }
- return $result;
-}
-
-function scorm_grade_user($scoes, $userid, $grademethod=VALUESCOES) {
-
- //$f = "D:\\test.txt";
- //@$ft = fopen($f,"a");
- //fwrite($ft,"\n Xu ly trong ham scorm_grade_user \n");
-
- $scores = NULL;
- $scores->scoes = 0;
- $scores->values = 0;
- $scores->max = 0;
- $scores->sum = 0;
-
- if (!$scoes) {
- return '';
- }
-
- $current = current($scoes);
- $attempt = scorm_get_last_attempt($current->scorm, $userid);
- foreach ($scoes as $sco) {
- if ($userdata=scorm_get_tracks($sco->id, $userid,$attempt)) {
- if (($userdata->status == 'completed') || ($userdata->status == 'passed')) {
- $scores->scoes++;
- }
- if (!empty($userdata->score_raw)) {
- $scores->values++;
- $scores->sum += $userdata->score_raw;
- $scores->max = ($userdata->score_raw > $scores->max)?$userdata->score_raw:$scores->max;
- }
- }
- }
- switch ($grademethod) {
- case VALUEHIGHEST:
- return $scores->max;
- break;
- case VALUEAVERAGE:
- if ($scores->values > 0) {
- return $scores->sum/$scores->values;
- } else {
- return 0;
- }
- break;
- case VALUESUM:
- return $scores->sum;
- break;
- case VALUESCOES:
- return $scores->scoes;
- break;
- }
-}
-
-//Lay diem theo Sco cha.. Thuc chat la theo bai kiem tra
-function scorm_get_score_from_parent($sco,$userid,$grademethod=VALUESCOES)
-{
-
- $scores = NULL;
- $scores->scoes = 0;
- $scores->values = 0;
- $scores->scaled = 0;
- $scores->max = 0;
- $scores->sum = 0;
-
- $scoes_total = 0;
- $scoes_count = 0;
- $attempt = scorm_get_last_attempt($sco->scorm, $userid);
- $scoes = get_records('scorm_scoes', 'parent', $sco->identifier);
- foreach ($scoes as $sco)
- {
- $scoes_total++;
- if ($userdata=scorm_get_tracks($sco->id, $userid,$attempt)) {
- if (($userdata->status == 'completed') || ($userdata->success_status == 'passed')) {
- $scoes_count++;
- }
-
-
- $scoreraw = $userdata->score_raw;
-
- if (!empty($userdata->score_raw)) {
- $scores->values++;
- $scores->sum += $userdata->score_raw;
- $scores->max = ($userdata->score_raw > $scores->max)?$userdata->score_raw:$scores->max;
- }
- if (!empty($userdata->score_scaled)) {
- $scores->scaled = $scores->scaled + $userdata->score_scaled;
- }
-
- }
- }
- if ($scoes_count > 0)
- {
- $scores->scaled = ($scores->scaled)/($scoes_count);
- }
- switch ($grademethod) {
- case VALUEHIGHEST:
- return $scores->max;
- break;
- case VALUEAVERAGE:
- if ($scores->values > 0) {
- return $scores->sum/$scores->values;
- } else {
- return 0;
- }
- break;
- case VALUESUM:
- return $scores->sum;
- break;
- case VALUESCOES:
- return $scores->scaled;
- break;
- }
-
-}
-
-// Lay ra so luong cac scoes duoc user thuc hien xong
-function scorm_get_user_sco_count($scormid, $userid)
-{
- $scoes_count = 0;
- $attempt = scorm_get_last_attempt($current->scorm, $userid);
- $scoes = get_records('scorm_scoes', 'scorm', $scormid);
-
+ }
+ $secs = $aseconds[0] + $bseconds[0] + $change; //Seconds
+ $change = floor($secs / 60);
+ $secs = $secs - ($change * 60);
+ if (floor($secs) < 10) {
+ $secs = '0'. $secs;
+ }
- foreach ($scoes as $sco)
- {
- if ($userdata=scorm_get_tracks($sco->id, $userid,$attempt)) {
+ $mins = $aes[1] + $bes[1] + $change; //Minutes
+ $change = floor($mins / 60);
+ $mins = $mins - ($change * 60);
+ if ($mins < 10) {
+ $mins = '0' . $mins;
+ }
- if (($userdata->status == 'completed') || ($userdata->success_status == 'passed')) {
- $scoes_count++;
- }
- }
+ $hours = $aes[0] + $bes[0] + $change; //Hours
+ if ($hours < 10) {
+ $hours = '0' . $hours;
+ }
+ if ($cents != '0') {
+ return $hours . ":" . $mins . ":" . $secs . '.' . $cents;
+ } else {
+ return $hours . ":" . $mins . ":" . $secs;
}
- return $scoes_count;
-
}
-function scorm_grade_user_new($scoes, $userid, $grademethod=VALUESCOES) {
-
- //$f = "D:\\test.txt";
- //@$ft = fopen($f,"a");
- //fwrite($ft,"\n Xu ly trong ham scorm_grade_user \n");
+function scorm_external_link($link) {
+// check if a link is external
+ $result = false;
+ $link = strtolower($link);
+ if (substr($link,0,7) == 'http://') {
+ $result = true;
+ } else if (substr($link,0,8) == 'https://') {
+ $result = true;
+ } else if (substr($link,0,4) == 'www.') {
+ $result = true;
+ }
+ return $result;
+}
+function scorm_grade_user($scoes, $userid, $grademethod=VALUESCOES) {
$scores = NULL;
$scores->scoes = 0;
$scores->values = 0;
- $scores->scaled = 0;
$scores->max = 0;
$scores->sum = 0;
if (!$scoes) {
- //fwrite($ft,"\n Khong xuat hien mot SCO duoc tinh diem \n");
return '';
}
$current = current($scoes);
$attempt = scorm_get_last_attempt($current->scorm, $userid);
- //fwrite($ft,"\n ---------------------------------------\n");
foreach ($scoes as $sco) {
if ($userdata=scorm_get_tracks($sco->id, $userid,$attempt)) {
- if (($userdata->status == 'completed') || ($userdata->success_status == 'passed')) {
+ if (($userdata->status == 'completed') || ($userdata->status == 'passed')) {
$scores->scoes++;
- //fwrite($ft,"\n Them mot khoa hoan thanh co id la ".$sco->id." co gia tri scaled la ".$userdata->score_scaled." \n");
-
- }
- $scaled = $userdata->score_scaled;
- $scoreraw = $userdata->score_raw;
- if ($scaled ==0){
- $scores->scaled = $scores->scaled / $scores->scoes;
- //fwrite($ft,"\n Ti le chinh xac ".($scores->scaled*100)." phan tram");
-
- }
-
+ }
if (!empty($userdata->score_raw)) {
$scores->values++;
$scores->sum += $userdata->score_raw;
$scores->max = ($userdata->score_raw > $scores->max)?$userdata->score_raw:$scores->max;
- }
-
- if (!empty($scaled)) {
- //fwrite($ft,"\n go ---->>> \n");
- $scores->scaled = (($scores->scaled) * ($scores->scoes-1) + $scaled)/($scores->scoes);
- //fwrite($ft,"\n Ti le chinh xac ".($scores->scaled*100)." phan tram");
-
}
-
}
}
- //fwrite($ft,"\n ----+++++++++++------\n");
- //fwrite($ft,"\n Kieu gia tri tra ve la ".$grademethod);
switch ($grademethod) {
case VALUEHIGHEST:
- //fwrite($ft,"\n Gia tri tra ve thouoc loai cao nhat");
return $scores->max;
break;
case VALUEAVERAGE:
- //fwrite($ft,"\n Gia tri tra ve thouoc loai trung binh");
if ($scores->values > 0) {
return $scores->sum/$scores->values;
} else {
}
break;
case VALUESUM:
- //fwrite($ft,"\n Gia tri tra ve thouoc loai tong cong");
return $scores->sum;
break;
case VALUESCOES:
- //fwrite($ft,"\n Gia tri tra ve thouoc loai scoes co gia tri".$scores->scaled);
- return $scores->scaled;
+ return $scores->scoes;
break;
}
}
function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='normal',$attempt='',$play=false) {
global $CFG;
-
- //$f = "D:\\test.txt";
- //@$ft = fopen($f,"a");
- //fwrite($ft,"\n Xu ly trong ham scorm_get_toc \n");
-
- //
+
+ // Added by Pham Minh Duc
$suspendscoid = scorm_get_suspendscoid($scorm->id,$user->id);
- //
+ // End add
$strexpand = get_string('expcoll','scorm');
$modestr = '';
$attempt = scorm_get_last_attempt($scorm->id, $user->id);
}
$result->attemptleft = $scorm->maxattempt - $attempt;
-
- //fwrite($ft,"\n So lan attempt con lai la \n".$result->attemptleft);
if ($scoes = get_records_select('scorm_scoes',"scorm='$scorm->id' $organizationsql order by id ASC")){
- //
- // Lay du lieu da duoc tracking cho moi doi tuong hoc tap
- //
$usertracks = array();
foreach ($scoes as $sco) {
- //Kiem tra xem $sco co phai la phan muc khong. Neu la trang Asset hoac SCO thi xu ly tiep
if (!empty($sco->launch)) {
if ($usertrack=scorm_get_tracks($sco->id,$user->id,$attempt)) {
if ($usertrack->status == '') {
$usertrack->status = 'notattempted';
}
- // Ghi lai thong tin $usertracks theo tung doi tuong sco
$usertracks[$sco->identifier] = $usertrack;
}
}
if (empty($scoid) && ($mode != 'normal')) {
$scoid = $sco->id;
}
- //Neu la sco suspend thi hien thi anh khac
if ($suspendscoid == $sco->id){
$result->toc .= '<img src="'.$scormpixdir.'/suspend.gif" alt="Dang tam dung o day" title="Dang dung o day" />';
} else {
- //-----------------------
if (isset($usertracks[$sco->identifier])) {
$usertrack = $usertracks[$sco->identifier];
$strstatus = get_string($usertrack->status,'scorm');
$result->toc .= '<img src="'.$scormpixdir.'/'.$usertrack->status.'.gif" alt="'.$strstatus.'" title="'.$strstatus.'" />';
if (($usertrack->status == 'notattempted') || ($usertrack->status == 'incomplete') || ($usertrack->status == 'browsed')) {
- //Neu khoa hoc chua duoc attempted hoac chua hoan thanh hoac la chi browsed
$incomplete = true;
if ($play && empty($scoid)) {
$scoid = $sco->id;
if ($sco->id == $scoid) {
$result->prerequisites = true;
}
- if (scorm_isChoice($scorm->id,$sco->id) == 1)
- {
- $url = $CFG->wwwroot.'/mod/scorm/player.php?a='.$scorm->id.'&currentorg='.$currentorg.$modestr.'&scoid='.$sco->id;
- $result->toc .= ' '.$startbold.'<a href="'.$url.'">'.format_string($sco->title).'</a>'.$score.$endbold."</li>\n";
- $tocmenus[$sco->id] = scorm_repeater('−',$level) . '>' . format_string($sco->title);
- }
- else
- {
- $result->toc .= ' '.$startbold.format_string($sco->title).$score.$endbold."</li>\n";
- $tocmenus[$sco->id] = scorm_repeater('−',$level) . '>' . format_string($sco->title);
+ // Modified by Pham Minh Duc
+ if (scorm_isChoice($scorm->id,$sco->id) == 1) {
+ $url = $CFG->wwwroot.'/mod/scorm/player.php?a='.$scorm->id.'&currentorg='.$currentorg.$modestr.'&scoid='.$sco->id;
+ $result->toc .= ' '.$startbold.'<a href="'.$url.'">'.format_string($sco->title).'</a>'.$score.$endbold."</li>\n";
+ $tocmenus[$sco->id] = scorm_repeater('−',$level) . '>' . format_string($sco->title);
+ } else {
+ $result->toc .= ' '.$startbold.format_string($sco->title).$score.$endbold."</li>\n";
+ $tocmenus[$sco->id] = scorm_repeater('−',$level) . '>' . format_string($sco->title);
}
+ // End modify
} else {
if ($sco->id == $scoid) {
$result->prerequisites = false;
}
function scorm_get_last_attempt($scormid, $userid) {
-
- //$f = "D:\\test.txt";
- //@$ft = fopen($f,"a");
- ////fwrite($ft,"\n Xu ly trong ham scorm_get_last_attempt \n");
-
/// Find the last attempt number for the given user id and scorm id
if ($lastattempt = get_record('scorm_scoes_track', 'userid', $userid, 'scormid', $scormid, '', '', 'max(attempt) as a')) {
if (empty($lastattempt->a)) {
}
}
-// Khi mot nguoi truy nhap vao mot SCO thi se thiet lap
-// nguoi do da no luc thuc hien no
-function scorm_set_attempt($scoid,$userid)
-{
- //Lay gia tri last attempt
- if ($scormid = get_field('scorm_scoes','scorm','id',$scoid)) {
- $attempt = scorm_get_last_attempt($scormid,$userid);
- } else {
- $attempt = 1;
- }
- //Chi set attempt cho cac SCO
- $scormtype = get_field('scorm_scoes','scormtype','id',$scoid) ;
- if ($scormtype == 'sco'){
- $element = 'cmi.attempt_status';
- $value = 'attempted';
- scorm_insert_track($userid,$scormid,$scoid,$attempt,$element,$value);
- }
-}
function scorm_get_tracks($scoid,$userid,$attempt='') {
-
- //$f = "D:\\test.txt";
- //@$ft = fopen($f,"a");
- ////fwrite($ft,"\n Xu ly trong ham scorm_get_tracks \n");
-
/// Gets all tracks of specified sco and user
global $CFG;
$usertrack->userid = $userid;
$usertrack->scoid = $scoid;
$usertrack->score_raw = '';
- $usertrack->score_scaled = '';
$usertrack->status = '';
- $usertrack->success_status = '';
- $usertrack->attempt_status = '';
- $usertrack->satisfied_status = '';
$usertrack->total_time = '00:00:00';
$usertrack->session_time = '00:00:00';
$usertrack->timemodified = 0;
+ // Added by Pham Minh Duc
+ $usertrack->score_scaled = '';
+ $usertrack->success_status = '';
+ $usertrack->attempt_status = '';
+ $usertrack->satisfied_status = '';
+ // End Add
foreach ($tracks as $track) {
$element = $track->element;
$usertrack->{$element} = $track->value;
switch ($element) {
- case 'cmi.core.lesson_status':
+ // Added by Pham Minh Duc
case 'cmi.attempt_status':
$usertrack->status = $track->value;
$usertrack->attempt_status = $track->value;
break;
- case 'cmi.completion_status':
- if ($track->value == 'not attempted') {
- $track->value = 'notattempted';
- $usertrack->attempt_status = $track->value;
- }
- $usertrack->status = $track->value;
- break;
case 'cmi.success_status':
$usertrack->success_status = $track->value;
if ($track->value=='passed'){
$usertrack->satisfied_status = 'notSatisfied';
}
break;
+ case 'cmi.score.scaled':
+ $usertrack->score_scaled = $track->value;
+ break;
+ // End Add
+ case 'cmi.core.lesson_status':
+ case 'cmi.completion_status':
+ if ($track->value == 'not attempted') {
+ $track->value = 'notattempted';
+ }
+ $usertrack->status = $track->value;
+ break;
case 'cmi.core.score.raw':
case 'cmi.score.raw':
$usertrack->score_raw = $track->value;
break;
- case 'cmi.score.scaled':
- $usertrack->score_scaled = $track->value;
- break;
case 'cmi.core.session_time':
case 'cmi.session_time':
$usertrack->session_time = $track->value;
}
}
-
-function scorm_get_AbsoluteTimeLimit($scoid){
- $sco = get_record("scorm_scoes","id",$scoid);
- if (!empty($sco)){
- return $sco->attemptAbsoluteDurationLimit;
- }
- return 0;
-}
//-----------------------------------------------------
/// Library of functions and constants for parsing packages
function scorm_parse($scorm) {
global $CFG;
- //$f = "D:\\test.txt";
- //@$ft = fopen($f,"a");
- ////fwrite($ft,"\n Xu ly doc thong tin trong ham scorm_parse \n");
-
// Parse scorm manifest
if ($scorm->pkgtype == 'AICC') {
$scorm->launch = scorm_parse_aicc($scorm->dir.'/'.$scorm->id,$scorm->id);
}
function scorm_parse_aicc($pkgdir,$scormid){
-
- //$f = "D:\\test.txt";
- //@$ft = fopen($f,"a");
- ////fwrite($ft,"\n Xu ly doc thong tin trong ham scorm_parse_aicc \n");
-
$version = 'AICC';
$ids = array();
$courses = array();
+ $extaiccfiles = array('crs','des','au','cst','ort','pre','cmp');
if ($handle = opendir($pkgdir)) {
while (($file = readdir($handle)) !== false) {
- $ext = substr($file,strrpos($file,'.'));
- $extension = strtolower(substr($ext,1));
- $id = strtolower(basename($file,$ext));
- $ids[$id]->$extension = $file;
+ if ($file[0] != '.') {
+ $ext = substr($file,strrpos($file,'.'));
+ $extension = strtolower(substr($ext,1));
+ if (in_array($extension,$extaiccfiles)) {
+ $id = strtolower(basename($file,$ext));
+ $ids[$id]->$extension = $file;
+ }
+ }
}
closedir($handle);
}
}
function scorm_get_resources($blocks) {
-
- //$f = "D:\\test.txt";
- //@$ft = fopen($f,"a");
- ////fwrite($ft,"\n Xu ly trong ham scorm_get_resources \n");
-
foreach ($blocks as $block) {
if ($block['name'] == 'RESOURCES') {
foreach ($block['children'] as $resource) {
}
function scorm_get_manifest($blocks,$scoes) {
-
- //$f = "D:\\test.txt";
- //@$ft = fopen($f,"a");
- ////fwrite($ft,"\n Xu ly doc thong tin trong ham scorm_get_manifest. \n");
- ////////fwrite($ft,$blocks." la gia tri block la \n");
-
static $parents = array();
static $resources;
}
break;
case 'MANIFEST':
- $manifest = addslashes($block['attrs']['IDENTIFIER']); //Lay thuoc tinh IDENTFIER cua MANIFEST
+ $manifest = addslashes($block['attrs']['IDENTIFIER']);
$organization = '';
$resources = array();
$resources = scorm_get_resources($block['children']);
$scoes->elements[$manifest][$organization][$identifier]->scormtype = addslashes($resources[$idref]['ADLCP:SCORMTYPE']);
}
- //////fwrite($ft,"---Dang lam viec voi ITEM co Identifier = ".$identifier);
$parent = new stdClass();
$parent->identifier = $identifier;
$parent->organization = $organization;
case 'TITLE':
$parent = array_pop($parents);
array_push($parents, $parent);
+ if (!isset($block['tagData'])) {
+ $block['tagData'] = '';
+ }
$scoes->elements[$manifest][$parent->organization][$parent->identifier]->title = addslashes($block['tagData']);
break;
case 'ADLCP:PREREQUISITES':
if ($block['attrs']['TYPE'] == 'aicc_script') {
$parent = array_pop($parents);
array_push($parents, $parent);
+ if (!isset($block['tagData'])) {
+ $block['tagData'] = '';
+ }
$scoes->elements[$manifest][$parent->organization][$parent->identifier]->prerequisites = addslashes($block['tagData']);
}
break;
case 'ADLCP:MAXTIMEALLOWED':
$parent = array_pop($parents);
array_push($parents, $parent);
+ if (!isset($block['tagData'])) {
+ $block['tagData'] = '';
+ }
$scoes->elements[$manifest][$parent->organization][$parent->identifier]->maxtimeallowed = addslashes($block['tagData']);
break;
case 'ADLCP:TIMELIMITACTION':
$parent = array_pop($parents);
array_push($parents, $parent);
+ if (!isset($block['tagData'])) {
+ $block['tagData'] = '';
+ }
$scoes->elements[$manifest][$parent->organization][$parent->identifier]->timelimitaction = addslashes($block['tagData']);
break;
case 'ADLCP:DATAFROMLMS':
$parent = array_pop($parents);
array_push($parents, $parent);
+ if (!isset($block['tagData'])) {
+ $block['tagData'] = '';
+ }
$scoes->elements[$manifest][$parent->organization][$parent->identifier]->datafromlms = addslashes($block['tagData']);
break;
case 'ADLCP:MASTERYSCORE':
$parent = array_pop($parents);
array_push($parents, $parent);
+ if (!isset($block['tagData'])) {
+ $block['tagData'] = '';
+ }
$scoes->elements[$manifest][$parent->organization][$parent->identifier]->masteryscore = addslashes($block['tagData']);
break;
+ // Added by Pham Minh Duc
case 'ADLNAV:PRESENTATION':
$parent = array_pop($parents);
array_push($parents, $parent);
foreach ($block['children'] as $adlnav) {
- if ($adlnav['name'] == 'ADLNAV:NAVIGATIONINTERFACE') { //////fwrite($ft,$scoes->elements[$manifest][$parent->organization][$parent->identifier]->title." Xuat hien dieu khien NAV \n");
- foreach ($adlnav['children'] as $adlnavInterface){
- if ($adlnavInterface['name'] == 'ADLNAV:HIDELMSUI'){
- //////fwrite($ft,$scoes->elements[$manifest][$parent->organization][$parent->identifier]->title." Xuat hien dieu khien NAV HIDELMSUI\n");
- //////fwrite($ft," Gia tri thuoc tinh an la ".$adlnavInterface['tagData']);
- if ($adlnavInterface['tagData'] == 'continue') {
- $scoes->elements[$manifest][$parent->organization][$parent->identifier]->next = 1;
-// //////fwrite($ft," Thiet lap thuoc tinh an OK ");
+ if ($adlnav['name'] == 'ADLNAV:NAVIGATIONINTERFACE') {
+ foreach ($adlnav['children'] as $adlnavInterface) {
+ if ($adlnavInterface['name'] == 'ADLNAV:HIDELMSUI') {
+ if ($adlnavInterface['tagData'] == 'continue') {
+ $scoes->elements[$manifest][$parent->organization][$parent->identifier]->next = 1;
}
- if ($adlnavInterface['tagData'] == 'previous') {
- $scoes->elements[$manifest][$parent->organization][$parent->identifier]->previous = 1;
-// //////fwrite($ft," Thiet lap thuoc tinh an OK ");
+ if ($adlnavInterface['tagData'] == 'previous') {
+ $scoes->elements[$manifest][$parent->organization][$parent->identifier]->previous = 1;
}
}
}
-
}
}
break;
-
case 'IMSSS:SEQUENCING':
$parent = array_pop($parents);
array_push($parents, $parent);
foreach ($block['children'] as $sequencing) {
- //////fwrite($ft,"\n Xuat hien IMSSS:SEQUENCING cua ".$parent->identifier);
- if ($sequencing['name']=='IMSSS:CONTROLMODE'){
- //Xu ly cac Control Mode voi mot Item trong SCO
- if ($sequencing['attrs']['CHOICE'] == 'false'){
- $scoes->elements[$manifest][$parent->organization][$parent->identifier]->choice = 0;
- //////fwrite($ft,"\n Xuat hien lua chon choice \n");
+ if ($sequencing['name']=='IMSSS:CONTROLMODE') {
+ if ($sequencing['attrs']['CHOICE'] == 'false') {
+ $scoes->elements[$manifest][$parent->organization][$parent->identifier]->choice = 0;
}
- if ($sequencing['attrs']['CHOICEEXIT'] == 'false'){
- $scoes->elements[$manifest][$parent->organization][$parent->identifier]->choiceexit = 0;
+ if ($sequencing['attrs']['CHOICEEXIT'] == 'false') {
+ $scoes->elements[$manifest][$parent->organization][$parent->identifier]->choiceexit = 0;
}
- if ($sequencing['attrs']['FLOW'] == 'true'){
- $scoes->elements[$manifest][$parent->organization][$parent->identifier]->flow = 1;
+ if ($sequencing['attrs']['FLOW'] == 'true') {
+ $scoes->elements[$manifest][$parent->organization][$parent->identifier]->flow = 1;
}
- if ($sequencing['attrs']['FORWARDONLY'] == 'true'){
- $scoes->elements[$manifest][$parent->organization][$parent->identifier]->forwardonly = 1;
+ if ($sequencing['attrs']['FORWARDONLY'] == 'true') {
+ $scoes->elements[$manifest][$parent->organization][$parent->identifier]->forwardonly = 1;
}
- if ($sequencing['attrs']['USECURRENTATTEMPTOBJECTINFO'] == 'true'){
- $scoes->elements[$manifest][$parent->organization][$parent->identifier]->usecurrentattemptobjectinfo = 1;
+ if ($sequencing['attrs']['USECURRENTATTEMPTOBJECTINFO'] == 'true') {
+ $scoes->elements[$manifest][$parent->organization][$parent->identifier]->usecurrentattemptobjectinfo = 1;
}
- if ($sequencing['attrs']['USECURRENTATTEMPTPROGRESSINFO'] == 'true'){
- $scoes->elements[$manifest][$parent->organization][$parent->identifier]->usecurrentattemptprogressinfo = 1;
+ if ($sequencing['attrs']['USECURRENTATTEMPTPROGRESSINFO'] == 'true') {
+ $scoes->elements[$manifest][$parent->organization][$parent->identifier]->usecurrentattemptprogressinfo = 1;
}
}
- if ($sequencing['name']=='ADLSEQ:CONSTRAINEDCHOICECONSIDERATIONS'){
- //Xu ly cac dieu kien rang buoc thu tu
- if ($sequencing['attrs']['CONSTRAINCHOICE'] == 'true'){
- $scoes->elements[$manifest][$parent->organization][$parent->identifier]->constrainChoice = 1;
+ if ($sequencing['name']=='ADLSEQ:CONSTRAINEDCHOICECONSIDERATIONS') {
+ if ($sequencing['attrs']['CONSTRAINCHOICE'] == 'true') {
+ $scoes->elements[$manifest][$parent->organization][$parent->identifier]->constrainChoice = 1;
}
- if ($sequencing['attrs']['PREVENTACTIVATION'] == 'true'){
- $scoes->elements[$manifest][$parent->organization][$parent->identifier]->preventactivation = 1;
+ if ($sequencing['attrs']['PREVENTACTIVATION'] == 'true') {
+ $scoes->elements[$manifest][$parent->organization][$parent->identifier]->preventactivation = 1;
}
}
- if ($sequencing['name']=='IMSSS:OBJECTIVES'){
- //Xu ly cac cac gia tri muc tieu
- foreach ($sequencing['children'] as $objective){
- if($objective['name']=='IMSSS:PRIMARYOBJECTIVE'){
- //Xac dinh primary objective de lay thong so
- foreach ($objective['children'] as $primaryobjective){
- if($primaryobjective['name']=='IMSSS:MINNORMALIZEDMEASURE'){ $scoes->elements[$manifest][$parent->organization][$parent->identifier]->minnormalizedmeasure = $primaryobjective['tagData'];
+ if ($sequencing['name']=='IMSSS:OBJECTIVES') {
+ foreach ($sequencing['children'] as $objective) {
+ if ($objective['name']=='IMSSS:PRIMARYOBJECTIVE') {
+ foreach ($objective['children'] as $primaryobjective) {
+ if ($primaryobjective['name']=='IMSSS:MINNORMALIZEDMEASURE') {
+ $scoes->elements[$manifest][$parent->organization][$parent->identifier]->minnormalizedmeasure = $primaryobjective['tagData'];
}
}
}
}
}
- if ($sequencing['name']=='IMSSS:LIMITCONDITIONS'){
- //Xu ly cac cac gia tri cac dieu kien gioi han
- if (!empty($sequencing['attrs']['ATTEMPTLIMIT'])){
- $scoes->elements[$manifest][$parent->organization][$parent->identifier]->attemptLimit = $sequencing['attrs']['ATTEMPTLIMIT'];
+ if ($sequencing['name']=='IMSSS:LIMITCONDITIONS') {
+ if (!empty($sequencing['attrs']['ATTEMPTLIMIT'])) {
+ $scoes->elements[$manifest][$parent->organization][$parent->identifier]->attemptLimit = $sequencing['attrs']['ATTEMPTLIMIT'];
}
- if (!empty($sequencing['attrs']['ATTEMPTABSOLUTEDURATIONLIMIT'])){
- $scoes->elements[$manifest][$parent->organization][$parent->identifier]->attemptAbsoluteDurationLimit = $sequencing['attrs']['ATTEMPTABSOLUTEDURATIONLIMIT'];
+ if (!empty($sequencing['attrs']['ATTEMPTABSOLUTEDURATIONLIMIT'])) {
+ $scoes->elements[$manifest][$parent->organization][$parent->identifier]->attemptAbsoluteDurationLimit = $sequencing['attrs']['ATTEMPTABSOLUTEDURATIONLIMIT'];
}
}
- if ($sequencing['name']=='IMSSS:ROLLUPRULES'){
+ if ($sequencing['name']=='IMSSS:ROLLUPRULES') {
$rolluprules = array();
- //Phan danh cho RollupRule
- if (!empty($sequencing['attrs']['ROLLUPOBJECTIVESATISFIED'])){
- if ($sequencing['attrs']['ROLLUPOBJECTIVESATISFIED']== 'false'){
- $scoes->elements[$manifest][$parent->organization][$parent->identifier]->rollupobjectivesatisfied = 0;
+ if (!empty($sequencing['attrs']['ROLLUPOBJECTIVESATISFIED'])) {
+ if ($sequencing['attrs']['ROLLUPOBJECTIVESATISFIED']== 'false') {
+ $scoes->elements[$manifest][$parent->organization][$parent->identifier]->rollupobjectivesatisfied = 0;
}
}
- if (!empty($sequencing['attrs']['ROLLUPPROGRESSCOMPLETION'])){
- if ($sequencing['attrs']['ROLLUPPROGRESSCOMPLETION']== 'false'){
- $scoes->elements[$manifest][$parent->organization][$parent->identifier]->rollupprogresscompletion = 0;
+ if (!empty($sequencing['attrs']['ROLLUPPROGRESSCOMPLETION'])) {
+ if ($sequencing['attrs']['ROLLUPPROGRESSCOMPLETION']== 'false') {
+ $scoes->elements[$manifest][$parent->organization][$parent->identifier]->rollupprogresscompletion = 0;
}
}
- if (!empty($sequencing['attrs']['OBJECTIVEMEASUREWEIGHT'])){
+ if (!empty($sequencing['attrs']['OBJECTIVEMEASUREWEIGHT'])) {
$scoes->elements[$manifest][$parent->organization][$parent->identifier]->objectivemeasureweight = $sequencing['attrs']['OBJECTIVEMEASUREWEIGHT'];
}
if (!empty($sequencing['children'])){
- foreach ($sequencing['children'] as $sequencingrolluprule){
- if ($sequencingrolluprule['name']=='IMSSS:ROLLUPRULE' ){
+ foreach ($sequencing['children'] as $sequencingrolluprule) {
+ if ($sequencingrolluprule['name']=='IMSSS:ROLLUPRULE' ) {
$rolluprule = new stdClass();
- if ($sequencingrolluprule['attrs']['CHILDACTIVITYSET'] !=' '){
+ if ($sequencingrolluprule['attrs']['CHILDACTIVITYSET'] !=' ') {
$rolluprule->childactivityset = $sequencingrolluprule['attrs']['CHILDACTIVITYSET'];
- ////fwrite($ft,"\n Thiet lap them 1 childActivitySet la ".$rolluprule->childactivityset);
-
- //Phan xu ly danh sach condition
- if (!empty($sequencingrolluprule['children'])){
- foreach ($sequencingrolluprule['children'] as $rolluproleconditions)
- {
- if ($rolluproleconditions['name']=='IMSSS:ROLLUPCONDITIONS'){
+ if (!empty($sequencingrolluprule['children'])) {
+ foreach ($sequencingrolluprule['children'] as $rolluproleconditions) {
+ if ($rolluproleconditions['name']=='IMSSS:ROLLUPCONDITIONS') {
$conditions = array();
- if (!empty($rolluproleconditions['attrs']['conditionCombination'])){
- $rolluprule->conditionCombination = $rolluproleconditions['attrs']['conditionCombination'];
+ if (!empty($rolluproleconditions['attrs']['conditionCombination'])) {
+ $rolluprule->conditionCombination = $rolluproleconditions['attrs']['conditionCombination'];
}
- foreach ($rolluproleconditions['children'] as $rolluprulecondition){
- if ($rolluprulecondition['name']=='IMSSS:ROLLUPCONDITION'){
+ foreach ($rolluproleconditions['children'] as $rolluprulecondition) {
+ if ($rolluprulecondition['name']=='IMSSS:ROLLUPCONDITION') {
$condition = new stdClass();
- if (!empty($rolluprulecondition['attrs']['OPERATOR'])){
+ if (!empty($rolluprulecondition['attrs']['OPERATOR'])) {
$condition->operator = $rolluprulecondition['attrs']['OPERATOR'];
}
- if (!empty($rolluprulecondition['attrs']['CONDITION'])){
+ if (!empty($rolluprulecondition['attrs']['CONDITION'])) {
$condition->condition = $rolluprulecondition['attrs']['CONDITION'];
}
- array_push($conditions,$condition);
- ////fwrite($ft,"Da them mot rolluprulecondition");
+ array_push($conditions,$condition);
}
-
}
- $rolluprule->conditions = $conditions;
+ $rolluprule->conditions = $conditions;
}
- if ($rolluproleconditions['name']=='IMSSS:ROLLUPACTION'){
- $rolluprule->rollupruleaction = $rolluproleconditions['attrs']['ACTION'];
+ if ($rolluproleconditions['name']=='IMSSS:ROLLUPACTION') {
+ $rolluprule->rollupruleaction = $rolluproleconditions['attrs']['ACTION'];
}
}
}
- //Ket thuc xu ly danh sach condition
-
}
- ////fwrite($ft,"\n Dua them 1 rule vao \n");
array_push($rolluprules, $rolluprule);
- ////fwrite($ft,"\n Dua them 1 rule vao mang \n");
}
-
}
}
$scoes->elements[$manifest][$parent->organization][$parent->identifier]->rolluprules = $rolluprules;
-
-// ////fwrite($ft,"\n >>>>NOW TEST ");
-// foreach ($scoes->elements[$manifest][$parent->organization][$parent->identifier]->rolluprules as $rolluptest){
-// ////fwrite($ft,"\n >>>> Gia tri Test thu duoc la:".$rolluptest->childactivityset);
-
}
-
-
- if ($sequencing['name']=='IMSSS:SEQUENCINGRULES'){
- //Xu ly cac dieu kien Rules cua Sequencing
- //////fwrite($ft,"\n Xuat hien SEQUENCINGRULES >>>>>>>>>>");
+ if ($sequencing['name']=='IMSSS:SEQUENCINGRULES') {
$sequencingrules = array();
- foreach ($sequencing['children'] as $conditionrules){
- if($conditionrules['name']=='IMSSS:EXITCONDITIONRULE'){
- $sequencingrule = new stdClass();
- //Phan xu ly danh sach condition
- //////fwrite($ft,"\n Xuat hien exitrule >>>>>>>>>>");
- if (!empty($conditionrules['children'])){
- foreach ($conditionrules['children'] as $conditionrule)
- {
- if ($conditionrule['name']=='IMSSS:RULECONDITIONS'){
- $ruleconditions = array();
- if (!empty($conditionrule['attrs']['conditionCombination'])){
+ foreach ($sequencing['children'] as $conditionrules) {
+ if ($conditionrules['name']=='IMSSS:EXITCONDITIONRULE') {
+ $sequencingrule = new stdClass();
+ if (!empty($conditionrules['children'])) {
+ foreach ($conditionrules['children'] as $conditionrule) {
+ if ($conditionrule['name']=='IMSSS:RULECONDITIONS') {
+ $ruleconditions = array();
+ if (!empty($conditionrule['attrs']['conditionCombination'])) {
$sequencingrule->conditionCombination = $conditionrule['attrs']['conditionCombination'];
- }
- foreach ($conditionrule['children'] as $rulecondition){
- if ($rulecondition['name']=='IMSSS:RULECONDITION'){
- $condition = new stdClass();
- if (!empty($rulecondition['attrs']['OPERATOR'])){
- $condition->operator = $rulecondition['attrs']['OPERATOR'];
- }
- if (!empty($rulecondition['attrs']['CONDITION'])){
- $condition->condition = $rulecondition['attrs']['CONDITION'];
- }
- if (!empty($rulecondition['attrs']['MEASURETHRESHOLD'])){
- $condition->measurethreshold = $rulecondition['attrs']['MEASURETHRESHOLD'];
- }
- if (!empty($rulecondition['attrs']['REFERENCEDOBJECTIVE'])){
- $condition->referencedobjective = $rulecondition['attrs']['REFERENCEDOBJECTIVE'];
- }
- array_push($ruleconditions,$condition);
- ////fwrite($ft,"\n Da them mot rulecondition trong exitrule");
+ }
+ foreach ($conditionrule['children'] as $rulecondition) {
+ if ($rulecondition['name']=='IMSSS:RULECONDITION') {
+ $condition = new stdClass();
+ if (!empty($rulecondition['attrs']['OPERATOR'])) {
+ $condition->operator = $rulecondition['attrs']['OPERATOR'];
}
-
+ if (!empty($rulecondition['attrs']['CONDITION'])) {
+ $condition->condition = $rulecondition['attrs']['CONDITION'];
+ }
+ if (!empty($rulecondition['attrs']['MEASURETHRESHOLD'])) {
+ $condition->measurethreshold = $rulecondition['attrs']['MEASURETHRESHOLD'];
+ }
+ if (!empty($rulecondition['attrs']['REFERENCEDOBJECTIVE'])) {
+ $condition->referencedobjective = $rulecondition['attrs']['REFERENCEDOBJECTIVE'];
+ }
+ array_push($ruleconditions,$condition);
}
- $sequencingrule->ruleconditions = $ruleconditions;
}
- if ($conditionrule['name']=='IMSSS:RULEACTION'){
+ $sequencingrule->ruleconditions = $ruleconditions;
+ }
+ if ($conditionrule['name']=='IMSSS:RULEACTION') {
$sequencingrule->exitconditionruleaction = $conditionrule['attrs']['ACTION'];
+ }
+ }
+ }
+ array_push($sequencingrules,$sequencingrule);
+ }
+ if ($conditionrules['name']=='IMSSS:PRECONDITIONRULE') {
+ $sequencingrule = new stdClass();
+ if (!empty($conditionrules['children'])) {
+ foreach ($conditionrules['children'] as $conditionrule) {
+ if ($conditionrule['name']=='IMSSS:RULECONDITIONS') {
+ $ruleconditions = array();
+ if (!empty($conditionrule['attrs']['conditionCombination'])) {
+ $sequencingrule->conditionCombination = $conditionrule['attrs']['conditionCombination'];
+ }
+ foreach ($conditionrule['children'] as $rulecondition) {
+ if ($rulecondition['name']=='IMSSS:RULECONDITION') {
+ $condition = new stdClass();
+ if (!empty($rulecondition['attrs']['OPERATOR'])) {
+ $condition->operator = $rulecondition['attrs']['OPERATOR'];
+ }
+ if (!empty($rulecondition['attrs']['CONDITION'])) {
+ $condition->condition = $rulecondition['attrs']['CONDITION'];
+ }
+ if (!empty($rulecondition['attrs']['MEASURETHRESHOLD'])) {
+ $condition->measurethreshold = $rulecondition['attrs']['MEASURETHRESHOLD'];
+ }
+ if (!empty($rulecondition['attrs']['REFERENCEDOBJECTIVE'])) {
+ $condition->referencedobjective = $rulecondition['attrs']['REFERENCEDOBJECTIVE'];
+ }
+ array_push($ruleconditions,$condition);
+ }
}
+ $sequencingrule->ruleconditions = $ruleconditions;
+ }
+ if ($conditionrule['name']=='IMSSS:RULEACTION') {
+ $sequencingrule->preconditionruleaction = $conditionrule['attrs']['ACTION'];
}
}
- //Ket thuc xu ly danh sach condition
- array_push($sequencingrules,$sequencingrule);
+ }
+ array_push($sequencingrules,$sequencingrule);
}
- if ($conditionrules['name']=='IMSSS:PRECONDITIONRULE'){
+ if ($conditionrules['name']=='IMSSS:POSTCONDITIONRULE') {
$sequencingrule = new stdClass();
- //Phan xu ly danh sach condition
- if (!empty($conditionrules['children'])){
- foreach ($conditionrules['children'] as $conditionrule)
- {
+ if (!empty($conditionrules['children'])) {
+ foreach ($conditionrules['children'] as $conditionrule) {
if ($conditionrule['name']=='IMSSS:RULECONDITIONS'){
$ruleconditions = array();
if (!empty($conditionrule['attrs']['conditionCombination'])){
}
if (!empty($rulecondition['attrs']['REFERENCEDOBJECTIVE'])){
$condition->referencedobjective = $rulecondition['attrs']['REFERENCEDOBJECTIVE'];
- }
- array_push($ruleconditions,$condition);
- ////fwrite($ft,"\n Da them mot rulecondition trong prerule");
+ }
+ array_push($ruleconditions,$condition);
}
-
}
- $sequencingrule->ruleconditions = $ruleconditions;
+ $sequencingrule->ruleconditions = $ruleconditions;
}
if ($conditionrule['name']=='IMSSS:RULEACTION'){
- $sequencingrule->preconditionruleaction = $conditionrule['attrs']['ACTION'];
- }
- }
- }
- //Ket thuc xu ly danh sach condition
- array_push($sequencingrules,$sequencingrule);
- }
- if($conditionrules['name']=='IMSSS:POSTCONDITIONRULE'){
- $sequencingrule = new stdClass();
- //Phan xu ly danh sach condition
- if (!empty($conditionrules['children'])){
- foreach ($conditionrules['children'] as $conditionrule)
- {
- if ($conditionrule['name']=='IMSSS:RULECONDITIONS'){
- $ruleconditions = array();
- if (!empty($conditionrule['attrs']['conditionCombination'])){
- $sequencingrule->conditionCombination = $conditionrule['attrs']['conditionCombination'];
- }
- foreach ($conditionrule['children'] as $rulecondition){
- if ($rulecondition['name']=='IMSSS:RULECONDITION'){
- $condition = new stdClass();
- if (!empty($rulecondition['attrs']['OPERATOR'])){
- $condition->operator = $rulecondition['attrs']['OPERATOR'];
- }
- if (!empty($rulecondition['attrs']['CONDITION'])){
- $condition->condition = $rulecondition['attrs']['CONDITION'];
- }
- if (!empty($rulecondition['attrs']['MEASURETHRESHOLD'])){
- $condition->measurethreshold = $rulecondition['attrs']['MEASURETHRESHOLD'];
- }
- if (!empty($rulecondition['attrs']['REFERENCEDOBJECTIVE'])){
- $condition->referencedobjective = $rulecondition['attrs']['REFERENCEDOBJECTIVE'];
- }
- array_push($ruleconditions,$condition);
- ////fwrite($ft,"\n Da them mot rulecondition trong postrule");
- }
-
- }
- $sequencingrule->ruleconditions = $ruleconditions;
- }
- if ($conditionrule['name']=='IMSSS:RULEACTION'){
$sequencingrule->postconditionruleaction = $conditionrule['attrs']['ACTION'];
- }
}
}
- //Ket thuc xu ly danh sach condition
- array_push($sequencingrules,$sequencingrule);
+ }
+ array_push($sequencingrules,$sequencingrule);
}
- $scoes->elements[$manifest][$parent->organization][$parent->identifier]->sequencingrules = $sequencingrules;
+ $scoes->elements[$manifest][$parent->organization][$parent->identifier]->sequencingrules = $sequencingrules;
}
}
}
-
break;
-
+ // End Add
}
}
}
-
return $scoes;
}
function scorm_parse_scorm($pkgdir,$scormid) {
global $CFG;
-
- //$f = "D:\\test.txt";
- //@$ft = fopen($f,"a");
- //////fwrite($ft,"\n Xu ly doc thong tin trong ham scorm_parse_scorm \n");
$launch = 0;
$manifestfile = $pkgdir.'/imsmanifest.xml';
$item->scorm = $scormid;
$item->manifest = $manifest;
$item->organization = $organization;
- //////fwrite($ft,"\n ---- Item chuan bi dua vao la ".$item->identifier);
$id = insert_record('scorm_scoes',$item);
- //////fwrite($ft,"\n Lay duoc ScoID la ".$id);
+ // Added by Pham Minh Duc
$item->scormid = $scormid;
$item->scoid = $id;
$idControlMode = insert_record('scorm_sequencing_controlmode',$item);
- if (!empty($item->sequencingrules)){
- ////fwrite($ft,"\n ++++++++Them SequencingRules cho SCO: ".$item->scoid) ;
- foreach($item->sequencingrules as $sequencingrule){
- ////fwrite($ft,"\n ----Chuan bi them 1 sequencingrule vao CSDL: ");
+ if (!empty($item->sequencingrules)) {
+ foreach($item->sequencingrules as $sequencingrule) {
$sequencingrule->scormid = $scormid;
$sequencingrule->scoid = $item->scoid;
- ////fwrite($ft,"\n ----Thong tin Scormid: ".$sequencingrule->scormid);
- ////fwrite($ft,"\n ----Thong tin Scoid: ".$sequencingrule->scoid);
$idruleconditions = insert_record('scorm_sequencing_ruleconditions',$sequencingrule);
- foreach($sequencingrule->ruleconditions as $rulecondition){
+ foreach($sequencingrule->ruleconditions as $rulecondition) {
$rulecondition->scormid = $sequencingrule->scormid;
$rulecondition->scoid = $sequencingrule->scoid;
$rulecondition->ruleconditionsid = $idruleconditions;
$idrulecondition = insert_record('scorm_sequencing_rulecondition',$rulecondition);
- ////fwrite($ft,"\n ----Da them 1 sequencingrulecondition vao CSDL: ");
}
-
}
}
- if (!empty($item->rolluprules)){
- ////fwrite($ft,"\n ++++++++Them RollupRules cho SCO: ".$item->scoid) ;
+ if (!empty($item->rolluprules)) {
$idControlMode = insert_record('scorm_sequencing_rolluprules',$item);
- ////fwrite($ft,"\n ----Gia tri idRollupRules \n");
- foreach($item->rolluprules as $rollup)
- {
- ////fwrite($ft,"\n ----Chuan bi them 1 rule vao CSDL ");
+ foreach($item->rolluprules as $rollup) {
$rollup->rolluprulesid =$idControlMode;
$rollup->scormid = $scormid;
$rollup->scoid = $item->scoid;
- ////fwrite($ft,"\n ----Cac thong tin cua Rule: \n ");
- ////fwrite($ft,"\n ----rolluprulesid: ".$rollup->rolluprulesid);
- ////fwrite($ft,"\n ----scormid: ".$rollup->scormid );
- ////fwrite($ft,"\n ----scoid: ".$rollup->scoid);
- ////fwrite($ft,"\n ----activichild: ".$rollup->childactivityset);
- ////fwrite($ft,"\n ----rollupaction: ".$rollup->rollupruleaction);
$idRollupRule = insert_record('scorm_sequencing_rolluprule',$rollup);
- ////fwrite($ft,"\n ----Dua them 1 rule vao CSDL -- Chuan bi them condition vao rule".$idRollupRule);
$rollup->rollupruleid = $idRollupRule;
$idconditions = insert_record('scorm_sequencing_rollupruleconditions',$rollup);
- ////fwrite($ft,"\n --Dua cac condition con vao CSDL");
foreach($rollup->conditions as $condition){
$condition->ruleconditionsid = $idconditions;
$condition->scormid = $rollup->scormid;
$condition->scoid = $rollup->scoid;
$idcondition = insert_record('scorm_sequencing_rolluprulecondition',$condition);
- ////fwrite($ft,"\n --Da dua them 1 condition vao CSDL");
}
-
-
}
}
+ // End Add
if (($launch == 0) && ((empty($scoes->defaultorg)) || ($scoes->defaultorg == $identifier))) {
$launch = $id;
}
}
$result = scorm_get_toc($user,$scorm,'structlist',$orgidentifier);
$incomplete = $result->incomplete;
-// echo ("Toc ---");
echo $result->toc;
-// echo ("Ket thuc");
print_simple_box_end();
?>
<div class="center">
<form name="theform" method="post" action="<?php echo $CFG->wwwroot ?>/mod/scorm/player.php?id=<?php echo $cm->id ?>"<?php echo $scorm->popup == 1?' target="newwin"':'' ?>>
<?php
+ // Added by Pham Minh Duc
+ $suspend = get_record("scorm_suspendtrack","scormid",$scorm->id,"userid",$user->id);
+ // End Add
-// Thiet lap suspend
- $suspend = get_record("scorm_suspendtrack","scormid",$scorm->id,"userid",$user->id);
-
-//------------------
if ($scorm->hidebrowse == 0) {
print_string("mode","scorm");
echo ': <input type="radio" id="b" name="mode" value="browse" /><label for="b">'.get_string('browse','scorm').'</label>'."\n";
if ($incomplete === true) {
echo '<input type="radio" id="n" name="mode" value="normal" checked="checked" /><label for="n">'.get_string('normal','scorm')."</label>\n";
-
- //Neu co luu tru thi co the chon continue de tiep tu
- if (!empty($suspend))
- {
+ // Added by Pham Minh Duc
+ if (!empty($suspend)) {
echo '<input type="radio" id="n" name="mode" value="continue" checked="checked" /><label for="n">'.get_string('continue','scorm')."</label>\n";
}
-
+ // End Add
} else {
echo '<input type="radio" id="r" name="mode" value="review" checked="checked" /><label for="r">'.get_string('review','scorm')."</label>\n";
}
<?php
}
-function scorm_update_status($scormid,$scoid)
-{
-
-}
-
-
function scorm_repeater($what, $times) {
if ($times <= 0) {
return null;
return $return;
}
-//chuyen toi SCO duoc thuc hien tiep theo
-function scorm_get_nextsco($scormid,$scoid)
-{
-
-
-
-}
-//Chuyen toi SCO duoc thuc hien truoc
-function scorm_get_presco($scormid,$scoid)
-{
-
-
-
-}
-//Xac dinh xem doi tuong do co cho phep lua chon khong
-function scorm_isChoice($scormid,$scoid)
-{
-// //$f = "D:\\test.txt";
-// //@$ft = fopen($f,"a");
- $sco = get_record("scorm_sequencing_controlmode","scormid",$scormid,"scoid",$scoid);
-// ////fwrite($ft,"\n Xu ly doc thong tin trong ham scorm_isChoice scormid la ".$scormid." scoid la: ".$scoid);
- $scoparent = get_record("scorm_sequencing_controlmode","scormid",$scormid,"identifier",$sco->parent);
-// ////fwrite($ft,"\n Xu ly doc thong tin trong ham scorm_isChoice scoparent scormid la ".$scormid." scoid la: ".$scoparent->scoid);
-
-
-// ////fwrite($ft,"\n Xu ly doc thong tin trong ham scorm_isChoice gia tri la: ".$scoparent->choice);
- return $scoparent->choice;
-}
-
-//Xac dinh xem doi tuong do co cho phep lua chon thoat khong
-function scorm_isChoiceexit($scormid,$scoid)
-{
- $sco = get_record("scorm_sequencing_controlmode","scormid",$scormid,"scoid",$scoid);
- $scoparent = get_record("scorm_sequencing_controlmode","scormid",$scormid,"identifier",$sco->parent);
-
- return $scoparent->choiceexit;
-}
/* Usage
Grab some XML data, either from a file, URL, etc. however you want. Assume storage in $strYourXML;
* @return string
*/
function utf8_to_entities($str) {
+ global $CFG;
+
$entities = '';
$values = array();
$lookingfor = 1;
- for ($i = 0; $i < strlen($str); $i++) {
- $thisvalue = ord($str[$i]);
- if ($thisvalue < 128) {
- $entities .= $str[$i]; // Leave ASCII chars unchanged
- } else {
- if (count($values) == 0) {
- $lookingfor = ($thisvalue < 224) ? 2 : 3;
- }
- $values[] = $thisvalue;
- if (count($values) == $lookingfor) {
- $number = ($lookingfor == 3) ?
- (($values[0] % 16) * 4096) + (($values[1] % 64) * 64) + ($values[2] % 64):
- (($values[0] % 32) * 64) + ($values[1] % 64);
- $entities .= '&#' . $number . ';';
- $values = array();
- $lookingfor = 1;
+ if (empty($CFG->unicodedb)) { // If Unicode DB support enable does not convert string
+ $textlib = textlib_get_instance();
+ for ($i = 0; $i < $textlib->strlen($str,'utf-8'); $i++) {
+ $thisvalue = ord($str[$i]);
+ if ($thisvalue < 128) {
+ $entities .= $str[$i]; // Leave ASCII chars unchanged
+ } else {
+ if (count($values) == 0) {
+ $lookingfor = ($thisvalue < 224) ? 2 : 3;
+ }
+ $values[] = $thisvalue;
+ if (count($values) == $lookingfor) {
+ $number = ($lookingfor == 3) ?
+ (($values[0] % 16) * 4096) + (($values[1] % 64) * 64) + ($values[2] % 64):
+ (($values[0] % 32) * 64) + ($values[1] % 64);
+ $entities .= '&#' . $number . ';';
+ $values = array();
+ $lookingfor = 1;
+ }
}
}
+ return $entities;
+ } else {
+ return $str;
}
- return $entities;
}
/**