ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
assErrorText Class Reference

Class for error text questions. More...

+ Inheritance diagram for assErrorText:
+ Collaboration diagram for assErrorText:

Public Member Functions

 __construct (string $title='', string $comment='', string $author='', int $owner=-1, string $question='')
 
 isComplete ()
 
 saveToDb (?int $original_id=null)
 
 saveAnswerSpecificDataToDb ()
 Saves the answer specific records into a question types answer table. More...
 
 saveAdditionalQuestionDataToDb ()
 Saves the data for the additional data table. More...
 
 loadFromDb ($question_id)
 Loads the object from the database. More...
 
 getMaximumPoints ()
 Returns the maximum points, a learner can reach answering the question. More...
 
 calculateReachedPoints (int $active_id, ?int $pass=null, bool $authorized_solution=true)
 
 calculateReachedPointsFromPreviewSession (ilAssQuestionPreviewSession $preview_session)
 
 saveWorkingData (int $active_id, ?int $pass=null, bool $authorized=true)
 
 savePreviewData (ilAssQuestionPreviewSession $previewSession)
 
 getQuestionType ()
 
 getAdditionalTableName ()
 
 getAnswerTableName ()
 
 setErrorsFromParsedErrorText ()
 
 setErrorData (array $errors)
 
 removeErrorDataWithoutPosition ()
 
 assembleErrorTextOutput (array $selections, bool $graphical_output=false, bool $show_correct_solution=false, bool $use_link_tags=true, array $correctness_icons=[])
 
 createErrorTextExport (array $selections)
 
 getBestSelection (bool $with_positive_points_only=true)
 
 flushErrorData ()
 
 getErrorData ()
 
 getErrorText ()
 
 setErrorText (?string $text)
 
 getParsedErrorText ()
 
 setParsedErrorText (array $parsed_errortext)
 
 getTextSize ()
 
 setTextSize ($a_value)
 
 getPointsWrong ()
 
 setPointsWrong ($a_value)
 
 toJSON ()
 
 getOperators (string $expression)
 Get all available operations for a specific question. More...
 
 getExpressionTypes ()
 Get all available expression types for a specific question. More...
 
 getUserQuestionResult (int $active_id, int $pass)
 Get the user solution for a question by active_id and the test pass. More...
 
 parseErrorText ()
 
 getAvailableAnswerOptions ($index=null)
 If index is null, the function returns an array with all anwser options Else it returns the specific answer option. More...
 
 toLog (AdditionalInformationGenerator $additional_info)
 
 solutionValuesToText (array $solution_values)
 
 getCorrectSolutionForTextOutput (int $active_id, int $pass)
 
- Public Member Functions inherited from assQuestion
 getQuestionType ()
 
 isComplete ()
 
 saveWorkingData (int $active_id, ?int $pass=null, bool $authorized=true)
 
 calculateReachedPoints (int $active_id, ?int $pass=null, bool $authorized_solution=true)
 
 getAdditionalTableName ()
 
 getAnswerTableName ()
 
 toLog (AdditionalInformationGenerator $additional_info)
 MUST return an array of the question settings that can be stored in the log. More...
 
 getCurrentUser ()
 
 getShuffler ()
 
 setShuffler (Transformation $shuffler)
 
 setProcessLocker (ilAssQuestionProcessLocker $processLocker)
 
 getProcessLocker ()
 
 fromXML (string $importdirectory, int $user_id, ilQTIItem $item, int $questionpool_id, ?int $tst_id, ?ilObject &$tst_object, int &$question_counter, array $import_mapping)
 
 toXML (bool $a_include_header=true, bool $a_include_binary=true, bool $a_shuffle=false, bool $test_output=false, bool $force_image_references=false)
 Returns a QTI xml representation of the question. More...
 
 setTitle (string $title="")
 
 setId (int $id=-1)
 
 setTestId (int $id=-1)
 
 setComment (string $comment="")
 
 setShuffle (?bool $shuffle=true)
 
 setAuthor (string $author="")
 
 setOwner (int $owner=-1)
 
 getTitle ()
 
 getTitleForHTMLOutput ()
 
 getTitleFilenameCompliant ()
 
 getId ()
 
 getShuffle ()
 
 getTestId ()
 
 getComment ()
 
 getDescriptionForHTMLOutput ()
 
 getThumbSize ()
 
 setThumbSize (int $a_size)
 
 getMinimumThumbSize ()
 
 getMaximumThumbSize ()
 
 getAuthor ()
 
 getAuthorForHTMLOutput ()
 
 getOwner ()
 
 getObjId ()
 
 setObjId (int $obj_id=0)
 
 getLifecycle ()
 
 setLifecycle (ilAssQuestionLifecycle $lifecycle)
 
 setExternalId (?string $external_id)
 
 getExternalId ()
 
 getSuggestedSolutionOutput ()
 
 getSuggestedSolutions ()
 
 getReachedPoints (int $active_id, int $pass)
 
 getMaximumPoints ()
 
 getAdjustedReachedPoints (int $active_id, int $pass, bool $authorized_solution=true)
 
 calculateResultsFromSolution (int $active_id, int $pass)
 Calculates the question results from a previously saved question solution. More...
 
 persistWorkingState (int $active_id, $pass, bool $authorized=true)
 persists the working state for current testactive and testpass More...
 
 persistPreviewState (ilAssQuestionPreviewSession $preview_session)
 persists the preview state for current user and question More...
 
 validateSolutionSubmit ()
 
 getSuggestedSolutionPath ()
 
 getImagePath ($question_id=null, $object_id=null)
 Returns the image path for web accessable images of a question. More...
 
 getSuggestedSolutionPathWeb ()
 
 getImagePathWeb ()
 Returns the web image path for web accessable images of a question. More...
 
 getTestOutputSolutions (int $activeId, int $pass)
 
 getUserSolutionPreferingIntermediate (int $active_id, ?int $pass=null)
 
 getSolutionValues (int $active_id, ?int $pass=null, bool $authorized=true)
 Loads solutions of a given user from the database an returns it. More...
 
 deleteAnswers (int $question_id)
 
 deleteAdditionalTableData (int $question_id)
 
 delete (int $question_id)
 
 getTotalAnswers ()
 
 cloneXHTMLMediaObjectsOfQuestion (int $source_question_id)
 
 createPageObject ()
 
 clonePageOfQuestion (int $a_q_id)
 
 getPageOfQuestion ()
 
 setOriginalId (?int $original_id)
 
 getOriginalId ()
 
static fixSvgToPng (string $imageFilenameContainingString)
 
 fixUnavailableSkinImageSources (string $html)
 
 loadFromDb (int $question_id)
 
 createNewQuestion (bool $a_create_page=true)
 Creates a new question without an owner when a new question is created This assures that an ID is given to the question if a file upload or something else occurs. More...
 
 saveQuestionDataToDb (?int $original_id=null)
 
 duplicate (bool $for_test=true, string $title='', string $author='', int $owner=-1, $test_obj_id=null)
 
 copyObject (int $target_parent_id, string $title='')
 
 createNewOriginalFromThisDuplicate (int $target_parent_id, string $target_question_title='')
 
 saveToDb (?int $original_id=null)
 
 deleteSuggestedSolutions ()
 
 getSuggestedSolution (int $subquestion_index=0)
 
 resolveInternalLink (string $internal_link)
 
 resolveSuggestedSolutionLinks ()
 
 getInternalLinkHref (string $target)
 
 syncWithOriginal ()
 
 getPoints ()
 
 setPoints (float $points)
 
 getSolutionMaxPass (int $active_id)
 
 isWriteable ()
 
 calculateReachedPointsFromPreviewSession (ilAssQuestionPreviewSession $preview_session)
 
 isPreviewSolutionCorrect (ilAssQuestionPreviewSession $preview_session)
 
 adjustReachedPointsByScoringOptions (float $points, int $active_id)
 Adjust the given reached points by checks for all special scoring options in the test container. More...
 
 buildHashedImageFilename (string $plain_image_filename, bool $unique=false)
 
 getQuestion ()
 
 getQuestionForHTMLOutput ()
 
 setQuestion (string $question="")
 
 getQuestionTypeID ()
 
 cleanupMediaObjectUsage ()
 
 getInstances ()
 
 getActiveUserData (int $active_id)
 Returns the user id and the test id for a given active id. More...
 
 hasSpecificFeedback ()
 
 getNrOfTries ()
 
 setNrOfTries (int $a_nr_of_tries)
 
 setExportImagePath (string $path)
 
 formatSAQuestion ($a_q)
 
 setPreventRteUsage (bool $prevent_rte_usage)
 
 getPreventRteUsage ()
 
 migrateContentForLearningModule (ilAssSelfAssessmentMigrator $migrator)
 
 setSelfAssessmentEditingMode (bool $selfassessmenteditingmode)
 
 getSelfAssessmentEditingMode ()
 
 setDefaultNrOfTries (int $defaultnroftries)
 
 getDefaultNrOfTries ()
 
 syncSkillAssignments (int $srcParentId, int $srcQuestionId, int $trgParentId, int $trgQuestionId)
 
 isAnswered (int $active_id, int $pass)
 
 getAdditionalContentEditingMode ()
 
 setAdditionalContentEditingMode (?string $additionalContentEditingMode)
 
 isAdditionalContentEditingModePageObject ()
 
 isValidAdditionalContentEditingMode (string $additionalContentEditingMode)
 
 getValidAdditionalContentEditingModes ()
 
 getHtmlUserSolutionPurifier ()
 
 getHtmlQuestionContentPurifier ()
 
 setLastChange (int $lastChange)
 
 getLastChange ()
 
 removeIntermediateSolution (int $active_id, int $pass)
 
 removeCurrentSolution (int $active_id, int $pass, bool $authorized=true)
 
 saveCurrentSolution (int $active_id, int $pass, $value1, $value2, bool $authorized=true, $tstamp=0)
 
 updateCurrentSolution (int $solutionId, $value1, $value2, bool $authorized=true)
 
 updateCurrentSolutionsAuthorization (int $activeId, int $pass, bool $authorized, bool $keepTime=false)
 
 setStep ($step)
 
 getStep ()
 
 toJSON ()
 
 intermediateSolutionExists (int $active_id, int $pass)
 
 authorizedSolutionExists (int $active_id, ?int $pass)
 
 authorizedOrIntermediateSolutionExists (int $active_id, int $pass)
 
 lookupForExistingSolutions (int $activeId, int $pass)
 Lookup if an authorized or intermediate solution exists. More...
 
 isAddableAnswerOptionValue (int $qIndex, string $answerOptionValue)
 
 addAnswerOptionValue (int $qIndex, string $answerOptionValue, float $points)
 
 removeAllExistingSolutions ()
 
 removeExistingSolutions (int $activeId, int $pass)
 
 resetUsersAnswer (int $activeId, int $pass)
 
 removeResultRecord (int $activeId, int $pass)
 
 fetchValuePairsFromIndexedValues (array $indexedValues)
 
 fetchIndexedValuesFromValuePairs (array $value_pairs)
 
 updateTimestamp ()
 
 getTestPresentationConfig ()
 
 hasWritableOriginalInQuestionPool ()
 
 answerToParticipantInteraction (AdditionalInformationGenerator $additional_info, int $test_ref_id, int $active_id, int $pass, string $source_ip, TestParticipantInteractionTypes $interaction_type)
 
 toQuestionAdministrationInteraction (AdditionalInformationGenerator $additional_info, int $test_ref_id, TestQuestionAdministrationInteractionTypes $interaction_type)
 
 getSolutionForTextOutput (int $active_id, int $pass)
 
 getCorrectSolutionForTextOutput (int $active_id, int $pass)
 
 getVariablesAsTextArray (int $active_id, int $pass)
 
- Public Member Functions inherited from iQuestionCondition
 getAvailableAnswerOptions (?int $index=null)
 If index is null, the function returns an array with all anwser options else it returns the specific answer option. More...
 

Protected Member Functions

 getPointsForSelectedPositions (array $selected_word_positions)
 
 solutionValuesToLog (AdditionalInformationGenerator $additional_info, array $solution_values)
 
- Protected Member Functions inherited from assQuestion
 solutionValuesToLog (AdditionalInformationGenerator $additional_info, array $solution_values)
 MUST convert the given solution values into an array or a string that can be stored in the log. More...
 
 solutionValuesToText (array $solution_values)
 MUST convert the given solution values into text. More...
 
 getQuestionAction ()
 
 isNonEmptyItemListPostSubmission (string $post_submission_field_name)
 
 savePreviewData (ilAssQuestionPreviewSession $preview_session)
 
 deletePageOfQuestion (int $question_id)
 
 cloneQuestionTypeSpecificProperties (self $target)
 
 removeAllImageFiles (string $image_target_path)
 
 onDuplicate (int $original_parent_id, int $original_question_id, int $duplicate_parent_id, int $duplicate_question_id)
 
 afterSyncWithOriginal (int $original_question_id, int $clone_question_id, int $original_parent_id, int $clone_parent_id)
 
 onCopy (int $sourceParentId, int $sourceQuestionId, int $targetParentId, int $targetQuestionId)
 
 duplicateComments (int $parent_source_id, int $source_id, int $parent_target_id, int $target_id)
 
 deleteComments ()
 
 getNotesManager ()
 
 getNotesDataService ()
 
 getNotesRepo ()
 
 cloneSuggestedSolutions (int $source_question_id, int $target_question_id)
 
 duplicateSuggestedSolutionFiles (int $parent_id, int $question_id)
 Duplicates the files of a suggested solution if the question is duplicated. More...
 
 cloneSuggestedSolutionFiles (int $source_question_id, int $target_question_id)
 
 copySuggestedSolutions (int $target_question_id)
 
 ensureNonNegativePoints (float $points)
 
 purifyAndPrepareTextAreaOutput (string $content)
 
 getRTETextWithMediaObjects ()
 
 getSelfAssessmentFormatter ()
 
 lmMigrateQuestionTypeGenericContent (ilAssSelfAssessmentMigrator $migrator)
 
 lmMigrateQuestionTypeSpecificContent (ilAssSelfAssessmentMigrator $migrator)
 
 duplicateSkillAssignments (int $srcParentId, int $srcQuestionId, int $trgParentId, int $trgQuestionId)
 
 buildQuestionDataQuery ()
 
 getCurrentSolutionResultSet (int $active_id, int $pass, bool $authorized=true)
 
 removeSolutionRecordById (int $solutionId)
 
 getSolutionRecordById (int $solutionId)
 
 deleteDummySolutionRecord (int $activeId, int $passIndex)
 
 isDummySolutionRecord (array $solutionRecord)
 
 deleteSolutionRecordByValues (int $activeId, int $passIndex, bool $authorized, array $matchValues)
 
 duplicateIntermediateSolutionAuthorized (int $activeId, int $passIndex)
 
 forceExistingIntermediateSolution (int $activeId, int $passIndex, bool $considerDummyRecordCreation)
 
 lookupMaxStep (int $active_id, int $pass)
 
 buildTestPresentationConfig ()
 
 getSuggestedSolutionsRepo ()
 
 loadSuggestedSolutions ()
 
 answerToLog (AdditionalInformationGenerator $additional_info, int $active_id, int $pass)
 

Protected Attributes

const ERROR_TYPE_WORD = 1
 
const ERROR_TYPE_PASSAGE = 2
 
const DEFAULT_TEXT_SIZE = 100.0
 
const ERROR_MAX_LENGTH = 150
 
const PARAGRAPH_SPLIT_REGEXP = '/[\n\r]+/'
 
const WORD_SPLIT_REGEXP = '/\s+/'
 
const FIND_PUNCTUATION_REGEXP = '/\p{P}/'
 
const ERROR_WORD_MARKER = '#'
 
const ERROR_PARAGRAPH_DELIMITERS
 
const string $errortext = ''
 
array $parsed_errortext = []
 
array $errordata = []
 
float $textsize
 
float $points_wrong = null
 
- Protected Attributes inherited from assQuestion
const HAS_SPECIFIC_FEEDBACK = true
 
GeneralQuestionPropertiesRepository $questionrepository
 
RequestDataCollector $questionpool_request
 
QuestionFiles $question_files
 
ilAssQuestionProcessLocker $processLocker
 
ilTestQuestionConfig $testQuestionConfig
 
SuggestedSolutionsDatabaseRepository $suggestedsolution_repo
 
ILIAS $ilias
 
ilGlobalPageTemplate $tpl
 
ilLanguage $lng
 
ilDBInterface $db
 
ilObjUser $current_user
 
SkillUsageService $skillUsageService
 
HTTPServices $http
 
Refinery $refinery
 
Transformation $shuffler
 
LoggingServices $log
 
Container $dic
 
ilAssQuestionLifecycle $lifecycle
 
ilAssQuestionPage $page
 
TestResultRepository $test_result_repository
 
int $id
 
string $title
 
string $comment
 
int $owner
 
string $author
 
int $thumb_size
 
string $question
 
float $points = 0.0
 
bool $shuffle = true
 
int $test_id
 
int $obj_id = 0
 
int $original_id = null
 
int $lastChange = null
 
string $external_id = null
 
int $step = null
 
array $suggested_solutions
 

Private Member Functions

 correctDataAfterParserUpdate ()
 
 getAnswersFromRequest ()
 
 addPositionToErrorAnswer (assAnswerErrorText $error)
 
 completeParsedErrorTextFromErrorData ()
 
 getAdditionalInformationFromExistingErrorDataByErrorText (array $current_error_data, string $text_wrong)
 
 generateOutputStringFromPosition (int $position, array $selections, array $paragraph, bool $graphical_output, bool $show_correct_solution, bool $use_link_tags, array $correctness_icons)
 
 getTextForPosition (int $position, array $paragraph, bool $show_correct_solution)
 
 getClassForPosition (int $position, bool $show_correct_solution, array $selections)
 
 getCorrectnessIconForPosition (int $position, bool $graphical_output, array $selections, array $correctness_icons)
 
 getErrorDataAsArrayForJS ()
 
 getParsedErrorTextForJS ()
 
 addErrorInformationToTextParagraphArray (array $paragraph, int $offset)
 
 parsePassageEndWord (string $word)
 
 generateArrayByPositionFromErrorData ()
 
 getErrorTokenHtml ($item, $class, $useLinkTags)
 

Additional Inherited Members

- Static Public Member Functions inherited from assQuestion
static setForcePassResultUpdateEnabled (bool $force_pass_results_update_enabled)
 
static isForcePassResultUpdateEnabled ()
 
static _getSuggestedSolutionOutput (int $question_id)
 
static _getReachedPoints (int $active_id, int $question_id, int $pass)
 
static isFileAvailable (string $file)
 
static saveOriginalId (int $questionId, int $originalId)
 
static resetOriginalId (int $questionId)
 
static instantiateQuestion (int $question_id)
 
static _getSolutionMaxPass (int $question_id, int $active_id)
 Returns the maximum pass a users question solution. More...
 
static getFeedbackClassNameByQuestionType (string $questionType)
 
static _questionExistsInTest (int $question_id, int $test_id)
 
static lookupParentObjId (int $question_id)
 
static implodeKeyValues (array $keyValues)
 
static explodeKeyValues (string $keyValues)
 
static convertISO8601FormatH_i_s_ExtendedToSeconds (string $time)
 
static extendedTrim (string $value)
 Trim non-printable characters from the beginning and end of a string. More...
 
- Data Fields inherited from assQuestion
const ADDITIONAL_CONTENT_EDITING_MODE_RTE = 'default'
 
const ADDITIONAL_CONTENT_EDITING_MODE_IPE = 'pageobject'
 
const TRIM_PATTERN = '/^[\p{C}\p{Z}]+|[\p{C}\p{Z}]+$/u'
 
ilAssQuestionFeedback $feedbackOBJ
 
bool $prevent_rte_usage = false
 
bool $selfassessmenteditingmode = false
 
int $defaultnroftries = 0
 
string $questionActionCmd = 'handleQuestionAction'
 
const KEY_VALUES_IMPLOSION_SEPARATOR = ':'
 
- Data Fields inherited from iQuestionCondition
const StringResultExpression = '~TEXT~'
 
const PercentageResultExpression = '%n%'
 
const NumericResultExpression = '#n#'
 
const MatchingResultExpression = ';n:m;'
 
const OrderingResultExpression = '$n,m,o,p$'
 
const NumberOfResultExpression = '+n+'
 
const ExclusiveResultExpression = '*n,m,o,p*'
 
const EmptyAnswerExpression = "?"
 
- Static Protected Member Functions inherited from assQuestion
static getNumExistingSolutionRecords (int $activeId, int $pass, int $questionId)
 
- Static Protected Attributes inherited from assQuestion
static $force_pass_results_update_enabled = false
 
static $imageSourceFixReplaceMap
 

Detailed Description

Class for error text questions.

Author
Helmut Schottmüller helmu.nosp@m.t.sc.nosp@m.hottm.nosp@m.uell.nosp@m.er@ma.nosp@m.c.co.nosp@m.m
Björn Heyser bheys.nosp@m.er@d.nosp@m.ataba.nosp@m.y.de
Grégory Saive gsaiv.nosp@m.e@da.nosp@m.tabay.nosp@m..de
Maximilian Becker mbeck.nosp@m.er@d.nosp@m.ataba.nosp@m.y.de
Version
$Id$

Definition at line 37 of file class.assErrorText.php.

Constructor & Destructor Documentation

◆ __construct()

assErrorText::__construct ( string  $title = '',
string  $comment = '',
string  $author = '',
int  $owner = -1,
string  $question = '' 
)

Definition at line 60 of file class.assErrorText.php.

References assQuestion\$author, assQuestion\$comment, assQuestion\$owner, assQuestion\$question, assQuestion\$title, and ILIAS\GlobalScreen\Provider\__construct().

66  {
68  $this->textsize = self::DEFAULT_TEXT_SIZE;
69  }
__construct(Container $dic, ilPlugin $plugin)
+ Here is the call graph for this function:

Member Function Documentation

◆ addErrorInformationToTextParagraphArray()

assErrorText::addErrorInformationToTextParagraphArray ( array  $paragraph,
int  $offset 
)
private
Parameters
list<string>$paragraph
Returns
array<string|array>

Definition at line 812 of file class.assErrorText.php.

References getPointsWrong(), null, and parsePassageEndWord().

Referenced by parseErrorText().

812  : array
813  {
814  $paragraph_with_error_info = [];
815  $passage_start = null;
816  foreach ($paragraph as $position => $word) {
817  $actual_position = $position + $offset;
818  if ($passage_start !== null
819  && (mb_strrpos($word, self::ERROR_PARAGRAPH_DELIMITERS['end']) === mb_strlen($word) - 2
820  || mb_strrpos($word, self::ERROR_PARAGRAPH_DELIMITERS['end']) === mb_strlen($word) - 3
821  && preg_match(self::FIND_PUNCTUATION_REGEXP, mb_substr($word, -1)) === 1)) {
822  $actual_word = $this->parsePassageEndWord($word);
823 
824  $paragraph_with_error_info[$passage_start]['text_wrong'] .=
825  ' ' . $actual_word;
826  $paragraph_with_error_info[$actual_position] = [
827  'text' => $actual_word,
828  'error_type' => 'passage_end'
829  ];
830  $passage_start = null;
831  continue;
832  }
833  if ($passage_start !== null) {
834  $paragraph_with_error_info[$passage_start]['text_wrong'] .= ' ' . $word;
835  $paragraph_with_error_info[$actual_position] = [
836  'text' => $word,
837  'error_type' => 'in_passage'
838  ];
839  continue;
840  }
841  if (mb_strpos($word, self::ERROR_PARAGRAPH_DELIMITERS['start']) === 0) {
842  $paragraph_with_error_info[$actual_position] = [
843  'text' => substr($word, 2),
844  'text_wrong' => substr($word, 2),
845  'error_type' => 'passage_start',
846  'error_position' => $actual_position,
847  ];
848  $passage_start = $actual_position;
849  continue;
850  }
851  if (mb_strpos($word, self::ERROR_WORD_MARKER) === 0) {
852  $paragraph_with_error_info[$actual_position] = [
853  'text' => substr($word, 1),
854  'text_wrong' => substr($word, 1),
855  'error_type' => 'word',
856  'error_position' => $actual_position,
857  ];
858  continue;
859  }
860 
861  $paragraph_with_error_info[$actual_position] = [
862  'text' => $word,
863  'error_type' => 'none',
864  'points' => $this->getPointsWrong()
865  ];
866  }
867 
868  return $paragraph_with_error_info;
869  }
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
parsePassageEndWord(string $word)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ addPositionToErrorAnswer()

assErrorText::addPositionToErrorAnswer ( assAnswerErrorText  $error)
private

Definition at line 358 of file class.assErrorText.php.

References generateArrayByPositionFromErrorData(), getParsedErrorText(), assAnswerErrorText\getTextWrong(), and assAnswerErrorText\withPosition().

Referenced by correctDataAfterParserUpdate(), and setErrorData().

359  {
360  foreach ($this->getParsedErrorText() as $paragraph) {
361  foreach ($paragraph as $position => $word) {
362  if (isset($word['text_wrong'])
363  && ($word['text_wrong'] === $error->getTextWrong()
364  || mb_substr($word['text_wrong'], 0, -1) === $error->getTextWrong()
365  && preg_match(self::FIND_PUNCTUATION_REGEXP, mb_substr($word['text_wrong'], -1)) === 1)
366  && !array_key_exists($position, $this->generateArrayByPositionFromErrorData())
367  ) {
368  return $error->withPosition($position);
369  }
370  }
371  }
372 
373  return $error;
374  }
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
generateArrayByPositionFromErrorData()
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ assembleErrorTextOutput()

assErrorText::assembleErrorTextOutput ( array  $selections,
bool  $graphical_output = false,
bool  $show_correct_solution = false,
bool  $use_link_tags = true,
array  $correctness_icons = [] 
)

Definition at line 437 of file class.assErrorText.php.

References generateOutputStringFromPosition(), and getParsedErrorText().

443  : string {
444  $output_array = [];
445  foreach ($this->getParsedErrorText() as $paragraph) {
446  $array_reduce_function = fn(?string $carry, int $position)
447  => $carry . $this->generateOutputStringFromPosition(
448  $position,
449  $selections,
450  $paragraph,
451  $graphical_output,
452  $show_correct_solution,
453  $use_link_tags,
454  $correctness_icons
455  );
456  $output_array[] = '<p>' . trim(array_reduce(array_keys($paragraph), $array_reduce_function)) . '</p>';
457  }
458 
459  return implode("\n", $output_array);
460  }
generateOutputStringFromPosition(int $position, array $selections, array $paragraph, bool $graphical_output, bool $show_correct_solution, bool $use_link_tags, array $correctness_icons)
+ Here is the call graph for this function:

◆ calculateReachedPoints()

assErrorText::calculateReachedPoints ( int  $active_id,
?int  $pass = null,
bool  $authorized_solution = true 
)

Definition at line 249 of file class.assErrorText.php.

References assQuestion\$points, assQuestion\getCurrentSolutionResultSet(), getPointsForSelectedPositions(), assQuestion\getSolutionMaxPass(), and null.

Referenced by getUserQuestionResult().

253  : float {
254  if ($pass === null) {
255  $pass = $this->getSolutionMaxPass($active_id);
256  }
257  $result = $this->getCurrentSolutionResultSet($active_id, $pass, $authorized_solution);
258 
259  $positions = [];
260  while ($row = $this->db->fetchAssoc($result)) {
261  $positions[] = $row['value1'];
262  }
263  $points = $this->getPointsForSelectedPositions($positions);
264  return $points;
265  }
getPointsForSelectedPositions(array $selected_word_positions)
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
getSolutionMaxPass(int $active_id)
getCurrentSolutionResultSet(int $active_id, int $pass, bool $authorized=true)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ calculateReachedPointsFromPreviewSession()

assErrorText::calculateReachedPointsFromPreviewSession ( ilAssQuestionPreviewSession  $preview_session)

Definition at line 267 of file class.assErrorText.php.

References assQuestion\ensureNonNegativePoints(), ilAssQuestionPreviewSession\getParticipantsSolution(), and getPointsForSelectedPositions().

268  {
269  $reached_points = $this->getPointsForSelectedPositions($preview_session->getParticipantsSolution() ?? []);
270  return $this->ensureNonNegativePoints($reached_points);
271  }
getPointsForSelectedPositions(array $selected_word_positions)
ensureNonNegativePoints(float $points)
+ Here is the call graph for this function:

◆ completeParsedErrorTextFromErrorData()

assErrorText::completeParsedErrorTextFromErrorData ( )
private

Definition at line 376 of file class.assErrorText.php.

References getParsedErrorText().

Referenced by correctDataAfterParserUpdate(), and setErrorData().

376  : void
377  {
378  foreach ($this->errordata as $error) {
379  $position = $error->getPosition();
380  foreach ($this->getParsedErrorText() as $key => $paragraph) {
381  if (array_key_exists($position, $paragraph)) {
382  $this->parsed_errortext[$key][$position]['text_correct'] =
383  $error->getTextCorrect();
384  $this->parsed_errortext[$key][$position]['points'] =
385  $error->getPoints();
386  break;
387  }
388  }
389  }
390  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ correctDataAfterParserUpdate()

assErrorText::correctDataAfterParserUpdate ( )
private

Definition at line 208 of file class.assErrorText.php.

References addPositionToErrorAnswer(), completeParsedErrorTextFromErrorData(), getErrorText(), getParsedErrorText(), null, parseErrorText(), saveAdditionalQuestionDataToDb(), and saveAnswerSpecificDataToDb().

Referenced by loadFromDb().

208  : void
209  {
210  if ($this->getErrorText() === '') {
211  return;
212  }
213  $needs_finalizing = false;
214  if ($this->getParsedErrorText() === []) {
215  $needs_finalizing = true;
216  $this->parseErrorText();
217  }
218 
219  if (isset($this->errordata[0])
220  && $this->errordata[0]->getPosition() === null) {
221  foreach ($this->errordata as $key => $error) {
222  $this->errordata[$key] = $this->addPositionToErrorAnswer($error);
223  }
225  }
226 
227  if ($needs_finalizing) {
230  }
231  }
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
saveAnswerSpecificDataToDb()
Saves the answer specific records into a question types answer table.
addPositionToErrorAnswer(assAnswerErrorText $error)
saveAdditionalQuestionDataToDb()
Saves the data for the additional data table.
completeParsedErrorTextFromErrorData()
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ createErrorTextExport()

assErrorText::createErrorTextExport ( array  $selections)

Definition at line 544 of file class.assErrorText.php.

References getParsedErrorText().

Referenced by getCorrectSolutionForTextOutput(), solutionValuesToLog(), and solutionValuesToText().

544  : string
545  {
546  if (!is_array($selections)) {
547  $selections = [];
548  }
549 
550  foreach ($this->getParsedErrorText() as $paragraph) {
551  $array_reduce_function = function ($carry, $k) use ($paragraph, $selections) {
552  $text = $paragraph[$k]['text'];
553  if (in_array($k, $selections)) {
554  $text = self::ERROR_WORD_MARKER . $paragraph[$k]['text'] . self::ERROR_WORD_MARKER;
555  }
556  return $carry . ' ' . $text;
557  };
558  $output_array[] = trim(array_reduce(array_keys($paragraph), $array_reduce_function));
559  }
560  return implode("\n", $output_array);
561  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ flushErrorData()

assErrorText::flushErrorData ( )

Definition at line 631 of file class.assErrorText.php.

631  : void
632  {
633  $this->errordata = [];
634  }

◆ generateArrayByPositionFromErrorData()

assErrorText::generateArrayByPositionFromErrorData ( )
private

Definition at line 904 of file class.assErrorText.php.

Referenced by addPositionToErrorAnswer(), getBestSelection(), and getPointsForSelectedPositions().

904  : array
905  {
906  $array_by_position = [];
907  foreach ($this->errordata as $error) {
908  $array_by_position[$error->getPosition()] = [
909  'length' => $error->getLength(),
910  'points' => $error->getPoints(),
911  'text' => $error->getTextWrong(),
912  'text_correct' => $error->getTextCorrect()
913  ];
914  }
915  ksort($array_by_position);
916  return $array_by_position;
917  }
+ Here is the caller graph for this function:

◆ generateOutputStringFromPosition()

assErrorText::generateOutputStringFromPosition ( int  $position,
array  $selections,
array  $paragraph,
bool  $graphical_output,
bool  $show_correct_solution,
bool  $use_link_tags,
array  $correctness_icons 
)
private

Definition at line 462 of file class.assErrorText.php.

References getClassForPosition(), getCorrectnessIconForPosition(), getErrorTokenHtml(), and getTextForPosition().

Referenced by assembleErrorTextOutput().

470  : string {
471  $text = $this->getTextForPosition($position, $paragraph, $show_correct_solution);
472  if ($text === '') {
473  return '';
474  }
475  $class = $this->getClassForPosition($position, $show_correct_solution, $selections);
476  $img = $this->getCorrectnessIconForPosition(
477  $position,
478  $graphical_output,
479  $selections,
480  $correctness_icons
481  );
482 
483  return ' ' . $this->getErrorTokenHtml($text, $class, $use_link_tags) . $img;
484  }
getClassForPosition(int $position, bool $show_correct_solution, array $selections)
getTextForPosition(int $position, array $paragraph, bool $show_correct_solution)
getCorrectnessIconForPosition(int $position, bool $graphical_output, array $selections, array $correctness_icons)
getErrorTokenHtml($item, $class, $useLinkTags)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getAdditionalInformationFromExistingErrorDataByErrorText()

assErrorText::getAdditionalInformationFromExistingErrorDataByErrorText ( array  $current_error_data,
string  $text_wrong 
)
private
Parameters
array<assAnswerErrorText>$current_error_data
Returns
array<mixed>

Definition at line 422 of file class.assErrorText.php.

Referenced by setErrorsFromParsedErrorText().

425  : array {
426  foreach ($current_error_data as $answer_object) {
427  if (strcmp($answer_object->getTextWrong(), $text_wrong) === 0) {
428  return[
429  $answer_object->getTextCorrect(),
430  $answer_object->getPoints()
431  ];
432  }
433  }
434  return ['', 0.0];
435  }
+ Here is the caller graph for this function:

◆ getAdditionalTableName()

assErrorText::getAdditionalTableName ( )

Definition at line 314 of file class.assErrorText.php.

Referenced by loadFromDb(), and saveAdditionalQuestionDataToDb().

314  : string
315  {
316  return 'qpl_qst_errortext';
317  }
+ Here is the caller graph for this function:

◆ getAnswersFromRequest()

assErrorText::getAnswersFromRequest ( )
private

Definition at line 301 of file class.assErrorText.php.

Referenced by savePreviewData(), and saveWorkingData().

301  : array
302  {
303  return explode(
304  ',',
305  $this->questionpool_request->string('qst_' . $this->getId())
306  );
307  }
+ Here is the caller graph for this function:

◆ getAnswerTableName()

assErrorText::getAnswerTableName ( )

Definition at line 319 of file class.assErrorText.php.

319  : string
320  {
321  return 'qpl_a_errortext';
322  }

◆ getAvailableAnswerOptions()

assErrorText::getAvailableAnswerOptions (   $index = null)

If index is null, the function returns an array with all anwser options Else it returns the specific answer option.

Parameters
null | int$index

Definition at line 886 of file class.assErrorText.php.

References $c, and null.

886  : ?int
887  {
888  $error_text_array = array_reduce(
889  $this->parsed_errortext,
890  fn($c, $v) => $c + $v
891  );
892 
893  if ($index === null) {
894  return $error_text_array;
895  }
896 
897  if (array_key_exists($index, $error_text_array)) {
898  return $error_text_array[$index];
899  }
900 
901  return null;
902  }
$c
Definition: deliver.php:25
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null

◆ getBestSelection()

assErrorText::getBestSelection ( bool  $with_positive_points_only = true)

Definition at line 563 of file class.assErrorText.php.

References generateArrayByPositionFromErrorData().

Referenced by getCorrectSolutionForTextOutput().

563  : array
564  {
565  $positions_array = $this->generateArrayByPositionFromErrorData();
566  $selections = [];
567  foreach ($positions_array as $position => $position_data) {
568  if ($position === ''
569  || $with_positive_points_only && $position_data['points'] <= 0) {
570  continue;
571  }
572 
573  $selections[] = $position;
574  if ($position_data['length'] > 1) {
575  for ($i = 1;$i < $position_data['length'];$i++) {
576  $selections[] = $position + $i;
577  }
578  }
579  }
580 
581  return $selections;
582  }
generateArrayByPositionFromErrorData()
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getClassForPosition()

assErrorText::getClassForPosition ( int  $position,
bool  $show_correct_solution,
array  $selections 
)
private

Definition at line 506 of file class.assErrorText.php.

Referenced by generateOutputStringFromPosition().

510  : string {
511  if ($show_correct_solution !== true
512  && in_array($position, $selections['user'])) {
513  return 'ilc_qetitem_ErrorTextSelected';
514  }
515 
516  if ($show_correct_solution === true
517  && in_array($position, $selections['best'])) {
518  return 'ilc_qetitem_ErrorTextSelected';
519  }
520 
521  return 'ilc_qetitem_ErrorTextItem';
522  }
+ Here is the caller graph for this function:

◆ getCorrectnessIconForPosition()

assErrorText::getCorrectnessIconForPosition ( int  $position,
bool  $graphical_output,
array  $selections,
array  $correctness_icons 
)
private

Definition at line 524 of file class.assErrorText.php.

Referenced by generateOutputStringFromPosition().

529  : string {
530  if ($graphical_output === true
531  && (in_array($position, $selections['user']) && !in_array($position, $selections['best'])
532  || !in_array($position, $selections['user']) && in_array($position, $selections['best']))) {
533  return $correctness_icons['not_correct'];
534  }
535 
536  if ($graphical_output === true
537  && in_array($position, $selections['user']) && in_array($position, $selections['best'])) {
538  return $correctness_icons['correct'];
539  }
540 
541  return '';
542  }
+ Here is the caller graph for this function:

◆ getCorrectSolutionForTextOutput()

assErrorText::getCorrectSolutionForTextOutput ( int  $active_id,
int  $pass 
)

Definition at line 991 of file class.assErrorText.php.

References createErrorTextExport(), and getBestSelection().

991  : string
992  {
993  return $this->createErrorTextExport($this->getBestSelection());
994  }
createErrorTextExport(array $selections)
getBestSelection(bool $with_positive_points_only=true)
+ Here is the call graph for this function:

◆ getErrorData()

assErrorText::getErrorData ( )
Returns
array<assAnswerErrorText>

Definition at line 640 of file class.assErrorText.php.

References $errordata.

Referenced by getErrorDataAsArrayForJS(), removeErrorDataWithoutPosition(), setErrorsFromParsedErrorText(), and toLog().

640  : array
641  {
642  return $this->errordata;
643  }
+ Here is the caller graph for this function:

◆ getErrorDataAsArrayForJS()

assErrorText::getErrorDataAsArrayForJS ( )
private
Returns
array<mixed>

Definition at line 649 of file class.assErrorText.php.

References getErrorData(), and assQuestion\getId().

Referenced by toJSON().

649  : array
650  {
651  $correct_answers = [];
652  foreach ($this->getErrorData() as $index => $answer_obj) {
653  $correct_answers[] = [
654  'answertext_wrong' => $answer_obj->getTextWrong(),
655  'answertext_correct' => $answer_obj->getTextCorrect(),
656  'points' => $answer_obj->getPoints(),
657  'length' => $answer_obj->getLength(),
658  'pos' => $this->getId() . '_' . $answer_obj->getPosition()
659  ];
660  }
661  return $correct_answers;
662  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getErrorText()

assErrorText::getErrorText ( )

Definition at line 664 of file class.assErrorText.php.

Referenced by correctDataAfterParserUpdate(), parseErrorText(), saveAdditionalQuestionDataToDb(), toJSON(), and toLog().

664  : string
665  {
666  return $this->errortext ?? '';
667  }
+ Here is the caller graph for this function:

◆ getErrorTokenHtml()

assErrorText::getErrorTokenHtml (   $item,
  $class,
  $useLinkTags 
)
private
Parameters
$item
$class
Returns
string

Definition at line 924 of file class.assErrorText.php.

References ilLegacyFormElementsUtil\prepareFormOutput().

Referenced by generateOutputStringFromPosition().

924  : string
925  {
926  if ($useLinkTags) {
927  return '<a class="' . $class . '" href="#">' . ($item == '&nbsp;' ? $item : ilLegacyFormElementsUtil::prepareFormOutput(
928  $item
929  )) . '</a>';
930  }
931 
932  return '<span class="' . $class . '">' . ($item == '&nbsp;' ? $item : ilLegacyFormElementsUtil::prepareFormOutput(
933  $item
934  )) . '</span>';
935  }
static prepareFormOutput($a_str, bool $a_strip=false)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getExpressionTypes()

◆ getMaximumPoints()

assErrorText::getMaximumPoints ( )

Returns the maximum points, a learner can reach answering the question.

See also
$points

Definition at line 238 of file class.assErrorText.php.

Referenced by getUserQuestionResult(), and isComplete().

238  : float
239  {
240  $maxpoints = 0.0;
241  foreach ($this->errordata as $error) {
242  if ($error->getPoints() > 0) {
243  $maxpoints += $error->getPoints();
244  }
245  }
246  return $maxpoints;
247  }
+ Here is the caller graph for this function:

◆ getOperators()

assErrorText::getOperators ( string  $expression)

Get all available operations for a specific question.

Parameters
$expression

Implements iQuestionCondition.

Definition at line 751 of file class.assErrorText.php.

751  : array
752  {
753  return ilOperatorsExpressionMapping::getOperatorsByExpression($expression);
754  }

◆ getParsedErrorText()

assErrorText::getParsedErrorText ( )

◆ getParsedErrorTextForJS()

assErrorText::getParsedErrorTextForJS ( )
private

Definition at line 679 of file class.assErrorText.php.

References assQuestion\getId().

Referenced by toJSON().

679  : array
680  {
681  $answers = [];
682  foreach ($this->parsed_errortext as $paragraph) {
683  foreach ($paragraph as $position => $word) {
684  $answers[] = [
685  'answertext' => $word['text'],
686  'order' => $this->getId() . '_' . $position
687  ];
688  }
689  $answers[] = [
690  'answertext' => '###'
691  ];
692  }
693  array_pop($answers);
694 
695  return $answers;
696  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getPointsForSelectedPositions()

assErrorText::getPointsForSelectedPositions ( array  $selected_word_positions)
protected
Parameters
list<string>|null$selected_words Positions of Selected Words Counting from 0

Definition at line 588 of file class.assErrorText.php.

References assQuestion\$points, generateArrayByPositionFromErrorData(), and getPointsWrong().

Referenced by calculateReachedPoints(), and calculateReachedPointsFromPreviewSession().

588  : float
589  {
590  $points = 0;
591  $correct_positions = $this->generateArrayByPositionFromErrorData();
592 
593  foreach ($correct_positions as $correct_position => $correct_position_data) {
594  $selected_word_key = array_search($correct_position, $selected_word_positions);
595  if ($selected_word_key === false) {
596  continue;
597  }
598 
599  if ($correct_position_data['length'] === 1) {
600  $points += $correct_position_data['points'];
601  unset($selected_word_positions[$selected_word_key]);
602  continue;
603  }
604 
605  $passage_complete = true;
606  for ($i = 1;$i < $correct_position_data['length'];$i++) {
607  $selected_passage_element_key = array_search($correct_position + $i, $selected_word_positions);
608  if ($selected_passage_element_key === false) {
609  $passage_complete = false;
610  continue;
611  }
612  unset($selected_word_positions[$selected_passage_element_key]);
613  }
614 
615  if ($passage_complete) {
616  $points += $correct_position_data['points'];
617  unset($selected_word_positions[$selected_word_key]);
618  }
619  }
620 
621  foreach ($selected_word_positions as $word_position) {
622  if (!array_key_exists($word_position, $correct_positions)) {
623  $points += $this->getPointsWrong();
624  continue;
625  }
626  }
627 
628  return $points;
629  }
generateArrayByPositionFromErrorData()
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getPointsWrong()

assErrorText::getPointsWrong ( )

Definition at line 717 of file class.assErrorText.php.

References $points_wrong.

Referenced by addErrorInformationToTextParagraphArray(), getPointsForSelectedPositions(), and saveAdditionalQuestionDataToDb().

717  : ?float
718  {
719  return $this->points_wrong;
720  }
+ Here is the caller graph for this function:

◆ getQuestionType()

assErrorText::getQuestionType ( )

Definition at line 309 of file class.assErrorText.php.

Referenced by toJSON(), and toLog().

309  : string
310  {
311  return 'assErrorText';
312  }
+ Here is the caller graph for this function:

◆ getTextForPosition()

assErrorText::getTextForPosition ( int  $position,
array  $paragraph,
bool  $show_correct_solution 
)
private

Definition at line 486 of file class.assErrorText.php.

Referenced by generateOutputStringFromPosition().

490  : string {
491  $v = $paragraph[$position];
492  if ($show_correct_solution === true
493  && ($v['error_type'] === 'in_passage'
494  || $v['error_type'] === 'passage_end')) {
495  return '';
496  }
497  if ($show_correct_solution
498  && ($v['error_type'] === 'passage_start'
499  || $v['error_type'] === 'word')) {
500  return $v['text_correct'] ?? '';
501  }
502 
503  return $v['text'];
504  }
+ Here is the caller graph for this function:

◆ getTextSize()

assErrorText::getTextSize ( )

Definition at line 703 of file class.assErrorText.php.

References $textsize.

Referenced by saveAdditionalQuestionDataToDb().

703  : float
704  {
705  return $this->textsize;
706  }
+ Here is the caller graph for this function:

◆ getUserQuestionResult()

assErrorText::getUserQuestionResult ( int  $active_id,
int  $pass 
)

Get the user solution for a question by active_id and the test pass.

Implements iQuestionCondition.

Definition at line 766 of file class.assErrorText.php.

References $data, assQuestion\$points, calculateReachedPoints(), assQuestion\getId(), and getMaximumPoints().

770  $result = new ilUserQuestionResult($this, $active_id, $pass);
771 
772  $data = $this->db->queryF(
773  "SELECT value1+1 as value1 FROM tst_solutions WHERE active_fi = %s AND pass = %s AND question_fi = %s AND step = (
774  SELECT MAX(step) FROM tst_solutions WHERE active_fi = %s AND pass = %s AND question_fi = %s
775  )",
776  ["integer", "integer", "integer","integer", "integer", "integer"],
777  [$active_id, $pass, $this->getId(), $active_id, $pass, $this->getId()]
778  );
779 
780  while ($row = $this->db->fetchAssoc($data)) {
781  $result->addKeyValue($row["value1"], $row["value1"]);
782  }
783 
784  $points = $this->calculateReachedPoints($active_id, $pass);
785  $max_points = $this->getMaximumPoints();
786 
787  $result->setReachedPercentage(($points / $max_points) * 100);
788 
789  return $result;
790  }
calculateReachedPoints(int $active_id, ?int $pass=null, bool $authorized_solution=true)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
getMaximumPoints()
Returns the maximum points, a learner can reach answering the question.
+ Here is the call graph for this function:

◆ isComplete()

assErrorText::isComplete ( )

Definition at line 71 of file class.assErrorText.php.

References getMaximumPoints().

71  : bool
72  {
73  if (mb_strlen($this->title)
74  && ($this->author)
75  && ($this->question)
76  && ($this->getMaximumPoints() > 0)) {
77  return true;
78  } else {
79  return false;
80  }
81  }
getMaximumPoints()
Returns the maximum points, a learner can reach answering the question.
+ Here is the call graph for this function:

◆ loadFromDb()

assErrorText::loadFromDb (   $question_id)

Loads the object from the database.

Parameters
object$dbA pear DB object
integer$question_idA unique key which defines the multiple choice test in the database

Definition at line 150 of file class.assErrorText.php.

References $data, Vendor\Package\$e, ilRTE\_replaceMediaObjectImageSrc(), correctDataAfterParserUpdate(), getAdditionalTableName(), ilAssQuestionLifecycle\getDraftInstance(), ilAssQuestionLifecycle\getInstance(), assQuestion\setAdditionalContentEditingMode(), assQuestion\setAuthor(), assQuestion\setComment(), setErrorText(), assQuestion\setId(), assQuestion\setLifecycle(), assQuestion\setNrOfTries(), assQuestion\setObjId(), assQuestion\setOriginalId(), assQuestion\setOwner(), setParsedErrorText(), assQuestion\setPoints(), setPointsWrong(), assQuestion\setQuestion(), setTextSize(), and assQuestion\setTitle().

150  : void
151  {
152  $db_question = $this->db->queryF(
153  "SELECT qpl_questions.*, " . $this->getAdditionalTableName() . ".* FROM qpl_questions LEFT JOIN " . $this->getAdditionalTableName() . " ON " . $this->getAdditionalTableName() . ".question_fi = qpl_questions.question_id WHERE qpl_questions.question_id = %s",
154  ["integer"],
155  [$question_id]
156  );
157  if ($db_question->numRows() === 1) {
158  $data = $this->db->fetchAssoc($db_question);
159  $this->setId($question_id);
160  $this->setObjId($data["obj_fi"]);
161  $this->setTitle((string) $data["title"]);
162  $this->setComment((string) $data["description"]);
163  $this->setOriginalId($data["original_id"]);
164  $this->setNrOfTries($data['nr_of_tries']);
165  $this->setAuthor($data["author"]);
166  $this->setPoints($data["points"]);
167  $this->setOwner($data["owner"]);
168  $this->setQuestion(ilRTE::_replaceMediaObjectImageSrc((string) $data["question_text"], 1));
169  $this->setErrorText((string) $data["errortext"]);
170  $this->setParsedErrorText(json_decode($data['parsed_errortext'] ?? json_encode([]), true));
171  $this->setTextSize($data["textsize"]);
172  $this->setPointsWrong($data["points_wrong"]);
173 
174  try {
178  }
179 
180  try {
181  $this->setAdditionalContentEditingMode($data['add_cont_edit_mode']);
182  } catch (ilTestQuestionPoolException $e) {
183  }
184  }
185 
186  $db_error_text = $this->db->queryF(
187  "SELECT * FROM qpl_a_errortext WHERE question_fi = %s ORDER BY sequence ASC",
188  ['integer'],
189  [$question_id]
190  );
191 
192  if ($db_error_text->numRows() > 0) {
193  while ($data = $this->db->fetchAssoc($db_error_text)) {
194  $this->errordata[] = new assAnswerErrorText(
195  (string) $data['text_wrong'],
196  (string) $data['text_correct'],
197  (float) $data['points'],
198  $data['position']
199  );
200  }
201  }
202 
204 
205  parent::loadFromDb($question_id);
206  }
static _replaceMediaObjectImageSrc(string $a_text, int $a_direction=0, string $nic='')
Replaces image source from mob image urls with the mob id or replaces mob id with the correct image s...
setNrOfTries(int $a_nr_of_tries)
setOwner(int $owner=-1)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setComment(string $comment="")
setPointsWrong($a_value)
setErrorText(?string $text)
setPoints(float $points)
setObjId(int $obj_id=0)
setId(int $id=-1)
setOriginalId(?int $original_id)
setTitle(string $title="")
setLifecycle(ilAssQuestionLifecycle $lifecycle)
setAuthor(string $author="")
setParsedErrorText(array $parsed_errortext)
setAdditionalContentEditingMode(?string $additionalContentEditingMode)
setQuestion(string $question="")
+ Here is the call graph for this function:

◆ parseErrorText()

assErrorText::parseErrorText ( )

Definition at line 792 of file class.assErrorText.php.

References addErrorInformationToTextParagraphArray(), getErrorText(), and setParsedErrorText().

Referenced by correctDataAfterParserUpdate().

792  : void
793  {
794  $text_by_paragraphs = preg_split(self::PARAGRAPH_SPLIT_REGEXP, $this->getErrorText());
795  $text_array = [];
796  $offset = 0;
797  foreach ($text_by_paragraphs as $paragraph) {
798  $text_array[] = $this->addErrorInformationToTextParagraphArray(
799  preg_split(self::WORD_SPLIT_REGEXP, trim($paragraph)),
800  $offset
801  );
802  $offset += count(end($text_array));
803  }
804  $this->setParsedErrorText($text_array);
805  }
addErrorInformationToTextParagraphArray(array $paragraph, int $offset)
setParsedErrorText(array $parsed_errortext)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ parsePassageEndWord()

assErrorText::parsePassageEndWord ( string  $word)
private

Definition at line 871 of file class.assErrorText.php.

Referenced by addErrorInformationToTextParagraphArray().

871  : string
872  {
873  if (mb_substr($word, -2) === self::ERROR_PARAGRAPH_DELIMITERS['end']) {
874  return mb_substr($word, 0, -2);
875  }
876  return mb_substr($word, 0, -3) . mb_substr($word, -1);
877  }
+ Here is the caller graph for this function:

◆ removeErrorDataWithoutPosition()

assErrorText::removeErrorDataWithoutPosition ( )

Definition at line 407 of file class.assErrorText.php.

References getErrorData(), and null.

407  : void
408  {
409  foreach ($this->getErrorData() as $index => $error) {
410  if ($error->getPosition() === null) {
411  unset($this->errordata[$index]);
412  }
413  }
414  $this->errordata = array_values($this->errordata);
415  }
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
+ Here is the call graph for this function:

◆ saveAdditionalQuestionDataToDb()

assErrorText::saveAdditionalQuestionDataToDb ( )

Saves the data for the additional data table.

This method uses the ugly DELETE-INSERT. Here, this does no harm.

Implements ilObjQuestionScoringAdjustable.

Definition at line 123 of file class.assErrorText.php.

References getAdditionalTableName(), getErrorText(), assQuestion\getId(), getParsedErrorText(), getPointsWrong(), and getTextSize().

Referenced by correctDataAfterParserUpdate(), and saveToDb().

124  {
125  $this->db->manipulateF(
126  "DELETE FROM " . $this->getAdditionalTableName() . " WHERE question_fi = %s",
127  ["integer"],
128  [$this->getId()]
129  );
130 
131  $this->db->manipulateF(
132  "INSERT INTO " . $this->getAdditionalTableName() . " (question_fi, errortext, parsed_errortext, textsize, points_wrong) VALUES (%s, %s, %s, %s, %s)",
133  ["integer", "text", "text", "float", "float"],
134  [
135  $this->getId(),
136  $this->getErrorText(),
137  json_encode($this->getParsedErrorText()),
138  $this->getTextSize(),
139  $this->getPointsWrong()
140  ]
141  );
142  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ saveAnswerSpecificDataToDb()

assErrorText::saveAnswerSpecificDataToDb ( )

Saves the answer specific records into a question types answer table.

Returns
mixed

Implements ilObjAnswerScoringAdjustable.

Definition at line 91 of file class.assErrorText.php.

References assQuestion\getId().

Referenced by correctDataAfterParserUpdate(), and saveToDb().

92  {
93  $this->db->manipulateF(
94  "DELETE FROM qpl_a_errortext WHERE question_fi = %s",
95  ['integer'],
96  [$this->getId()]
97  );
98 
99  $sequence = 0;
100  foreach ($this->errordata as $error) {
101  $next_id = $this->db->nextId('qpl_a_errortext');
102  $this->db->manipulateF(
103  "INSERT INTO qpl_a_errortext (answer_id, question_fi, text_wrong, text_correct, points, sequence, position) VALUES (%s, %s, %s, %s, %s, %s, %s)",
104  ['integer', 'integer', 'text', 'text', 'float', 'integer', 'integer'],
105  [
106  $next_id,
107  $this->getId(),
108  $error->getTextWrong(),
109  $error->getTextCorrect(),
110  $error->getPoints(),
111  $sequence++,
112  $error->getPosition()
113  ]
114  );
115  }
116  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ savePreviewData()

assErrorText::savePreviewData ( ilAssQuestionPreviewSession  $previewSession)

Definition at line 295 of file class.assErrorText.php.

References getAnswersFromRequest(), and ilAssQuestionPreviewSession\setParticipantsSolution().

295  : void
296  {
297  $selection = $this->getAnswersFromRequest();
298  $previewSession->setParticipantsSolution($selection);
299  }
+ Here is the call graph for this function:

◆ saveToDb()

assErrorText::saveToDb ( ?int  $original_id = null)

Definition at line 83 of file class.assErrorText.php.

References assQuestion\$original_id, saveAdditionalQuestionDataToDb(), saveAnswerSpecificDataToDb(), and assQuestion\saveQuestionDataToDb().

83  : void
84  {
88  parent::saveToDb();
89  }
saveAnswerSpecificDataToDb()
Saves the answer specific records into a question types answer table.
saveQuestionDataToDb(?int $original_id=null)
saveAdditionalQuestionDataToDb()
Saves the data for the additional data table.
+ Here is the call graph for this function:

◆ saveWorkingData()

assErrorText::saveWorkingData ( int  $active_id,
?int  $pass = null,
bool  $authorized = true 
)

Definition at line 273 of file class.assErrorText.php.

References ilObjTest\_getPass(), getAnswersFromRequest(), assQuestion\getProcessLocker(), null, assQuestion\removeCurrentSolution(), and assQuestion\saveCurrentSolution().

277  : bool {
278  if (is_null($pass)) {
279  $pass = ilObjTest::_getPass($active_id);
280  }
281 
282  $this->getProcessLocker()->executeUserSolutionUpdateLockOperation(
283  function () use ($active_id, $pass, $authorized) {
284  $selected = $this->getAnswersFromRequest();
285  $this->removeCurrentSolution($active_id, $pass, $authorized);
286  foreach ($selected as $position) {
287  $this->saveCurrentSolution($active_id, $pass, $position, null, $authorized);
288  }
289  }
290  );
291 
292  return true;
293  }
static _getPass($active_id)
Retrieves the actual pass of a given user for a given test.
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
saveCurrentSolution(int $active_id, int $pass, $value1, $value2, bool $authorized=true, $tstamp=0)
removeCurrentSolution(int $active_id, int $pass, bool $authorized=true)
+ Here is the call graph for this function:

◆ setErrorData()

assErrorText::setErrorData ( array  $errors)
Parameters
array<assAnswerErrorText>$errors

Definition at line 396 of file class.assErrorText.php.

References addPositionToErrorAnswer(), and completeParsedErrorTextFromErrorData().

396  : void
397  {
398  $this->errordata = [];
399 
400  foreach ($errors as $error) {
401  $answer = $this->addPositionToErrorAnswer($error);
402  $this->errordata[] = $answer;
403  }
405  }
addPositionToErrorAnswer(assAnswerErrorText $error)
completeParsedErrorTextFromErrorData()
+ Here is the call graph for this function:

◆ setErrorsFromParsedErrorText()

assErrorText::setErrorsFromParsedErrorText ( )

Definition at line 324 of file class.assErrorText.php.

References assQuestion\$points, getAdditionalInformationFromExistingErrorDataByErrorText(), getErrorData(), getParsedErrorText(), and ILIAS\Repository\lng().

324  : void
325  {
326  $current_error_data = $this->getErrorData();
327  $this->errordata = [];
328 
329  $has_too_long_errors = false;
330  foreach ($this->getParsedErrorText() as $paragraph) {
331  foreach ($paragraph as $position => $word) {
332  if ($word['error_type'] === 'in_passage'
333  || $word['error_type'] === 'passage_end'
334  || $word['error_type'] === 'none') {
335  continue;
336  }
337 
338  $text_wrong = $word['text_wrong'];
339  if (mb_strlen($text_wrong) > self::ERROR_MAX_LENGTH) {
340  $has_too_long_errors = true;
341  continue;
342  }
343 
344  list($text_correct, $points) =
345  $this->getAdditionalInformationFromExistingErrorDataByErrorText($current_error_data, $text_wrong);
346  $this->errordata[] = new assAnswerErrorText($text_wrong, $text_correct, $points, $position);
347  }
348  }
349 
350  if ($has_too_long_errors) {
351  $this->tpl->setOnScreenMessage(
352  'failure',
353  $this->lng->txt('qst_error_text_too_long')
354  );
355  }
356  }
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
getAdditionalInformationFromExistingErrorDataByErrorText(array $current_error_data, string $text_wrong)
+ Here is the call graph for this function:

◆ setErrorText()

assErrorText::setErrorText ( ?string  $text)

Definition at line 669 of file class.assErrorText.php.

Referenced by loadFromDb().

669  : void
670  {
671  $this->errortext = $text ?? '';
672  }
+ Here is the caller graph for this function:

◆ setParsedErrorText()

assErrorText::setParsedErrorText ( array  $parsed_errortext)

Definition at line 698 of file class.assErrorText.php.

References $parsed_errortext.

Referenced by loadFromDb(), and parseErrorText().

698  : void
699  {
700  $this->parsed_errortext = $parsed_errortext;
701  }
+ Here is the caller graph for this function:

◆ setPointsWrong()

assErrorText::setPointsWrong (   $a_value)

Definition at line 722 of file class.assErrorText.php.

Referenced by loadFromDb().

722  : void
723  {
724  $this->points_wrong = $a_value;
725  }
+ Here is the caller graph for this function:

◆ setTextSize()

assErrorText::setTextSize (   $a_value)

Definition at line 708 of file class.assErrorText.php.

References null.

Referenced by loadFromDb().

708  : void
709  {
710  // in self-assesment-mode value should always be set (and must not be null)
711  if ($a_value === null) {
712  $a_value = 100;
713  }
714  $this->textsize = $a_value;
715  }
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
+ Here is the caller graph for this function:

◆ solutionValuesToLog()

assErrorText::solutionValuesToLog ( AdditionalInformationGenerator  $additional_info,
array  $solution_values 
)
protected

Definition at line 969 of file class.assErrorText.php.

References createErrorTextExport().

972  : string {
973  return $this->createErrorTextExport(
974  array_map(
975  static fn(array $v): string => $v['value1'],
976  $solution_values
977  )
978  );
979  }
createErrorTextExport(array $selections)
+ Here is the call graph for this function:

◆ solutionValuesToText()

assErrorText::solutionValuesToText ( array  $solution_values)

Definition at line 981 of file class.assErrorText.php.

References createErrorTextExport().

981  : string
982  {
983  return $this->createErrorTextExport(
984  array_map(
985  static fn(array $v): string => $v['value1'],
986  $solution_values
987  )
988  );
989  }
createErrorTextExport(array $selections)
+ Here is the call graph for this function:

◆ toJSON()

assErrorText::toJSON ( )

Implements ILIAS\TestQuestionPool\Questions\QuestionLMExportable.

Definition at line 727 of file class.assErrorText.php.

References ilObjMediaObject\_getMobsOfObject(), ilRTE\_replaceMediaObjectImageSrc(), assQuestion\formatSAQuestion(), getErrorDataAsArrayForJS(), getErrorText(), assQuestion\getId(), assQuestion\getNrOfTries(), getParsedErrorTextForJS(), assQuestion\getQuestion(), getQuestionType(), assQuestion\getShuffle(), and assQuestion\getTitleForHTMLOutput().

727  : string
728  {
729  $result = [];
730  $result['id'] = $this->getId();
731  $result['type'] = (string) $this->getQuestionType();
732  $result['title'] = $this->getTitleForHTMLOutput();
733  $result['question'] = $this->formatSAQuestion($this->getQuestion());
734  $result['text'] = ilRTE::_replaceMediaObjectImageSrc($this->getErrorText(), 0);
735  $result['nr_of_tries'] = $this->getNrOfTries();
736  $result['shuffle'] = $this->getShuffle();
737  $result['feedback'] = [
738  'onenotcorrect' => $this->formatSAQuestion($this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(), false)),
739  'allcorrect' => $this->formatSAQuestion($this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(), true))
740  ];
741 
742  $result['correct_answers'] = $this->getErrorDataAsArrayForJS();
743  $result['answers'] = $this->getParsedErrorTextForJS();
744 
745  $mobs = ilObjMediaObject::_getMobsOfObject("qpl:html", $this->getId());
746  $result['mobs'] = $mobs;
747 
748  return json_encode($result);
749  }
static _replaceMediaObjectImageSrc(string $a_text, int $a_direction=0, string $nic='')
Replaces image source from mob image urls with the mob id or replaces mob id with the correct image s...
static _getMobsOfObject(string $a_type, int $a_id, int $a_usage_hist_nr=0, string $a_lang="-")
+ Here is the call graph for this function:

◆ toLog()

assErrorText::toLog ( AdditionalInformationGenerator  $additional_info)

Implements ILIAS\TestQuestionPool\Questions\Question.

Definition at line 937 of file class.assErrorText.php.

References $c, ilRTE\_replaceMediaObjectImageSrc(), assQuestion\formatSAQuestion(), getErrorData(), getErrorText(), assQuestion\getQuestion(), getQuestionType(), assQuestion\getShuffle(), assQuestion\getTitleForHTMLOutput(), and ILIAS\Test\Logging\AdditionalInformationGenerator\getTrueFalseTagForBool().

937  : array
938  {
939  $result = [
940  AdditionalInformationGenerator::KEY_QUESTION_TYPE => (string) $this->getQuestionType(),
941  AdditionalInformationGenerator::KEY_QUESTION_TITLE => $this->getTitleForHTMLOutput(),
942  AdditionalInformationGenerator::KEY_QUESTION_TEXT => $this->formatSAQuestion($this->getQuestion()),
943  AdditionalInformationGenerator::KEY_QUESTION_ERRORTEXT_ERRORTEXT => ilRTE::_replaceMediaObjectImageSrc($this->getErrorText(), 0),
944  AdditionalInformationGenerator::KEY_QUESTION_SHUFFLE_ANSWER_OPTIONS => $additional_info
946  AdditionalInformationGenerator::KEY_FEEDBACK => [
947  AdditionalInformationGenerator::KEY_QUESTION_FEEDBACK_ON_INCOMPLETE => $this->formatSAQuestion($this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(), false)),
948  AdditionalInformationGenerator::KEY_QUESTION_FEEDBACK_ON_COMPLETE => $this->formatSAQuestion($this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(), true))
949  ]
950  ];
951 
952  $error_data = $this->getErrorData();
953  $result[AdditionalInformationGenerator::KEY_QUESTION_CORRECT_ANSWER_OPTIONS] = array_reduce(
954  array_keys($error_data),
955  static function (array $c, int $k) use ($error_data): array {
956  $c[$k + 1] = [
957  'text_wrong' => $error_data[$k]->getTextWrong(),
958  'text_correct' => $error_data[$k]->getTextCorrect(),
959  'points' => $error_data[$k]->getPoints()
960  ];
961  return $c;
962  },
963  []
964  );
965 
966  return $result;
967  }
static _replaceMediaObjectImageSrc(string $a_text, int $a_direction=0, string $nic='')
Replaces image source from mob image urls with the mob id or replaces mob id with the correct image s...
$c
Definition: deliver.php:25
+ Here is the call graph for this function:

Field Documentation

◆ $errordata

array assErrorText::$errordata = []
protected

Definition at line 56 of file class.assErrorText.php.

Referenced by getErrorData().

◆ $errortext

const string assErrorText::$errortext = ''
protected

Definition at line 53 of file class.assErrorText.php.

◆ $parsed_errortext

array assErrorText::$parsed_errortext = []
protected

Definition at line 54 of file class.assErrorText.php.

Referenced by getParsedErrorText(), and setParsedErrorText().

◆ $points_wrong

float assErrorText::$points_wrong = null
protected

Definition at line 58 of file class.assErrorText.php.

Referenced by getPointsWrong().

◆ $textsize

float assErrorText::$textsize
protected

Definition at line 57 of file class.assErrorText.php.

Referenced by getTextSize().

◆ DEFAULT_TEXT_SIZE

const assErrorText::DEFAULT_TEXT_SIZE = 100.0
protected

Definition at line 41 of file class.assErrorText.php.

◆ ERROR_MAX_LENGTH

const assErrorText::ERROR_MAX_LENGTH = 150
protected

Definition at line 42 of file class.assErrorText.php.

◆ ERROR_PARAGRAPH_DELIMITERS

const assErrorText::ERROR_PARAGRAPH_DELIMITERS
protected
Initial value:
= [
'start' => '(('

Definition at line 48 of file class.assErrorText.php.

◆ ERROR_TYPE_PASSAGE

const assErrorText::ERROR_TYPE_PASSAGE = 2
protected

Definition at line 40 of file class.assErrorText.php.

◆ ERROR_TYPE_WORD

const assErrorText::ERROR_TYPE_WORD = 1
protected

Definition at line 39 of file class.assErrorText.php.

◆ ERROR_WORD_MARKER

const assErrorText::ERROR_WORD_MARKER = '#'
protected

Definition at line 47 of file class.assErrorText.php.

◆ FIND_PUNCTUATION_REGEXP

const assErrorText::FIND_PUNCTUATION_REGEXP = '/\p{P}/'
protected

Definition at line 46 of file class.assErrorText.php.

◆ PARAGRAPH_SPLIT_REGEXP

const assErrorText::PARAGRAPH_SPLIT_REGEXP = '/[\n\r]+/'
protected

Definition at line 44 of file class.assErrorText.php.

◆ WORD_SPLIT_REGEXP

const assErrorText::WORD_SPLIT_REGEXP = '/\s+/'
protected

Definition at line 45 of file class.assErrorText.php.


The documentation for this class was generated from the following file: