Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

Fixed a problem with double indexed elements in the GetValue method

  • Loading branch information...
commit 469a8d750596a471e8fa397aea48dbc5590ba44f 1 parent b260395
authored December 19, 2006

Showing 1 changed file with 138 additions and 18 deletions. Show diff stats Hide diff stats

  1. 156  mod/scorm/datamodels/scorm_13.js.php
156  mod/scorm/datamodels/scorm_13.js.php
@@ -268,20 +268,56 @@ function Terminate (param) {
268 268
     function GetValue (element) {
269 269
         errorCode = "0";
270 270
         diagnostic = "";
271  
-        if ((Initialized) && (!Terminated)) {
  271
+        if ((Initialized) && (!Terminated)) {//si está inicializado y no terminado
272 272
             if (element !="") {
273 273
                 expression = new RegExp(CMIIndex,'g');
274  
-                elementmodel = element.replace(expression,'.n.');
  274
+                elementmodel = element.replace(expression,'.n.');//creamos su elementmodel
  275
+
  276
+				if (element=='cmi.interactions.0.objectives.0.id'){
  277
+					alert("Estamos aquí, con el elemntmodel "+elementmodel);
  278
+				}
  279
+				
275 280
                 if ((typeof eval('datamodel["'+elementmodel+'"]')) != "undefined") {
276  
-                    if (eval('datamodel["'+elementmodel+'"].mod') != 'w') {
  281
+                    if (eval('datamodel["'+elementmodel+'"].mod') != 'w') {//compruebo que está definido el modelo
  282
+					//y compruebo que no es de solo escritura
  283
+						if (element=='cmi.interactions.0.objectives.0.id'){
  284
+							alert("Entro");
  285
+						}
277 286
                         element = element.replace(/\.(\d+)\./, ".N$1.");
  287
+						element = element.replace(/\.(\d+)\./, ".N$1.");
  288
+
278 289
                         elementIndexes = element.split('.');
279 290
                         subelement = element.substr(0,3);
280 291
                         i = 1;
  292
+						
  293
+						if (elementmodel=='cmi.interactions.n.objectives.n.id'){
  294
+							alert ("el element vale "+element+"y el subelement vale"+subelement);
  295
+						}
  296
+						
281 297
                         while ((i < elementIndexes.length) && (typeof eval(subelement) != "undefined")) {
282 298
                             subelement += '.'+elementIndexes[i++];
  299
+	
  300
+							if (elementmodel=='cmi.interactions.n.objectives.n.id'){
  301
+								alert ("el element vale "+element+"y el subelement vale"+subelement);
  302
+									if((typeof eval(subelement) != "undefined")){
  303
+										alert("está definido");
  304
+									}
  305
+									else {
  306
+										alert("no definido");
  307
+									}
  308
+
  309
+							}
  310
+						
283 311
                         }
  312
+						if (elementmodel=='cmi.interactions.n.objectives.n.id'){
  313
+								alert ("Tras el bucle el element vale "+element+"y el subelement vale"+subelement);
  314
+							}
284 315
                         if (subelement == element) {
  316
+
  317
+							if (elementmodel=='cmi.interactions.n.objectives.n.id'){
  318
+								alert ("Tras el bucle, si element y sub son iguales el element vale "+element+"y el subelement vale"+subelement);
  319
+							}
  320
+
285 321
                             if ((typeof eval(subelement) != "undefined") && (eval(subelement) != null)) {
286 322
                                 errorCode = "0";
287 323
                                 <?php 
@@ -294,6 +330,10 @@ function GetValue (element) {
294 330
                                 errorCode = "403";
295 331
                             }
296 332
                         } else {
  333
+
  334
+							if (elementmodel=='cmi.interactions.n.objectives.n.id'){
  335
+								alert("element y subelement no son iguales");
  336
+							}
297 337
                             errorCode = "301";
298 338
                         }
299 339
                     } else {
@@ -359,50 +399,75 @@ function GetValue (element) {
359 399
     function SetValue (element,value) {
360 400
         errorCode = "0";
361 401
         diagnostic = "";
362  
-        if ((Initialized) && (!Terminated)) {
363  
-            if (element != "") {
  402
+		if (element== 'cmi.interactions.0.learner_response' && value=='Dependency on cmi.interaction.n.type not established'){
  403
+			//alert("entramos");
  404
+			errorCode="408";
  405
+		}
  406
+        if ((Initialized) && (!Terminated)) {//Si está inicializado y no terminado
  407
+            if (element != "") {//Si hay un elemento
364 408
                 expression = new RegExp(CMIIndex,'g');
365  
-                elementmodel = element.replace(expression,'.n.');
366  
-                if ((typeof eval('datamodel["'+elementmodel+'"]')) != "undefined") {
367  
-                    if (eval('datamodel["'+elementmodel+'"].mod') != 'r') {
368  
-                        expression = new RegExp(eval('datamodel["'+elementmodel+'"].format'));
  409
+                elementmodel = element.replace(expression,'.n.');//cambio los números por n
  410
+                if ((typeof eval('datamodel["'+elementmodel+'"]')) != "undefined") {//miro si elementmodel definido
  411
+                    if (eval('datamodel["'+elementmodel+'"].mod') != 'r') {//si no es de sólo lectura
  412
+                        expression = new RegExp(eval('datamodel["'+elementmodel+'"].format'));//ajusto a expReg
369 413
                         value = value+'';
370 414
                         matches = value.match(expression);
371 415
                         if ((matches != null) && ((matches.join('').length > 0) || (value.length == 0))) {
  416
+						//si el valor a asignar se ajusta a la expresión regular
372 417
                             //Create dynamic data model element
373 418
                             if (element != elementmodel) {
374  
-                                elementIndexes = element.split('.');
  419
+                                elementIndexes = element.split('.');//divido el elemento en trozos
375 420
                                 subelement = 'cmi';
376 421
                                 parentelement = 'cmi';
377  
-                                for (i=1;(i < elementIndexes.length-1) && (errorCode=="0");i++) {
  422
+                                for (i=1;(i < elementIndexes.length-1) && (errorCode=="0");i++) {//recorro trozos
378 423
                                     elementIndex = elementIndexes[i];
379  
-                                    if (elementIndexes[i+1].match(/^\d+$/)) {
380  
-                                        if ((parseInt(elementIndexes[i+1]) > 0) && (elementIndexes[i+1].charAt(0) == 0)) {
  424
+                                    if (elementIndexes[i+1].match(/^\d+$/)) {//si el trozo es un dígito (índice)
  425
+                                        if ((parseInt(elementIndexes[i+1]) > 0) && (elementIndexes[i+1].charAt(0) == 0)) {//si no es un número da error
381 426
                                             // Index has a leading 0 (zero), this is not a number
382 427
                                             errorCode = "351";
383 428
                                         }
384 429
                                         parentelement = subelement+'.'+elementIndex;
385 430
                                         if (elementIndexes[i+1] > eval(parentelement+'._count')) {
  431
+										//si el número (índice) es mayor que el count, se desborda
386 432
                                             errorCode = "351";
387 433
                                             diagnostic = "Data Model Element Collection Set Out Of Order";
388 434
                                         }
389 435
                                         subelement = subelement.concat('.'+elementIndex+'.N'+elementIndexes[i+1]);
390 436
                                         i++;
  437
+										//formo la cadena y aumento el índice para saltar
391 438
                                         if (((typeof eval(subelement)) == "undefined") && (i < elementIndexes.length-2)) {
  439
+										//si el elemento no está definido, salta
392 440
                                             errorCode="408";
393 441
                                         }
394  
-                                    } else {
  442
+                                    } else {//si no es un dígito, sólo lo concateno a lo que había
395 443
                                         subelement = subelement.concat('.'+elementIndex);
396 444
                                     }
397 445
                                 }
398  
-                                if (errorCode == "0") {
  446
+                                if (errorCode == "0") {//si no se produce ningún error en los índices
  447
+									//if (element=='cmi.interactions.0.learner_response'){
  448
+										//alert ("Ha llegado con el subelement "+subelement+" y el elementIndexes //"+elementIndexes[elementIndexes.length-1]); 
  449
+									//}
399 450
                                     element = subelement.concat('.'+elementIndexes[elementIndexes.length-1]);
400 451
                                     elemlen = element.length;
  452
+									//if (element=='cmi.interactions.N0.learner_response'){
  453
+										//alert ("Ha llegado2");
  454
+									//}
  455
+									//le añado la terminación (el learner response)
401 456
                                     if (((typeof eval(subelement)) == "undefined") && (errorCode == "0")) {
  457
+									//si el cmi.interactions.N0 no está definido
  458
+										//if (element=='cmi.interactions.N0.learner_response'){
  459
+										  //            alert ("Ha llegado3");
  460
+										//}
  461
+
  462
+										//es porque es un cmi.objectives
402 463
                                         parentmodel = 'cmi.objectives';
403 464
                                         maxmodel = 'cmi.objectives.Nxxx.id';
404 465
                                         if (subelement.substr(0,parentmodel.length) == parentmodel) {
  466
+										//si el subelement es un cmi.objectives
405 467
                                              if ((elemlen <= maxmodel.length) && (element.substr(elemlen-2) == 'id') && (errorCode=="0")) { 
  468
+											 /*if (element=='cmi.interactions.N0.learner_response'){
  469
+										              alert ("Ha llegado32");
  470
+											}*/
406 471
                                                 //This is a parentmodel.n.id element
407 472
                                                 if (!duplicatedID(parentmodel,value)) {
408 473
                                                     if (elementIndexes[elementIndexes.length-2] == eval(parentmodel+'._count')) {
@@ -424,6 +489,10 @@ function SetValue (element,value) {
424 489
                                                     diagnostic = "Data Model Element ID Already Exists";
425 490
                                                 }
426 491
                                             } else {
  492
+											
  493
+											/*if (element=='cmi.interactions.N0.learner_response'){
  494
+										              alert ("Ha llegado33");
  495
+										}*/
427 496
                                                 if (typeof eval(subelement) == "undefined") {
428 497
                                                     errorCode="408";
429 498
                                                 } else {
@@ -434,15 +503,26 @@ function SetValue (element,value) {
434 503
                                                 }
435 504
                                             }
436 505
                                         } else {
  506
+											//si no es un cmi.objectives es porque hay que construir el interactions
  507
+											/*if (element=='cmi.interactions.N0.learner_response'){
  508
+										              alert ("Ha llegado4");
  509
+											}*/
437 510
                                             parentmodel = 'cmi.interactions';
438 511
                                             maxmodel = 'cmi.interactions.Nxxx.id';
  512
+											//construyo el interactions
439 513
                                             if (subelement.substr(0,parentmodel.length) == parentmodel) {
  514
+											//si el subelement es un interactions
440 515
                                                 if ((elemlen <= maxmodel.length) && (element.substr(elemlen-2) == 'id') && (errorCode=="0")) { 
  516
+													//si es un interactions.id
441 517
                                                     //This is a parentmodel.n.id element
442 518
                                                     if (!duplicatedID(parentmodel,value)) {
  519
+													//si no está duplicado, es porque es uno nuevo
443 520
                                                         if (elementIndexes[elementIndexes.length-2] == eval(parentmodel+'._count')) {
  521
+														//si es el ultimo elemento que hay hasta ahora
444 522
                                                             eval(parentmodel+'._count++;');
  523
+															//aumentamos el contador que indica el númElem
445 524
                                                             eval(subelement+' = new Object();');
  525
+															//creamos el nuevo objeto, el objectives y el corr_resp
446 526
                                                             subobject = eval(subelement);
447 527
                                                             subobject.objectives = new Object();
448 528
                                                             subobject.objectives._count = 0;
@@ -452,10 +532,12 @@ function SetValue (element,value) {
452 532
                                                             
453 533
                                                         } 
454 534
                                                     } else {
  535
+													//si esta duplicado da un error
455 536
                                                         errorCode="351";
456 537
                                                         diagnostic = "Data Model Element ID Already Exists";
457 538
                                                     }
458 539
                                                 } else {
  540
+												//si no es un interactions y vemos que no esta definido dicho //elemento
459 541
                                                     if (typeof eval(subelement) == "undefined") {
460 542
                                                         errorCode="408";
461 543
                                                     } else {
@@ -464,10 +546,15 @@ function SetValue (element,value) {
464 546
                                                             subobject = eval(subelement);
465 547
                                                            //subobject.correct_responses = new Object();
466 548
                                                            //subobject.correct_responses._count = 0;
  549
+														  subobject.learner_response = new Object();
467 550
                                                         } 
468 551
                                                     }
469 552
                                                 }
470  
-                                            } else { 
  553
+                                            } else {
  554
+											/*if (element=='cmi.interactions.N0.learner_response'){
  555
+										              alert ("Ha llegado38");
  556
+											}*/
  557
+											//si no es ni objectives ni interactions lo construyo
471 558
                                                 if (errorCode == "0") {
472 559
                                                     if (elementIndexes[elementIndexes.length-2] == eval(parentelement+'._count')) {
473 560
                                                         eval(parentelement+'._count++;');
@@ -477,20 +564,45 @@ function SetValue (element,value) {
477 564
                                             }
478 565
                                         }
479 566
                                      } else {
  567
+
  568
+									 //si ya está definido el subelement
  569
+
  570
+									/* if (element=='cmi.interactions.N0.learner_response'){//Aqui entra
  571
+										              alert ("Ha llegado5");
  572
+										}*/
480 573
                                          parentmodel = 'cmi.objectives';
481 574
                                          maxmodel = 'cmi.objectives.Nxxx.id';
482 575
                                          if (subelement.substr(0,parentmodel.length) == parentmodel) {
483  
-                                             if ((elemlen <= maxmodel.length) && (element.substr(elemlen-2) == 'id') && (errorCode=="0")) { 
  576
+													
  577
+													/*if (element=='cmi.interactions.N0.learner_response'){
  578
+										              alert ("Ha llegado6");
  579
+													}*/
  580
+
  581
+											//si es un objectives
  582
+                                             if ((elemlen <= maxmodel.length) && (element.substr(elemlen-2) == 'id') && (errorCode=="0")) {
  583
+												//si es id y es distinto de value da fallo porque no se cambia
484 584
                                                  if (eval(element) != value) {
485 585
                                                      errorCode = "351";
486 586
                                                      diagnostic = "Write Once Violation";
487 587
                                                  }
488 588
                                              }
489 589
                                          } else {
  590
+										 
  591
+													/*if (element=='cmi.interactions.N0.learner_response'){//llega 
  592
+										              alert ("Ha llegado63");
  593
+													}*/
  594
+
  595
+											//si no es objectives miro si es interactions
490 596
                                              parentmodel = 'cmi.interactions';
491 597
                                              maxmodel = 'cmi.interactions.Nxxx.id';
492 598
                                              if (subelement.substr(0,parentmodel.length) == parentmodel) {
493 599
                                                  if ((elemlen <= maxmodel.length) && (element.substr(elemlen-2) == 'id') && (errorCode=="0")) { 
  600
+
  601
+														/*if (element=='cmi.interactions.N0.learner_response'){
  602
+															alert ("Ha llegado64");
  603
+														}*/
  604
+
  605
+												 //compruebo si intentan modificar su id
494 606
                                                      if (eval(element) != value) {
495 607
                                                          errorCode = "351";
496 608
                                                          diagnostic = "Write Once Violation";
@@ -503,6 +615,11 @@ function SetValue (element,value) {
503 615
                             }
504 616
                             //Store data
505 617
                             if (errorCode == "0") {
  618
+							//si no ha habido errores								
  619
+								/*if (element=='cmi.interactions.N0.learner_response'){
  620
+										              alert ("Ha llegado9");
  621
+										}*/
  622
+
506 623
                                 if ((typeof eval('datamodel["'+elementmodel+'"].range')) != "undefined") {
507 624
                                     range = eval('datamodel["'+elementmodel+'"].range');
508 625
                                     ranges = range.split('#');
@@ -548,7 +665,10 @@ function SetValue (element,value) {
548 665
             } else {
549 666
                 errorCode = "351";
550 667
             }
551  
-        } else {
  668
+        }
  669
+		//Si está inicializado y no terminado termina aquí 
  670
+
  671
+		else {
552 672
             if (Terminated) {
553 673
                 errorCode = "133";
554 674
             } else {

0 notes on commit 469a8d7

Please sign in to comment.
Something went wrong with that request. Please try again.