4require_once
'./Modules/TestQuestionPool/classes/class.assQuestion.php';
5require_once
'./Modules/Test/classes/inc.AssessmentConstants.php';
6require_once
'./Modules/TestQuestionPool/interfaces/interface.ilObjQuestionScoringAdjustable.php';
7require_once
'./Modules/TestQuestionPool/interfaces/interface.ilObjAnswerScoringAdjustable.php';
78 $this->maxNumOfChars = 0;
80 $this->answers = array();
81 $this->matchcondition = 0;
91 if (strlen($this->title)
133 $this->
setId($question_id);
142 include_once(
"./Services/RTE/classes/class.ilRTE.php");
147 $this->matchcondition = (strlen(
$data[
'matchcondition'])) ?
$data[
'matchcondition'] : 0;
160 $result =
$ilDB->queryF(
"SELECT * FROM qpl_a_essay WHERE question_fi = %s",
162 array($this->
getId())
171 parent::loadFromDb($question_id);
187 $this_id = $this->
getId();
191 include_once (
"./Modules/TestQuestionPool/classes/class.assQuestion.php");
195 if( (
int)$testObjId > 0 )
197 $clone->setObjId($testObjId);
224 $clone->copyPageOfQuestion($this_id);
226 $clone->copyXHTMLMediaObjectsOfQuestion($this_id);
227 #$clone->duplicateAnswers($this_id);
229 $clone->onDuplicate($thisObjId, $this_id, $clone->getObjId(), $clone->getId());
248 include_once (
"./Modules/TestQuestionPool/classes/class.assQuestion.php");
251 $source_questionpool_id = $this->
getObjId();
252 $clone->setObjId($target_questionpool_id);
263 #$clone->duplicateAnswers($original_id);
265 $clone->onCopy($source_questionpool_id,
$original_id, $clone->getObjId(), $clone->getId());
278 include_once (
"./Modules/TestQuestionPool/classes/class.assQuestion.php");
281 $sourceParentId = $this->
getObjId();
287 $clone->setObjId($targetParentId);
289 if ($targetQuestionTitle)
291 $clone->setTitle($targetQuestionTitle);
296 $clone->copyPageOfQuestion($sourceQuestionId);
298 $clone->copyXHTMLMediaObjectsOfQuestion($sourceQuestionId);
300 #$clone->duplicateAnswers($sourceQuestionId);
302 $clone->onCopy($sourceParentId, $sourceQuestionId, $clone->getObjId(), $clone->getId());
316 if (strcmp($this->maxNumOfChars,
"") == 0)
335 $this->maxNumOfChars = $maxchars;
346 if( in_array($this->
getKeywordRelation(), self::getScoringModesWithPointsByQuestion()) )
348 return parent::getPoints();
353 foreach ($this->answers as $answer)
355 if ($answer->getPoints() > 0)
366 if( in_array($this->
getKeywordRelation(), self::getScoringModesWithPointsByQuestion()) )
373 foreach ($this->answers as $answer)
375 if ($answer->getPoints() < 0)
402 $affectedRows =
$ilDB->manipulateF(
"UPDATE tst_test_result SET points = %s WHERE active_fi = %s AND question_fi = %s AND pass = %s",
403 array(
'float',
'integer',
'integer',
'integer'),
406 $this->_updateTestPassResults($active_id,
$pass);
444 include_once
"./Services/Utilities/classes/class.ilStr.php";
451 if (
ilStr::strPos($answertext, $a_keyword) !==
false)
return TRUE;
456 $answertext = strip_tags($answertext);
458 $answerwords = array();
459 if (preg_match_all(
"/([^\s.]+)/", $answertext, $matches))
461 foreach ($matches[1] as $answerword)
463 array_push($answerwords, trim($answerword));
466 foreach ($answerwords as $a_original)
471 if (levenshtein($a_original, $a_keyword) <= 1)
return TRUE;
474 if (levenshtein($a_original, $a_keyword) <= 2)
return TRUE;
477 if (levenshtein($a_original, $a_keyword) <= 3)
return TRUE;
480 if (levenshtein($a_original, $a_keyword) <= 4)
return TRUE;
483 if (levenshtein($a_original, $a_keyword) <= 5)
return TRUE;
512 foreach ($answers as $answer)
514 $qst_answer = $answer->getAnswertext();
515 $user_answer =
' '.$solution;
519 $points += $answer->getPoints();
529 foreach ($answers as $answer)
531 $qst_answer = $answer->getAnswertext();
532 $user_answer =
' '.$solution;
549 $qst_answer = $answer->getAnswertext();
550 $user_answer =
' '.$solution;
579 throw new ilTestException(
'return details not implemented for '.__METHOD__);
600 if (
$row[
"points"] != NULL)
602 return $row[
"points"];
621 include_once
"./Services/Utilities/classes/class.ilStr.php";
624 include_once
"./Modules/Test/classes/class.ilObjTest.php";
645 include_once (
"./Modules/Test/classes/class.ilObjAssessmentFolder.php");
653 include_once (
"./Modules/Test/classes/class.ilObjAssessmentFolder.php");
684 array( $this->
getId()
688 $ilDB->manipulateF(
"INSERT INTO " . $this->
getAdditionalTableName() .
" (question_fi, maxnumofchars, keywords,
689 textgap_rating, matchcondition, keyword_relation) VALUES (%s, %s, %s, %s, %s, %s)",
690 array(
"integer",
"integer",
"text",
"text",
'integer',
'text' ),
696 $this->matchcondition,
707 $ilDB->manipulateF(
"DELETE FROM qpl_a_essay WHERE question_fi = %s",
709 array( $this->
getId() )
712 foreach ($this->answers as $answer)
715 $nextID =
$ilDB->nextId(
'qpl_a_essay' );
716 $ilDB->manipulateF(
"INSERT INTO qpl_a_essay (answer_id, question_fi, answertext, points) VALUES (%s, %s, %s, %s)",
717 array(
"integer",
"integer",
"text",
'float' ),
721 $answer->getAnswertext(),
753 return "assTextQuestion";
777 switch ($a_text_rating)
786 $this->text_rating = $a_text_rating;
802 return "qpl_qst_essay";
811 return parent::getRTETextWithMediaObjects();
828 include_once (
"./Services/Excel/classes/class.ilExcelUtils.php");
834 if (strlen($solutions[0][
"value1"]))
839 return $startrow + $i + 1;
847 include_once(
"./Services/RTE/classes/class.ilRTE.php");
861 return count($this->answers);
880 $points_unchecked = 0.0,
885 include_once
"./Modules/TestQuestionPool/classes/class.assAnswerMultipleResponseImage.php";
889 $this->answers[] = $answer;
908 if ($index < 0)
return NULL;
909 if (count($this->answers) < 1)
return NULL;
910 if ($index >= count($this->answers))
return NULL;
912 return $this->answers[$index];
925 if ($index < 0)
return;
926 if (count($this->answers) < 1)
return;
927 if ($index >= count($this->answers))
return;
928 $answer = $this->answers[$index];
929 if (strlen($answer->getImage())) $this->deleteImage($answer->getImage());
930 unset($this->answers[$index]);
931 $this->answers = array_values($this->answers);
932 for ($i = 0; $i < count($this->answers); $i++)
934 if ($this->answers[$i]->getOrder() > $index)
936 $this->answers[$i]->setOrder($i);
943 return 'qpl_a_essay';
954 $this->answers = array();
972 for( $i = 0; $i < $count; $i++ )
989 $result =
$ilDB->queryF(
"SELECT * FROM qpl_a_essay WHERE question_fi = %s",
997 $next_id =
$ilDB->nextId(
'qpl_a_essay');
998 $affectedRows =
$ilDB->manipulateF(
999 "INSERT INTO qpl_a_essay (answer_id, question_fi, answertext, points)
1000 VALUES (%s, %s, %s, %s)",
1001 array(
'integer',
'integer',
'text',
'float'),
1002 array($next_id, $this->
getId(),
$row[
"answertext"],
$row[
"points"])
1019 $this->keyword_relation = $a_relation;
1024 return array_merge(self::getScoringModesWithPointsByQuestion(), self::getScoringModesWithPointsByKeyword());
1029 return array(
'non',
'all',
'one');
1034 return array(
'any');
1052 return $numExistingSolutionRecords > 0;
1082 require_once
'Services/Utilities/classes/class.ilStr.php';
ASS_AnswerBinaryStateImage is a class for answers with a binary state indicator (checked/unchecked,...
Abstract basic class which is to be extended by the concrete assessment question type classes.
getCurrentSolutionResultSet($active_id, $pass, $authorized=true)
Get a restulset for the current user solution for a this question by active_id and pass.
static _getOriginalId($question_id)
Returns the original id of a question.
formatSAQuestion($a_q)
Format self assessment question.
setShuffle($shuffle=true)
Sets the shuffle flag.
setId($id=-1)
Sets the id of the assQuestion object.
setOriginalId($original_id)
setObjId($obj_id=0)
Set the object id of the container object.
getSolutionMaxPass($active_id)
Returns the maximum pass a users question solution.
saveQuestionDataToDb($original_id="")
getId()
Gets the id of the assQuestion object.
getObjId()
Get the object id of the container object.
setTitle($title="")
Sets the title string of the assQuestion object.
setOwner($owner="")
Sets the creator/owner ID of the assQuestion object.
setEstimatedWorkingTime($hour=0, $min=0, $sec=0)
Sets the estimated working time of a question from given hour, minute and second.
getHtmlUserSolutionPurifier()
static getNumExistingSolutionRecords($activeId, $pass, $questionId)
returns the number of existing solution records for the given test active / pass and given question i...
setAuthor($author="")
Sets the authors name of the assQuestion object.
getPoints()
Returns the maximum available points for the question.
getSolutionValues($active_id, $pass=NULL, $authorized=true)
Loads solutions of a given user from the database an returns it.
getShuffle()
Gets the shuffle flag.
logAction($logtext="", $active_id="", $question_id="")
Logs an action into the Test&Assessment log.
removeCurrentSolution($active_id, $pass, $authorized=true, $ignoredSolutionIds=array())
getTitle()
Gets the title string of the assQuestion object.
setPoints($a_points)
Sets the maximum available points for the question.
setComment($comment="")
Sets the comment string of the assQuestion object.
setNrOfTries($a_nr_of_tries)
getQuestion()
Gets the question string of the question object.
setAdditionalContentEditingMode($additinalContentEditingMode)
setter for additional content editing mode for this question
saveCurrentSolution($active_id, $pass, $value1, $value2, $authorized=true)
setQuestion($question="")
Sets the question string of the question object.
Class for text questions.
setReachedPoints($active_id, $points, $pass=NULL)
Sets the points, a learner has reached answering the question.
setMaxNumOfChars($maxchars=0)
Sets the maximum number of characters for the text solution.
static isObligationPossible($questionId)
returns boolean wether it is possible to set this question type as obligatory or not considering the ...
setExportDetailsXLS(&$worksheet, $startrow, $active_id, $pass, &$format_title, &$format_bold)
Creates an Excel worksheet for the detailed cumulated results of this question.
isKeywordMatching($answertext, $a_keyword)
Checks if one of the keywords matches the answertext.
saveToDb($original_id="")
Saves a assTextQuestion object to a database.
loadFromDb($question_id)
Loads a assTextQuestion object from a database.
addAnswer( $answertext="", $points=0.0, $points_unchecked=0.0, $order=0, $answerimage="")
Adds a possible answer for a multiple choice question.
getRTETextWithMediaObjects()
Collects all text in the question which could contain media objects which were created with the Rich ...
calculateReachedPoints($active_id, $pass=NULL, $authorizedSolution=true, $returndetails=FALSE)
Returns the points, a learner has reached answering the question.
isComplete()
Returns true, if a multiple choice question is complete for use.
setKeywordRelation($a_relation)
This method implements a default behaviour.
getAnswer($index=0)
Returns an answer with a given index.
isAnswered($active_id, $pass=NULL)
returns boolean wether the question is answered during test pass or not
getAdditionalTableName()
Returns the name of the additional question data table in the database.
static getScoringModesWithPointsByKeyword()
toJSON()
Returns a JSON representation of the question.
getAnswerTableName()
Returns the name of the answer table in the database.
reworkWorkingData($active_id, $pass, $obligationsAnswered)
Reworks the allready saved working data if neccessary.
flushAnswers()
Deletes all answers.
setTextRating($a_text_rating)
Sets the rating option for text comparisons.
duplicate($for_test=true, $title="", $author="", $owner="", $testObjId=null)
Duplicates an assTextQuestion.
static getValidScoringModes()
copyObject($target_questionpool_id, $title="")
Copies an assTextQuestion object.
getQuestionType()
Returns the question type of the question.
deleteAnswer($index=0)
Deletes an answer with a given index.
getMaxNumOfChars()
Gets the maximum number of characters for the text solution.
calculateReachedPointsForSolution($solution)
getMaximumPoints()
Returns the maximum points, a learner can reach answering the question.
saveWorkingData($active_id, $pass=NULL, $authorized=true)
Saves the learners input of the question to the database.
createRandomSolution($test_id, $user_id)
isValidTextRating($textRating)
createNewOriginalFromThisDuplicate($targetParentId, $targetQuestionTitle="")
__construct( $title="", $comment="", $author="", $owner=-1, $question="")
assTextQuestion constructor
static getScoringModesWithPointsByQuestion()
getTextRating()
Returns the rating option for text comparisons.
duplicateAnswers($original_id)
_convert_text($a_text, $a_target="has been removed")
_getLogLanguage()
retrieve the log language for assessment logging
_enabledAssessmentLogging()
check wether assessment logging is enabled or not
_getPass($active_id)
Retrieves the actual pass of a given user for a given test.
static _replaceMediaObjectImageSrc($a_text, $a_direction=0, $nic=IL_INST_ID)
replaces image source from mob image urls with the mob id or replaces mob id with the correct image s...
static strPos($a_haystack, $a_needle, $a_offset=NULL)
static strToLower($a_string)
Base Exception for all Exceptions relating to Modules/Test.
static isHTML($a_text)
Checks if a given string contains HTML or not.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
const TEXTGAP_RATING_LEVENSHTEIN5
const TEXTGAP_RATING_LEVENSHTEIN4
const TEXTGAP_RATING_LEVENSHTEIN3
const TEXTGAP_RATING_CASESENSITIVE
const TEXTGAP_RATING_LEVENSHTEIN2
const TEXTGAP_RATING_CASEINSENSITIVE
const TEXTGAP_RATING_LEVENSHTEIN1
Interface ilObjAnswerScoringAdjustable.
saveAnswerSpecificDataToDb()
Saves the answer specific records into a question types answer table.
Interface ilObjQuestionScoringAdjustable.
saveAdditionalQuestionDataToDb()
Saves a record to the question types additional data table.