<?xml version="1.0" standalone="no" ?>
<!--
Sequencing example demonstrating simple remediation. SCORM 2004 3rd Edition.

Provided by Rustici Software - http://www.scorm.com

Sequencing Strategy:

-Only flow navigation is allowed

-Each content object and each test is associated with a learning objective

-When the associated learning objective is satisfied, the test and content are skipped

-If the learner completes the course without satisfying all learning objectives, he is remediated
through the course and must retake the content/tests for the learning objectives not yet mastered

Rollup Strategy:

-Only the tests count towards rollup

-Each test counts equally towards all rollup metrics

-->

<manifest identifier="com.scorm.golfsamples.sequencing.simpleremediation.20043rd" version="1"
          xmlns="http://www.imsglobal.org/xsd/imscp_v1p1"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:adlcp="http://www.adlnet.org/xsd/adlcp_v1p3"
          xmlns:adlseq="http://www.adlnet.org/xsd/adlseq_v1p3"
          xmlns:adlnav="http://www.adlnet.org/xsd/adlnav_v1p3"
          xmlns:imsss="http://www.imsglobal.org/xsd/imsss"
          xsi:schemaLocation="http://www.imsglobal.org/xsd/imscp_v1p1 imscp_v1p1.xsd
                              http://www.adlnet.org/xsd/adlcp_v1p3 adlcp_v1p3.xsd
                              http://www.adlnet.org/xsd/adlseq_v1p3 adlseq_v1p3.xsd
                              http://www.adlnet.org/xsd/adlnav_v1p3 adlnav_v1p3.xsd
                              http://www.imsglobal.org/xsd/imsss imsss_v1p0.xsd">

  <metadata>
    <schema>ADL SCORM</schema>
    <schemaversion>2004 3rd Edition</schemaversion>
  </metadata>

  <organizations default="golf_sample_default_org">

    <organization identifier="golf_sample_default_org" adlseq:objectivesGlobalToSystem="false">
      <title>Golf Explained - Simple Remediation</title>

      <!-- 
        To do remediation effectively we need a wrapper around the content that can be retried.
        The alternative would be to use a retry all rule. That would be simpler, but unfortunately
        it resets the global objectives if objectivesGlobalToSystem is false. 
        -->
      <item identifier="content_wrapper" isvisible="false">
        <title>Remediation Wrapper</title>

        <item identifier="playing_item" identifierref="playing_resource">
          <title>Playing the Game</title>
          <imsss:sequencing IDRef="content_seq_rules">
            <!-- 
            Every content object reads status from the global associated with its learning objective.
            If the learning objective is satisfied, the activity is skipped (as defined in the common 
            sequencing collection).
            -->
            <imsss:objectives>
              <imsss:primaryObjective objectiveID="learning_objective_satisfied">
                <imsss:mapInfo targetObjectiveID="com.scorm.golfsamples.sequencing.simpleremediation.20043rd.playing_satisfied"
                               readSatisfiedStatus="true" writeSatisfiedStatus="false"/>
              </imsss:primaryObjective>
            </imsss:objectives>
          </imsss:sequencing>
        </item>
        <item identifier="etuqiette_item" identifierref="etiquette_resource">
          <title>Etiquette</title>
          <imsss:sequencing IDRef="content_seq_rules">
            <imsss:objectives>
              <imsss:primaryObjective objectiveID="learning_objective_satisfied">
                <imsss:mapInfo targetObjectiveID="com.scorm.golfsamples.sequencing.simpleremediation.20043rd.etiquette_satisfied"
                               readSatisfiedStatus="true" writeSatisfiedStatus="false"/>
              </imsss:primaryObjective>
            </imsss:objectives>
          </imsss:sequencing>
        </item>
        <item identifier="handicapping_item" identifierref="handicapping_resource">
          <title>Handicapping</title>
          <imsss:sequencing IDRef="content_seq_rules">
            <imsss:objectives>
              <imsss:primaryObjective objectiveID="learning_objective_satisfied">
                <imsss:mapInfo targetObjectiveID="com.scorm.golfsamples.sequencing.simpleremediation.20043rd.handicapping_satisfied"
                               readSatisfiedStatus="true" writeSatisfiedStatus="false"/>
              </imsss:primaryObjective>
            </imsss:objectives>
          </imsss:sequencing>
        </item>
        <item identifier="havingfun_item" identifierref="havingfun_resource">
          <title>Having Fun</title>
          <imsss:sequencing IDRef="content_seq_rules">
            <imsss:objectives>
              <imsss:primaryObjective objectiveID="learning_objective_satisfied">
                <imsss:mapInfo targetObjectiveID="com.scorm.golfsamples.sequencing.simpleremediation.20043rd.havingfun_satisfied"
                               readSatisfiedStatus="true" writeSatisfiedStatus="false"/>
              </imsss:primaryObjective>
            </imsss:objectives>
          </imsss:sequencing>
        </item>



        <item identifier="test_1" identifierref="assessment_resource" parameters="?content=assessment1" >
          <title>Playing Quiz</title>
          <imsss:sequencing IDRef="test_seq_rules">
            <imsss:objectives>
              <!-- 
              Tests will all write to and read from the global associated with their learning objective.
              If the test is passed, the objective becomes satisfied.
              If the objective is satisfied, the test is skipped during remediation.
              -->
              <imsss:primaryObjective objectiveID="learning_objective_satisfied">
                <imsss:mapInfo targetObjectiveID="com.scorm.golfsamples.sequencing.simpleremediation.20043rd.playing_satisfied"
                               readSatisfiedStatus="true" writeSatisfiedStatus="true" writeNormalizedMeasure="true"/>
              </imsss:primaryObjective>
            </imsss:objectives>

          </imsss:sequencing>
        </item>
        <item identifier="test_2" identifierref="assessment_resource" parameters="?content=assessment2" >
          <title>Etiquette Quiz</title>
          <imsss:sequencing IDRef="test_seq_rules">
            <imsss:objectives>
              <imsss:primaryObjective objectiveID="learning_objective_satisfied">
                <imsss:mapInfo targetObjectiveID="com.scorm.golfsamples.sequencing.simpleremediation.20043rd.etiquette_satisfied"
                               readSatisfiedStatus="true" writeSatisfiedStatus="true" writeNormalizedMeasure="true"/>
              </imsss:primaryObjective>
            </imsss:objectives>

          </imsss:sequencing>
        </item>
        <item identifier="test_3" identifierref="assessment_resource" parameters="?content=assessment3">
          <title>Handicapping Quiz</title>
          <imsss:sequencing IDRef="test_seq_rules">
            <imsss:objectives>
              <imsss:primaryObjective objectiveID="learning_objective_satisfied">
                <imsss:mapInfo targetObjectiveID="com.scorm.golfsamples.sequencing.simpleremediation.20043rd.handicapping_satisfied"
                               readSatisfiedStatus="true" writeSatisfiedStatus="true" writeNormalizedMeasure="true"/>
              </imsss:primaryObjective>
            </imsss:objectives>

          </imsss:sequencing>
        </item>
        <item identifier="test_4" identifierref="assessment_resource" parameters="?content=assessment4" >
          <title>Having Fun Quiz</title>
          <imsss:sequencing IDRef="test_seq_rules">

            <!-- 
            When the last activity is encountered, exit the remediation loop
            to trigger its retry check.
            -->
            <imsss:sequencingRules>
              <imsss:postConditionRule>
                <imsss:ruleConditions>
                  <imsss:ruleCondition condition="always"/>
                </imsss:ruleConditions>
                <imsss:ruleAction action="exitParent"/>
              </imsss:postConditionRule>
            </imsss:sequencingRules>


            <imsss:objectives>
              <imsss:primaryObjective objectiveID="learning_objective_satisfied">
                <imsss:mapInfo targetObjectiveID="com.scorm.golfsamples.sequencing.simpleremediation.20043rd.havingfun_satisfied"
                               readSatisfiedStatus="true" writeSatisfiedStatus="true" writeNormalizedMeasure="true"/>
              </imsss:primaryObjective>
            </imsss:objectives>

          </imsss:sequencing>
        </item>

        <!-- Sequencing for the Remediation wrapper-->
        <imsss:sequencing>

          <!-- 
          Flow only for this entire course.
          Setting choice exit to false prevents the learner from making a choice request for the 
          root activity. Such a request would initiate a new attempt on the activity tree and reset
          the global variables.
          -->
          <imsss:controlMode choice="false" flow="true" choiceExit="false"/>

          <!-- 
          When the learner gets to the end, if everything isn't satisfied, do a retry to send them back into remediation.
          If the course is satisfied, then exit.
          -->
          <imsss:sequencingRules>

            <imsss:postConditionRule>
              <imsss:ruleConditions conditionCombination="any">
                <imsss:ruleCondition operator="not" condition="satisfied"/>
                <imsss:ruleCondition operator="not" condition="objectiveStatusKnown"/>
              </imsss:ruleConditions>
              <imsss:ruleAction action="retry"/>
            </imsss:postConditionRule>

            <imsss:postConditionRule>
              <imsss:ruleConditions conditionCombination="any">
                <imsss:ruleCondition condition="satisfied"/>
              </imsss:ruleConditions>
              <imsss:ruleAction action="exitAll"/>
            </imsss:postConditionRule>
            
          </imsss:sequencingRules>

        </imsss:sequencing>
      </item>

      <imsss:sequencing>

        <!-- Flow only for this entire course -->
        <imsss:controlMode choice="false" flow="true" />

      </imsss:sequencing>
    </organization>
  </organizations>
  <resources>
    <resource identifier="playing_resource" type="webcontent" adlcp:scormType="sco" href="shared/launchpage.html?content=playing">
      <file href="Playing/otherscoreing.jpg"/>
      <file href="Playing/OtherScoring.html"/>
      <file href="Playing/Par.html"/>
      <file href="Playing/par.jpg"/>
      <file href="Playing/Playing.html"/>
      <file href="Playing/playing.jpg"/>
      <file href="Playing/rules.jpg"/>
      <file href="Playing/RulesOfGolf.html"/>
      <file href="Playing/Scoring.html"/>
      <file href="Playing/scoring.jpg"/>
      <dependency identifierref="common_files"/>
    </resource>
    <resource identifier="etiquette_resource" type="webcontent" adlcp:scormType="sco" href="shared/launchpage.html?content=etiquette">
      <file href="Etiquette/Course.html"/>
      <file href="Etiquette/course.jpg"/>
      <file href="Etiquette/Distracting.html"/>
      <file href="Etiquette/distracting.jpg"/>
      <file href="Etiquette/Play.html"/>
      <file href="Etiquette/play.jpg"/>
      <dependency identifierref="common_files"/>
    </resource>
    <resource identifier="handicapping_resource" type="webcontent" adlcp:scormType="sco" href="shared/launchpage.html?content=handicapping">
      <file href="Handicapping/calchandi.jpg"/>
      <file href="Handicapping/calcscore.jpg"/>
      <file href="Handicapping/CalculatingHandicap.html"/>
      <file href="Handicapping/CalculatingScore.html"/>
      <file href="Handicapping/Example.html"/>
      <file href="Handicapping/example.jpg"/>
      <file href="Handicapping/Overview.html"/>
      <file href="Handicapping/overview.jpg"/>
      <dependency identifierref="common_files"/>
    </resource>
    <resource identifier="havingfun_resource" type="webcontent" adlcp:scormType="sco" href="shared/launchpage.html?content=havingfun">
      <file href="HavingFun/friends.jpg"/>
      <file href="HavingFun/fun.jpg"/>
      <file href="HavingFun/HowToBeStylish.html"/>
      <file href="HavingFun/HowToHaveFun.html"/>
      <file href="HavingFun/MakeFriends.html"/>
      <file href="HavingFun/stylish.jpg"/>
      <dependency identifierref="common_files"/>
    </resource>
    <resource identifier="assessment_resource" type="webcontent" adlcp:scormType="sco" href="shared/launchpage.html">
      <file href="Playing/questions.js"/>
      <file href="Etiquette/questions.js"/>
      <file href="Handicapping/questions.js"/>
      <file href="HavingFun/questions.js"/>
      <dependency identifierref="common_files"/>
    </resource>
    <resource identifier="common_files" type="webcontent" adlcp:scormType="asset">
      <file href="shared/assessmenttemplate.html"/>
      <file href="shared/background.jpg"/>
      <file href="shared/cclicense.png"/>
      <file href="shared/contentfunctions.js"/>
      <file href="shared/launchpage.html"/>
      <file href="shared/scormfunctions.js"/>
      <file href="shared/style.css"/>
    </resource>
  </resources>
  <imsss:sequencingCollection>

    <imsss:sequencing ID="content_seq_rules">

      <!-- If the learning objective for this test/content object has been satisfied we can skip it-->
      <imsss:sequencingRules>
        <imsss:preConditionRule>
          <imsss:ruleConditions>
            <imsss:ruleCondition condition="satisfied"/>
          </imsss:ruleConditions>
          <imsss:ruleAction action="skip"/>
        </imsss:preConditionRule>
      </imsss:sequencingRules>

      <!-- Content doesn't count towards any rollup-->
      <imsss:rollupRules objectiveMeasureWeight="0" rollupObjectiveSatisfied="false" rollupProgressCompletion="false"></imsss:rollupRules>

      <imsss:deliveryControls completionSetByContent="true" objectiveSetByContent="true"/>

    </imsss:sequencing>

    <imsss:sequencing ID="test_seq_rules">

      <!-- If the learning objective for this test/content object has been satisfied we can skip it-->
      <imsss:sequencingRules>
        <imsss:preConditionRule>
          <imsss:ruleConditions>
            <imsss:ruleCondition condition="satisfied"/>
          </imsss:ruleConditions>
          <imsss:ruleAction action="skip"/>
        </imsss:preConditionRule>
      </imsss:sequencingRules>

      <!-- Tests count towards all rollup metrics-->
      <imsss:rollupRules objectiveMeasureWeight="1" rollupObjectiveSatisfied="true" rollupProgressCompletion="true"></imsss:rollupRules>
      
      <imsss:deliveryControls completionSetByContent="true" objectiveSetByContent="true"/>

      <!--
      During remediation, the completion status for a skipped activity might be reset. If
      an activity is skipped, that means it was previously completed so don't require it for 
      completion anymore.
      -->
      <adlseq:rollupConsiderations requiredForCompleted="ifNotSkipped"/>
      
    </imsss:sequencing>

  </imsss:sequencingCollection>
</manifest>
