47 if (count($composite->nodes) > 0) {
48 $composite->nodes[0] = $this->
evaluate($composite->nodes[0]);
49 $composite->nodes[1] = $this->
evaluate($composite->nodes[1]);
50 $composite = $this->evaluateSubTree($composite);
66 $question = $this->object_loader->getQuestion($composite->nodes[0]->getQuestionIndex());
67 $rightNode = $composite->nodes[1];
71 $solutions = $question->getUserQuestionResult($this->activeId, $this->pass);
80 $gap = $question->getAvailableAnswerOptions(
$index - 1);
83 if ($gap->getType() == 1) {
84 $answer = $gap->getItem(
$result[
'value'] - 1);
86 $solutions->removeByKey(
$index);
87 $solutions->addKeyValue(
$index, $answer->getAnswertext());
96 $answers = $gap->getItems();
98 foreach ($answers as $answer) {
99 if ($max_points < $answer->getPoints()) {
100 $max_points = $answer->getPoints();
105 $reached_points =
null;
107 switch ($gap->getType()) {
109 for ($order = 0; $order < $gap->getItemCount(); $order++) {
110 $answer = $gap->getItem($order);
111 $item_points = $question->getTextgapPoints($answer->getAnswertext(),
$result[
'value'], $answer->getPoints());
112 if ($item_points > $reached_points) {
113 $reached_points = $item_points;
119 for ($order = 0; $order < $gap->getItemCount(); $order++) {
120 $answer = $gap->getItem($order);
121 $item_points = $question->getNumericgapPoints($answer->getAnswertext(),
$result[
"value"], $answer->getPoints(), $answer->getLowerBound(), $answer->getUpperBound());
122 if ($item_points > $reached_points) {
123 $reached_points = $item_points;
129 if (
$result[
'value'] !=
null) {
130 $answer = $gap->getItem(
$result[
'value'] - 1);
131 $reached_points = $answer->getPoints();
137 if ($max_points != 0 && $reached_points !==
null) {
138 $percentage = (int) (($reached_points / $max_points) * 100);
140 $solutions->setReachedPercentage($percentage);
151 $answer = $question->getAvailableAnswerOptions(
$index - 1);
153 $unit = $solutions->getSolutionForKey(
$index .
"_unit");
155 if (is_array($unit)) {
156 $key = $unit[
'value'];
159 $max_points = $answer->getPoints();
160 $points = $answer->getReachedPoints($question->getVariables(), $question->getResults(),
$result[
"value"], $key, $question->getUnitrepository()->getUnits());
163 if ($max_points != 0) {
164 $percentage = (int) (($points / $max_points) * 100);
166 $solutions->setReachedPercentage($percentage);
169 $result = $rightNode->checkResult($solutions, $composite->getPattern(),
$index);
171 switch ($composite->getPattern()) {
173 $result = $composite->nodes[0] && $composite->nodes[1];
176 $result = $composite->nodes[0] || $composite->nodes[1];
183 if ($composite->isNegated()) {
An exception for terminatinating execution or to throw for unit testing.
Class CompositeEvaluator.
isInstanceOfAnswerIndexProvidingExpression(ilAssLacAbstractComposite $composite)
evaluate(ilAssLacAbstractComposite $composite)
__construct($object_loader, $activeId, $pass)
Class PercentageResultExpression for the expression n%.
Class ResultOfAnswerOfCurrentQuestion for the expression R[m].
Class ResultOfAnswerOfQuestion for the expression Qn[m].
Class StringResultExpression for the expression ~TEXT~.
const CLOZE_TEXT
Cloze question constants.
Class ExpressionInterface.