Browse Source

[svn r19808] logic changes - allow sum total time in scorm - (partial FS#3994)

Isaac Flores 16 years ago
parent
commit
9b1fc8c58c
3 changed files with 82 additions and 21 deletions
  1. 31 8
      main/newscorm/learnpathItem.class.php
  2. 4 0
      main/newscorm/lp_view.php
  3. 47 13
      main/newscorm/scorm_api.php

+ 31 - 8
main/newscorm/learnpathItem.class.php

@@ -1015,6 +1015,7 @@ class learnpathItem{
     		$table = Database::get_course_table('lp_item_view');
     		$sql = "SELECT * FROM $table WHERE id = '".$this->db_item_view_id."' AND view_count = '".$this->get_attempt_id()."'";
     		if($this->debug>2){error_log('New LP - In learnpathItem::get_status() - Checking DB: '.$sql,0);}
+    		//error_log($sql);
     		$res = api_sql_query($sql);
     		if(Database::num_rows($res)==1){
     			$row = Database::fetch_array($res);
@@ -2174,10 +2175,25 @@ function get_terms()
      */
      function write_to_db()
      {
+	
    		if($this->debug>0){error_log('New LP - In learnpathItem::write_to_db()',0);}
    		$mode = $this->get_lesson_mode();
    		$credit = $this->get_credit();
-   		if(($this->type == 'sco') && ($credit == 'no-credit' OR $mode == 'review' OR $mode == 'browse'))
+   		$my_verified_status=$this->get_status(false);
+   		
+   		$item_view_table = Database::get_course_table('lp_item_view');
+		$sql_verified='SELECT status FROM '.$item_view_table.' WHERE lp_item_id="'.$this->db_id.'" AND lp_view_id="'.$this->view_id.'" AND view_count="'.$this->attempt_id.'" ;';
+		$rs_verified=api_sql_query($sql_verified,__FILE__,__LINE__);
+		$row_verified=Database::fetch_array($rs_verified);
+					
+   		$my_case_completed=array('completed','passed','browsed');
+   		if (in_array($sql_verified['status'],$my_case_completed)) {
+   			$save=false;
+   		} else {
+   			$save=true;
+   		}
+
+   		if(($save===false && $this->type == 'sco') ||(($this->type == 'sco') && ($credit == 'no-credit' OR $mode == 'review' OR $mode == 'browse')))
    		{
    			//this info shouldn't be saved as the credit or lesson mode info prevent it
    			if($this->debug>1){error_log('New LP - In learnpathItem::write_to_db() - credit('.$credit.') or lesson_mode('.$mode.') prevent recording!',0);}
@@ -2266,8 +2282,7 @@ function get_terms()
 	     				$my_type_lp=learnpath::get_type_static($this->lp_id);
 	     				// this is a array containing values finished
 	     				$case_completed=array('completed','passed','browsed');
-	     				$my_status = " status = '".$this->get_status(false)."' ,";
-	     				
+
 	     				//is not multiple attempts
 	     				if ($this->get_prevent_reinit()==1) {    				
 		  		     	// process of status verified into data base
@@ -2279,18 +2294,24 @@ function get_terms()
 	     				    //get type lp i.e 2=scorm and 1=lp dokeos	
 		    				// if not is completed or passed or browsed and learnig path is scorm
 		     				
-		     				if(!in_array($this->get_status(false),$case_completed) && $my_type_lp==2) {
-		     					$total_time =" total_time = total_time +".$this->get_total_time().", ";  
+		     				if(!in_array($this->get_status(false),$case_completed) && $my_type_lp==2 ) {//&& $this->type!='dir'
+		     					$total_time =" total_time = total_time +".$this->get_total_time().", "; 
+		     					$my_status = " status = '".$this->get_status(false)."' ,"; 
 		     				} else {
 		     					//verified into data base
-		     					if (!in_array($row_verified['status'],$case_completed) && $my_type_lp==2) {
+		     					if (!in_array($row_verified['status'],$case_completed) && $my_type_lp==2 ) { //&& $this->type!='dir'
 		     						$total_time =" total_time = total_time +".$this->get_total_time().", ";
-		     	 				} else {
+		     						$my_status = " status = '".$this->get_status(false)."' ,"; 
+		     	 				} elseif (in_array($row_verified['status'],$case_completed) && $my_type_lp==2 && $this->type!='sco' ) {//&& $this->type!='dir'
+		     	 					$total_time =" total_time = total_time +".$this->get_total_time().", ";
+		     	 					$my_status = " status = '".$this->get_status(false)."' ,"; 
+		     					}else {
 		     	 				//&& !in_array($row_verified['status'],$case_completed)
 		     	 				
 		     	 				//is lp dokeos
-		     	 					if ($my_type_lp==1) {
+		     	 					if ($my_type_lp==1 && $this->type!='chapter') {
 	     								$total_time =" total_time = total_time + ".$this->get_total_time().", ";
+	     								$my_status = " status = '".$this->get_status(false)."' ,"; 
 	     							}	
 		     	 				} 
 		     					
@@ -2301,9 +2322,11 @@ function get_terms()
 	     						//reset zero new attempt ?
 	     					} elseif (!in_array($this->get_status(false),$case_completed) &&  $my_type_lp==2){
 	     						$total_time =" total_time = ".$this->get_total_time().", ";
+	     						$my_status = " status = '".$this->get_status(false)."' ,"; 
 	     					} else {
 	     						//is lp dokeos
 	     						$total_time =" total_time = total_time +".$this->get_total_time().", ";
+	     						$my_status = " status = '".$this->get_status(false)."' ,"; 
 	     					}
 	     					
 	     				}

+ 4 - 0
main/newscorm/lp_view.php

@@ -273,6 +273,8 @@ if($_SESSION['oLP']->mode == 'fullscreen')
 	        </div>
 	        <div style="color: white;" onClick="cleanlog();">.</div>
     </div>
+	<input type="hidden" id="old_item" name ="old_item" value="0"/>
+    <input type="hidden" id="current_item_id" name ="current_item_id" value="0" />
     </td></tr></table>
 	<script language="JavaScript" type="text/javascript">
 	// Need to be called after the <head> to be sure window.oxajax is defined
@@ -442,6 +444,8 @@ else
 	        <div style="color: white;" onClick="cleanlog();">.</div>
         </div>
 		</div>
+	<input type="hidden" id="old_item" name ="old_item" value="0"/>
+    <input type="hidden" id="current_item_id" name ="current_item_id" value="0" />
     </td><td align="left" width="100%" valign="top">
     <div id="learningPathRightZone">
         <iframe id="content_id" name="content_name" src="<?php echo $src; ?>" border="0" frameborder="0" style="height:600px;width: 100%"></iframe>

+ 47 - 13
main/newscorm/scorm_api.php

@@ -1,4 +1,4 @@
-<?php // $Id: scorm_api.php 19665 2009-04-08 23:21:32Z juliomontoya $ 
+<?php // $Id: scorm_api.php 19808 2009-04-16 20:01:40Z iflorespaz $ 
 /*
 ============================================================================== 
 	Dokeos - elearning and course management software
@@ -157,6 +157,11 @@ var max_time_allowed = '<?php echo $oItem->get_max_time_allowed();?>';
 var interactions = new Array(<?php echo $oItem->get_interactions_js_array();?>);
 item_objectives = new Array();
 
+$(document).ready( function() { 
+	$("#current_item_id").attr("value",<?php echo $oItem->get_id();?>);
+	$("#old_item").attr("value",<?php echo $oItem->get_id();?>);	
+ } ); 
+ 
 //Dokeos internal variables
 var saved_lesson_status = 'not attempted';
 var lms_lp_id = <?php echo $oLP->get_id();?>;
@@ -695,21 +700,31 @@ function savedata(origin)
 	    	*/	
     	}
     }
-    
 	logit_lms('saving data (status='+lesson_status+' - interactions: '+ interactions.length +')',1);
-	xajax_save_item(lms_lp_id, lms_user_id, lms_view_id, lms_item_id, score, max, min, lesson_status, session_time, suspend_data, lesson_location, interactions, lms_item_core_exit);
-	if(item_objectives.length>0)
-	{
-		xajax_save_objectives(lms_lp_id,lms_user_id,lms_view_id,lms_item_id,item_objectives);
+	
+	old_item_id=$("#old_item").val();
+	
+	xajax_save_item(lms_lp_id, lms_user_id, lms_view_id, old_item_id, score, max, min, lesson_status, session_time, suspend_data, lesson_location, interactions, lms_item_core_exit);
+	
+	$("#old_item").attr("value",lms_item_id)
+	
+	if(item_objectives.length>0) {
+		xajax_save_objectives(lms_lp_id,lms_user_id,lms_view_id,old_item_id,item_objectives);
 	}
 }
 
 function LMSCommit(val) {
 		logit_scorm('LMSCommit()',0);
 		G_LastError = G_NoError ;
-		G_LastErrorMessage = 'No error';	
-		savedata('commit');
-	    commit = false ; //now changes have been commited, no need to update until next SetValue()
+		G_LastErrorMessage = 'No error';
+
+		my_lms_time=LMSGetValue('cmi.core.session_time');
+		my_lms_status=LMSGetValue('cmi.core.lesson_status');
+		
+		if (my_lms_time.length!=0 && my_lms_status.length!=0) {
+			savedata('commit');
+		}
+	    commit = 'false' ; //now changes have been commited, no need to update until next SetValue()
 		return('true');
 }
 
@@ -722,12 +737,14 @@ function LMSFinish(val) {
 		G_LastErrorMessage = 'No error';
 		// why commit==false?	
 		if (( commit == false )) { 	
-			logit_scorm('LMSFinish() (no LMSCommit())',1); 
+			logit_scorm('LMSFinish() (no LMSCommit())',1);
+			 
 		}
+
 		if ( commit == true ) {
 			logit_scorm('LMSFinish() called',1);		
 			savedata('finish');
-		    commit = false ;
+		    commit = 'false' ;
 		}
 		return('true');
 }
@@ -1098,7 +1115,7 @@ function switch_item(current_item, next_item){
 	if(lms_lp_type==1 || lms_item_type=='asset' || session_time == '0' || session_time == '0:00:00'){
         xajax_save_item(lms_lp_id, lms_user_id, lms_view_id, lms_item_id, score, max, min, lesson_status, asset_timer, suspend_data, lesson_location,interactions, lms_item_core_exit);
 	}else{
-        xajax_save_item(lms_lp_id, lms_user_id, lms_view_id, lms_item_id, score, max, min, lesson_status, session_time, suspend_data, lesson_location,interactions, lms_item_core_exit);
+       // xajax_save_item(lms_lp_id, lms_user_id, lms_view_id, lms_item_id, score, max, min, lesson_status, session_time, suspend_data, lesson_location,interactions, lms_item_core_exit);
 	}
 	if(item_objectives.length>0)
 	{
@@ -1107,7 +1124,24 @@ function switch_item(current_item, next_item){
 	//(2) Refresh all the values inside this SCORM API object - use AJAX
 	xajax_switch_item_details(lms_lp_id,lms_user_id,lms_view_id,lms_item_id,next_item);		
 	
-	//alert(lms_next_item);		
+	
+	$my_new_old_item=$("#old_item").val();
+	$my_new_current_item=$("#current_item_id").val();
+	
+	if ($my_new_current_item==next_item) {
+		$("#old_item").attr("value",$my_new_old_item)
+	} else {
+		$("#old_item").attr("value",$my_new_current_item)
+	}
+	if ($my_new_current_item==next_item) {
+		$("#old_item").attr("value",$my_new_current_item)
+	} else {
+		$("#current_item_id").attr("value",$my_new_old_item)
+	}
+	$("#status_old_item").attr("value",lesson_status);
+	$("#current_item_id").attr("value",next_item);	
+	
+	
 	//(3) open the new item in the content_id frame
 	switch(next_item){
 		case 'next':