Project

General

Profile

Bug #398

SCORM Scenari courses do not set status to completed

Added by Carlos Vargas about 10 years ago. Updated almost 5 years ago.

Status:
Bug resolved
Priority:
Normal
Category:
Learning paths / Lecciones
Target version:
Start date:
07/12/2009
Due date:
24/04/2014
% Done:

100%

Estimated time:
Spent time:
Complexity:
Normal
SCRUM pts - complexity:
3

Description

An interesting point reported by a test of Chamilo 1.8.4 + a Scenari course, is that the SCORM 1.2 runtime environment documentation says that "Upon reiving the LMSFinish() call or the user navigates away, the LMS sould set the cmi.core.lesson_status for the SCO to "completed"" (see page 26 of SCORM 1.2 RTE attached).
The important part here is "or the user navigates away".

This means that, even if there is no LMSCommit() or LMSFinish() call, we should se the status to "completed" when the "onunload" event is happening (and we should check the mastery_score at this point, as the rest of the documentation says).

"
LMS Behavior:
Initialization: If it is the student's first attempt at the SCO the lesson_status is set to not attempted. The LMS is responsible for setting the initial value to "not attempted".

Additional Behavior Requirements: If a SCO sets the cmi.core.lesson_status then there is no problem. However, the SCORM does not force the SCO to set the cmi.core.lesson_status. There is some additional requirements that must be adhered to successfully handle these cases:

Upon initial launch the LMS should set the cmi.core.lesson_status to “not attempted”.

Upon receiving the LMSFinish() call or the user navigates away, the LMS should set the cmi.core.lesson_status for the SCO to “completed”.
After setting the cmi.core.lesson_status to “completed”, the LMS should now check to see if a Mastery Score has been specified in the cmi.student_data.mastery_score, if supported, or the manifest that the SCO is a member of. If a Mastery Score is provided and the SCO did set the cmi.core.score.raw, the LMS shall compare the cmi.core.score.raw to the Mastery Score and set the cmi.core.lesson_status to either “passed” or “failed”. If no Mastery Score is provided, the LMS will leave the cmi.core.lesson_status as “completed”
"

This has been tried on the latest version of SCORM import in Chamilo 1.8.6 SVN today, and it doesn't work. Because we want SCORM 1.2 support to be perfect for 1.8.6, this is given a HIGH priority and Severity.

Once fixed, it should be reported in http://scenari-platform.org/forum/viewtopic.php?t=1166&highlight=dokeos
and possibly here http://scenari-platform.org/forum/viewtopic.php?t=1231

Full report available here: http://scenari-platform.org/trac/opale/wiki/SCORMDokeos

Note: this report, originally for Dokeos, was updated to Chamilo in different discussions with a high concurrency of French contributions: http://lite.framapad.org/p/Chamilo-Opale


Files

SCORM_1.2_RunTimeEnv.doc (1.06 MB) SCORM_1.2_RunTimeEnv.doc Yannick Warnier, 18/04/2014 09:06
testOpaleSCORMmulti1.2pur.zip (1.37 MB) testOpaleSCORMmulti1.2pur.zip Yannick Warnier, 19/04/2014 02:56
articulate.scorm.1.2.zip (8.98 MB) articulate.scorm.1.2.zip Alexander Hu, 10/07/2014 18:15
tracking.jpg (234 KB) tracking.jpg Alexander Hu, 20/11/2014 14:52
bmc.zip (175 KB) bmc.zip Alexander Hu, 20/11/2014 14:57
SCORM-Driver-with-sample-course-SCORM12.zip (113 KB) SCORM-Driver-with-sample-course-SCORM12.zip Alexander Hu, 26/11/2014 23:05

Associated revisions

Revision 4b828a3d (diff)
Added by Yannick Warnier over 5 years ago

Improve syntax for update_toc() - use jQuery whenever possible - refs #398

(cherry picked from commit 7642f07e71d4c26cf3af94c43b8ecae00fe9ccd9)

Revision 1d68db47 (diff)
Added by Yannick Warnier about 5 years ago

Support Opale/Scenarii by adding variable to better support SCORM 1.2 by watching over the definition, by the SCO, of the lesson_status and the call to LMSFinish() or the move to another element - refs #398 refs BT#8897

Revision b3862ee3 (diff)
Added by Yannick Warnier about 5 years ago

Add scorm_failed style and fix section style - refs #398

Revision 83244de9 (diff)
Added by Yannick Warnier about 5 years ago

Minor - code style and local variables renaming - refs #398 refs BT#8897

Revision 30ff7ba6 (diff)
Added by Yannick Warnier about 5 years ago

Minor - code style and local variables renaming - refs #398 refs BT#8897

Revision 008e7ffa (diff)
Added by Yannick Warnier about 5 years ago

Add quotes filter to suspend_data, lesson_location and launch_data to avoid issues with SCORM strings, as suggested by Stéphane Poinsart - refs #398 refs BT#8897

Revision 6972e0b4 (diff)
Added by Yannick Warnier about 5 years ago

Enable "failed" status again for any SCO in learning paths - refs #398 refs BT#8897

History

#1

Updated by Carlos Vargas about 10 years ago

Actualizado por Julio Montoya hace 6 meses

Comment

Check function savedata(origin) in scorm.api.php line 742 there are some commented text that may resolve this problem
#2
Actualizado por Yannick Warnier hace 6 meses

Comment

OK, I'm a bit further in this implementation. It all looks good, except that Maritime Navigation is generating a problem. If I go from one slide to another without using the OK button before I exit the first one, the first one is marked as "completed" (as should apparently be expected from the LMS) but the second one says "you have not completed the prerequisites". Which is kind of frustrating. The question is now: where does he get the prerequisite status from? Obviously it gets it from the LMS (database or object?), but this one doesn't show the previous element as completed. Or better said, not yet.

Yep, that's correct, because reloading the second element actually fixes it...
#3
Actualizado por Yannick Warnier hace 6 meses

Comment

OK, this introduced a new problem, which was the over-completion of items. In fact, only items which have been closed, and for which we are sure that even the onunload event did not update the status, should be updated to "completed" in certain cases. Reverted in SVN#21158
#4
Actualizado por Yannick Warnier hace 6 meses

Comment

I'm giving up. This was an unplanned improvement anyway, I'm putting this for 1.8.6.1. There's a bunch of new code available in scorm_api and in a new file called lp_ajax_last_update_status. See SVN#21162
#5
Actualizado por Yannick Warnier hace alrededor de 1 mes

  • Fecha fin changed from 2009-06-16 to 2009-11-10 * Estado changed from New to Assigned * Versión prevista changed from 1.8.6 SVN to 1.8.6.2 * Tiempo estimado set to 10.00 * Severity changed from Critical to Low * Complexity set to Average
#2

Updated by Yannick Warnier almost 10 years ago

  • Target version changed from 1.8.6.2 alpha to 1.8.6.2 beta
#3

Updated by Yannick Warnier almost 10 years ago

  • Assignee changed from Yannick Warnier to Julio Montoya
#4

Updated by Yannick Warnier almost 10 years ago

  • Status changed from New to Assigned
  • Assignee changed from Julio Montoya to Yannick Warnier
  • Target version changed from 1.8.6.2 beta to 1.8.6.2 RC1
  • SCRUM pts - complexity changed from ? to 3
#5

Updated by Yannick Warnier almost 10 years ago

  • Target version changed from 1.8.6.2 RC1 to 11
#6

Updated by Yannick Warnier almost 10 years ago

  • Target version changed from 11 to 1.8.7
#7

Updated by Yannick Warnier over 9 years ago

  • Assignee changed from Yannick Warnier to Julio Montoya
#8

Updated by Yannick Warnier over 9 years ago

  • Target version changed from 1.8.7 to 1.8.7.1
#9

Updated by Yannick Warnier over 9 years ago

  • Target version changed from 1.8.7.1 to 1.8.8 stable
#10

Updated by Yannick Warnier almost 9 years ago

  • Assignee deleted (Julio Montoya)
#11

Updated by Yannick Warnier over 8 years ago

  • Target version changed from 1.8.8 stable to 1.9 Stable

Sorry, postponing this once again. It would help to have an actual customer using scenarii courses...

#12

Updated by Yannick Warnier over 7 years ago

  • Target version changed from 1.9 Stable to 1.9.2
#13

Updated by Yannick Warnier over 7 years ago

  • Target version changed from 1.9.2 to 1.9.4
#14

Updated by Julio Montoya about 7 years ago

  • Status changed from Assigned to Needs more info
  • Target version changed from 1.9.4 to 2.0

Not sure if those issues are still present in 1.9.2. Moving to 1.10 otherwise this task could be rejected

#15

Updated by Yannick Warnier almost 6 years ago

  • Description updated (diff)
  • Category set to Learning paths / Lecciones
  • Status changed from Needs more info to Assigned
  • Assignee set to Yannick Warnier
  • Target version changed from 2.0 to 1.9.8
#17

Updated by Yannick Warnier over 5 years ago

  • % Done changed from 20 to 30
Today the way SCORM works in Chamilo is as follows:
  • in scorm_api.php (the SCORM.js of Chamilo, really)
    When something is done to change item
      call switch_item(current, next) {
        if (current != sco) {
          // in this case, the 2 following conditions do exactly the same
          if (next != sco) {
            save_item()
            switch_item_details()
          } else { // next == sco but current != sco
            save_item()
            switch_item()
          }
        } else { //(current == sco)
          // in this case, the 2 following conditions do exactly the same
          if (next != sco) {
            save_item_scorm()
            reinit_updatable_vars_list()
            switch_item_tow()
          } else {
            save_item_scorm()
            reinit_updatable_vars_list()
            switch_item_tow()
          }
        }
        swap current and next in olms array
        load the content in the frame or HTML block
        if item is not sco, start timer
        refresh audio player
    
This means that the issue mentioned here occurs only when we are with the current == sco.
This, in turn, means that we need to check either one of:
  • xajax_save_item_scorm()
  • reinit_updatable_vars_list() // shouldn't be
  • xajax_switch_item_toc()

Considering the effect is mostly on what is stored in the database, and that it will affect the toc as a consequence, the issue should, really, be in xajax_save_item_scorm().

xajax_save_item_scorm(), itself, only re-orders a few params, then calls lp_ajax_save_item.php.

In the latter, we have the following section:

if (isset($score) && $score != -1) {
  $lp_item->set_score($score);
} else {
  if (isset($status) && $status != '' && $status != 'undefined') {
    $lp_item->set_status($status);
  }
}

#18

Updated by Yannick Warnier over 5 years ago

  • % Done changed from 30 to 50

I updated the code considerably and it still works with Maritime Navigation, which is definitely good news :-)
Checking a few things and looking for a demo Opale content to test.

#19

Updated by Yannick Warnier over 5 years ago

I have these changed on a local branch "398" on my laptop. It's definitely not doing what is expected by the multi-sco Opale content attached.

#20

Updated by Yannick Warnier over 5 years ago

This will have to move to 1.10 if we cannot fix it before Thursday 24/04

#21

Updated by Yannick Warnier over 5 years ago

  • Due date set to 24/04/2014
#22

Updated by Yannick Warnier over 5 years ago

OK, I'm changing this to v10 for now, but I'm still hoping I will be able to get it ready before the stable 1.9.8. If so and it doesn't break the rest, I will include it. Otherwise, I can at least make a patch for those using Scenari

#23

Updated by Yannick Warnier over 5 years ago

  • Target version changed from 1.9.8 to 2.0
#24

Updated by Alexander Hu over 5 years ago

Also wondering what was changing in Chamilo 1.9.x

Before, SCORM 1.2 courses were tracking at least pass/fail;
now they can't finish.

Attached you find another one for testing.

#25

Updated by Stéphane Poinsart over 5 years ago

Hello,

I wanted to let you know that in the next version of Scenari / Opale, we will explicitly set the completed status instead of requiring the LMS to make the assumption. It will work around this problem and it's a more robust approach for us anyway. You might want to still get the fix for SCORM conformance reasons but it will not be a compatibility issue for contents produced with SCENARI in future versions.

Regards,

#26

Updated by Yannick Warnier about 5 years ago

  • Target version changed from 2.0 to 1.9.10
#27

Updated by Julio Montoya about 5 years ago

Yannick Warnier wrote:

I have these changed on a local branch "398" on my laptop. It's definitely not doing what is expected by the multi-sco Opale content attached.

This code should be added due this task:

https://task.beeznest.com/issues/8897

#29

Updated by Yannick Warnier about 5 years ago

  • Assignee changed from Yannick Warnier to Alex Aragon
I'm progressing well on this (have a working model, just doing more tests) but a few visual tweaks are needed:
  • in the new css, there is not icon for "failed" status
  • there is no style in main/css/chamilo/scorm.css (line 387) for scorm_failed
  • the scorm_not_attempted style has to be replicated to other css/*/scorm.css

Assigning to Alex temporarily for the design stuff

#30

Updated by Yannick Warnier about 5 years ago

Stéphane, les tests que j'ai fait jusqu'à présent semblent fonctionner assez bien: les étapes se marquent comme "complètes" au moment de sortir de la page si le SCO n'a pas envoyé de LMSSetValue('cmi.core.lesson_status').

Cependant, je suis assez surpris du fait que les exercices (auto-évaluation) de l'exemple ne semblent pas gérer très bien les résultats. En particulier, les exercices ne renvoient jamais de lesson_status, qu'on réussisse, qu'on rate ou qu'on ne réponde rien. Du coup, le statut est toujours mis à "completed" par Chamilo (puisque c'est ce qui est demandé par SCORM). S'ils renvoyaient un résultat, ils devraient renvoyer "passed" au lieu de "completed" (et "failed" au cas où l'on échoue).

Je mets ça en ligne pour tests dans pas longtemps. Je suis juste occupé à revoir tous les commentaires pour être certain qu'il ne me manque rien. On a quelques petits problèmes de design pour l'instant, mais ça n'empêche pas de revoir les parcours importés.

#31

Updated by Yannick Warnier about 5 years ago

  • Description updated (diff)
#33

Updated by Yannick Warnier about 5 years ago

  • Assignee changed from Alex Aragon to Yannick Warnier
  • % Done changed from 50 to 70

Alex's branch was merged.
There's only one issue left before we can close this task and it is being managed at the moment (by me).

#34

Updated by Alexander Hu about 5 years ago

Hello Yannick,

does this mean, we have SCORM 1.2 support working again? :-)

#35

Updated by Yannick Warnier about 5 years ago

After the one last change I have to put, we should have better SCORM 1.2 support than we ever had. If you have specific content you want to test, prepare it for tomorrow, you'll be able to try it on stable.chamilo.org

#36

Updated by Alexander Hu about 5 years ago

Well, uploaded a simple SCO, seems there is something broken...?

#37

Updated by Alexander Hu about 5 years ago

I've attached a simple SCO to set the value to a given one you can define.
(open up, enter a value; usually it should be able to set the value for the tracking...)

#38

Updated by Julio Montoya about 5 years ago

Alexander Hu wrote:

Well, uploaded a simple SCO, seems there is something broken...?

I added a minor fix:

https://github.com/chamilo/chamilo-lms/commit/56bdbf4630080cc9468e16616c98de7a54db098d

#39

Updated by Alexander Hu about 5 years ago

stable.chamilo.org - Aula de chamilo

- How to Import a Course into the SCORM Cloud.
Joined that course as normal user.
SCORM driver from official site...
Opens up, throws an error, and even the debug window which should pop up with informations seems to be white only (source shows nothing interresting :-( )
Attached is the SCORM module from Rustici.

- SCORM 1.2 wrapper test
works pretty smooth :-)

- Captivate E-Learning Course
well, at least it starts :-D
No, seriously i am really disappointed about that.
Will create a new course with the newest Captivate8.

- Captivate E-Learning-Kurs
done with Captivate 8, quick-and-dirty, HTML5.
As you can see, nag screen with Firefox...
And as expected, the scorm module succeeds but won't pass the informations back to Chamilo :-/

And we still have the error in the reporting section...?

#40

Updated by Yannick Warnier about 5 years ago

Alex, the "SCORM Cloud" content you have uploaded is SCORM 2004 (or 1.3). Chamilo doesn't support SCORM 1.3 (or 2004).
I know it because it tries to get the 'cmi.success_status', which is NOT a SCORM 1.2 variable (and it fails to do so, which is logical).
Also, the debug window clearly indicates SCORM2004 stuff.

The bmc one doesn't generate any error (anymore?).

I'm closing this task. Thanks for your help testing.

#41

Updated by Yannick Warnier about 5 years ago

  • Status changed from Assigned to Bug resolved
  • % Done changed from 70 to 100
#42

Updated by Yannick Warnier about 5 years ago

  • Status changed from Bug resolved to Assigned

I'm reopening this one for a moment as we found a few remaining issues with Captivate content

#43

Updated by Alexander Hu about 5 years ago

Hello Yannick,

Alex, the "SCORM Cloud" content you have uploaded is SCORM 2004 (or 1.3). Chamilo doesn't support SCORM 1.3 (or 2004).
I know it because it tries to get the 'cmi.success_status', which is NOT a SCORM 1.2 variable (and it fails to do so, which is logical).

Well, the guys from SCORM offer this course as SCORM 1.2 :-)

Any clues when the release of 1.9.10 will happen?

#44

Updated by Yannick Warnier almost 5 years ago

  • % Done changed from 100 to 80

Just to give the heads up: this task is currently blocking the release of 1.9.10. It is very complicated and requires a lot of concentration, which is difficult to find these days. As soon as it's out of the loop, 1.9.10 will be just a few hours away, but this here is veeeeery long to test.

#45

Updated by Yannick Warnier almost 5 years ago

  • Status changed from Assigned to Bug resolved
  • % Done changed from 80 to 100

Apparently fixed, if additional fixes are needed they will be sent in next version.

Also available in: Atom PDF