Class for cloze tests. More...
Inheritance diagram for assClozeTest:
Collaboration diagram for assClozeTest:Public Member Functions | |
| assClozeTest ($title="", $comment="", $author="", $owner=-1, $cloze_text="") | |
| assClozeTest constructor | |
| isComplete () | |
| Returns true, if a cloze test is complete for use. | |
| cleanQuestiontext ($text) | |
| Cleans cloze question text to remove attributes or tags from older ILIAS versions. | |
| loadFromDb ($question_id) | |
| Loads a assClozeTest object from a database. | |
| saveToDb ($original_id="") | |
| Saves a assClozeTest object to a database. | |
| getGaps () | |
| Returns the array of gaps. | |
| flushGaps () | |
| Deletes all gaps without changing the cloze text. | |
| setClozeText ($cloze_text="") | |
| Sets the cloze text field, evaluates the gaps and creates the gap array from the data. | |
| getClozeText () | |
| Returns the cloze text. | |
| getStartTag () | |
| Returns the start tag of a cloze gap. | |
| setStartTag ($start_tag="[gap]") | |
| Sets the start tag of a cloze gap. | |
| getEndTag () | |
| Returns the end tag of a cloze gap. | |
| setEndTag ($end_tag="[/gap]") | |
| Sets the end tag of a cloze gap. | |
| createGapsFromQuestiontext () | |
| setGapType ($gap_index, $gap_type) | |
| Set the type of a gap with a given index. | |
| setGapShuffle ($gap_index=0, $shuffle=1) | |
| Sets the shuffle state of a gap. | |
| clearGapAnswers () | |
| Removes all answers from the gaps. | |
| getGapCount () | |
| Returns the number of gaps. | |
| addGapAnswer ($gap_index, $order, $answer) | |
| Sets the answer text of a gap. | |
| getGap ($gap_index=0) | |
| Returns the gap at a given index. | |
| setGapAnswerPoints ($gap_index, $order, $points) | |
| Sets the points of a gap answer. | |
| addGapText ($gap_index) | |
| Adds a new answer text value to a text gap. | |
| addGapAtIndex ($gap, $index) | |
| Adds a ClozeGap object at a given index. | |
| setGapAnswerLowerBound ($gap_index, $order, $bound) | |
| Sets the lower bound of a gap answer. | |
| setGapAnswerUpperBound ($gap_index, $order, $bound) | |
| Sets the upper bound of a gap answer. | |
| getMaximumPoints () | |
| Returns the maximum points, a learner can reach answering the question. | |
| duplicate ($for_test=true, $title="", $author="", $owner="") | |
| Duplicates an assClozeTest. | |
| copyObject ($target_questionpool, $title="") | |
| Copies an assClozeTest object. | |
| updateClozeTextFromGaps () | |
| Updates the gap parameters in the cloze text from the form input. | |
| deleteAnswerText ($gap_index, $answer_index) | |
| Deletes the answer text of a given gap. | |
| deleteGap ($gap_index) | |
| Deletes a gap. | |
| getTextgapPoints ($a_original, $a_entered, $max_points) | |
| Returns the points for a text gap. | |
| getNumericgapPoints ($a_original, $a_entered, $max_points, $lowerBound, $upperBound) | |
| Returns the points for a text gap. | |
| calculateReachedPoints ($active_id, $pass=NULL, $returndetails=FALSE) | |
| Returns the points, a learner has reached answering the question. | |
| saveWorkingData ($active_id, $pass=NULL) | |
| Saves the learners input of the question to the database. | |
| getQuestionType () | |
| Returns the question type of the question. | |
| getTextgapRating () | |
| Returns the rating option for text gaps. | |
| setTextgapRating ($a_textgap_rating) | |
| Sets the rating option for text gaps. | |
| getIdenticalScoring () | |
| Returns the identical scoring status of the question. | |
| setIdenticalScoring ($a_identical_scoring) | |
| Sets the identical scoring option for cloze questions. | |
| getAdditionalTableName () | |
| Returns the name of the additional question data table in the database. | |
| getAnswerTableName () | |
| Returns the name of the answer table in the database. | |
| setFixedTextLength ($a_text_len) | |
| Sets a fixed text length for all text fields in the cloze question. | |
| getFixedTextLength () | |
| Gets the fixed text length for all text fields in the cloze question. | |
| getMaximumGapPoints ($gap_index) | |
| Returns the maximum points for a gap. | |
| getRTETextWithMediaObjects () | |
| Collects all text in the question which could contain media objects which were created with the Rich Text Editor. | |
Data Fields | |
| $gaps | |
| $start_tag | |
| $end_tag | |
| $textgap_rating | |
| $identical_scoring | |
| $fixedTextLength | |
Class for cloze tests.
ASS_ClozeText is a class for cloze tests using text or select gaps.
Definition at line 36 of file class.assClozeTest.php.
| assClozeTest::addGapAnswer | ( | $ | gap_index, | |
| $ | order, | |||
| $ | answer | |||
| ) |
Sets the answer text of a gap.
Sets the answer text of a gap with a given index. The index of the first gap is 0, the index of the second gap is 1 and so on.
| integer | $gap_index A nonnegative index of the n-th gap | |
| integer | $order The order of the answer text | |
| string | $answer The answer text public |
Definition at line 636 of file class.assClozeTest.php.
{
if (array_key_exists($gap_index, $this->gaps))
{
if ($this->gaps[$gap_index]->getType() == CLOZE_NUMERIC)
{
// only allow notation with "." for real numbers
$answer = str_replace(",", ".", $answer);
}
$this->gaps[$gap_index]->addItem(new assAnswerCloze($answer, 0, $order));
}
}
| assClozeTest::addGapAtIndex | ( | $ | gap, | |
| $ | index | |||
| ) |
Adds a ClozeGap object at a given index.
Adds a ClozeGap object at a given index
| object | $gap The gap object | |
| integer | $index A nonnegative index of the n-th gap public |
Definition at line 725 of file class.assClozeTest.php.
{
$this->gaps[$index] = $gap;
}
| assClozeTest::addGapText | ( | $ | gap_index | ) |
Adds a new answer text value to a text gap.
Adds a new answer text value to a text gap with a given index. The index of the first gap is 0, the index of the second gap is 1 and so on.
| integer | $gap_index A nonnegative index of the n-th gap public |
Definition at line 701 of file class.assClozeTest.php.
{
if (array_key_exists($gap_index, $this->gaps))
{
include_once "./Modules/TestQuestionPool/classes/class.assAnswerCloze.php";
$answer = new assAnswerCloze(
"",
0,
$this->gaps[$gap_index]->getItemCount()
);
$this->gaps[$gap_index]->addItem($answer);
}
}
| assClozeTest::assClozeTest | ( | $ | title = "", |
|
| $ | comment = "", |
|||
| $ | author = "", |
|||
| $ | owner = -1, |
|||
| $ | cloze_text = "" | |||
| ) |
assClozeTest constructor
The constructor takes possible arguments an creates an instance of the assClozeTest object.
| string | $title A title string to describe the question | |
| string | $comment A comment string to describe the question | |
| string | $author A string containing the name of the questions author | |
| integer | $owner A numerical ID to identify the owner/creator | |
| string | $cloze_text The question string of the cloze test public |
Definition at line 107 of file class.assClozeTest.php.
References assQuestion::$author, assQuestion::$comment, assQuestion::$owner, assQuestion::$title, assQuestion::assQuestion(), and setClozeText().
{
$this->start_tag = "[gap]";
$this->end_tag = "[/gap]";
$this->assQuestion($title, $comment, $author, $owner);
$this->gaps = array();
$this->setClozeText($cloze_text);
$this->fixedTextLength = "";
$this->identical_scoring = 1;
}
Here is the call graph for this function:| assClozeTest::calculateReachedPoints | ( | $ | active_id, | |
| $ | pass = NULL, |
|||
| $ | returndetails = FALSE | |||
| ) |
Returns the points, a learner has reached answering the question.
Returns the points, a learner has reached answering the question The points are calculated from the given answers including checks for all special scoring options in the test container.
| integer | $user_id The database ID of the learner | |
| integer | $test_id The database Id of the test containing the question public |
Reimplemented from assQuestion.
Definition at line 1090 of file class.assClozeTest.php.
References $data, assQuestion::$points, assQuestion::getId(), getIdenticalScoring(), getMaximumGapPoints(), getNumericgapPoints(), assQuestion::getSolutionMaxPass(), and getTextgapPoints().
{
global $ilDB;
$found_value1 = array();
$found_value2 = array();
$detailed = array();
if (is_null($pass))
{
$pass = $this->getSolutionMaxPass($active_id);
}
$query = sprintf("SELECT * FROM tst_solutions WHERE active_fi = %s AND question_fi = %s AND pass = %s",
$ilDB->quote($active_id . ""),
$ilDB->quote($this->getId() . ""),
$ilDB->quote($pass . "")
);
$result = $ilDB->query($query);
$user_result = array();
while ($data = $result->fetchRow(DB_FETCHMODE_OBJECT))
{
if (strcmp($data->value2, "") != 0)
{
$user_result[$data->value1] = array(
"gap_id" => $data->value1,
"value" => $data->value2
);
}
}
$points = 0;
$counter = 0;
$solution_values_text = array(); // for identical scoring checks
$solution_values_select = array(); // for identical scoring checks
$solution_values_numeric = array(); // for identical scoring checks
foreach ($user_result as $gap_id => $value)
{
if (array_key_exists($gap_id, $this->gaps))
{
switch ($this->gaps[$gap_id]->getType())
{
case CLOZE_TEXT:
$gappoints = 0;
for ($order = 0; $order < $this->gaps[$gap_id]->getItemCount(); $order++)
{
$answer = $this->gaps[$gap_id]->getItem($order);
$gotpoints = $this->getTextgapPoints($answer->getAnswertext(), $value["value"], $answer->getPoints());
if ($gotpoints > $gappoints) $gappoints = $gotpoints;
}
if (!$this->getIdenticalScoring())
{
// check if the same solution text was already entered
if ((in_array($value["value"], $solution_values_text)) && ($gappoints > 0))
{
$gappoints = 0;
}
}
$points += $gappoints;
$detailed[$gap_id] = array("points" =>$gappoints, "best" => ($this->getMaximumGapPoints($gap_id) == $gappoints) ? TRUE : FALSE, "positive" => ($gappoints > 0) ? TRUE : FALSE);
array_push($solution_values_text, $value["value"]);
break;
case CLOZE_NUMERIC:
$gappoints = 0;
for ($order = 0; $order < $this->gaps[$gap_id]->getItemCount(); $order++)
{
$answer = $this->gaps[$gap_id]->getItem($order);
$gotpoints = $this->getNumericgapPoints($answer->getAnswertext(), $value["value"], $answer->getPoints(), $answer->getLowerBound(), $answer->getUpperBound());
if ($gotpoints > $gappoints) $gappoints = $gotpoints;
}
if (!$this->getIdenticalScoring())
{
// check if the same solution value was already entered
include_once "./Services/Math/classes/class.EvalMath.php";
$eval = new EvalMath();
$eval->suppress_errors = TRUE;
$found_value = FALSE;
foreach ($solution_values_numeric as $solval)
{
if ($eval->e($solval) == $eval->e($value["value"]))
{
$found_value = TRUE;
}
}
if ($found_value && ($gappoints > 0))
{
$gappoints = 0;
}
}
$points += $gappoints;
$detailed[$gap_id] = array("points" =>$gappoints, "best" => ($this->getMaximumGapPoints($gap_id) == $gappoints) ? TRUE : FALSE, "positive" => ($gappoints > 0) ? TRUE : FALSE);
array_push($solution_values_numeric, $value["value"]);
break;
case CLOZE_SELECT:
if ($value["value"] >= 0)
{
for ($order = 0; $order < $this->gaps[$gap_id]->getItemCount(); $order++)
{
$answer = $this->gaps[$gap_id]->getItem($order);
if ($value["value"] == $answer->getOrder())
{
$answerpoints = $answer->getPoints();
if (!$this->getIdenticalScoring())
{
// check if the same solution value was already entered
if ((in_array($answer->getAnswertext(), $solution_values_select)) && ($answerpoints > 0))
{
$answerpoints = 0;
}
}
$points += $answerpoints;
$detailed[$gap_id] = array("points" =>$answerpoints, "best" => ($this->getMaximumGapPoints($gap_id) == $answerpoints) ? TRUE : FALSE, "positive" => ($answerpoints > 0) ? TRUE : FALSE);
array_push($solution_values_select, $answer->getAnswertext());
}
}
}
break;
}
}
}
if ($returndetails)
{
return $detailed;
}
else
{
$points = parent::calculateReachedPoints($active_id, $pass = NULL, $points);
return $points;
}
}
Here is the call graph for this function:| assClozeTest::cleanQuestiontext | ( | $ | text | ) |
Cleans cloze question text to remove attributes or tags from older ILIAS versions.
Cleans cloze question text to remove attributes or tags from older ILIAS versions
| string | $text The cloze question text |
Definition at line 153 of file class.assClozeTest.php.
Referenced by loadFromDb(), and setClozeText().
{
$text = preg_replace("/\[gap[^\]]*?\]/", "[gap]", $text);
$text = preg_replace("/<gap([^>]*?)>/", "[gap]", $text);
$text = str_replace("</gap>", "[/gap]", $text);
return $text;
}
Here is the caller graph for this function:| assClozeTest::clearGapAnswers | ( | ) |
Removes all answers from the gaps.
Removes all answers from the gaps
public
Definition at line 595 of file class.assClozeTest.php.
{
foreach ($this->gaps as $gap_index => $gap)
{
$this->gaps[$gap_index]->clearItems();
}
}
| assClozeTest::copyObject | ( | $ | target_questionpool, | |
| $ | title = "" | |||
| ) |
Copies an assClozeTest object.
Copies an assClozeTest object
public
Definition at line 881 of file class.assClozeTest.php.
References assQuestion::$title, assQuestion::_getOriginalId(), assQuestion::getId(), and assQuestion::getObjId().
{
if ($this->getId() <= 0)
{
// The question has not been saved. It cannot be duplicated
return;
}
$clone = $this;
include_once ("./Modules/TestQuestionPool/classes/class.assQuestion.php");
$original_id = assQuestion::_getOriginalId($this->getId());
$clone->id = -1;
$source_questionpool = $this->getObjId();
$clone->setObjId($target_questionpool);
if ($title)
{
$clone->setTitle($title);
}
$clone->saveToDb();
// copy question page content
$clone->copyPageOfQuestion($original_id);
// copy XHTML media objects
$clone->copyXHTMLMediaObjectsOfQuestion($original_id);
// duplicate the generic feedback
$clone->duplicateFeedbackGeneric($original_id);
return $clone->getId();
}
Here is the call graph for this function:| assClozeTest::createGapsFromQuestiontext | ( | ) |
Definition at line 529 of file class.assClozeTest.php.
References getClozeText().
Referenced by setClozeText().
{
include_once "./Modules/TestQuestionPool/classes/class.assClozeGap.php";
include_once "./Modules/TestQuestionPool/classes/class.assAnswerCloze.php";
$search_pattern = "|\[gap\](.*?)\[/gap\]|i";
preg_match_all($search_pattern, $this->getClozeText(), $found);
$this->gaps = array();
if (count($found[0]))
{
foreach ($found[1] as $gap_index => $answers)
{
// create text gaps by default
$gap = new assClozeGap(CLOZE_TEXT);
$textparams = preg_split("/(?<!\\\\),/", $answers);
foreach ($textparams as $key => $value)
{
$answer = new assAnswerCloze($value, 0, $key);
$gap->addItem($answer);
}
$this->gaps[$gap_index] = $gap;
}
}
}
Here is the call graph for this function:
Here is the caller graph for this function:| assClozeTest::deleteAnswerText | ( | $ | gap_index, | |
| $ | answer_index | |||
| ) |
Deletes the answer text of a given gap.
Deletes the answer text of a gap with a given index and an answer with a given order. The index of the first gap is 0, the index of the second gap is 1 and so on.
| integer | $gap_index A nonnegative index of the n-th gap | |
| integer | $answer_index The order of the answer text public |
Definition at line 944 of file class.assClozeTest.php.
References deleteGap(), and updateClozeTextFromGaps().
{
if (array_key_exists($gap_index, $this->gaps))
{
if ($this->gaps[$gap_index]->getItemCount() == 1)
{
// this is the last answer text => remove the gap
$this->deleteGap($gap_index);
}
else
{
// remove the answer text
$this->gaps[$gap_index]->deleteItem($answer_index);
$this->updateClozeTextFromGaps();
}
}
}
Here is the call graph for this function:| assClozeTest::deleteGap | ( | $ | gap_index | ) |
Deletes a gap.
Deletes a gap with a given index. The index of the first gap is 0, the index of the second gap is 1 and so on.
| integer | $gap_index A nonnegative index of the n-th gap public |
Definition at line 972 of file class.assClozeTest.php.
References getClozeText(), and getGaps().
Referenced by deleteAnswerText().
{
if (array_key_exists($gap_index, $this->gaps))
{
$output = $this->getClozeText();
foreach ($this->getGaps() as $replace_gap_index => $gap)
{
$answers = array();
foreach ($gap->getItemsRaw() as $item)
{
array_push($answers, str_replace(",", "\\,", $item->getAnswerText()));
}
if ($replace_gap_index == $gap_index)
{
$output = preg_replace("/\[gap\].*?\[\/gap\]/", "", $output, 1);
}
else
{
$output = preg_replace("/\[gap\].*?\[\/gap\]/", "[_gap]" . join(",", $answers) . "[/_gap]", $output, 1);
}
}
$output = str_replace("_gap]", "gap]", $output);
$this->question = $output;
unset($this->gaps[$gap_index]);
$this->gaps = array_values($this->gaps);
}
}
Here is the call graph for this function:
Here is the caller graph for this function:| assClozeTest::duplicate | ( | $ | for_test = true, |
|
| $ | title = "", |
|||
| $ | author = "", |
|||
| $ | owner = "" | |||
| ) |
Duplicates an assClozeTest.
Duplicates an assClozeTest
public
Definition at line 830 of file class.assClozeTest.php.
References assQuestion::$author, assQuestion::$owner, assQuestion::$title, assQuestion::_getOriginalId(), and assQuestion::getId().
{
if ($this->id <= 0)
{
// The question has not been saved. It cannot be duplicated
return;
}
// duplicate the question in database
$this_id = $this->getId();
$clone = $this;
include_once ("./Modules/TestQuestionPool/classes/class.assQuestion.php");
$original_id = assQuestion::_getOriginalId($this->id);
$clone->id = -1;
if ($title)
{
$clone->setTitle($title);
}
if ($author)
{
$clone->setAuthor($author);
}
if ($owner)
{
$clone->setOwner($owner);
}
if ($for_test)
{
$clone->saveToDb($original_id);
}
else
{
$clone->saveToDb();
}
// copy question page content
$clone->copyPageOfQuestion($this_id);
// copy XHTML media objects
$clone->copyXHTMLMediaObjectsOfQuestion($this_id);
// duplicate the generic feedback
$clone->duplicateFeedbackGeneric($this_id);
return $clone->id;
}
Here is the call graph for this function:| assClozeTest::flushGaps | ( | ) |
Deletes all gaps without changing the cloze text.
Deletes all gaps without changing the cloze text
public
Definition at line 435 of file class.assClozeTest.php.
{
$this->gaps = array();
}
| assClozeTest::getAdditionalTableName | ( | ) |
Returns the name of the additional question data table in the database.
Returns the name of the additional question data table in the database
Reimplemented from assQuestion.
Definition at line 1387 of file class.assClozeTest.php.
Referenced by loadFromDb(), and saveToDb().
{
return "qpl_question_cloze";
}
Here is the caller graph for this function:| assClozeTest::getAnswerTableName | ( | ) |
Returns the name of the answer table in the database.
Returns the name of the answer table in the database
Reimplemented from assQuestion.
Definition at line 1400 of file class.assClozeTest.php.
{
return "qpl_answer_cloze";
}
| assClozeTest::getClozeText | ( | ) |
Returns the cloze text.
Returns the cloze text
Definition at line 468 of file class.assClozeTest.php.
Referenced by createGapsFromQuestiontext(), deleteGap(), isComplete(), saveToDb(), and updateClozeTextFromGaps().
{
return $this->question;
}
Here is the caller graph for this function:| assClozeTest::getEndTag | ( | ) |
Returns the end tag of a cloze gap.
Returns the end tag of a cloze gap
Definition at line 510 of file class.assClozeTest.php.
{
return $this->end_tag;
}
| assClozeTest::getFixedTextLength | ( | ) |
Gets the fixed text length for all text fields in the cloze question.
Gets the fixed text length for all text fields in the cloze question
Definition at line 1426 of file class.assClozeTest.php.
Referenced by saveToDb().
{
return $this->fixedTextLength;
}
Here is the caller graph for this function:| assClozeTest::getGap | ( | $ | gap_index = 0 |
) |
Returns the gap at a given index.
Returns the gap at a given index
| integer | $gap_index A nonnegative index of the n-th gap |
Definition at line 659 of file class.assClozeTest.php.
Referenced by saveWorkingData().
{
if (array_key_exists($gap_index, $this->gaps))
{
return $this->gaps[$gap_index];
}
else
{
return NULL;
}
}
Here is the caller graph for this function:| assClozeTest::getGapCount | ( | ) |
Returns the number of gaps.
Returns the number of gaps
Definition at line 612 of file class.assClozeTest.php.
{
if (is_array($this->gaps))
{
return count($this->gaps);
}
else
{
return 0;
}
}
| assClozeTest::getGaps | ( | ) |
Returns the array of gaps.
Returns the array of gaps
Definition at line 421 of file class.assClozeTest.php.
Referenced by deleteGap(), and updateClozeTextFromGaps().
{
return $this->gaps;
}
Here is the caller graph for this function:| assClozeTest::getIdenticalScoring | ( | ) |
Returns the identical scoring status of the question.
Returns the identical scoring status of the question
Definition at line 1360 of file class.assClozeTest.php.
Referenced by calculateReachedPoints(), and saveToDb().
{
return ($this->identical_scoring) ? 1 : 0;
}
Here is the caller graph for this function:| assClozeTest::getMaximumGapPoints | ( | $ | gap_index | ) |
Returns the maximum points for a gap.
Returns the maximum points for a gap
| integer | $gap_index The index of the gap |
Definition at line 1441 of file class.assClozeTest.php.
References assQuestion::$points.
Referenced by calculateReachedPoints().
{
$points = 0;
if (array_key_exists($gap_index, $this->gaps))
{
$gap =& $this->gaps[$gap_index];
foreach ($gap->getItems() as $answer)
{
if ($answer->getPoints() > $gap_max_points)
{
$gap_max_points = $answer->getPoints();
}
}
$points += $gap_max_points;
}
return $points;
}
Here is the caller graph for this function:| assClozeTest::getMaximumPoints | ( | ) |
Returns the maximum points, a learner can reach answering the question.
Returns the maximum points, a learner can reach answering the question
public
Reimplemented from assQuestion.
Definition at line 778 of file class.assClozeTest.php.
References assQuestion::$points.
Referenced by isComplete(), and saveToDb().
{
$points = 0;
foreach ($this->gaps as $gap_index => $gap)
{
if ($gap->getType() == CLOZE_TEXT)
{
$gap_max_points = 0;
foreach ($gap->getItems() as $item)
{
if ($item->getPoints() > $gap_max_points)
{
$gap_max_points = $item->getPoints();
}
}
$points += $gap_max_points;
}
else if ($gap->getType() == CLOZE_SELECT)
{
$srpoints = 0;
foreach ($gap->getItems() as $item)
{
if ($item->getPoints() > $srpoints)
{
$srpoints = $item->getPoints();
}
}
$points += $srpoints;
}
else if ($gap->getType() == CLOZE_NUMERIC)
{
$numpoints = 0;
foreach ($gap->getItems() as $item)
{
if ($item->getPoints() > $numpoints)
{
$numpoints = $item->getPoints();
}
}
$points += $numpoints;
}
}
return $points;
}
Here is the caller graph for this function:| assClozeTest::getNumericgapPoints | ( | $ | a_original, | |
| $ | a_entered, | |||
| $ | max_points, | |||
| $ | lowerBound, | |||
| $ | upperBound | |||
| ) |
Returns the points for a text gap.
Returns the points for a text gap and compares the given solution with the entered solution using the text gap rating options.
| string | $a_original The original (correct) text | |
| string | $a_entered The text entered by the user | |
| integer | $max_points The maximum number of points for the solution public |
Definition at line 1054 of file class.assClozeTest.php.
Referenced by calculateReachedPoints().
{
include_once "./Services/Math/classes/class.EvalMath.php";
$eval = new EvalMath();
$eval->suppress_errors = TRUE;
$result = 0;
if (($eval->e($lowerBound) !== FALSE) && ($eval->e($upperBound) !== FALSE))
{
if (($eval->e($a_entered) >= $eval->e($lowerBound)) && ($eval->e($a_entered) <= $eval->e($upperBound))) $result = $max_points;
}
else if ($eval->e($lowerBound) !== FALSE)
{
if (($eval->e($a_entered) >= $eval->e($lowerBound)) && ($eval->e($a_entered) <= $eval->e($a_original))) $result = $max_points;
}
else if ($eval->e($upperBound) !== FALSE)
{
if (($eval->e($a_entered) >= $eval->e($a_original)) && ($eval->e($a_entered) <= $eval->e($upperBound))) $result = $max_points;
}
else
{
if ($eval->e($a_entered) == $eval->e($a_original)) $result = $max_points;
}
return $result;
}
Here is the caller graph for this function:| assClozeTest::getQuestionType | ( | ) |
Returns the question type of the question.
Returns the question type of the question
Reimplemented from assQuestion.
Definition at line 1304 of file class.assClozeTest.php.
{
return "assClozeTest";
}
| assClozeTest::getRTETextWithMediaObjects | ( | ) |
Collects all text in the question which could contain media objects which were created with the Rich Text Editor.
Reimplemented from assQuestion.
Definition at line 1463 of file class.assClozeTest.php.
{
return parent::getRTETextWithMediaObjects();
}
| assClozeTest::getStartTag | ( | ) |
Returns the start tag of a cloze gap.
Returns the start tag of a cloze gap
Definition at line 482 of file class.assClozeTest.php.
{
return $this->start_tag;
}
| assClozeTest::getTextgapPoints | ( | $ | a_original, | |
| $ | a_entered, | |||
| $ | max_points | |||
| ) |
Returns the points for a text gap.
Returns the points for a text gap and compares the given solution with the entered solution using the text gap rating options.
| string | $a_original The original (correct) text | |
| string | $a_entered The text entered by the user | |
| integer | $max_points The maximum number of points for the solution public |
Definition at line 1011 of file class.assClozeTest.php.
References getTextgapRating(), and ilStr::strToLower().
Referenced by calculateReachedPoints().
{
include_once "./Services/Utilities/classes/class.ilStr.php";
$result = 0;
$gaprating = $this->getTextgapRating();
switch ($gaprating)
{
case TEXTGAP_RATING_CASEINSENSITIVE:
if (strcmp(ilStr::strToLower($a_original), ilStr::strToLower($a_entered)) == 0) $result = $max_points;
break;
case TEXTGAP_RATING_CASESENSITIVE:
if (strcmp($a_original, $a_entered) == 0) $result = $max_points;
break;
case TEXTGAP_RATING_LEVENSHTEIN1:
if (levenshtein($a_original, $a_entered) <= 1) $result = $max_points;
break;
case TEXTGAP_RATING_LEVENSHTEIN2:
if (levenshtein($a_original, $a_entered) <= 2) $result = $max_points;
break;
case TEXTGAP_RATING_LEVENSHTEIN3:
if (levenshtein($a_original, $a_entered) <= 3) $result = $max_points;
break;
case TEXTGAP_RATING_LEVENSHTEIN4:
if (levenshtein($a_original, $a_entered) <= 4) $result = $max_points;
break;
case TEXTGAP_RATING_LEVENSHTEIN5:
if (levenshtein($a_original, $a_entered) <= 5) $result = $max_points;
break;
}
return $result;
}
Here is the call graph for this function:
Here is the caller graph for this function:| assClozeTest::getTextgapRating | ( | ) |
Returns the rating option for text gaps.
Returns the rating option for text gaps
Definition at line 1318 of file class.assClozeTest.php.
Referenced by getTextgapPoints().
{
return $this->textgap_rating;
}
Here is the caller graph for this function:| assClozeTest::isComplete | ( | ) |
Returns true, if a cloze test is complete for use.
Returns true, if a cloze test is complete for use
Reimplemented from assQuestion.
Definition at line 132 of file class.assClozeTest.php.
References getClozeText(), and getMaximumPoints().
Referenced by saveToDb().
{
if (($this->title) and ($this->author) and ($this->getClozeText()) and (count($this->gaps)) and ($this->getMaximumPoints() > 0))
{
return true;
}
else
{
return false;
}
}
Here is the call graph for this function:
Here is the caller graph for this function:| assClozeTest::loadFromDb | ( | $ | question_id | ) |
Loads a assClozeTest object from a database.
Loads a assClozeTest object from a database
| object | $db A pear DB object | |
| integer | $question_id A unique key which defines the cloze test in the database public |
Reimplemented from assQuestion.
Definition at line 170 of file class.assClozeTest.php.
References $data, ilRTE::_replaceMediaObjectImageSrc(), cleanQuestiontext(), getAdditionalTableName(), assQuestion::setEstimatedWorkingTime(), setFixedTextLength(), setIdenticalScoring(), and setTextgapRating().
{
global $ilDB;
$query = sprintf("SELECT qpl_questions.*, %s.* FROM qpl_questions, %s WHERE question_id = %s AND qpl_questions.question_id = %s.question_fi",
$this->getAdditionalTableName(),
$this->getAdditionalTableName(),
$ilDB->quote($question_id),
$this->getAdditionalTableName()
);
$result = $ilDB->query($query);
if (strcmp(strtolower(get_class($result)), db_result) == 0)
{
if ($result->numRows() == 1)
{
$data = $result->fetchRow(DB_FETCHMODE_OBJECT);
$this->id = $question_id;
$this->obj_id = $data->obj_fi;
$this->title = $data->title;
$this->comment = $data->comment;
$this->solution_hint = $data->solution_hint;
$this->original_id = $data->original_id;
$this->author = $data->author;
$this->points = $data->points;
$this->owner = $data->owner;
$this->question = $this->cleanQuestiontext($data->question_text);
$this->setFixedTextLength($data->fixed_textlen);
$this->setIdenticalScoring($data->identical_scoring);
// replacement of old syntax with new syntax
include_once("./Services/RTE/classes/class.ilRTE.php");
$this->question = ilRTE::_replaceMediaObjectImageSrc($this->question, 1);
$this->setTextgapRating($data->textgap_rating);
$this->setEstimatedWorkingTime(substr($data->working_time, 0, 2), substr($data->working_time, 3, 2), substr($data->working_time, 6, 2));
}
// open the cloze gaps with all answers
include_once "./Modules/TestQuestionPool/classes/class.assAnswerCloze.php";
include_once "./Modules/TestQuestionPool/classes/class.assClozeGap.php";
$query = sprintf("SELECT * FROM qpl_answer_cloze WHERE question_fi = %s ORDER BY gap_id, aorder ASC",
$ilDB->quote($question_id)
);
$result = $ilDB->query($query);
if (strcmp(strtolower(get_class($result)), db_result) == 0)
{
$this->gaps = array();
while ($data = $result->fetchRow(DB_FETCHMODE_ASSOC))
{
switch ($data["cloze_type"])
{
case CLOZE_TEXT:
if (!array_key_exists($data["gap_id"], $this->gaps))
{
$this->gaps[$data["gap_id"]] = new assClozeGap(CLOZE_TEXT);
}
$answer = new assAnswerCloze(
$data["answertext"],
$data["points"],
$data["aorder"]
);
$this->gaps[$data["gap_id"]]->addItem($answer);
break;
case CLOZE_SELECT:
if (!array_key_exists($data["gap_id"], $this->gaps))
{
$this->gaps[$data["gap_id"]] = new assClozeGap(CLOZE_SELECT);
$this->gaps[$data["gap_id"]]->setShuffle($data["shuffle"]);
}
$answer = new assAnswerCloze(
$data["answertext"],
$data["points"],
$data["aorder"]
);
$this->gaps[$data["gap_id"]]->addItem($answer);
break;
case CLOZE_NUMERIC:
if (!array_key_exists($data["gap_id"], $this->gaps))
{
$this->gaps[$data["gap_id"]] = new assClozeGap(CLOZE_NUMERIC);
}
$answer = new assAnswerCloze(
$data["answertext"],
$data["points"],
$data["aorder"]
);
$answer->setLowerBound($data["lowerlimit"]);
$answer->setUpperBound($data["upperlimit"]);
$this->gaps[$data["gap_id"]]->addItem($answer);
break;
}
}
}
}
parent::loadFromDb($question_id);
}
Here is the call graph for this function:| assClozeTest::saveToDb | ( | $ | original_id = "" |
) |
Saves a assClozeTest object to a database.
Saves a assClozeTest object to a database (experimental)
| object | $db A pear DB object public |
Reimplemented from assQuestion.
Definition at line 272 of file class.assClozeTest.php.
References ilRTE::_replaceMediaObjectImageSrc(), assQuestion::createPageObject(), getAdditionalTableName(), getClozeText(), assQuestion::getEstimatedWorkingTime(), getFixedTextLength(), getIdenticalScoring(), getMaximumPoints(), assQuestion::getTestId(), assQuestion::insertIntoTest(), and isComplete().
{
global $ilDB;
include_once "./Services/Math/classes/class.EvalMath.php";
$eval = new EvalMath();
$eval->suppress_errors = TRUE;
$complete = 0;
if ($this->isComplete())
{
$complete = 1;
}
$estw_time = $this->getEstimatedWorkingTime();
$estw_time = sprintf("%02d:%02d:%02d", $estw_time['h'], $estw_time['m'], $estw_time['s']);
$original_id = $original_id ? $ilDB->quote($original_id) : "NULL";
// cleanup RTE images which are not inserted into the question text
include_once("./Services/RTE/classes/class.ilRTE.php");
if ($this->id == -1)
{
$now = getdate();
$created = sprintf("%04d%02d%02d%02d%02d%02d", $now['year'], $now['mon'], $now['mday'], $now['hours'], $now['minutes'], $now['seconds']);
$query = sprintf("INSERT INTO qpl_questions (question_id, question_type_fi, obj_fi, title, comment, points, author, " .
"owner, question_text, working_time, complete, created, original_id, TIMESTAMP) " .
"VALUES (NULL, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, NULL)",
$ilDB->quote($this->getQuestionTypeID() . ""),
$ilDB->quote($this->obj_id . ""),
$ilDB->quote($this->title . ""),
$ilDB->quote($this->comment . ""),
$ilDB->quote($this->getMaximumPoints() . ""),
$ilDB->quote($this->author . ""),
$ilDB->quote($this->owner . ""),
$ilDB->quote(ilRTE::_replaceMediaObjectImageSrc($this->getClozeText(), 0)),
$ilDB->quote($estw_time . ""),
$ilDB->quote($complete . ""),
$ilDB->quote($created . ""),
$original_id
);
$result = $ilDB->query($query);
if ($result == DB_OK)
{
$this->id = $ilDB->getLastInsertId();
$query = sprintf("INSERT INTO %s (question_fi, textgap_rating, identical_scoring, fixed_textlen) VALUES (%s, %s, %s, %s)",
$this->getAdditionalTableName(),
$ilDB->quote($this->id . ""),
$ilDB->quote($this->textgap_rating . ""),
$ilDB->quote($this->getIdenticalScoring() . ""),
$this->getFixedTextLength() ? $ilDB->quote($this->getFixedTextLength()) : "NULL"
);
$ilDB->query($query);
// create page object of question
$this->createPageObject();
if ($this->getTestId() > 0)
{
$this->insertIntoTest($this->getTestId());
}
}
}
else
{
$query = sprintf("UPDATE qpl_questions SET obj_fi = %s, title = %s, comment = %s, points = %s, author = %s, " .
"question_text = %s, working_time = %s, complete = %s WHERE question_id = %s",
$ilDB->quote($this->obj_id. ""),
$ilDB->quote($this->title . ""),
$ilDB->quote($this->comment . ""),
$ilDB->quote($this->getMaximumPoints() . ""),
$ilDB->quote($this->author . ""),
$ilDB->quote(ilRTE::_replaceMediaObjectImageSrc($this->getClozeText(), 0)),
$ilDB->quote($estw_time . ""),
$ilDB->quote($complete . ""),
$ilDB->quote($this->id . "")
);
$result = $ilDB->query($query);
$query = sprintf("UPDATE %s SET textgap_rating = %s, fixed_textlen = %s, identical_scoring = %s WHERE question_fi = %s",
$this->getAdditionalTableName(),
$ilDB->quote($this->textgap_rating . ""),
$this->getFixedTextLength() ? $ilDB->quote($this->getFixedTextLength()) : "NULL",
$ilDB->quote($this->getIdenticalScoring() . ""),
$ilDB->quote($this->id . "")
);
$result = $ilDB->query($query);
}
if ($result == DB_OK)
{
// delete old answers
$query = sprintf("DELETE FROM qpl_answer_cloze WHERE question_fi = %s",
$ilDB->quote($this->id . "")
);
$result = $ilDB->query($query);
foreach ($this->gaps as $key => $gap)
{
foreach ($gap->getItems() as $item)
{
$query = "";
switch ($gap->getType())
{
case CLOZE_TEXT:
$query = sprintf("INSERT INTO qpl_answer_cloze (answer_id, question_fi, gap_id, answertext, points, aorder, cloze_type) VALUES (NULL, %s, %s, %s, %s, %s, %s)",
$ilDB->quote($this->getId()),
$ilDB->quote($key . ""),
$ilDB->quote($item->getAnswertext() . ""),
$ilDB->quote($item->getPoints() . ""),
$ilDB->quote($item->getOrder() . ""),
$ilDB->quote($gap->getType() . "")
);
break;
case CLOZE_SELECT:
$query = sprintf("INSERT INTO qpl_answer_cloze (answer_id, question_fi, gap_id, answertext, points, aorder, cloze_type, shuffle) VALUES (NULL, %s, %s, %s, %s, %s, %s, %s)",
$ilDB->quote($this->getId()),
$ilDB->quote($key . ""),
$ilDB->quote($item->getAnswertext() . ""),
$ilDB->quote($item->getPoints() . ""),
$ilDB->quote($item->getOrder() . ""),
$ilDB->quote($gap->getType() . ""),
$ilDB->quote($gap->getShuffle() ? "1" : "0")
);
break;
case CLOZE_NUMERIC:
$query = sprintf("INSERT INTO qpl_answer_cloze (answer_id, question_fi, gap_id, answertext, points, aorder, cloze_type, lowerlimit, upperlimit) VALUES (NULL, %s, %s, %s, %s, %s, %s, %s, %s)",
$ilDB->quote($this->getId()),
$ilDB->quote($key . ""),
$ilDB->quote($item->getAnswertext() . ""),
$ilDB->quote($item->getPoints() . ""),
$ilDB->quote($item->getOrder() . ""),
$ilDB->quote($gap->getType() . ""),
$eval->e($item->getLowerBound() !== FALSE) ? $ilDB->quote($item->getLowerBound()) : "NULL",
$eval->e($item->getUpperBound() !== FALSE) ? $ilDB->quote($item->getUpperBound()) : "NULL"
);
break;
}
if (strlen($query)) $answer_result = $ilDB->query($query);
}
}
}
parent::saveToDb($original_id);
}
Here is the call graph for this function:| assClozeTest::saveWorkingData | ( | $ | active_id, | |
| $ | pass = NULL | |||
| ) |
Saves the learners input of the question to the database.
Saves the learners input of the question to the database
| integer | $test_id The database id of the test containing this question |
Reimplemented from assQuestion.
Definition at line 1228 of file class.assClozeTest.php.
References ilObjAssessmentFolder::_enabledAssessmentLogging(), ilObjAssessmentFolder::_getLogLanguage(), ilObjTest::_getPass(), getGap(), assQuestion::getId(), assQuestion::logAction(), and ilUtil::stripSlashes().
{
global $ilDB;
global $ilUser;
if (is_null($pass))
{
include_once "./Modules/Test/classes/class.ilObjTest.php";
$pass = ilObjTest::_getPass($active_id);
}
$query = sprintf("DELETE FROM tst_solutions WHERE active_fi = %s AND question_fi = %s AND pass = %s",
$ilDB->quote($active_id),
$ilDB->quote($this->getId()),
$ilDB->quote($pass . "")
);
$result = $ilDB->query($query);
$entered_values = 0;
foreach ($_POST as $key => $value)
{
if (preg_match("/^gap_(\d+)/", $key, $matches))
{
$value = ilUtil::stripSlashes($value, FALSE);
if (strlen($value))
{
$gap = $this->getGap($matches[1]);
if (is_object($gap))
{
if (!(($gap->getType() == CLOZE_SELECT) && ($value == -1)))
{
if ($gap->getType() == CLOZE_NUMERIC)
{
$value = str_replace(",", ".", $value);
}
$query = sprintf("INSERT INTO tst_solutions (solution_id, active_fi, question_fi, value1, value2, pass, TIMESTAMP) VALUES (NULL, %s, %s, %s, %s, %s, NULL)",
$ilDB->quote($active_id),
$ilDB->quote($this->getId()),
$ilDB->quote(trim($matches[1])),
$ilDB->quote(trim($value)),
$ilDB->quote($pass . "")
);
$result = $ilDB->query($query);
$entered_values++;
}
}
}
}
}
if ($entered_values)
{
include_once ("./classes/class.ilObjAssessmentFolder.php");
if (ilObjAssessmentFolder::_enabledAssessmentLogging())
{
$this->logAction($this->lng->txtlng("assessment", "log_user_entered_values", ilObjAssessmentFolder::_getLogLanguage()), $active_id, $this->getId());
}
}
else
{
include_once ("./classes/class.ilObjAssessmentFolder.php");
if (ilObjAssessmentFolder::_enabledAssessmentLogging())
{
$this->logAction($this->lng->txtlng("assessment", "log_user_not_entered_values", ilObjAssessmentFolder::_getLogLanguage()), $active_id, $this->getId());
}
}
parent::saveWorkingData($active_id, $pass);
return true;
}
Here is the call graph for this function:| assClozeTest::setClozeText | ( | $ | cloze_text = "" |
) |
Sets the cloze text field, evaluates the gaps and creates the gap array from the data.
Evaluates the text gap solutions from the cloze text. A single or multiple text gap solutions could be entered using the following syntax in the cloze text: solution1 [, solution2, ..., solutionN] enclosed in the text gap selector gap[]
| string | $cloze_text The cloze text with all gaps and gap gaps public |
Definition at line 451 of file class.assClozeTest.php.
References cleanQuestiontext(), and createGapsFromQuestiontext().
Referenced by assClozeTest().
{
$this->gaps = array();
$cloze_text = $this->cleanQuestiontext($cloze_text);
$this->question = $cloze_text;
$this->createGapsFromQuestiontext();
}
Here is the call graph for this function:
Here is the caller graph for this function:| assClozeTest::setEndTag | ( | $ | end_tag = "[/gap]" |
) |
Sets the end tag of a cloze gap.
Sets the end tag of a cloze gap
| string | $end_tag The end tag for a cloze gap public |
Definition at line 524 of file class.assClozeTest.php.
References $end_tag.
{
$this->end_tag = $end_tag;
}
| assClozeTest::setFixedTextLength | ( | $ | a_text_len | ) |
Sets a fixed text length for all text fields in the cloze question.
Sets a fixed text length for all text fields in the cloze question
| integer | $a_text_len The text field length public |
Definition at line 1413 of file class.assClozeTest.php.
Referenced by loadFromDb().
{
$this->fixedTextLength = $a_text_len;
}
Here is the caller graph for this function:| assClozeTest::setGapAnswerLowerBound | ( | $ | gap_index, | |
| $ | order, | |||
| $ | bound | |||
| ) |
Sets the lower bound of a gap answer.
Sets the lower bound of a gap with a given index and an answer with a given order. The index of the first gap is 0, the index of the second gap is 1 and so on.
| integer | $gap_index A nonnegative index of the n-th gap | |
| integer | $order The order of the answer text | |
| string | $answer The lower bound of the answer public |
Definition at line 742 of file class.assClozeTest.php.
{
if (array_key_exists($gap_index, $this->gaps))
{
$this->gaps[$gap_index]->setItemLowerBound($order, $bound);
}
}
| assClozeTest::setGapAnswerPoints | ( | $ | gap_index, | |
| $ | order, | |||
| $ | points | |||
| ) |
Sets the points of a gap answer.
Sets the points of a gap with a given index and an answer with a given order. The index of the first gap is 0, the index of the second gap is 1 and so on.
| integer | $gap_index A nonnegative index of the n-th gap | |
| integer | $order The order of the answer text | |
| string | $answer The points of the answer public |
Definition at line 683 of file class.assClozeTest.php.
References assQuestion::$points.
{
if (array_key_exists($gap_index, $this->gaps))
{
$this->gaps[$gap_index]->setItemPoints($order, $points);
}
}
| assClozeTest::setGapAnswerUpperBound | ( | $ | gap_index, | |
| $ | order, | |||
| $ | bound | |||
| ) |
Sets the upper bound of a gap answer.
Sets the upper bound of a gap with a given index and an answer with a given order. The index of the first gap is 0, the index of the second gap is 1 and so on.
| integer | $gap_index A nonnegative index of the n-th gap | |
| integer | $order The order of the answer text | |
| string | $answer The upper bound of the answer public |
Definition at line 762 of file class.assClozeTest.php.
{
if (array_key_exists($gap_index, $this->gaps))
{
$this->gaps[$gap_index]->setItemUpperBound($order, $bound);
}
}
| assClozeTest::setGapShuffle | ( | $ | gap_index = 0, |
|
| $ | shuffle = 1 | |||
| ) |
Sets the shuffle state of a gap.
Sets the shuffle state of a gap with a given index. The index of the first gap is 0, the index of the second gap is 1 and so on.
| integer | $index A nonnegative index of the n-th gap | |
| integer | $shuffle Turn shuffle on (=1) or off (=0) public |
Definition at line 579 of file class.assClozeTest.php.
References assQuestion::$shuffle.
{
if (array_key_exists($gap_index, $this->gaps))
{
$this->gaps[$gap_index]->setShuffle($shuffle);
}
}
| assClozeTest::setGapType | ( | $ | gap_index, | |
| $ | gap_type | |||
| ) |
Set the type of a gap with a given index.
Set the type of a gap with a given index
private
Definition at line 560 of file class.assClozeTest.php.
{
if (array_key_exists($gap_index, $this->gaps))
{
$this->gaps[$gap_index]->setType($gap_type);
}
}
| assClozeTest::setIdenticalScoring | ( | $ | a_identical_scoring | ) |
Sets the identical scoring option for cloze questions.
Sets the identical scoring option for cloze questions
| boolean | $a_identical_scoring The identical scoring option for cloze questions |
Definition at line 1374 of file class.assClozeTest.php.
Referenced by loadFromDb().
{
$this->identical_scoring = ($a_identical_scoring) ? 1 : 0;
}
Here is the caller graph for this function:| assClozeTest::setStartTag | ( | $ | start_tag = "[gap]" |
) |
Sets the start tag of a cloze gap.
Sets the start tag of a cloze gap
| string | $start_tag The start tag for a cloze gap public |
Definition at line 496 of file class.assClozeTest.php.
References $start_tag.
{
$this->start_tag = $start_tag;
}
| assClozeTest::setTextgapRating | ( | $ | a_textgap_rating | ) |
Sets the rating option for text gaps.
Sets the rating option for text gaps
| string | $a_textgap_rating The rating option for text gaps |
Definition at line 1332 of file class.assClozeTest.php.
Referenced by loadFromDb().
{
switch ($a_textgap_rating)
{
case TEXTGAP_RATING_CASEINSENSITIVE:
case TEXTGAP_RATING_CASESENSITIVE:
case TEXTGAP_RATING_LEVENSHTEIN1:
case TEXTGAP_RATING_LEVENSHTEIN2:
case TEXTGAP_RATING_LEVENSHTEIN3:
case TEXTGAP_RATING_LEVENSHTEIN4:
case TEXTGAP_RATING_LEVENSHTEIN5:
$this->textgap_rating = $a_textgap_rating;
break;
default:
$this->textgap_rating = TEXTGAP_RATING_CASEINSENSITIVE;
break;
}
}
Here is the caller graph for this function:| assClozeTest::updateClozeTextFromGaps | ( | ) |
Updates the gap parameters in the cloze text from the form input.
Updates the gap parameters in the cloze text from the form input
private
Definition at line 917 of file class.assClozeTest.php.
References getClozeText(), getGaps(), and ilUtil::prepareFormOutput().
Referenced by deleteAnswerText().
{
$output = $this->getClozeText();
foreach ($this->getGaps() as $gap_index => $gap)
{
$answers = array();
foreach ($gap->getItemsRaw() as $item)
{
array_push($answers, str_replace(",", "\\,", $item->getAnswerText()));
}
$output = preg_replace("/\[gap\].*?\[\/gap\]/", "[_gap]" . ilUtil::prepareFormOutput(join(",", $answers)) . "[/_gap]", $output, 1);
}
$output = str_replace("_gap]", "gap]", $output);
$this->question = $output;
}
Here is the call graph for this function:
Here is the caller graph for this function:| assClozeTest::$end_tag |
Definition at line 63 of file class.assClozeTest.php.
Referenced by setEndTag().
| assClozeTest::$fixedTextLength |
Definition at line 93 of file class.assClozeTest.php.
| assClozeTest::$gaps |
Definition at line 45 of file class.assClozeTest.php.
| assClozeTest::$identical_scoring |
Definition at line 86 of file class.assClozeTest.php.
| assClozeTest::$start_tag |
Definition at line 54 of file class.assClozeTest.php.
Referenced by setStartTag().
| assClozeTest::$textgap_rating |
Definition at line 75 of file class.assClozeTest.php.
1.7.1