ILIAS  trunk Revision v12.0_alpha-1221-g4e438232683
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 816 of file class.assErrorText.php.

816 : array
817 {
818 $paragraph_with_error_info = [];
819 $passage_start = null;
820 foreach ($paragraph as $position => $word) {
821 $actual_position = $position + $offset;
822 if ($passage_start !== null
823 && (mb_strrpos($word, self::ERROR_PARAGRAPH_DELIMITERS['end']) === mb_strlen($word) - 2
824 || mb_strrpos($word, self::ERROR_PARAGRAPH_DELIMITERS['end']) === mb_strlen($word) - 3
825 && preg_match(self::FIND_PUNCTUATION_REGEXP, mb_substr($word, -1)) === 1)) {
826 $actual_word = $this->parsePassageEndWord($word);
827
828 $paragraph_with_error_info[$passage_start]['text_wrong'] .=
829 ' ' . $actual_word;
830 $paragraph_with_error_info[$actual_position] = [
831 'text' => $actual_word,
832 'error_type' => 'passage_end'
833 ];
834 $passage_start = null;
835 continue;
836 }
837 if ($passage_start !== null) {
838 $paragraph_with_error_info[$passage_start]['text_wrong'] .= ' ' . $word;
839 $paragraph_with_error_info[$actual_position] = [
840 'text' => $word,
841 'error_type' => 'in_passage'
842 ];
843 continue;
844 }
845 if (mb_strpos($word, self::ERROR_PARAGRAPH_DELIMITERS['start']) === 0) {
846 $paragraph_with_error_info[$actual_position] = [
847 'text' => substr($word, 2),
848 'text_wrong' => substr($word, 2),
849 'error_type' => 'passage_start',
850 'error_position' => $actual_position,
851 ];
852 $passage_start = $actual_position;
853 continue;
854 }
855 if (mb_strpos($word, self::ERROR_WORD_MARKER) === 0) {
856 $paragraph_with_error_info[$actual_position] = [
857 'text' => substr($word, 1),
858 'text_wrong' => substr($word, 1),
859 'error_type' => 'word',
860 'error_position' => $actual_position,
861 ];
862 continue;
863 }
864
865 $paragraph_with_error_info[$actual_position] = [
866 'text' => $word,
867 'error_type' => 'none',
868 'points' => $this->getPointsWrong()
869 ];
870 }
871
872 return $paragraph_with_error_info;
873 }
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 441 of file class.assErrorText.php.

447 : string {
448 $output_array = [];
449 foreach ($this->getParsedErrorText() as $paragraph) {
450 $array_reduce_function = fn(?string $carry, int $position)
451 => $carry . $this->generateOutputStringFromPosition(
452 $position,
453 $selections,
454 $paragraph,
455 $graphical_output,
456 $show_correct_solution,
457 $use_link_tags,
458 $correctness_icons
459 );
460 $output_array[] = '<p>' . trim(array_reduce(array_keys($paragraph), $array_reduce_function)) . '</p>';
461 }
462
463 return implode("\n", $output_array);
464 }
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 if ($position === null) {
381 continue;
382 }
383
384 foreach ($this->getParsedErrorText() as $key => $paragraph) {
385 if (array_key_exists($position, $paragraph)) {
386 $this->parsed_errortext[$key][$position]['text_correct'] =
387 $error->getTextCorrect();
388 $this->parsed_errortext[$key][$position]['points'] =
389 $error->getPoints();
390 break;
391 }
392 }
393 }
394 }

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 548 of file class.assErrorText.php.

548 : string
549 {
550 if (!is_array($selections)) {
551 $selections = [];
552 }
553
554 foreach ($this->getParsedErrorText() as $paragraph) {
555 $array_reduce_function = function ($carry, $k) use ($paragraph, $selections) {
556 $text = $paragraph[$k]['text'];
557 if (in_array($k, $selections)) {
558 $text = self::ERROR_WORD_MARKER . $paragraph[$k]['text'] . self::ERROR_WORD_MARKER;
559 }
560 return $carry . ' ' . $text;
561 };
562 $output_array[] = trim(array_reduce(array_keys($paragraph), $array_reduce_function));
563 }
564 return implode("\n", $output_array);
565 }
$text
Definition: xapiexit.php:21

References $text.

◆ flushErrorData()

assErrorText::flushErrorData ( )

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

635 : void
636 {
637 $this->errordata = [];
638 }

◆ generateArrayByPositionFromErrorData()

assErrorText::generateArrayByPositionFromErrorData ( )
private

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

908 : array
909 {
910 $array_by_position = [];
911 foreach ($this->errordata as $error) {
912 $position = $error->getPosition();
913 if ($position === null) {
914 continue;
915 }
916 $array_by_position[$position] = [
917 'length' => $error->getLength(),
918 'points' => $error->getPoints(),
919 'text' => $error->getTextWrong(),
920 'text_correct' => $error->getTextCorrect()
921 ];
922 }
923 ksort($array_by_position);
924 return $array_by_position;
925 }

◆ 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 466 of file class.assErrorText.php.

474 : string {
475 $text = $this->getTextForPosition($position, $paragraph, $show_correct_solution);
476 if ($text === '') {
477 return '';
478 }
479 $class = $this->getClassForPosition($position, $show_correct_solution, $selections);
480 $img = $this->getCorrectnessIconForPosition(
481 $position,
482 $graphical_output,
483 $selections,
484 $correctness_icons
485 );
486
487 return ' ' . $this->getErrorTokenHtml($text, $class, $use_link_tags) . $img;
488 }
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 426 of file class.assErrorText.php.

429 : array {
430 foreach ($current_error_data as $answer_object) {
431 if (strcmp($answer_object->getTextWrong(), $text_wrong) === 0) {
432 return[
433 $answer_object->getTextCorrect(),
434 $answer_object->getPoints()
435 ];
436 }
437 }
438 return ['', 0.0];
439 }

◆ 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 890 of file class.assErrorText.php.

890 : ?int
891 {
892 $error_text_array = array_reduce(
893 $this->parsed_errortext,
894 fn($c, $v) => $c + $v
895 );
896
897 if ($index === null) {
898 return $error_text_array;
899 }
900
901 if (array_key_exists($index, $error_text_array)) {
902 return $error_text_array[$index];
903 }
904
905 return null;
906 }
$c
Definition: deliver.php:25

References $c.

◆ getBestSelection()

assErrorText::getBestSelection ( bool  $with_positive_points_only = true)

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

567 : array
568 {
569 $positions_array = $this->generateArrayByPositionFromErrorData();
570 $selections = [];
571 foreach ($positions_array as $position => $position_data) {
572 if ($position === ''
573 || $with_positive_points_only && $position_data['points'] <= 0) {
574 continue;
575 }
576
577 $selections[] = $position;
578 if ($position_data['length'] > 1) {
579 for ($i = 1;$i < $position_data['length'];$i++) {
580 $selections[] = $position + $i;
581 }
582 }
583 }
584
585 return $selections;
586 }

◆ getClassForPosition()

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

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

514 : string {
515 if ($show_correct_solution !== true
516 && in_array($position, $selections['user'])) {
517 return 'ilc_qetitem_ErrorTextSelected';
518 }
519
520 if ($show_correct_solution === true
521 && in_array($position, $selections['best'])) {
522 return 'ilc_qetitem_ErrorTextSelected';
523 }
524
525 return 'ilc_qetitem_ErrorTextItem';
526 }

◆ getCorrectnessIconForPosition()

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

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

533 : string {
534 if ($graphical_output === true
535 && (in_array($position, $selections['user']) && !in_array($position, $selections['best'])
536 || !in_array($position, $selections['user']) && in_array($position, $selections['best']))) {
537 return $correctness_icons['not_correct'];
538 }
539
540 if ($graphical_output === true
541 && in_array($position, $selections['user']) && in_array($position, $selections['best'])) {
542 return $correctness_icons['correct'];
543 }
544
545 return '';
546 }

◆ getCorrectSolutionForTextOutput()

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

Reimplemented from assQuestion.

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

999 : string
1000 {
1001 return $this->createErrorTextExport($this->getBestSelection());
1002 }
createErrorTextExport(array $selections)
getBestSelection(bool $with_positive_points_only=true)

◆ getErrorData()

assErrorText::getErrorData ( )
Returns
array<assAnswerErrorText>

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

644 : array
645 {
646 return $this->errordata;
647 }

◆ getErrorDataAsArrayForJS()

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

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

653 : array
654 {
655 $correct_answers = [];
656 foreach ($this->getErrorData() as $index => $answer_obj) {
657 $correct_answers[] = [
658 'answertext_wrong' => $answer_obj->getTextWrong(),
659 'answertext_correct' => $answer_obj->getTextCorrect(),
660 'points' => $answer_obj->getPoints(),
661 'length' => $answer_obj->getLength(),
662 'pos' => $this->getId() . '_' . $answer_obj->getPosition()
663 ];
664 }
665 return $correct_answers;
666 }

References ILIAS\Survey\Mode\getId().

+ Here is the call graph for this function:

◆ getErrorText()

assErrorText::getErrorText ( )

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

668 : string
669 {
670 return $this->errortext ?? '';
671 }

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 932 of file class.assErrorText.php.

932 : string
933 {
934 if ($useLinkTags) {
935 return '<a class="' . $class . '" href="#">' . ($item == '&nbsp;' ? $item : ilLegacyFormElementsUtil::prepareFormOutput(
936 $item
937 )) . '</a>';
938 }
939
940 return '<span class="' . $class . '">' . ($item == '&nbsp;' ? $item : ilLegacyFormElementsUtil::prepareFormOutput(
941 $item
942 )) . '</span>';
943 }
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 755 of file class.assErrorText.php.

755 : array
756 {
758 }
static getOperatorsByExpression(string $expression)

References ilOperatorsExpressionMapping\getOperatorsByExpression().

+ Here is the call graph for this function:

◆ getParsedErrorText()

assErrorText::getParsedErrorText ( )

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

678 : array
679 {
681 }

Referenced by correctDataAfterParserUpdate(), and saveAdditionalQuestionDataToDb().

+ Here is the caller graph for this function:

◆ getParsedErrorTextForJS()

assErrorText::getParsedErrorTextForJS ( )
private

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

683 : array
684 {
685 $answers = [];
686 foreach ($this->parsed_errortext as $paragraph) {
687 foreach ($paragraph as $position => $word) {
688 $answers[] = [
689 'answertext' => $word['text'],
690 'order' => $this->getId() . '_' . $position
691 ];
692 }
693 $answers[] = [
694 'answertext' => '###'
695 ];
696 }
697 array_pop($answers);
698
699 return $answers;
700 }

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 592 of file class.assErrorText.php.

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

◆ getPointsWrong()

assErrorText::getPointsWrong ( )

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

721 : ?float
722 {
723 return $this->points_wrong;
724 }

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 490 of file class.assErrorText.php.

494 : string {
495 $v = $paragraph[$position];
496 if ($show_correct_solution === true
497 && ($v['error_type'] === 'in_passage'
498 || $v['error_type'] === 'passage_end')) {
499 return '';
500 }
501 if ($show_correct_solution
502 && ($v['error_type'] === 'passage_start'
503 || $v['error_type'] === 'word')) {
504 return $v['text_correct'] ?? '';
505 }
506
507 return $v['text'];
508 }

◆ getTextSize()

assErrorText::getTextSize ( )

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

707 : float
708 {
709 return $this->textsize;
710 }

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 770 of file class.assErrorText.php.

774 $result = new ilUserQuestionResult($this, $active_id, $pass);
775
776 $data = $this->db->queryF(
777 "SELECT value1+1 as value1 FROM tst_solutions WHERE active_fi = %s AND pass = %s AND question_fi = %s AND step = (
778 SELECT MAX(step) FROM tst_solutions WHERE active_fi = %s AND pass = %s AND question_fi = %s
779 )",
780 ["integer", "integer", "integer","integer", "integer", "integer"],
781 [$active_id, $pass, $this->getId(), $active_id, $pass, $this->getId()]
782 );
783
784 while ($row = $this->db->fetchAssoc($data)) {
785 $result->addKeyValue($row["value1"], $row["value1"]);
786 }
787
788 $points = $this->calculateReachedPoints($active_id, $pass);
789 $max_points = $this->getMaximumPoints();
790
791 $result->setReachedPercentage(($points / $max_points) * 100);
792
793 return $result;
794 }
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 796 of file class.assErrorText.php.

796 : void
797 {
798 $text_by_paragraphs = preg_split(self::PARAGRAPH_SPLIT_REGEXP, $this->getErrorText());
799 $text_array = [];
800 $offset = 0;
801 foreach ($text_by_paragraphs as $paragraph) {
802 $text_array[] = $this->addErrorInformationToTextParagraphArray(
803 preg_split(self::WORD_SPLIT_REGEXP, trim($paragraph)),
804 $offset
805 );
806 $offset += count(end($text_array));
807 }
808 $this->setParsedErrorText($text_array);
809 }
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 875 of file class.assErrorText.php.

875 : string
876 {
877 if (mb_substr($word, -2) === self::ERROR_PARAGRAPH_DELIMITERS['end']) {
878 return mb_substr($word, 0, -2);
879 }
880 return mb_substr($word, 0, -3) . mb_substr($word, -1);
881 }

◆ removeErrorDataWithoutPosition()

assErrorText::removeErrorDataWithoutPosition ( )

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

411 : void
412 {
413 foreach ($this->getErrorData() as $index => $error) {
414 if ($error->getPosition() === null) {
415 unset($this->errordata[$index]);
416 }
417 }
418 $this->errordata = array_values($this->errordata);
419 }

◆ 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 400 of file class.assErrorText.php.

400 : void
401 {
402 $this->errordata = [];
403
404 foreach ($errors as $error) {
405 $answer = $this->addPositionToErrorAnswer($error);
406 $this->errordata[] = $answer;
407 }
409 }

◆ 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 673 of file class.assErrorText.php.

673 : void
674 {
675 $this->errortext = $text ?? '';
676 }

References $text.

Referenced by loadFromDb().

+ Here is the caller graph for this function:

◆ setParsedErrorText()

assErrorText::setParsedErrorText ( array  $parsed_errortext)

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

702 : void
703 {
704 $this->parsed_errortext = $parsed_errortext;
705 }

Referenced by loadFromDb().

+ Here is the caller graph for this function:

◆ setPointsWrong()

assErrorText::setPointsWrong (   $a_value)

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

726 : void
727 {
728 $this->points_wrong = $a_value;
729 }

Referenced by loadFromDb().

+ Here is the caller graph for this function:

◆ setTextSize()

assErrorText::setTextSize (   $a_value)

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

712 : void
713 {
714 // in self-assesment-mode value should always be set (and must not be null)
715 if ($a_value === null) {
716 $a_value = 100;
717 }
718 $this->textsize = $a_value;
719 }

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 977 of file class.assErrorText.php.

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

◆ 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 989 of file class.assErrorText.php.

989 : string
990 {
991 return $this->createErrorTextExport(
992 array_map(
993 static fn(array $v): string => $v['value1'],
994 $solution_values
995 )
996 );
997 }

◆ toJSON()

assErrorText::toJSON ( )

Reimplemented from assQuestion.

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

731 : string
732 {
733 $result = [];
734 $result['id'] = $this->getId();
735 $result['type'] = (string) $this->getQuestionType();
736 $result['title'] = $this->getTitleForHTMLOutput();
737 $result['question'] = $this->formatSAQuestion($this->getQuestion());
738 $result['text'] = ilRTE::_replaceMediaObjectImageSrc($this->getErrorText(), 0);
739 $result['nr_of_tries'] = $this->getNrOfTries();
740 $result['shuffle'] = $this->getShuffle();
741 $result['feedback'] = [
742 'onenotcorrect' => $this->formatSAQuestion($this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(), false)),
743 'allcorrect' => $this->formatSAQuestion($this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(), true))
744 ];
745
746 $result['correct_answers'] = $this->getErrorDataAsArrayForJS();
747 $result['answers'] = $this->getParsedErrorTextForJS();
748
749 $mobs = ilObjMediaObject::_getMobsOfObject("qpl:html", $this->getId());
750 $result['mobs'] = $mobs;
751
752 return json_encode($result);
753 }
static _getMobsOfObject(string $a_type, int $a_id, int|false $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 945 of file class.assErrorText.php.

945 : array
946 {
947 $result = [
948 AdditionalInformationGenerator::KEY_QUESTION_TYPE => (string) $this->getQuestionType(),
949 AdditionalInformationGenerator::KEY_QUESTION_TITLE => $this->getTitleForHTMLOutput(),
950 AdditionalInformationGenerator::KEY_QUESTION_TEXT => $this->formatSAQuestion($this->getQuestion()),
951 AdditionalInformationGenerator::KEY_QUESTION_ERRORTEXT_ERRORTEXT => ilRTE::_replaceMediaObjectImageSrc($this->getErrorText(), 0),
952 AdditionalInformationGenerator::KEY_QUESTION_SHUFFLE_ANSWER_OPTIONS => $additional_info
954 AdditionalInformationGenerator::KEY_FEEDBACK => [
955 AdditionalInformationGenerator::KEY_QUESTION_FEEDBACK_ON_INCOMPLETE => $this->formatSAQuestion($this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(), false)),
956 AdditionalInformationGenerator::KEY_QUESTION_FEEDBACK_ON_COMPLETE => $this->formatSAQuestion($this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(), true))
957 ]
958 ];
959
960 $error_data = $this->getErrorData();
961 $result[AdditionalInformationGenerator::KEY_QUESTION_CORRECT_ANSWER_OPTIONS] = array_reduce(
962 array_keys($error_data),
963 static function (array $c, int $k) use ($error_data): array {
964 $c[$k + 1] = [
965 'text_wrong' => $error_data[$k]->getTextWrong(),
966 'text_correct' => $error_data[$k]->getTextCorrect(),
967 'points' => $error_data[$k]->getPoints()
968 ];
969 return $c;
970 },
971 []
972 );
973
974 return $result;
975 }

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: