From f69db63ed436c217659e51f9dec6b4def1a606d7 Mon Sep 17 00:00:00 2001 From: bobopinna Date: Thu, 10 Aug 2006 11:32:48 +0000 Subject: [PATCH] Cleaned code --- mod/scorm/locallib.php | 1155 +++++++++++++++++----------------------- 1 file changed, 488 insertions(+), 667 deletions(-) diff --git a/mod/scorm/locallib.php b/mod/scorm/locallib.php index 980ca00468..d744cbc4cd 100755 --- a/mod/scorm/locallib.php +++ b/mod/scorm/locallib.php @@ -1,10 +1,228 @@ - 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 /** @@ -50,11 +268,6 @@ function scorm_datadir($strPath) */ 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'; @@ -111,12 +324,6 @@ function scorm_string_wrap($stringa, $len=15) { } 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( @@ -144,9 +351,6 @@ function scorm_eval_prerequisites($prerequisites,$usertracks) { case '(': case ')': case '*': - //case '{': - //case '}': - //case ',': $element = trim($element); if (!empty($element)) { @@ -273,34 +477,11 @@ function scorm_eval_prerequisites($prerequisites,$usertracks) { 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; @@ -310,42 +491,11 @@ function scorm_insert_track($userid,$scormid,$scoid,$attempt,$element,$value) { $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); @@ -366,243 +516,78 @@ function scorm_add_time($a, $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 { @@ -610,12 +595,10 @@ function scorm_grade_user_new($scoes, $userid, $grademethod=VALUESCOES) { } 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; } } @@ -626,14 +609,10 @@ function scorm_count_launchable($scormid,$organization) { 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 = ''; @@ -666,22 +645,15 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n $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; } } @@ -744,18 +716,15 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n if (empty($scoid) && ($mode != 'normal')) { $scoid = $sco->id; } - //Neu la sco suspend thi hien thi anh khac if ($suspendscoid == $sco->id){ $result->toc .= 'Dang tam dung o day'; } else { - //----------------------- if (isset($usertracks[$sco->identifier])) { $usertrack = $usertracks[$sco->identifier]; $strstatus = get_string($usertrack->status,'scorm'); $result->toc .= ''.$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; @@ -793,17 +762,16 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n 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.''.format_string($sco->title).''.$score.$endbold."\n"; - $tocmenus[$sco->id] = scorm_repeater('−',$level) . '>' . format_string($sco->title); - } - else - { - $result->toc .= ' '.$startbold.format_string($sco->title).$score.$endbold."\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.''.format_string($sco->title).''.$score.$endbold."\n"; + $tocmenus[$sco->id] = scorm_repeater('−',$level) . '>' . format_string($sco->title); + } else { + $result->toc .= ' '.$startbold.format_string($sco->title).$score.$endbold."\n"; + $tocmenus[$sco->id] = scorm_repeater('−',$level) . '>' . format_string($sco->title); } + // End modify } else { if ($sco->id == $scoid) { $result->prerequisites = false; @@ -865,11 +833,6 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n } 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)) { @@ -880,30 +843,7 @@ function scorm_get_last_attempt($scormid, $userid) { } } -// 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; @@ -919,30 +859,25 @@ function scorm_get_tracks($scoid,$userid,$attempt='') { $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'){ @@ -952,13 +887,21 @@ function scorm_get_tracks($scoid,$userid,$attempt='') { $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; @@ -978,24 +921,12 @@ function scorm_get_tracks($scoid,$userid,$attempt='') { } } - -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); @@ -1054,20 +985,20 @@ function scorm_forge_cols_regexp($columns,$remodule='(".*")?,') { } 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); } @@ -1216,11 +1147,6 @@ function scorm_parse_aicc($pkgdir,$scormid){ } 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) { @@ -1234,12 +1160,6 @@ function scorm_get_resources($blocks) { } 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; @@ -1265,7 +1185,7 @@ function scorm_get_manifest($blocks,$scoes) { } 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']); @@ -1340,7 +1260,6 @@ function scorm_get_manifest($blocks,$scoes) { $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; @@ -1353,246 +1272,260 @@ function scorm_get_manifest($blocks,$scoes) { 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'])){ @@ -1612,83 +1545,33 @@ function scorm_get_manifest($blocks,$scoes) { } 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'; @@ -1710,66 +1593,45 @@ function scorm_parse_scorm($pkgdir,$scormid) { $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; } @@ -1865,31 +1727,26 @@ function scorm_view_display ($user, $scorm, $action, $cm, $blockwidth='') { } $result = scorm_get_toc($user,$scorm,'structlist',$orgidentifier); $incomplete = $result->incomplete; -// echo ("Toc ---"); echo $result->toc; -// echo ("Ket thuc"); print_simple_box_end(); ?>
popup == 1?' target="newwin"':'' ?>> 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 ': '."\n"; if ($incomplete === true) { echo '\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 '\n"; } - + // End Add } else { echo '\n"; } @@ -1917,12 +1774,6 @@ function scorm_view_display ($user, $scorm, $action, $cm, $blockwidth='') { 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; @@ -1992,30 +1806,37 @@ class xml2Array { * @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; } /** -- 2.39.5