ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
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)
 MUST return an array of the question settings that can be stored in the log. More...
 
 solutionValuesToText (array $solution_values)
 MUST convert the given solution values into text. More...
 
 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 ()
 
 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)
 
 validateSolutionSubmit ()
 
 toLog (AdditionalInformationGenerator $additional_info)
 
 answerToParticipantInteraction (AdditionalInformationGenerator $additional_info, int $test_id, int $active_id, int $pass, string $source_ip, TestParticipantInteractionTypes $interaction_type)
 
 toQuestionAdministrationInteraction (AdditionalInformationGenerator $additional_info, int $test_id, TestQuestionAdministrationInteractionTypes $interaction_type)
 
 saveAdditionalQuestionDataToDb ()
 Saves a record to the question types additional data table. More...
 
 saveAnswerSpecificDataToDb ()
 Saves the answer specific records into a question types answer table. More...
 
- Public Member Functions inherited from iQuestionCondition
 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...
 
 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...
 
 toJSON ()
 

Protected Member Functions

 getPointsForSelectedPositions (array $selected_word_positions)
 
 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...
 
- 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
 
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 = '' 
)

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.

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 }
parsePassageEndWord(string $word)

◆ addPositionToErrorAnswer()

assErrorText::addPositionToErrorAnswer ( assAnswerErrorText  $error)
private

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

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()

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

Referenced by correctDataAfterParserUpdate().

+ 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.

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)

◆ calculateReachedPoints()

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

Reimplemented from assQuestion.

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

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)
getCurrentSolutionResultSet(int $active_id, int $pass, bool $authorized=true)
getSolutionMaxPass(int $active_id)

References assQuestion\getSolutionMaxPass().

+ Here is the call graph for this function:

◆ calculateReachedPointsFromPreviewSession()

assErrorText::calculateReachedPointsFromPreviewSession ( ilAssQuestionPreviewSession  $preview_session)

Reimplemented from assQuestion.

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

268 {
269 $reached_points = $this->getPointsForSelectedPositions($preview_session->getParticipantsSolution() ?? []);
270 return $this->ensureNonNegativePoints($reached_points);
271 }
ensureNonNegativePoints(float $points)

References ilAssQuestionPreviewSession\getParticipantsSolution().

+ Here is the call graph for this function:

◆ completeParsedErrorTextFromErrorData()

assErrorText::completeParsedErrorTextFromErrorData ( )
private

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

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 }

Referenced by correctDataAfterParserUpdate().

+ Here is the caller graph for this function:

◆ correctDataAfterParserUpdate()

assErrorText::correctDataAfterParserUpdate ( )
private

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

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 }
completeParsedErrorTextFromErrorData()
addPositionToErrorAnswer(assAnswerErrorText $error)
saveAnswerSpecificDataToDb()
Saves the answer specific records into a question types answer table.
saveAdditionalQuestionDataToDb()
Saves the data for the additional data table.

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

Referenced by loadFromDb().

+ 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.

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 }

◆ 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.

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 }

◆ 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.

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)
getErrorTokenHtml($item, $class, $useLinkTags)
getCorrectnessIconForPosition(int $position, bool $graphical_output, array $selections, array $correctness_icons)

◆ 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.

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 }

◆ getAdditionalTableName()

assErrorText::getAdditionalTableName ( )

Reimplemented from assQuestion.

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

314 : string
315 {
316 return 'qpl_qst_errortext';
317 }

Referenced by loadFromDb(), and saveAdditionalQuestionDataToDb().

+ Here is the caller graph for this function:

◆ getAnswersFromRequest()

assErrorText::getAnswersFromRequest ( )
private

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

301 : array
302 {
303 return explode(
304 ',',
305 $this->questionpool_request->string('qst_' . $this->getId())
306 );
307 }

◆ getAnswerTableName()

assErrorText::getAnswerTableName ( )

Reimplemented from assQuestion.

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.

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

References $c.

◆ getBestSelection()

assErrorText::getBestSelection ( bool  $with_positive_points_only = true)

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

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 }

◆ getClassForPosition()

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

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

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 }

◆ getCorrectnessIconForPosition()

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

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

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 }

◆ getCorrectSolutionForTextOutput()

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

Reimplemented from assQuestion.

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

991 : string
992 {
993 return $this->createErrorTextExport($this->getBestSelection());
994 }
createErrorTextExport(array $selections)
getBestSelection(bool $with_positive_points_only=true)

◆ getErrorData()

assErrorText::getErrorData ( )
Returns
array<assAnswerErrorText>

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

640 : array
641 {
642 return $this->errordata;
643 }

◆ getErrorDataAsArrayForJS()

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

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

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 }

References ILIAS\Survey\Mode\getId().

+ Here is the call graph for this function:

◆ getErrorText()

assErrorText::getErrorText ( )

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

664 : string
665 {
666 return $this->errortext ?? '';
667 }

Referenced by correctDataAfterParserUpdate(), and saveAdditionalQuestionDataToDb().

+ 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.

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)

References ilLegacyFormElementsUtil\prepareFormOutput().

+ Here is the call graph for this function:

◆ getExpressionTypes()

◆ getMaximumPoints()

assErrorText::getMaximumPoints ( )

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

See also
$points

Reimplemented from assQuestion.

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

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 }

Referenced by isComplete().

+ 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 {
754 }
static getOperatorsByExpression(string $expression)

References ilOperatorsExpressionMapping\getOperatorsByExpression().

+ Here is the call graph for this function:

◆ getParsedErrorText()

assErrorText::getParsedErrorText ( )

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

674 : array
675 {
677 }

Referenced by correctDataAfterParserUpdate(), and saveAdditionalQuestionDataToDb().

+ Here is the caller graph for this function:

◆ getParsedErrorTextForJS()

assErrorText::getParsedErrorTextForJS ( )
private

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

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 }

References ILIAS\Survey\Mode\getId().

+ Here is the call 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.

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 }

◆ getPointsWrong()

assErrorText::getPointsWrong ( )

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

717 : ?float
718 {
719 return $this->points_wrong;
720 }

Referenced by saveAdditionalQuestionDataToDb().

+ Here is the caller graph for this function:

◆ getQuestionType()

assErrorText::getQuestionType ( )

Reimplemented from assQuestion.

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

309 : string
310 {
311 return 'assErrorText';
312 }

◆ getTextForPosition()

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

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

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 }

◆ getTextSize()

assErrorText::getTextSize ( )

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

703 : float
704 {
705 return $this->textsize;
706 }

Referenced by saveAdditionalQuestionDataToDb().

+ 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.

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)
getMaximumPoints()
Returns the maximum points, a learner can reach answering the question.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...

◆ isComplete()

assErrorText::isComplete ( )

Reimplemented from assQuestion.

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

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 }

References getMaximumPoints().

+ 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.

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']);
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 }
setParsedErrorText(array $parsed_errortext)
setPointsWrong($a_value)
setErrorText(?string $text)
setOriginalId(?int $original_id)
setId(int $id=-1)
setAdditionalContentEditingMode(?string $additionalContentEditingMode)
setQuestion(string $question="")
setAuthor(string $author="")
setComment(string $comment="")
setObjId(int $obj_id=0)
setOwner(int $owner=-1)
setNrOfTries(int $a_nr_of_tries)
setLifecycle(ilAssQuestionLifecycle $lifecycle)
setTitle(string $title="")
setPoints(float $points)
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...

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().

+ Here is the call graph for this function:

◆ parseErrorText()

assErrorText::parseErrorText ( )

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

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)

Referenced by correctDataAfterParserUpdate().

+ Here is the caller graph for this function:

◆ parsePassageEndWord()

assErrorText::parsePassageEndWord ( string  $word)
private

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

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 }

◆ removeErrorDataWithoutPosition()

assErrorText::removeErrorDataWithoutPosition ( )

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

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 }

◆ 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.

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 }

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

Referenced by correctDataAfterParserUpdate(), and saveToDb().

+ 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.

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 }

References assQuestion\getId().

Referenced by correctDataAfterParserUpdate(), and saveToDb().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ savePreviewData()

assErrorText::savePreviewData ( ilAssQuestionPreviewSession  $previewSession)

Reimplemented from assQuestion.

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

295 : void
296 {
297 $selection = $this->getAnswersFromRequest();
298 $previewSession->setParticipantsSolution($selection);
299 }

References ilAssQuestionPreviewSession\setParticipantsSolution().

+ Here is the call graph for this function:

◆ saveToDb()

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

Reimplemented from assQuestion.

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

83 : void
84 {
88 parent::saveToDb();
89 }
saveQuestionDataToDb(?int $original_id=null)

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

+ Here is the call graph for this function:

◆ saveWorkingData()

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

Reimplemented from assQuestion.

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

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 }
saveCurrentSolution(int $active_id, int $pass, $value1, $value2, bool $authorized=true, $tstamp=0)
removeCurrentSolution(int $active_id, int $pass, bool $authorized=true)
static _getPass($active_id)
Retrieves the actual pass of a given user for a given test.

References ilObjTest\_getPass().

+ 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.

396 : void
397 {
398 $this->errordata = [];
399
400 foreach ($errors as $error) {
401 $answer = $this->addPositionToErrorAnswer($error);
402 $this->errordata[] = $answer;
403 }
405 }

◆ setErrorsFromParsedErrorText()

assErrorText::setErrorsFromParsedErrorText ( )

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

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 }
getAdditionalInformationFromExistingErrorDataByErrorText(array $current_error_data, string $text_wrong)

References ILIAS\Repository\lng().

+ Here is the call graph for this function:

◆ setErrorText()

assErrorText::setErrorText ( ?string  $text)

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

669 : void
670 {
671 $this->errortext = $text ?? '';
672 }

Referenced by loadFromDb().

+ Here is the caller graph for this function:

◆ setParsedErrorText()

assErrorText::setParsedErrorText ( array  $parsed_errortext)

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

698 : void
699 {
700 $this->parsed_errortext = $parsed_errortext;
701 }

Referenced by loadFromDb().

+ Here is the caller graph for this function:

◆ setPointsWrong()

assErrorText::setPointsWrong (   $a_value)

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

722 : void
723 {
724 $this->points_wrong = $a_value;
725 }

Referenced by loadFromDb().

+ Here is the caller graph for this function:

◆ setTextSize()

assErrorText::setTextSize (   $a_value)

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

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 }

Referenced by loadFromDb().

+ Here is the caller graph for this function:

◆ solutionValuesToLog()

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

MUST convert the given solution values into an array or a string that can be stored in the log.

Language variables must be generated through the corresponding functions in the AdditionalInformationGenerator. If an array is returned it will be rendered into a line per array entry in the format "key: value". If the key exists as a language variable, it will be translated.

Reimplemented from assQuestion.

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

972 : string {
973 return $this->createErrorTextExport(
974 array_map(
975 static fn(array $v): string => $v['value1'],
976 $solution_values
977 )
978 );
979 }

◆ solutionValuesToText()

assErrorText::solutionValuesToText ( array  $solution_values)

MUST convert the given solution values into text.

If the text has multiple lines each line MUST be placed as an entry in an array.

Reimplemented from assQuestion.

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

981 : string
982 {
983 return $this->createErrorTextExport(
984 array_map(
985 static fn(array $v): string => $v['value1'],
986 $solution_values
987 )
988 );
989 }

◆ toJSON()

assErrorText::toJSON ( )

Reimplemented from assQuestion.

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

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 _getMobsOfObject(string $a_type, int $a_id, int $a_usage_hist_nr=0, string $a_lang="-")

References ilObjMediaObject\_getMobsOfObject(), ilRTE\_replaceMediaObjectImageSrc(), and ILIAS\Survey\Mode\getId().

+ Here is the call graph for this function:

◆ toLog()

assErrorText::toLog ( AdditionalInformationGenerator  $additional_info)

MUST return an array of the question settings that can be stored in the log.

Language variables must be generated through the corresponding functions in the AdditionalInformationGenerator. If an array is returned it will be rendered into a line per array entry in the format "key: value". If the key exists as a language variable, it will be translated.

Reimplemented from assQuestion.

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

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 }

References $c, ilRTE\_replaceMediaObjectImageSrc(), and ILIAS\Test\Logging\AdditionalInformationGenerator\getTrueFalseTagForBool().

+ Here is the call graph for this function:

Field Documentation

◆ $errordata

array< assAnswerErrorText > assErrorText::$errordata = []
protected

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

◆ $errortext

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.

◆ $points_wrong

float assErrorText::$points_wrong = null
protected

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

◆ $textsize

float assErrorText::$textsize
protected

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

◆ DEFAULT_TEXT_SIZE

const assErrorText::DEFAULT_TEXT_SIZE = 100.0
protected

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

Referenced by __construct().

◆ 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' => '((',
'end' => '))'
]

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: