]> git.mjollnir.org Git - moodle.git/commitdiff
Fixed some problems in Moodle 1.3.2
authorbobopinna <bobopinna>
Mon, 12 Jul 2004 08:14:06 +0000 (08:14 +0000)
committerbobopinna <bobopinna>
Mon, 12 Jul 2004 08:14:06 +0000 (08:14 +0000)
mod/scorm/api1_2.php
mod/scorm/db/mysql.php
mod/scorm/db/mysql.sql
mod/scorm/db/postgres7.php
mod/scorm/db/postgres7.sql
mod/scorm/details.php
mod/scorm/lib.php
mod/scorm/mod.html
mod/scorm/version.php

index abe739ebed5c8158c5efa577e05d06e4ff11e954..b3f4708385c2cd225c8ede33acf9fe7ef1004e37 100644 (file)
@@ -1,22 +1,23 @@
 // 
 // SCORM API 1.2 Implementation
 //
+
 function SCORMapi() {
     var cmi= new Object();
     var nav = new Object();
 
-    var errorCode = 0;
+    var errorCode = "0";
     
     var Initialized = false;
 
     function LMSInitialize (param) {
        if (param != "") {
-           errorCode = 201;
+           errorCode = "201";
            return "false";
        }
        if (!Initialized) {
            Initialized = true;
-           errorCode = 0;
+           errorCode = "0";
            
            //
            // CMI Initialization SCORM 1.2
@@ -24,7 +25,7 @@ function SCORMapi() {
            cmi.core = new Object();
            cmi.core._children = "student_id,student_name,lesson_location,credit,lesson_status,exit,entry,session_time,total_time,lesson_mode,score,suspend_data,launch_data";
            cmi.core.student_id = "<?php echo $USER->username; ?>";
-           cmi.core.student_name = "<?php echo $USER->firstname." ".$USER->lastname; ?>";
+           cmi.core.student_name = "<?php echo $USER->lastname.", ".$USER->firstname; ?>";
            cmi.core.lesson_location = "<?php echo $sco_user->cmi_core_lesson_location; ?>";
            cmi.core.credit = "<?php if ($mode != 'normal') {
                                         echo "no-credit";
@@ -48,8 +49,12 @@ function SCORMapi() {
            cmi.core.score = new Object();
            cmi.core.score._children = "raw,min,max";
            cmi.core.score.raw = "<?php echo $sco_user->cmi_core_score_raw; ?>";
+           cmi.core.score.min = "";
+           cmi.core.score.max = "";
            cmi.suspend_data = "<?php echo $sco_user->cmi_suspend_data; ?>";
-           cmi.launch_data = "<?php echo $sco_user->cmi_launch_data; ?>";
+           cmi.launch_data = "<?php echo $sco->datafromlms; ?>";
+           cmi.comments = "";
+           cmi.comments_from_lms = "";
            //
            // end CMI Initialization
            //
@@ -65,7 +70,7 @@ function SCORMapi() {
 
            return "true";
        } else {
-           errorCode = 101;
+           errorCode = "101";
            return "false";
        }
     }
@@ -85,23 +90,48 @@ function SCORMapi() {
                case "cmi.core.lesson_mode":
                case "cmi.core.score._children":
                case "cmi.core.score.raw":
+               case "cmi.core.score.min":
+               case "cmi.core.score.max":
                case "cmi.launch_data":
                case "cmi.suspend_data":
-                   errorCode = 0;
+               case "cmi.comments":
+               case "cmi.comments_from_lms":
+                   errorCode = "0";
                    return eval(param);
                break;
                case "cmi.core.exit":
                case "cmi.core.session_time":
-                   errorCode = 404;
+                   errorCode = "404";
                    return "";
                break;
                default:
-                   errorCode = 401;
-                   return "";
+                   errorCode = "401";
+                   param = param.replace(/.(\d+)./g,"[$1].");
+                   
+                   children = param.match(/._children$/);
+                   if (children != null) {
+                       objType = typeof eval(children[1]);
+                       //alert (param+" :"+objType);
+                       if (objType  != "undefined") {
+                           
+                           errorCode = "202";
+                       }
+                   }
+                   
+                   counted = param.match(/._count$/);
+                   if (counted != null) {
+                       objType = typeof eval(counted[1]);
+                       //alert (param+" :"+objType);
+                       if (objType != "undefined") {
+                           errorCode = "203";
+                       }
+                   }
+                   //alert(param+": "+errorCode);
+                   return "";  
                break;
            }
        } else {
-           errorCode = 301;
+           errorCode = "301";
            return "";
        }
     }
@@ -117,65 +147,80 @@ function SCORMapi() {
                            //top.alert(parsedtime);
                            if (((parsedtime.length == 4) || (parsedtime.length == 5)) && (parsedtime[2]>=0) && (parsedtime[2]<=59) && (parsedtime[3]>=0) && (parsedtime[3]<=59)) {
                                eval(param+'="'+value+'";');
-                               errorCode = 0;
+                               errorCode = "0";
                                return "true";
                            } else {
-                               errorCode = 405;
+                               errorCode = "405";
                                return "false";
                            }
                        } else {
-                           errorCode = 405;
+                           errorCode = "405";
                            return "false";
                        }
                    } else {
-                       errorCode = 405;
+                       errorCode = "405";
                        return "false";
                    }
                break;
                case "cmi.core.lesson_status":
                    if ((value!="passed")&&(value!="completed")&&(value!="failed")&&(value!="incomplete")&&(value!="browsed")) {
-                       errorCode = 405;
+                       errorCode = "405";
                        return "false";
                    }
                    eval(param+'="'+value+'";');
-                   errorCode = 0;
+                   errorCode = "0";
                    return "true";
                break;
                case "cmi.core.score.raw":
                case "cmi.core.score.min":
                case "cmi.core.score.max":
-                   if ((parseFloat(value,10)).toString() != value) {
-                       errorCode = 405;
-                       return "false";
-                   } else {
-                       rawvalue = parseFloat(value,10);
-                       if ((rawvalue<0) || (rawvalue>100)) {
-                          errorCode = 405;
-                          return "false";
-                       }
+                   if (value != "") {
+                       if ((parseFloat(value,10)).toString() != value) {
+                           errorCode = "405";
+                           return "false";
+                       } else {
+                           rawvalue = parseFloat(value,10);
+                           if ((rawvalue<0) || (rawvalue>100)) {
+                               errorCode = "405";
+                               return "false";
+                           }
+                       }
                    }
                    eval(param+'="'+value+'";');
-                   errorCode = 0;
+                   errorCode = "0";
                    return "true";
                break;
                case "cmi.core.exit":
                    if ((value!="time-out")&&(value!="suspend")&&(value!="logout")&&(value!="")) {
-                       errorCode = 405;
+                       errorCode = "405";
                        return "false";
                    }
                    eval(param+'="'+value+'";');
-                   errorCode = 0;
+                   errorCode = "0";
                    return "true";
                break;
                case "cmi.core.lesson_location":
+                   if (value.length > 255) {
+                       errorCode = "405";
+                       return "false";
+                   }
+                   eval(param+'="'+value+'";');
+                   errorCode = "0";
+                   return "true";
+               break;
                case "cmi.suspend_data":
+               case "cmi.comments":
+                   if (value.length > 4096) {
+                       errorCode = "405";
+                       return "false";
+                   }
                    eval(param+'="'+value+'";');
-                   errorCode = 0;
+                   errorCode = "0";
                    return "true";
                break;
                case "cmi.core._children":
                case "cmi.core.score._children":
-                   errorCode = 402;
+                   errorCode = "402";
                    return "false";
                break;
                case "cmi.core.student_id":
@@ -185,34 +230,35 @@ function SCORMapi() {
                case "cmi.core.total_time":
                case "cmi.core.lesson_mode":
                case "cmi.launch_data":
-                   errorCode = 403;
+               case "cmi.comments_from_lms":
+                   errorCode = "403";
                    return "false";
                break;
                case "nav.event":
                    if ((value == "previous") || (value == "continue")) {
                        eval(param+'="'+value+'";');
-                       errorCode = 0;
+                       errorCode = "0";
                        return "true";
                    } else {
-                       erroCode = 405;
+                       erroCode = "405";
                        return "false";
                    }
                break;  
                default:
-                   //errorCode = 401;  This is more correct but may have problem with some SCOes
-                   errorCode = 0; // With this disable any possible SCO errors alert
+                   errorCode = "401";  //This is more correct but may have problem with some SCOes
+                   //errorCode = "0"; // With this disable any possible SCO errors alert
                    return "false";
                break;
            }
        } else {
-           errorCode = 301;
+           errorCode = "301";
            return "false";
        }
     }
 
     function LMSCommit (param) {
        if (param != "") {
-           errorCode = 201;
+           errorCode = "201";
            return "false";
        }
        if (Initialized) {
@@ -226,25 +272,25 @@ function SCORMapi() {
                cmiform.cmi_suspend_data.value = cmi.suspend_data;
                cmiform.submit();
            }
-           errorCode = 0;
+           errorCode = "0";
            return "true";
        } else {
-           errorCode = 301;
+           errorCode = "301";
            return "false";
        }
     }
     
     function LMSFinish (param) {
        if (param != "") {
-           errorCode = 201;
+           errorCode = "201";
            return "false";
        }
        if (!Initialized) {
-           errorCode = 301;
+           errorCode = "301";
            return "false";
        } else {
            Initialized = false;
-           errorCode = 0;
+           errorCode = "0";
            cmi.core.total_time = AddTime(cmi.core.total_time, cmi.core.session_time);
            //top.alert(cmi.core.total_time);
            if (<?php echo $navObj ?>cmi.document.theform) {
@@ -279,7 +325,7 @@ function SCORMapi() {
        errorString["201"] = "Invalid argument error";
        errorString["202"] = "Element cannot have children";
        errorString["203"] = "Element not an array - cannot have count";
-       errorString["301"] = "Not initializated";
+       errorString["301"] = "Not initialized";
        errorString["401"] = "Not implemented error";
        errorString["402"] = "Invalid set value, element is a keyword";
        errorString["403"] = "Element is read only";
@@ -329,4 +375,4 @@ function SCORMapi() {
     this.LMSGetDiagnostic = LMSGetDiagnostic;
 }
 
-var API = new SCORMapi();
+var API = new SCORMapi();
\ No newline at end of file
index d1aaf486fd3501fff10bcf216ac267938d27a0ed..baceb45b390d10d2dac1b41864ab3a69cef7e7b2 100755 (executable)
@@ -14,6 +14,10 @@ function scorm_upgrade($oldversion) {
        table_column("scorm", "", "popup", "VARCHAR", "255", "", "", "NOT NULL", "auto");
        table_column("scorm", "reference", "reference", "VARCHAR", "255", "", "", "NOT NULL");
     }
+    if ($oldversion < 2004070800) {
+       table_column("scorm_scoes", "", "datafromlms", "TEXT", "", "", "", "NOT NULL", "title");
+       modify_database("", "ALTER TABLE `scorm_sco_users` DROP `cmi_launch_data`;");
+    }
     return true;
 }
 
index 4a19a1cf1f7ac7da15bca22adcd1d31942f69eed..f6bb9643f50525080171b872af31605b3d6eeb66 100755 (executable)
@@ -25,6 +25,7 @@ CREATE TABLE prefix_scorm_scoes (
   launch varchar(255) NOT NULL default '',
   type varchar(5) NOT NULL default '',
   title varchar(255) NOT NULL default '',
+  datafromlms longtext,
   next tinyint(1) unsigned NOT NULL default '0',
   previous tinyint(1) unsigned NOT NULL default '0',
   PRIMARY KEY (id),
@@ -43,7 +44,6 @@ CREATE TABLE prefix_scorm_sco_users (
   cmi_core_session_time varchar(13) NOT NULL default '00:00:00',
   cmi_core_score_raw float(3) NOT NULL default '0',
   cmi_suspend_data longtext,
-  cmi_launch_data longtext,
   PRIMARY KEY  (id)
 ) TYPE=MyISAM;
 
index b56d414d1e8922bd80ecb0878c49a9ae9631fc9e..f8f2f7b5db32cc2d18378e24e8e0272162260006 100755 (executable)
@@ -14,6 +14,10 @@ function scorm_upgrade($oldversion) {
        table_column("scorm", "", "popup", "varchar", "255", "", "", "NOT NULL", "auto");
        table_column("scorm", "reference", "reference", "varchar", "255", "", "", "NOT NULL");
     }
+    if ($oldversion < 2004070800) {
+       table_column("scorm_scoes", "", "datafromlms", "TEXT", "", "", "", "NOT NULL", "title");
+       modify_database("", "ALTER TABLE `scorm_sco_users` DROP `cmi_launch_data`;");
+    }
     return true;
 }
 
index 8d0d21c48c1d98fc89efd7f4404d9ecc1ad62962..9d84b1d2a5ec9d1f65aa69426045e74cf8add8d4 100755 (executable)
@@ -23,6 +23,7 @@ CREATE TABLE prefix_scorm_scoes (
   launch varchar(255) NOT NULL default '',
   type varchar(5) NOT NULL default '',
   title varchar(255) NOT NULL default '',
+  datafromlms text NOT NULL default ''
   next integer NOT NULL default '0',
   previous integer NOT NULL default '0'
 );
@@ -38,8 +39,7 @@ CREATE TABLE prefix_scorm_sco_users (
   cmi_core_total_time varchar(13) NOT NULL default '00:00:00',
   cmi_core_session_time varchar(13) NOT NULL default '00:00:00',
   cmi_core_score_raw real NOT NULL default '0',
-  cmi_suspend_data text NOT NULL default '',
-  cmi_launch_data text NOT NULL default ''
+  cmi_suspend_data text NOT NULL default ''
 );
 
 #
index 45aac4ab720361120cd2e7c93ad9f01c433396b3..f0590482877f161faf60d34118db27a170d60877 100755 (executable)
        } else {
            $result = "datadir";
        }
-       
+       $errorlogs = '';
        if ($result != "regular") {
+           /*foreach ($error_array as $errormsg) {
+               $errorlogs .= get_string($errormsg->type,"scorm",$errormsg->data) . "\n";
+           }*/
            //
            // Delete files and temporary directory
            //
        echo "<table cellpadding=\"5\" align=\"center\">\n";
        echo "    <tr><td align=\"right\" nowrap><p><b>$strname:</b></p></td><td><p>$form->name</p></a></td></tr>\n";
        echo "    <tr><td align=\"right\" nowrap><p><b>".get_string("validation","scorm").":</b></p></td><td><p>".get_string($result,"scorm")."</p></a></td></tr>\n";
+       if ($errorlogs != '') {
+           //$lines = round(count($error_array)/4);
+           //echo "    <tr><td align=\"right\" nowrap><p><b>".get_string("errorlogs","scorm").":</b></p></td><td><textarea rows=\"".$lines."\" readonly>".$errorlogs."</textarea></a></td></tr>\n";
+       }
        if (($form->mode == "update") && ($form->launch == 0) && (get_records("scorm_sco_users","scormid",$form->instance)))
            echo "    <tr><td align=\"center\" colspan=\"2\" nowrap><p><b>".get_string("trackingloose","scorm")."</b></p></td></tr>\n";
        echo "</table>\n";
index ba3080af443f408b2ceca9cd1374e7e3503f0da5..91339f29204a465387a44cda1e0b354e89871c06 100755 (executable)
@@ -349,27 +349,43 @@ function scorm_parse($basedir,$file,$scorm_id) {
     $sco->scorm = $scorm_id;
     delete_records("scorm_scoes","scorm",$scorm_id);
     delete_records("scorm_sco_users","scormid",$scorm_id);
-    print_r($manifest);
+    
     for ($j=1; $j<=$i; $j++) {
         $sco->identifier = $manifest[$j]["identifier"];
         $sco->parent = $manifest[$j]["parent"];
         $sco->title = $manifest[$j]["title"];
-        if (empty($resources[($manifest[$j]["identifierref"])]["href"]))
+        if (!isset($manifest[$j]["datafromlms"])) {
+            $manifest[$j]["datafromlms"] = "";
+        } 
+        $sco->datafromlms = $manifest[$j]["datafromlms"];
+        
+        if (!isset($resources[($manifest[$j]["identifierref"])]["href"])) {
             $resources[($manifest[$j]["identifierref"])]["href"] = "";
+        }
         $sco->launch = $resources[($manifest[$j]["identifierref"])]["href"];
-        if (empty($resources[($manifest[$j]["identifierref"])]["type"]))
+        
+        if (!isset($resources[($manifest[$j]["identifierref"])]["type"])) {
             $resources[($manifest[$j]["identifierref"])]["type"] = "";
-    $sco->type = $resources[($manifest[$j]["identifierref"])]["type"];
-    if (empty($manifest[$j]["previous"]))
-        $manifest[$j]["previous"] = 0;
-    $sco->previous = $manifest[$j]["previous"];
-    if (empty($manifest[$j]["continue"]))
-        $manifest[$j]["continue"] = 0;
-    $sco->next = $manifest[$j]["continue"];
-    if (scorm_remove_spaces($manifest[$j]["isvisible"]) != "false")
-        $id = insert_record("scorm_scoes",$sco);
-    if ($launch==0 && $sco->launch)
-        $launch = $id;  
+        }
+       $sco->type = $resources[($manifest[$j]["identifierref"])]["type"];
+       
+       if (!isset($manifest[$j]["previous"])) {
+            $manifest[$j]["previous"] = 0;
+        }
+       $sco->previous = $manifest[$j]["previous"];
+       
+       if (!isset($manifest[$j]["continue"])) {
+            $manifest[$j]["continue"] = 0;
+        }
+       $sco->next = $manifest[$j]["continue"];
+       
+       if (scorm_remove_spaces($manifest[$j]["isvisible"]) != "false") {
+            $id = insert_record("scorm_scoes",$sco);
+        }
+        
+       if ($launch==0 && $sco->launch) {
+            $launch = $id;
+        }
     }
     return $launch;
 }
index 84772a2df05ff894f2b42e1b409407fddaddf2c9..582c3a55839d934dd094ba837afa5f754e7c0352 100755 (executable)
@@ -48,7 +48,6 @@
                    echo "<br \>";
                    helpbutton("text", get_string("helptext"), "moodle", true, true);
                ?>
-                  <br />
                </font>
            </td>
            <td>
index d1a9144f1e8f2e7a0cd5620ba87134314f5200ce..955095ade5f9026b52bf9b050c776228c537acf6 100755 (executable)
@@ -5,7 +5,7 @@
 ///  This fragment is called by moodle_needs_upgrading() and /admin/index.php
 /////////////////////////////////////////////////////////////////////////////////
 
-$module->version  = 2004061800;   // The (date) version of this module
+$module->version  = 2004070800;   // The (date) version of this module
 $module->requires = 2004051600;   // The version of Moodle that is required
 $module->cron     = 0;            // How often should cron check this module (seconds)?