public function process()
    {
        $context = $this->getContext();
        $templateProcessing = $this->getComponent();
        $trialCount = 0;
        
        // Make a copy of possibly impacted variables.
        $impactedVariables = Utils::templateProcessingImpactedVariables($templateProcessing);
        
        $tplVarCopies = array();
        foreach ($impactedVariables as $varIdentifier) {
            $tplVarCopies[] = clone $context->getVariable($varIdentifier);
        }
        
        do {
            $validConstraints = true;
            
            try {
                $trialCount++;
                
                foreach ($templateProcessing->getTemplateRules() as $rule) {
                    $processor = $this->getRuleProcessorFactory()->createProcessor($rule);
                    $processor->setState($context);
                    $processor->process();
                    $this->trace($rule->getQtiClassName() . ' executed.');
                }
            } catch (RuleProcessingException $e) {
                if ($e->getCode() === RuleProcessingException::EXIT_TEMPLATE) {
                    $this->trace('Termination of template processing.');
                } else if ($e->getCode() === RuleProcessingException::TEMPLATE_CONSTRAINT_UNSATISFIED) {
                    $this->trace('Unsatisfied template constraint.');
                    
                    // Reset variables with their originals.
                    foreach ($tplVarCopies as $copy) {
                        $context->getVariable($copy->getIdentifier())->setValue($copy->getDefaultValue());
                        $context->getVariable($copy->getIdentifier())->setDefaultValue($copy->getDefaultValue());
                        
                        if ($copy instanceof ResponseVariable) {
                            $context->getVariable($copy->getIdentifier())->setCorrectResponse($copy->getCorrectResponse());
                        }
                    }

                    $validConstraints = false;
                } else {
                    throw $e;
                }
            }
        } while ($validConstraints === false && $trialCount < 100);
    }
public function process()
    {
        $context = $this->getContext();
        $templateProcessing = $this->getComponent();
        $trialCount = 0;
        
        // Make a copy of possibly impacted variables.
        $impactedVariables = Utils::templateProcessingImpactedVariables($templateProcessing);
        
        $tplVarCopies = array();
        foreach ($impactedVariables as $varIdentifier) {
            $tplVarCopies[] = clone $context->getVariable($varIdentifier);
        }
        
        do {
            $validConstraints = true;
            
            try {
                $trialCount++;
                
                foreach ($templateProcessing->getTemplateRules() as $rule) {
                    $processor = $this->getRuleProcessorFactory()->createProcessor($rule);
                    $processor->setState($context);
                    $processor->process();
                    $this->trace($rule->getQtiClassName() . ' executed.');
                }
            } catch (RuleProcessingException $e) {
                if ($e->getCode() === RuleProcessingException::EXIT_TEMPLATE) {
                    $this->trace('Termination of template processing.');
                } else if ($e->getCode() === RuleProcessingException::TEMPLATE_CONSTRAINT_UNSATISFIED) {
                    $this->trace('Unsatisfied template constraint.');
                    
                    // Reset variables with their originals.
                    foreach ($tplVarCopies as $copy) {
                        $context->getVariable($copy->getIdentifier())->setValue($copy->getDefaultValue());
                        $context->getVariable($copy->getIdentifier())->setDefaultValue($copy->getDefaultValue());
                        
                        if ($copy instanceof ResponseVariable) {
                            $context->getVariable($copy->getIdentifier())->setCorrectResponse($copy->getCorrectResponse());
                        }
                    }

                    $validConstraints = false;
                } else {
                    throw $e;
                }
            }
        } while ($validConstraints === false && $trialCount < 100);
    }
public function process ( ) { $ context = $ this -> getContext ( ) ; $ templateProcessing = $ this -> getComponent ( ) ; $ trialCount = 0 ; // Make a copy of possibly impacted variables. $ impactedVariables = Utils :: templateProcessingImpactedVariables ( $ templateProcessing ) ; $ tplVarCopies = array ( ) ; foreach ( $ impactedVariables as $ varIdentifier ) { $ tplVarCopies [ ] = clone $ context -> getVariable ( $ varIdentifier ) ; } do { $ validConstraints = true ; try { $ trialCount ++ ; foreach ( $ templateProcessing -> getTemplateRules ( ) as $ rule ) { $ processor = $ this -> getRuleProcessorFactory ( ) -> createProcessor ( $ rule ) ; $ processor -> setState ( $ context ) ; $ processor -> process ( ) ; $ this -> trace ( $ rule -> getQtiClassName ( ) . ' executed.' ) ; } } catch ( RuleProcessingException $ e ) { if ( $ e -> getCode ( ) === RuleProcessingException :: EXIT_TEMPLATE ) { $ this -> trace ( 'Termination of template processing.' ) ; } else if ( $ e -> getCode ( ) === RuleProcessingException :: TEMPLATE_CONSTRAINT_UNSATISFIED ) { $ this -> trace ( 'Unsatisfied template constraint.' ) ; // Reset variables with their originals. foreach ( $ tplVarCopies as $ copy ) { $ context -> getVariable ( $ copy -> getIdentifier ( ) ) -> setValue ( $ copy -> getDefaultValue ( ) ) ; $ context -> getVariable ( $ copy -> getIdentifier ( ) ) -> setDefaultValue ( $ copy -> getDefaultValue ( ) ) ; if ( $ copy instanceof ResponseVariable ) { $ context -> getVariable ( $ copy -> getIdentifier ( ) ) -> setCorrectResponse ( $ copy -> getCorrectResponse ( ) ) ; } } $ validConstraints = false ; } else { throw $ e ; } } } while ( $ validConstraints === false && $ trialCount < 100 ) ; }
Process the template processing.

@throws \qtism\runtime\common\ProcessingException If an error occurs while executing the TemplateProcessing.
Process the template processing .