>>>> SCO goi Rollup la ".$scoidchild); $scochild = get_record("scorm_scoes","id",$scoidchild); $scoparent = get_record("scorm_scoes","scorm",$scormid,"identifier",$scochild->parent); //Danh sach cac con cua cha $scochildren = get_records_select("scorm_scoes","scorm =".$scormid." and parent ='".$scoparent->identifier."'"); //Lay gia tri last attempt //fwrite($ft,"\n >>>>> Bat dau xu ly Rollup SCO cha ".$scoparent->id); $attempt = scorm_get_last_attempt($scormid,$userid); if(!empty($scoparent)){ $scoid = $scoparent->id; $rolluprules = get_record("scorm_sequencing_rolluprules","scormid",$scormid,"scoid",$scoid); if (!empty($rolluprules)){ $idrolluprules = $rolluprules->id; $rules = get_records_select('scorm_sequencing_rolluprule','scoid ='.$scoid.' and rolluprulesid ='. $idrolluprules); foreach ($rules as $rule){ $ruleid = $rule->id; $ruleConditions = get_record("scorm_sequencing_rollupruleconditions","scoid",$scoid,"rollupruleid",$ruleid); $idruleConditions = $ruleConditions->id; $conditions = get_records_select('scorm_sequencing_rolluprulecondition','scoid ='.$scoid.' and ruleconditionsid ='.$idruleConditions); //Truong hop 1: childactivitySet = all // conditioncombination = any if (($rule->childactivityset == 'all') && ($ruleConditions->conditioncombination=='any')){ foreach($conditions as $condition){ $conditionOK = false; //Condition 1: condition = attempted operator = 'noOp' // Thuc hien rollupaction if (($condition->condition == 'attempted') && ($condition->operator=='noOp')){ $conditionOK = true; foreach ($scochildren as $sco){ //fwrite($ft,"\n >>>>> Xu ly Rollup voi dieu kien attempt \n"); $usertrack = scorm_get_tracks($sco->id,$userid); if ($usertrack->attempt_status != 'attempted'){ //fwrite($ft,"\n >>>>> Co SCO con chua attempted \n"); $conditionOK = false; } } } //Condition 2: condition = attempted operator = 'not' // Thuc hien rollupaction if (($condition->condition == 'attempted') && ($condition->operator=='not')){ $conditionOK = true; foreach ($scochildren as $sco){ //fwrite($ft,"\n >>>>> Xu ly Rollup voi dieu kien not attempt \n"); $usertrack = scorm_get_tracks($sco->id,$userid); if ($usertrack->attempt_status != 'notattempted'){ $conditionOK = false; } } } //Condition 3: condition = satisfied operator = 'noOp' // Thuc hien rollupaction if (($condition->condition == 'satisfied') && ($condition->operator=='noOp')){ $conditionOK = true; foreach ($scochildren as $sco){ $usertrack = scorm_get_tracks($sco->id,$userid); if ($usertrack->satisfied_status != 'satisfied'){ $conditionOK = false; } } } //Condition 4: condition = satisfied operator = 'not' // Thuc hien rollupaction if (($condition->condition == 'satisfied') && ($condition->operator=='not')){ $conditionOK = true; foreach ($scochildren as $sco){ $usertrack = scorm_get_tracks($sco->id,$userid); if ($usertrack->satisfied_status != 'notSatisfied'){ $conditionOK = false; } } } //Condition 5: condition = completed operator = 'noOp' // Thuc hien rollupaction if (($condition->condition == 'completed') && ($condition->operator=='noOp')){ $conditionOK = true; foreach ($scochildren as $sco){ $usertrack = scorm_get_tracks($sco->id,$userid); if ($usertrack->attempt_status != 'completed'){ $conditionOK = false; } } } //Condition 6: condition = completed operator = 'not' // Thuc hien rollupaction if (($condition->condition == 'completed') && ($condition->operator=='not')){ $conditionOK = true; foreach ($scochildren as $sco){ $usertrack = scorm_get_tracks($sco->id,$userid); if ($usertrack->attempt_status != 'notcompleted'){ $conditionOK = false; } } } //Neu dieu kien van dung sau khi xem xet thi thuc hien action if ($conditionOK == true){ if ($ruleConditions->rollupruleaction == 'completed') { scorm_insert_track($userid,$scormid,$scoid,$attempt,'cmi.completion_status','completed'); //fwrite($ft,"\n >>>>> Xu ly Rollup thanh cong voi completed cho SCO ".$scoid); } if ($ruleConditions->rollupruleaction == 'satisfied') { scorm_insert_track($userid,$scormid,$scoid,$attempt,'cmi.success_status','passed'); //fwrite($ft,"\n >>>>> Xu ly Rollup thanh cong voi satisfied\n"); } if ($ruleConditions->rollupruleaction == 'notSatisfied') { scorm_insert_track($userid,$scormid,$scoid,$attempt,'cmi.success_status','failed'); //fwrite($ft,"\n >>>>> Xu ly Rollup thanh cong voi notSatisfied\n"); } //echo ""; $sequencingResult->rule = 'exit'; $sequencingResult->action = 'exit'; } if ($sequencingrule->preconditionruleaction=='disabled') { //fwrite($ft,"\n >>>>> Xu ly Sequencing thanh cong -- Thuc hien su kien disable \n"); echo ""; $sequencingResult->rule = 'pre'; $sequencingResult->action = 'disable'; } } } } } return $sequencingResult; } function get_sco_after_exit($scoid,$scormid){ $scochild = get_record("scorm_scoes","id",$scoid); $scoparent = get_record("scorm_scoes","scorm",$scormid,"identifier",$scochild->parent); $exitscoid = $scoid++; $exitscochild = get_record("scorm_scoes","id",$exitscoid,"scorm",$scormid); if (empty($exitscochild)){ //Da ra ngoai vung scoid. Hay day chinh la sco cuoi cung return 0; } else{ $exitscoparent = get_record("scorm_scoes","scorm",$scormid,"identifier",$exitscochild->parent); //Neu chua ra khoi activity do thi tiep tuc while ($exitscoparent->id == $scoparent->id){ $exitscoid++; $exitscochild = get_record("scorm_scoes","id",$exitscoid); if (empty($exitscochild)){ //Da ra ngoai vung scoid. Hay day chinh la sco cuoi cung return 0; } else{ $exitscoparent = get_record("scorm_scoes","scorm",$scormid,"identifier",$exitscochild->parent); } } } return $exitscoid; } ?>