ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
assOrderingQuestion Class Reference

Class for ordering questions. More...

+ Inheritance diagram for assOrderingQuestion:
+ Collaboration diagram for assOrderingQuestion:

Public Member Functions

 __construct (string $title="", string $comment="", string $author="", int $owner=-1, string $question="", protected int $ordering_type=self::OQ_TERMS)
 
 isComplete ()
 
 saveToDb (?int $original_id=null)
 
 loadFromDb ($question_id)
 Loads a assOrderingQuestion object from a database. More...
 
 cloneImages (int $source_question_id, int $source_parent_id, int $target_question_id, int $target_parent_id)
 
 setOrderingType (int $ordering_type=self::OQ_TERMS)
 
 getOrderingType ()
 
 isOrderingTypeNested ()
 
 isImageOrderingType ()
 
 setContentType ($ct)
 
 setNestingType (bool $nesting)
 
 hasOrderingTypeUploadSupport ()
 
 getOrderingElementListForSolutionOutput (bool $force_correct_solution, int $active_id, ?int $pass_index)
 
 getSolutionOrderingElementListForTestOutput (ilAssNestedOrderingElementsInputGUI $input_gui, array $last_post, int $active_id, int $pass)
 
 getSolutionOrderingElementList (array $indexed_solution_values)
 
 getShuffledOrderingElementList ()
 
 getOrderingElementList ()
 
 setOrderingElementList (ilAssOrderingElementList $list)
 
 getAnswer (int $index=0)
 Returns the ordering element from the given position. More...
 
 deleteAnswer (int $random_identifier)
 
 getAnswerCount ()
 
 calculateReachedPoints (int $active_id, ?int $pass=null, bool $authorized_solution=true)
 
 calculateReachedPointsFromPreviewSession (ilAssQuestionPreviewSession $preview_session)
 
 getMaximumPoints ()
 
 getEncryptedFilename ($filename)
 
 dropImageFile ($imageFilename)
 
 isImageFileStored ($imageFilename)
 
 isImageReplaced (ilAssOrderingElement $newElement, ilAssOrderingElement $oldElement)
 
 storeImageFile (string $upload_file, string $upload_name)
 
 updateImageFile (string $existing_image_name)
 
 validateSolutionSubmit ()
 
 saveWorkingData (int $active_id, ?int $pass=null, bool $authorized=true)
 
 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...
 
 getQuestionType ()
 Returns the question type of the question. More...
 
 getAdditionalTableName ()
 Returns the name of the additional question data table in the database. More...
 
 getAnswerTableName ()
 Returns the name of the answer table in the database. More...
 
 getRTETextWithMediaObjects ()
 Collects all text in the question which could contain media objects which were created with the Rich Text Editor. More...
 
 getOrderElements ()
 Returns the answers array. More...
 
 getElementHeight ()
 
 setElementHeight (?int $a_height)
 
 rebuildThumbnails ()
 
 getThumbPrefix ()
 
 toJSON ()
 Returns a JSON representation of the question. More...
 
 buildOrderingElementInputGui ()
 
 initOrderingElementAuthoringProperties (ilFormPropertyGUI $formField)
 
 initOrderingElementFormFieldLabels (ilFormPropertyGUI $formField)
 
 buildOrderingTextsInputGui ()
 
 buildOrderingImagesInputGui ()
 
 buildNestedOrderingElementInputGui ()
 
 fetchSolutionListFromFormSubmissionData (array $user_solution_post)
 
 getSolutionListFromPostSubmit ()
 
 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 ($index=null)
 If index is null, the function returns an array with all anwser options Else it returns the specific answer option. More...
 
 buildTestPresentationConfig ()
 Get the test question configuration. More...
 
 fetchSolutionSubmit (array $form_submission_data_structure)
 
 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 ()
 

Data Fields

const ORDERING_ELEMENT_FORM_FIELD_POSTVAR = 'order_elems'
 
const ORDERING_ELEMENT_FORM_CMD_UPLOAD_IMG = 'uploadElementImage'
 
const ORDERING_ELEMENT_FORM_CMD_REMOVE_IMG = 'removeElementImage'
 
const OQ_PICTURES = 0
 
const OQ_TERMS = 1
 
const OQ_NESTED_PICTURES = 2
 
const OQ_NESTED_TERMS = 3
 
const OQ_CT_PICTURES = 'pics'
 
const OQ_CT_TERMS = 'terms'
 
const VALID_UPLOAD_SUFFIXES = ["jpg", "jpeg", "png", "gif"]
 
int $element_height = null
 
 $old_ordering_depth = []
 
 $leveled_ordering = []
 
- 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 = "?"
 

Protected Member Functions

 getRepository ()
 
 cloneQuestionTypeSpecificProperties (\assQuestion $target)
 
 getValidOrderingTypes ()
 
 getSolutionValuePairBrandedOrderingElementByRandomIdentifier (int $value1, string $value2)
 
 getSolutionValuePairBrandedOrderingElementBySolutionIdentifier (int $value1, string $value2)
 
 cleanImagefiles ()
 
 savePreviewData (ilAssQuestionPreviewSession $previewSession)
 
 getQuestionRepository ()
 
 generateThumbForFile ($path, $file)
 
 calculateReachedPointsForSolution (ilAssOrderingElementList $solution_ordering_element_list)
 
 ensureImagePathExists ()
 
 buildOrderingElementFormDataConverter ()
 
 buildOrderingImagesFormDataConverter ()
 
 buildOrderingTextsFormDataConverter ()
 
 buildNestedOrderingFormDataConverter ()
 
 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 HAS_SPECIFIC_FEEDBACK = false
 
OQRepository $oq_repository = null
 
ilAssOrderingElementList $element_list_for_deferred_saving = 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

 getOrderingTypeLangVars (int $ordering_type)
 
 getSolutionOutputForLog ()
 
 getElementArrayWithIdentationsForTextOutput (array $elements)
 

Private Attributes

ilAssOrderingElementList $postSolutionOrderingElementList = null
 

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

Constructor & Destructor Documentation

◆ __construct()

assOrderingQuestion::__construct ( string  $title = "",
string  $comment = "",
string  $author = "",
int  $owner = -1,
string  $question = "",
protected int  $ordering_type = self::OQ_TERMS 
)

Member Function Documentation

◆ buildNestedOrderingElementInputGui()

assOrderingQuestion::buildNestedOrderingElementInputGui ( )
Returns
ilAssNestedOrderingElementsInputGUI

Definition at line 958 of file class.assOrderingQuestion.php.

959 {
960 $form_data_converter = $this->buildNestedOrderingFormDataConverter();
961
962 $ordering_element_input = new ilAssNestedOrderingElementsInputGUI(
963 $form_data_converter,
964 self::ORDERING_ELEMENT_FORM_FIELD_POSTVAR
965 );
966
967 $ordering_element_input->setUniquePrefix($this->getId());
968 $ordering_element_input->setOrderingType($this->getOrderingType());
969 $ordering_element_input->setElementImagePath($this->getImagePathWeb());
970 $ordering_element_input->setThumbPrefix($this->getThumbPrefix());
971
972 $this->initOrderingElementFormFieldLabels($ordering_element_input);
973
974 return $ordering_element_input;
975 }
initOrderingElementFormFieldLabels(ilFormPropertyGUI $formField)
getImagePathWeb()
Returns the web image path for web accessable images of a question.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...

References ILIAS\Survey\Mode\getId().

+ Here is the call graph for this function:

◆ buildNestedOrderingFormDataConverter()

assOrderingQuestion::buildNestedOrderingFormDataConverter ( )
protected
Returns
ilAssOrderingFormValuesObjectsConverter

Definition at line 1249 of file class.assOrderingQuestion.php.

1250 {
1251 $form_data_converter = $this->buildOrderingElementFormDataConverter();
1253
1254 if ($this->getOrderingType() === self::OQ_NESTED_PICTURES) {
1255 $form_data_converter->setImageRemovalCommand(self::ORDERING_ELEMENT_FORM_CMD_REMOVE_IMG);
1256 $form_data_converter->setImageUrlPath($this->getImagePathWeb());
1257 $form_data_converter->setThumbnailPrefix($this->getThumbPrefix());
1258 }
1259
1260 return $form_data_converter;
1261 }

References ilAssOrderingFormValuesObjectsConverter\CONTEXT_MAINTAIN_HIERARCHY.

◆ buildOrderingElementFormDataConverter()

assOrderingQuestion::buildOrderingElementFormDataConverter ( )
protected
Returns
ilAssOrderingFormValuesObjectsConverter

Definition at line 1210 of file class.assOrderingQuestion.php.

1211 {
1212 $converter = new ilAssOrderingFormValuesObjectsConverter();
1213 $converter->setPostVar(self::ORDERING_ELEMENT_FORM_FIELD_POSTVAR);
1214
1215 return $converter;
1216 }

◆ buildOrderingElementInputGui()

assOrderingQuestion::buildOrderingElementInputGui ( )
Returns
ilAssNestedOrderingElementsInputGUI|ilAssOrderingImagesInputGUI|ilAssOrderingTextsInputGUI
Exceptions
ilTestQuestionPoolException

Definition at line 879 of file class.assOrderingQuestion.php.

Referenced by ilAssOrderingQuestionAuthoringFormGUI\renewOrderingElementInput().

+ Here is the caller graph for this function:

◆ buildOrderingImagesFormDataConverter()

assOrderingQuestion::buildOrderingImagesFormDataConverter ( )
protected
Returns
ilAssOrderingFormValuesObjectsConverter

Definition at line 1221 of file class.assOrderingQuestion.php.

1222 {
1223 $formDataConverter = $this->buildOrderingElementFormDataConverter();
1225
1226 $formDataConverter->setImageRemovalCommand(self::ORDERING_ELEMENT_FORM_CMD_REMOVE_IMG);
1227 $formDataConverter->setImageUrlPath($this->getImagePathWeb());
1228 $formDataConverter->setImageFsPath($this->getImagePath());
1229
1230 if ($this->getThumbPrefix()) {
1231 $formDataConverter->setThumbnailPrefix($this->getThumbPrefix());
1232 }
1233 return $formDataConverter;
1234 }
getImagePath($question_id=null, $object_id=null)
Returns the image path for web accessable images of a question.

References ilAssOrderingFormValuesObjectsConverter\CONTEXT_MAINTAIN_ELEMENT_IMAGE.

◆ buildOrderingImagesInputGui()

assOrderingQuestion::buildOrderingImagesInputGui ( )
Returns
ilAssOrderingImagesInputGUI

Definition at line 938 of file class.assOrderingQuestion.php.

939 {
940 $formDataConverter = $this->buildOrderingImagesFormDataConverter();
941
942 $orderingElementInput = new ilAssOrderingImagesInputGUI(
943 $formDataConverter,
944 self::ORDERING_ELEMENT_FORM_FIELD_POSTVAR
945 );
946
947 $orderingElementInput->setImageUploadCommand(self::ORDERING_ELEMENT_FORM_CMD_UPLOAD_IMG);
948 $orderingElementInput->setImageRemovalCommand(self::ORDERING_ELEMENT_FORM_CMD_REMOVE_IMG);
949
950 $this->initOrderingElementFormFieldLabels($orderingElementInput);
951
952 return $orderingElementInput;
953 }
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...

◆ buildOrderingTextsFormDataConverter()

assOrderingQuestion::buildOrderingTextsFormDataConverter ( )
protected

◆ buildOrderingTextsInputGui()

assOrderingQuestion::buildOrderingTextsInputGui ( )
Returns
ilAssOrderingTextsInputGUI

Definition at line 920 of file class.assOrderingQuestion.php.

921 {
922 $formDataConverter = $this->buildOrderingTextsFormDataConverter();
923
924 $orderingElementInput = new ilAssOrderingTextsInputGUI(
925 $formDataConverter,
926 self::ORDERING_ELEMENT_FORM_FIELD_POSTVAR
927 );
928
929 $this->initOrderingElementFormFieldLabels($orderingElementInput);
930 $orderingElementInput->setInfo($orderingElementInput->getInfo() . ' ' . $this->lng->txt('latex_edit_info'));
931
932 return $orderingElementInput;
933 }

◆ buildTestPresentationConfig()

assOrderingQuestion::buildTestPresentationConfig ( )

Get the test question configuration.

Returns
ilTestQuestionConfig

Reimplemented from assQuestion.

Definition at line 1133 of file class.assOrderingQuestion.php.

1134 // hey.
1135 {
1136 // hey: refactored identifiers
1137 return parent::buildTestPresentationConfig()
1138 // hey.
1140 ->setUseUnchangedAnswerLabel($this->lng->txt('tst_unchanged_order_is_correct'));
1141 }
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setIsUnchangedAnswerPossible($isUnchangedAnswerPossible)
Set if the saving of an unchanged answer is supported with an additional checkbox.

References ILIAS\Repository\lng(), and ilTestQuestionConfig\setIsUnchangedAnswerPossible().

+ Here is the call graph for this function:

◆ calculateReachedPoints()

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

Reimplemented from assQuestion.

Definition at line 472 of file class.assOrderingQuestion.php.

476 : float {
477 if ($pass === null) {
478 $pass = $this->getSolutionMaxPass($active_id);
479 }
480
481 $solution_value_pairs = $this->getSolutionValues($active_id, $pass, $authorized_solution);
482
483 if ($solution_value_pairs === []) {
484 return 0.0;
485 }
486
487 $solution_ordering_element_list = $this->getSolutionOrderingElementList(
488 $this->fetchIndexedValuesFromValuePairs($solution_value_pairs)
489 );
490
491 return $this->calculateReachedPointsForSolution($solution_ordering_element_list);
492 }
getSolutionOrderingElementList(array $indexed_solution_values)
calculateReachedPointsForSolution(ilAssOrderingElementList $solution_ordering_element_list)
getSolutionValues(int $active_id, ?int $pass=null, bool $authorized=true)
Loads solutions of a given user from the database an returns it.
getSolutionMaxPass(int $active_id)
fetchIndexedValuesFromValuePairs(array $value_pairs)

◆ calculateReachedPointsForSolution()

assOrderingQuestion::calculateReachedPointsForSolution ( ilAssOrderingElementList  $solution_ordering_element_list)
protected

Definition at line 1026 of file class.assOrderingQuestion.php.

1026 : float
1027 {
1028 $reached_points = $this->getPoints();
1029
1030 foreach ($this->getOrderingElementList() as $correct_element) {
1031 $user_element = $solution_ordering_element_list->getElementByPosition($correct_element->getPosition());
1032 if (!$correct_element->isSameElement($user_element)) {
1033 $reached_points = 0;
1034 break;
1035 }
1036 }
1037
1038 return $reached_points;
1039 }

References ilAssOrderingElementList\getElementByPosition().

+ Here is the call graph for this function:

◆ calculateReachedPointsFromPreviewSession()

assOrderingQuestion::calculateReachedPointsFromPreviewSession ( ilAssQuestionPreviewSession  $preview_session)

Reimplemented from assQuestion.

Definition at line 494 of file class.assOrderingQuestion.php.

494 : float
495 {
496 if (!$preview_session->hasParticipantSolution()) {
497 return 0.0;
498 }
499
500 $solution_ordering_element_list = unserialize(
501 $preview_session->getParticipantsSolution(),
502 ['allowed_classes' => true]
503 );
504
505 $reached_points = $this->calculateReachedPointsForSolution($solution_ordering_element_list);
506
507 return $this->ensureNonNegativePoints($reached_points);
508 }
ensureNonNegativePoints(float $points)

References ilAssQuestionPreviewSession\getParticipantsSolution(), and ilAssQuestionPreviewSession\hasParticipantSolution().

+ Here is the call graph for this function:

◆ cleanImagefiles()

assOrderingQuestion::cleanImagefiles ( )
protected

Definition at line 532 of file class.assOrderingQuestion.php.

532 : void
533 {
534 if ($this->getOrderingType() == self::OQ_PICTURES) {
535 if (@file_exists($this->getImagePath())) {
536 $contents = ilFileUtils::getDir($this->getImagePath());
537 foreach ($contents as $f) {
538 if (strcmp($f['type'], 'file') == 0) {
539 $found = false;
540 foreach ($this->getOrderingElementList() as $orderElement) {
541 if (strcmp($f['entry'], $orderElement->getContent()) == 0) {
542 $found = true;
543 }
544 if (strcmp($f['entry'], $this->getThumbPrefix() . $orderElement->getContent()) == 0) {
545 $found = true;
546 }
547 }
548 if (!$found) {
549 if (@file_exists($this->getImagePath() . $f['entry'])) {
550 @unlink($this->getImagePath() . $f['entry']);
551 }
552 }
553 }
554 }
555 }
556 } else {
557 if (@file_exists($this->getImagePath())) {
559 }
560 }
561 }
static getDir(string $a_dir, bool $a_rec=false, ?string $a_sub_dir="")
get directory
static delDir(string $a_dir, bool $a_clean_only=false)
removes a dir and all its content (subdirs and files) recursively

References Vendor\Package\$f, ilFileUtils\delDir(), and ilFileUtils\getDir().

+ Here is the call graph for this function:

◆ cloneImages()

assOrderingQuestion::cloneImages ( int  $source_question_id,
int  $source_parent_id,
int  $target_question_id,
int  $target_parent_id 
)

Definition at line 175 of file class.assOrderingQuestion.php.

180 : void {
181 if (!$this->isImageOrderingType()) {
182 return;
183 }
184
185 $image_source_path = $this->getImagePath($source_question_id, $source_parent_id);
186 $image_target_path = $this->getImagePath($target_question_id, $target_parent_id);
187
188 if (!file_exists($image_target_path)) {
189 ilFileUtils::makeDirParents($image_target_path);
190 } else {
191 $this->removeAllImageFiles($image_target_path);
192 }
193 foreach ($this->getOrderingElementList() as $element) {
194 $filename = $element->getContent();
195
196 if ($filename === '') {
197 continue;
198 }
199
200 if (!file_exists($image_source_path . $filename)
201 || !copy($image_source_path . $filename, $image_target_path . $filename)) {
202 $this->log->root()->warning('Image could not be cloned for object for question: ' . $target_question_id);
203 }
204 if (!file_exists($image_source_path . $this->getThumbPrefix() . $filename)
205 || !copy($image_source_path . $this->getThumbPrefix() . $filename, $image_target_path . $this->getThumbPrefix() . $filename)) {
206 $this->log->root()->warning('Image thumbnails could not be cloned for object for question: ' . $target_question_id);
207 }
208 }
209 }
$filename
Definition: buildRTE.php:78
removeAllImageFiles(string $image_target_path)
static makeDirParents(string $a_dir)
Create a new directory and all parent directories.

◆ cloneQuestionTypeSpecificProperties()

assOrderingQuestion::cloneQuestionTypeSpecificProperties ( \assQuestion  $target)
protected

Definition at line 163 of file class.assOrderingQuestion.php.

165 : \assQuestion {
166 $list = $this->getRepository()->getOrderingList($this->getId())
167 ->withQuestionId($target->getId());
168 $list->distributeNewRandomIdentifiers();
169 $target->setOrderingElementList($list);
170 $this->cloneImages($this->getId(), $this->getObjId(), $target->getId(), $target->getObjId());
171 $target->saveToDb();
172 return $target;
173 }
cloneImages(int $source_question_id, int $source_parent_id, int $target_question_id, int $target_parent_id)

◆ deleteAnswer()

assOrderingQuestion::deleteAnswer ( int  $random_identifier)

Definition at line 459 of file class.assOrderingQuestion.php.

459 : void
460 {
461 $this->getOrderingElementList()->removeElement(
462 $this->getOrderingElementList()->getElementByRandomIdentifier($random_identifier)
463 );
464 $this->getOrderingElementList()->saveToDb();
465 }

◆ dropImageFile()

assOrderingQuestion::dropImageFile (   $imageFilename)

Definition at line 569 of file class.assOrderingQuestion.php.

570 {
571 if (!strlen($imageFilename)) {
572 return false;
573 }
574
575 $result = @unlink($this->getImagePath() . $imageFilename);
576 $result = $result && @unlink($this->getImagePath() . $this->getThumbPrefix() . $imageFilename);
577
578 return $result;
579 }

◆ ensureImagePathExists()

assOrderingQuestion::ensureImagePathExists ( )
protected

Definition at line 1144 of file class.assOrderingQuestion.php.

1144 : void
1145 {
1146 if (!file_exists($this->getImagePath())) {
1148 }
1149 }

References ilFileUtils\makeDirParents().

+ Here is the call graph for this function:

◆ fetchSolutionListFromFormSubmissionData()

assOrderingQuestion::fetchSolutionListFromFormSubmissionData ( array  $user_solution_post)

Definition at line 977 of file class.assOrderingQuestion.php.

978 {
979 $ordering_gui = $this->buildNestedOrderingElementInputGui();
981 $ordering_gui->setValueByArray($user_solution_post);
982
983 if (!$ordering_gui->checkInput()) {
984 throw new ilTestException('error on validating user solution post');
985 }
986
987 $solution_ordering_element_list = ilAssOrderingElementList::buildInstance($this->getId());
988
989 $stored_element_list = $this->getOrderingElementList();
990
991 foreach ($ordering_gui->getElementList($this->getId()) as $submitted_element) {
992 $solution_element = $stored_element_list->getElementByRandomIdentifier(
993 $submitted_element->getRandomIdentifier()
994 )?->getClone();
995
996 if ($solution_element === null) {
997 continue;
998 }
999
1000 $solution_element->setPosition($submitted_element->getPosition());
1001
1002 if ($this->isOrderingTypeNested()) {
1003 $solution_element->setIndentation($submitted_element->getIndentation());
1004 }
1005
1006 $solution_ordering_element_list->addElement($solution_element);
1007 }
1008
1009 return $solution_ordering_element_list;
1010 }
static buildInstance(int $question_id, array $elements=[])
Base Exception for all Exceptions relating to Modules/Test.

References ilAssOrderingElementList\buildInstance(), ilAssNestedOrderingElementsInputGUI\CONTEXT_USER_SOLUTION_SUBMISSION, and ILIAS\Survey\Mode\getId().

+ Here is the call graph for this function:

◆ fetchSolutionSubmit()

assOrderingQuestion::fetchSolutionSubmit ( array  $form_submission_data_structure)
Returns
array

Definition at line 1154 of file class.assOrderingQuestion.php.

1154 : array
1155 {
1156 $solution_submit = [];
1157
1158 if (isset($form_submission_data_structure['orderresult'])) {
1159 $orderresult = $form_submission_data_structure['orderresult'];
1160
1161 if (strlen($orderresult)) {
1162 $orderarray = explode(":", $orderresult);
1163 $ordervalue = 1;
1164 foreach ($orderarray as $index) {
1165 $idmatch = null;
1166 if (preg_match("/id_(\\d+)/", $index, $idmatch)) {
1167 $randomid = $idmatch[1];
1168 foreach ($this->getOrderingElementList() as $answeridx => $answer) {
1169 if ($answer->getRandomIdentifier() == $randomid) {
1170 $solution_submit[$answeridx] = $ordervalue;
1171 $ordervalue++;
1172 }
1173 }
1174 }
1175 }
1176 }
1177 } elseif ($this->getOrderingType() == self::OQ_NESTED_TERMS || $this->getOrderingType() == self::OQ_NESTED_PICTURES) {
1178 $index = 0;
1179 foreach ($form_submission_data_structure['content'] as $randomId => $content) {
1180 $indentation = $form_submission_data_structure['indentation'];
1181
1182 $value1 = $index++;
1183 $value2 = implode(':', [$randomId, $indentation]);
1184
1185 $solution_submit[$value1] = $value2;
1186 }
1187 } else {
1188 foreach ($form_submission_data_structure as $key => $value) {
1189 $matches = null;
1190 if (preg_match("/^order_(\d+)/", $key, $matches)) {
1191 if (!(preg_match("/initial_value_\d+/", $value))) {
1192 if (strlen($value)) {
1193 foreach ($this->getOrderingElementList() as $answeridx => $answer) {
1194 if ($answer->getRandomIdentifier() == $matches[1]) {
1195 $solution_submit[$answeridx] = $value;
1196 }
1197 }
1198 }
1199 }
1200 }
1201 }
1202 }
1203
1204 return $solution_submit;
1205 }

◆ generateThumbForFile()

assOrderingQuestion::generateThumbForFile (   $path,
  $file 
)
protected

Definition at line 810 of file class.assOrderingQuestion.php.

810 : void
811 {
812 $filename = $path . $file;
813 if (@file_exists($filename)) {
814 $thumbpath = $path . $this->getThumbPrefix() . $file;
815 $path_info = @pathinfo($filename);
816 $ext = "";
817 switch (strtoupper($path_info['extension'])) {
818 case 'PNG':
819 $ext = 'PNG';
820 break;
821 case 'GIF':
822 $ext = 'GIF';
823 break;
824 default:
825 $ext = 'JPEG';
826 break;
827 }
828 ilShellUtil::convertImage($filename, $thumbpath, $ext, (string) $this->getThumbSize());
829 }
830 }
static convertImage(string $a_from, string $a_to, string $a_target_format="", string $a_geometry="", string $a_background_color="")
$path
Definition: ltiservices.php:30

References $filename, $path, and ilShellUtil\convertImage().

+ Here is the call graph for this function:

◆ getAdditionalTableName()

assOrderingQuestion::getAdditionalTableName ( )

Returns the name of the additional question data table in the database.

Returns
string The additional table name @access public

Reimplemented from assQuestion.

Definition at line 741 of file class.assOrderingQuestion.php.

741 : string
742 {
743 return "qpl_qst_ordering";
744 }

Referenced by loadFromDb().

+ Here is the caller graph for this function:

◆ getAnswer()

assOrderingQuestion::getAnswer ( int  $index = 0)

Returns the ordering element from the given position.

Parameters
int$position
Returns
ilAssOrderingElement|null

Definition at line 450 of file class.assOrderingQuestion.php.

451 {
452 if (!$this->getOrderingElementList()->elementExistByPosition($index)) {
453 return null;
454 }
455
456 return $this->getOrderingElementList()->getElementByPosition($index);
457 }

◆ getAnswerCount()

assOrderingQuestion::getAnswerCount ( )

Definition at line 467 of file class.assOrderingQuestion.php.

467 : int
468 {
469 return $this->getOrderingElementList()->countElements();
470 }

◆ getAnswerTableName()

assOrderingQuestion::getAnswerTableName ( )

Returns the name of the answer table in the database.

Returns
string The answer table name @access public

Reimplemented from assQuestion.

Definition at line 752 of file class.assOrderingQuestion.php.

752 : string
753 {
754 return "qpl_a_ordering";
755 }

◆ getAvailableAnswerOptions()

assOrderingQuestion::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 1118 of file class.assOrderingQuestion.php.

1119 {
1120 if ($index !== null) {
1121 return $this->getOrderingElementList()->getElementByPosition($index);
1122 }
1123
1124 return $this->getOrderingElementList()->getElements();
1125 }

◆ getCorrectSolutionForTextOutput()

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

Reimplemented from assQuestion.

Definition at line 1337 of file class.assOrderingQuestion.php.

1337 : array
1338 {
1340 $this->getOrderingElementList()->getElements()
1341 );
1342 }
getElementArrayWithIdentationsForTextOutput(array $elements)

◆ getElementArrayWithIdentationsForTextOutput()

assOrderingQuestion::getElementArrayWithIdentationsForTextOutput ( array  $elements)
private
Parameters
array<ilAssOrderingElement>$elements
Returns
array

Definition at line 1349 of file class.assOrderingQuestion.php.

1349 : array
1350 {
1351 usort(
1352 $elements,
1354 => $a->getPosition() - $b->getPosition()
1355 );
1356
1357 return array_map(
1358 function (ilAssOrderingElement $v): string {
1359 $indentation = '';
1360 for ($i = 0;$i < $v->getIndentation();$i++) {
1361 $indentation .= ' |';
1362 }
1363 return $indentation . $v->getContent();
1364 },
1365 $elements
1366 );
1367 }
$a
thx to https://mlocati.github.io/php-cs-fixer-configurator for the examples

References Vendor\Package\$a, Vendor\Package\$b, ilAssOrderingElement\getContent(), and ilAssOrderingElement\getIndentation().

+ Here is the call graph for this function:

◆ getElementHeight()

assOrderingQuestion::getElementHeight ( )

Definition at line 781 of file class.assOrderingQuestion.php.

781 : ?int
782 {
784 }

◆ getEncryptedFilename()

assOrderingQuestion::getEncryptedFilename (   $filename)

Definition at line 523 of file class.assOrderingQuestion.php.

523 : string
524 {
525 $extension = "";
526 if (preg_match("/.*\\.(\\w+)$/", $filename, $matches)) {
527 $extension = $matches[1];
528 }
529 return md5($filename) . "." . $extension;
530 }

References $filename.

◆ getExpressionTypes()

◆ getMaximumPoints()

assOrderingQuestion::getMaximumPoints ( )

Reimplemented from assQuestion.

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

510 : float
511 {
512 return $this->getPoints();
513 }

Referenced by isComplete().

+ Here is the caller graph for this function:

◆ getOperators()

assOrderingQuestion::getOperators ( string  $expression)

Get all available operations for a specific question.

Parameters
$expression

Implements iQuestionCondition.

Definition at line 1041 of file class.assOrderingQuestion.php.

1041 : array
1042 {
1044 }
static getOperatorsByExpression(string $expression)

References ilOperatorsExpressionMapping\getOperatorsByExpression().

+ Here is the call graph for this function:

◆ getOrderElements()

assOrderingQuestion::getOrderElements ( )

Returns the answers array.

Deprecated:
seriously, stop looking for this kind data at this point (!) look where it comes from and learn (!)

Definition at line 776 of file class.assOrderingQuestion.php.

776 : array
777 {
778 return $this->getOrderingElementList()->getRandomIdentifierIndexedElements();
779 }

◆ getOrderingElementList()

assOrderingQuestion::getOrderingElementList ( )
Returns
ilAssOrderingElementList

Definition at line 419 of file class.assOrderingQuestion.php.

420 {
421 return $this->getRepository()->getOrderingList($this->getId());
422 }

References ILIAS\Survey\Mode\getId().

Referenced by isComplete().

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

◆ getOrderingElementListForSolutionOutput()

assOrderingQuestion::getOrderingElementListForSolutionOutput ( bool  $force_correct_solution,
int  $active_id,
?int  $pass_index 
)

Definition at line 299 of file class.assOrderingQuestion.php.

304 if ($force_correct_solution || !$active_id || $pass_index === null) {
305 return $this->getOrderingElementList();
306 }
307
308 $solution_values = $this->getSolutionValues($active_id, $pass_index);
309
310 if (!count($solution_values)) {
311 return $this->getShuffledOrderingElementList();
312 }
313
314 return $this->getSolutionOrderingElementList($this->fetchIndexedValuesFromValuePairs($solution_values));
315 }

◆ getOrderingType()

assOrderingQuestion::getOrderingType ( )

Definition at line 229 of file class.assOrderingQuestion.php.

229 : int
230 {
231 return $this->ordering_type;
232 }

◆ getOrderingTypeLangVars()

assOrderingQuestion::getOrderingTypeLangVars ( int  $ordering_type)
private

Definition at line 1283 of file class.assOrderingQuestion.php.

1283 : array
1284 {
1285 switch ($ordering_type) {
1286 case self::OQ_PICTURES:
1287 return ['qst_nested_nested_answers_off', 'oq_btn_use_order_pictures'];
1288 case self::OQ_TERMS:
1289 return ['qst_nested_nested_answers_off', 'oq_btn_use_order_terms'];
1291 return ['qst_nested_nested_answers_on', 'oq_btn_use_order_pictures'];
1293 return ['qst_nested_nested_answers_on', 'oq_btn_use_order_terms'];
1294 default:
1295 return ['', ''];
1296 }
1297 }

◆ getQuestionRepository()

assOrderingQuestion::getQuestionRepository ( )
protected

Definition at line 715 of file class.assOrderingQuestion.php.

715 : OQRepository
716 {
717 return new OQRepository($this->db);
718 }

◆ getQuestionType()

assOrderingQuestion::getQuestionType ( )

Returns the question type of the question.

Returns
integer The question type of the question @access public

Reimplemented from assQuestion.

Definition at line 730 of file class.assOrderingQuestion.php.

730 : string
731 {
732 return "assOrderingQuestion";
733 }

◆ getRepository()

assOrderingQuestion::getRepository ( )
protected

Definition at line 98 of file class.assOrderingQuestion.php.

98 : OQRepository
99 {
100 if (is_null($this->oq_repository)) {
101 $this->oq_repository = new OQRepository($this->db);
102 }
104 }

References $oq_repository.

◆ getRTETextWithMediaObjects()

assOrderingQuestion::getRTETextWithMediaObjects ( )

Collects all text in the question which could contain media objects which were created with the Rich Text Editor.

Reimplemented from assQuestion.

Definition at line 761 of file class.assOrderingQuestion.php.

761 : string
762 {
763 $text = parent::getRTETextWithMediaObjects();
764
765 foreach ($this->getOrderingElementList() as $orderingElement) {
766 $text .= $orderingElement->getContent();
767 }
768
769 return $text;
770 }

◆ getShuffledOrderingElementList()

assOrderingQuestion::getShuffledOrderingElementList ( )
Parameters
$active_id
$pass
Returns
ilAssOrderingElementList

Definition at line 403 of file class.assOrderingQuestion.php.

404 {
405 $shuffledRandomIdentifierIndex = $this->getShuffler()->transform(
406 $this->getOrderingElementList()->getRandomIdentifierIndex()
407 );
408
409 $shuffledElementList = $this->getOrderingElementList()->getClone();
410 $shuffledElementList->reorderByRandomIdentifiers($shuffledRandomIdentifierIndex);
411 $shuffledElementList->resetElementsIndentations();
412
413 return $shuffledElementList;
414 }

References ilAssOrderingElementList\getClone().

+ Here is the call graph for this function:

◆ getSolutionListFromPostSubmit()

assOrderingQuestion::getSolutionListFromPostSubmit ( )

Definition at line 1014 of file class.assOrderingQuestion.php.

1015 {
1016 if ($this->postSolutionOrderingElementList === null) {
1018 $this->http->request()->getParsedBody()
1019 );
1020 $this->postSolutionOrderingElementList = $list;
1021 }
1022
1024 }
fetchSolutionListFromFormSubmissionData(array $user_solution_post)
ilAssOrderingElementList $postSolutionOrderingElementList
static http()
Fetches the global http state from ILIAS.

References ILIAS\FileDelivery\http().

+ Here is the call graph for this function:

◆ getSolutionOrderingElementList()

assOrderingQuestion::getSolutionOrderingElementList ( array  $indexed_solution_values)
Exceptions
ilTestQuestionPoolException

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

377 {
378 $solution_ordering_list = new ilAssOrderingElementList();
379 $solution_ordering_list->setQuestionId($this->getId());
380
381 foreach ($indexed_solution_values as $value1 => $value2) {
382 if ($this->isOrderingTypeNested()) {
383 $element = $this->getSolutionValuePairBrandedOrderingElementByRandomIdentifier($value1, $value2);
384 } else {
385 $element = $this->getSolutionValuePairBrandedOrderingElementBySolutionIdentifier($value1, $value2);
386 }
387
388 $solution_ordering_list->addElement($element);
389 }
390
391 if (!$this->getOrderingElementList()->hasSameElementSetByRandomIdentifiers($solution_ordering_list)) {
392 throw new ilTestQuestionPoolException('inconsistent solution values given');
393 }
394
395 return $solution_ordering_list;
396 }
getSolutionValuePairBrandedOrderingElementByRandomIdentifier(int $value1, string $value2)
getSolutionValuePairBrandedOrderingElementBySolutionIdentifier(int $value1, string $value2)

References ILIAS\Survey\Mode\getId().

+ Here is the call graph for this function:

◆ getSolutionOrderingElementListForTestOutput()

assOrderingQuestion::getSolutionOrderingElementListForTestOutput ( ilAssNestedOrderingElementsInputGUI  $input_gui,
array  $last_post,
int  $active_id,
int  $pass 
)

Definition at line 317 of file class.assOrderingQuestion.php.

323 if ($input_gui->isPostSubmit($last_post)) {
324 return $this->fetchSolutionListFromFormSubmissionData($last_post);
325 }
326 $indexedSolutionValues = $this->fetchIndexedValuesFromValuePairs(
327 // hey: prevPassSolutions - obsolete due to central check
328 $this->getTestOutputSolutions($active_id, $pass)
329 // hey.
330 );
331
332 if (count($indexedSolutionValues)) {
333 return $this->getSolutionOrderingElementList($indexedSolutionValues);
334 }
335
336 return $this->getShuffledOrderingElementList();
337 }
getTestOutputSolutions(int $activeId, int $pass)

◆ getSolutionOutputForLog()

assOrderingQuestion::getSolutionOutputForLog ( )
private

Definition at line 1299 of file class.assOrderingQuestion.php.

1299 : string
1300 {
1301 $solution_ordering_list = $this->getOrderingElementList();
1302
1303 $answers_gui = $this->buildNestedOrderingElementInputGui();
1305 $answers_gui->setInteractionEnabled(false);
1306 $answers_gui->setElementList($solution_ordering_list);
1307
1308 return $answers_gui->getHTML();
1309 }

References ilAssNestedOrderingElementsInputGUI\CONTEXT_CORRECT_SOLUTION_PRESENTATION.

◆ getSolutionValuePairBrandedOrderingElementByRandomIdentifier()

assOrderingQuestion::getSolutionValuePairBrandedOrderingElementByRandomIdentifier ( int  $value1,
string  $value2 
)
protected

Definition at line 339 of file class.assOrderingQuestion.php.

343 $value = explode(':', $value2);
344
345 $random_identifier = (int) $value[0];
346 $selected_position = $value1;
347 $selected_indentation = (int) $value[1];
348
349 $element = $this->getOrderingElementList()->getElementByRandomIdentifier($random_identifier)->getClone();
350
351 $element->setPosition($selected_position);
352 $element->setIndentation($selected_indentation);
353
354 return $element;
355 }

◆ getSolutionValuePairBrandedOrderingElementBySolutionIdentifier()

assOrderingQuestion::getSolutionValuePairBrandedOrderingElementBySolutionIdentifier ( int  $value1,
string  $value2 
)
protected

Definition at line 357 of file class.assOrderingQuestion.php.

361 $solution_identifier = $value1;
362 $selected_position = ($value2 - 1);
363 $selected_indentation = 0;
364
365 $element = $this->getOrderingElementList()->getElementBySolutionIdentifier($solution_identifier)->getClone();
366
367 $element->setPosition($selected_position);
368 $element->setIndentation($selected_indentation);
369
370 return $element;
371 }

◆ getThumbPrefix()

assOrderingQuestion::getThumbPrefix ( )

Definition at line 805 of file class.assOrderingQuestion.php.

805 : string
806 {
807 return "thumb.";
808 }

◆ getUserQuestionResult()

assOrderingQuestion::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 1056 of file class.assOrderingQuestion.php.

1060 $result = new ilUserQuestionResult($this, $active_id, $pass);
1061
1062 $maxStep = $this->lookupMaxStep($active_id, $pass);
1063 if ($maxStep > 0) {
1064 $data = $this->db->queryF(
1065 "SELECT value1, value2 FROM tst_solutions WHERE active_fi = %s AND pass = %s AND question_fi = %s AND step = %s ORDER BY value1 ASC ",
1066 ["integer", "integer", "integer","integer"],
1067 [$active_id, $pass, $this->getId(), $maxStep]
1068 );
1069 } else {
1070 $data = $this->db->queryF(
1071 "SELECT value1, value2 FROM tst_solutions WHERE active_fi = %s AND pass = %s AND question_fi = %s ORDER BY value1 ASC ",
1072 ["integer", "integer", "integer"],
1073 [$active_id, $pass, $this->getId()]
1074 );
1075 }
1076
1077 $elements = [];
1078 while ($row = $this->db->fetchAssoc($data)) {
1079 $newKey = explode(":", $row["value2"]);
1080
1081 foreach ($this->getOrderingElementList() as $answer) {
1082 // Images not supported
1083 if (!$this->isOrderingTypeNested()) {
1084 if ($answer->getSolutionIdentifier() == $row["value1"]) {
1085 $elements[$row["value2"]] = $answer->getSolutionIdentifier() + 1;
1086 break;
1087 }
1088 } else {
1089 if ($answer->getRandomIdentifier() == $newKey[0]) {
1090 $elements[$row["value1"]] = $answer->getSolutionIdentifier() + 1;
1091 break;
1092 }
1093 }
1094 }
1095 }
1096
1097 ksort($elements);
1098
1099 foreach (array_values($elements) as $element) {
1100 $result->addKeyValue($element, $element);
1101 }
1102
1103 $points = $this->calculateReachedPoints($active_id, $pass);
1104 $max_points = $this->getMaximumPoints();
1105
1106 $result->setReachedPercentage(($points / $max_points) * 100);
1107
1108 return $result;
1109 }
calculateReachedPoints(int $active_id, ?int $pass=null, bool $authorized_solution=true)
lookupMaxStep(int $active_id, int $pass)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...

◆ getValidOrderingTypes()

assOrderingQuestion::getValidOrderingTypes ( )
protected

Definition at line 211 of file class.assOrderingQuestion.php.

211 : array
212 {
213 return [
218 ];
219 }

◆ hasOrderingTypeUploadSupport()

assOrderingQuestion::hasOrderingTypeUploadSupport ( )

Definition at line 294 of file class.assOrderingQuestion.php.

294 : bool
295 {
296 return $this->isImageOrderingType();
297 }

◆ initOrderingElementAuthoringProperties()

assOrderingQuestion::initOrderingElementAuthoringProperties ( ilFormPropertyGUI  $formField)
Parameters
ilAssOrderingTextsInputGUI | ilAssOrderingImagesInputGUI | ilAssNestedOrderingElementsInputGUI$formField

Definition at line 891 of file class.assOrderingQuestion.php.

891 : void
892 {
893 switch (true) {
894 case $formField instanceof ilAssNestedOrderingElementsInputGUI:
895 $formField->setInteractionEnabled(true);
896 $formField->setNestingEnabled($this->isOrderingTypeNested());
897 break;
898
899 case $formField instanceof ilAssOrderingTextsInputGUI:
900 case $formField instanceof ilAssOrderingImagesInputGUI:
901 default:
902
903 $formField->setEditElementOccuranceEnabled(true);
904 $formField->setEditElementOrderEnabled(true);
905 }
906 }

Referenced by ilAssOrderingQuestionAuthoringFormGUI\renewOrderingElementInput().

+ Here is the caller graph for this function:

◆ initOrderingElementFormFieldLabels()

assOrderingQuestion::initOrderingElementFormFieldLabels ( ilFormPropertyGUI  $formField)
Parameters
ilFormPropertyGUI$formField

Definition at line 911 of file class.assOrderingQuestion.php.

911 : void
912 {
913 $formField->setInfo($this->lng->txt('ordering_answer_sequence_info'));
914 $formField->setTitle($this->lng->txt('answers'));
915 }

References ILIAS\Repository\lng(), ilFormPropertyGUI\setInfo(), and ilFormPropertyGUI\setTitle().

+ Here is the call graph for this function:

◆ isComplete()

assOrderingQuestion::isComplete ( )

Reimplemented from assQuestion.

Definition at line 76 of file class.assOrderingQuestion.php.

76 : bool
77 {
78 $elements_list = $this->getOrderingElementList()->getElements();
79 if ($elements_list === [] && $this->element_list_for_deferred_saving !== null) {
80 $elements_list = $this->element_list_for_deferred_saving->getElements();
81 }
82 $elements = array_filter(
83 $elements_list,
84 fn($element) => trim($element->getContent()) != ''
85 );
86
87 $has_at_least_two_elements = count($elements) > 1;
88
89 $complete = $this->getAuthor()
90 && $this->getTitle()
91 && $this->getQuestion()
92 && $this->getMaximumPoints()
93 && $has_at_least_two_elements;
94
95 return $complete;
96 }

References assQuestion\getAuthor(), getMaximumPoints(), getOrderingElementList(), assQuestion\getQuestion(), and assQuestion\getTitle().

+ Here is the call graph for this function:

◆ isImageFileStored()

assOrderingQuestion::isImageFileStored (   $imageFilename)

Definition at line 581 of file class.assOrderingQuestion.php.

581 : bool
582 {
583 if (!strlen($imageFilename)) {
584 return false;
585 }
586
587 if (!file_exists($this->getImagePath() . $imageFilename)) {
588 return false;
589 }
590
591 return is_file($this->getImagePath() . $imageFilename);
592 }

◆ isImageOrderingType()

assOrderingQuestion::isImageOrderingType ( )

Definition at line 243 of file class.assOrderingQuestion.php.

243 : bool
244 {
245 $with_images = [
248 ];
249 return in_array($this->getOrderingType(), $with_images);
250 }

Referenced by ilAssOrderingQuestionAuthoringFormGUI\addSpecificOrderingQuestionCommandButtons().

+ Here is the caller graph for this function:

◆ isImageReplaced()

assOrderingQuestion::isImageReplaced ( ilAssOrderingElement  $newElement,
ilAssOrderingElement  $oldElement 
)

Definition at line 594 of file class.assOrderingQuestion.php.

594 : bool
595 {
596 if (!$this->hasOrderingTypeUploadSupport()) {
597 return false;
598 }
599
600 if (!$newElement->getContent()) {
601 return false;
602 }
603
604 return $newElement->getContent() != $oldElement->getContent();
605 }

References ilAssOrderingElement\getContent().

+ Here is the call graph for this function:

◆ isOrderingTypeNested()

assOrderingQuestion::isOrderingTypeNested ( )

Definition at line 234 of file class.assOrderingQuestion.php.

234 : bool
235 {
236 $nested = [
239 ];
240 return in_array($this->getOrderingType(), $nested);
241 }

◆ loadFromDb()

assOrderingQuestion::loadFromDb (   $question_id)

Loads a assOrderingQuestion object from a database.

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

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

123 : void
124 {
125 $result = $this->db->queryF(
126 "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",
127 ["integer"],
128 [$question_id]
129 );
130 if ($result->numRows() == 1) {
131 $data = $this->db->fetchAssoc($result);
132 $this->setId($question_id);
133 $this->setObjId($data["obj_fi"]);
134 $this->setTitle((string) $data["title"]);
135 $this->setComment((string) $data["description"]);
136 $this->setOriginalId($data["original_id"]);
137 $this->setAuthor($data["author"]);
138 $this->setNrOfTries($data['nr_of_tries']);
139 $this->setPoints($data["points"]);
140 $this->setOwner($data["owner"]);
141 $this->setQuestion(ilRTE::_replaceMediaObjectImageSrc((string) $data["question_text"], 1));
142 $this->ordering_type = $data["ordering_type"] !== null ? (int) $data["ordering_type"] : self::OQ_TERMS;
143 if ($data['thumb_geometry'] !== null && $data['thumb_geometry'] >= $this->getMinimumThumbSize()) {
144 $this->setThumbSize($data['thumb_geometry']);
145 }
146 $this->element_height = $data["element_height"] ? (int) $data['element_height'] : null;
147
148 try {
152 }
153
154 try {
155 $this->setAdditionalContentEditingMode($data['add_cont_edit_mode']);
157 }
158 }
159
160 parent::loadFromDb($question_id);
161 }
getAdditionalTableName()
Returns the name of the additional question data table in the database.
setOriginalId(?int $original_id)
setId(int $id=-1)
setAdditionalContentEditingMode(?string $additionalContentEditingMode)
setQuestion(string $question="")
setAuthor(string $author="")
setThumbSize(int $a_size)
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(), getAdditionalTableName(), ilAssQuestionLifecycle\getDraftInstance(), ilAssQuestionLifecycle\getInstance(), assQuestion\getMinimumThumbSize(), ILIAS\Repository\int(), assQuestion\setAdditionalContentEditingMode(), assQuestion\setAuthor(), assQuestion\setComment(), assQuestion\setId(), assQuestion\setLifecycle(), assQuestion\setNrOfTries(), assQuestion\setObjId(), assQuestion\setOriginalId(), assQuestion\setOwner(), assQuestion\setPoints(), assQuestion\setQuestion(), assQuestion\setThumbSize(), and assQuestion\setTitle().

+ Here is the call graph for this function:

◆ rebuildThumbnails()

assOrderingQuestion::rebuildThumbnails ( )

Definition at line 794 of file class.assOrderingQuestion.php.

794 : void
795 {
796 if ($this->isImageOrderingType()) {
797 foreach ($this->getOrderElements() as $orderingElement) {
798 if ($orderingElement->getContent() !== '') {
799 $this->generateThumbForFile($this->getImagePath(), $orderingElement->getContent());
800 }
801 }
802 }
803 }
getOrderElements()
Returns the answers array.

◆ saveAdditionalQuestionDataToDb()

assOrderingQuestion::saveAdditionalQuestionDataToDb ( )

Saves a record to the question types additional data table.

Returns
mixed

Implements ilObjQuestionScoringAdjustable.

Definition at line 692 of file class.assOrderingQuestion.php.

693 {
694 // save additional data
695 $this->db->manipulateF(
696 "DELETE FROM " . $this->getAdditionalTableName() . " WHERE question_fi = %s",
697 ["integer"],
698 [$this->getId()]
699 );
700
701 $this->db->manipulateF(
702 "INSERT INTO " . $this->getAdditionalTableName() . " (question_fi, ordering_type, thumb_geometry, element_height)
703 VALUES (%s, %s, %s, %s)",
704 ["integer", "text", "integer", "integer"],
705 [
706 $this->getId(),
707 $this->ordering_type,
708 $this->getThumbSize(),
709 ($this->getElementHeight() > 20) ? $this->getElementHeight() : null
710 ]
711 );
712 }

References ILIAS\Survey\Mode\getId().

Referenced by saveToDb().

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

◆ saveAnswerSpecificDataToDb()

assOrderingQuestion::saveAnswerSpecificDataToDb ( )

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

Returns
mixed

Implements ilObjAnswerScoringAdjustable.

Definition at line 720 of file class.assOrderingQuestion.php.

721 {
722 }

◆ savePreviewData()

assOrderingQuestion::savePreviewData ( ilAssQuestionPreviewSession  $previewSession)
protected

Reimplemented from assQuestion.

Definition at line 685 of file class.assOrderingQuestion.php.

685 : void
686 {
687 if ($this->validateSolutionSubmit()) {
688 $previewSession->setParticipantsSolution(serialize($this->getSolutionListFromPostSubmit()));
689 }
690 }

References ilAssQuestionPreviewSession\setParticipantsSolution().

+ Here is the call graph for this function:

◆ saveToDb()

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

Reimplemented from assQuestion.

Definition at line 106 of file class.assOrderingQuestion.php.

106 : void
107 {
110 parent::saveToDb();
111 if ($this->element_list_for_deferred_saving !== null) {
112 $this->setOrderingElementList($this->element_list_for_deferred_saving);
113 }
114 }
saveAdditionalQuestionDataToDb()
Saves a record to the question types additional data table.
setOrderingElementList(ilAssOrderingElementList $list)
saveQuestionDataToDb(?int $original_id=null)

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

+ Here is the call graph for this function:

◆ saveWorkingData()

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

Reimplemented from assQuestion.

Definition at line 656 of file class.assOrderingQuestion.php.

660 : bool {
661 if ($this->questionpool_request->raw('test_answer_changed') === null) {
662 return true;
663 }
664
665 if (is_null($pass)) {
666 $pass = ilObjTest::_getPass($active_id);
667 }
668
669 $this->getProcessLocker()->executeUserSolutionUpdateLockOperation(
670 function () use ($active_id, $pass, $authorized) {
671 $this->removeCurrentSolution($active_id, $pass, $authorized);
672
673 foreach ($this->getSolutionListFromPostSubmit() as $orderingElement) {
674 $value1 = $orderingElement->getStorageValue1($this->getOrderingType());
675 $value2 = $orderingElement->getStorageValue2($this->getOrderingType());
676
677 $this->saveCurrentSolution($active_id, $pass, $value1, trim((string) $value2), $authorized);
678 }
679 }
680 );
681
682 return true;
683 }
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.

◆ setContentType()

assOrderingQuestion::setContentType (   $ct)

Definition at line 252 of file class.assOrderingQuestion.php.

253 {
254 if (!in_array($ct, [
255 self::OQ_CT_PICTURES,
256 self::OQ_CT_TERMS
257 ])) {
258 throw new \InvalidArgumentException("use OQ content-type", 1);
259 }
260 if ($ct == self::OQ_CT_PICTURES) {
261 if ($this->isOrderingTypeNested()) {
262 $this->setOrderingType(self::OQ_NESTED_PICTURES);
263 } else {
264 $this->setOrderingType(self::OQ_PICTURES);
265 }
266 $this->setThumbSize($this->getThumbSize());
267 }
268 if ($ct == self::OQ_CT_TERMS) {
269 if ($this->isOrderingTypeNested()) {
270 $this->setOrderingType(self::OQ_NESTED_TERMS);
271 } else {
272 $this->setOrderingType(self::OQ_TERMS);
273 }
274 }
275 }
setOrderingType(int $ordering_type=self::OQ_TERMS)

◆ setElementHeight()

assOrderingQuestion::setElementHeight ( ?int  $a_height)

Definition at line 786 of file class.assOrderingQuestion.php.

786 : void
787 {
788 $this->element_height = ($a_height < 20) ? null : $a_height;
789 }

◆ setNestingType()

assOrderingQuestion::setNestingType ( bool  $nesting)

Definition at line 277 of file class.assOrderingQuestion.php.

278 {
279 if ($nesting) {
280 if ($this->isImageOrderingType()) {
281 $this->setOrderingType(self::OQ_NESTED_PICTURES);
282 } else {
283 $this->setOrderingType(self::OQ_NESTED_TERMS);
284 }
285 } else {
286 if ($this->isImageOrderingType()) {
287 $this->setOrderingType(self::OQ_PICTURES);
288 } else {
289 $this->setOrderingType(self::OQ_TERMS);
290 }
291 }
292 }

◆ setOrderingElementList()

assOrderingQuestion::setOrderingElementList ( ilAssOrderingElementList  $list)
Parameters
ilAssOrderingElementList$orderingElementList

Definition at line 427 of file class.assOrderingQuestion.php.

427 : void
428 {
429 if ($this->getId() <= 0) {
430 $this->element_list_for_deferred_saving = $list;
431 return;
432 }
433 $list = $list->withQuestionId($this->getId());
434 $elements = $list->getElements();
435 $nu = [];
436 foreach ($elements as $e) {
437 $nu[] = $list->ensureValidIdentifiers($e);
438 }
439 $this->getRepository()->updateOrderingList(
440 $list->withElements($nu)
441 );
442 }
ensureValidIdentifiers(ilAssOrderingElement $element)

References Vendor\Package\$e, ilAssOrderingElementList\ensureValidIdentifiers(), ilAssOrderingElementList\getElements(), ILIAS\Survey\Mode\getId(), ilAssOrderingElementList\withElements(), and ilAssOrderingElementList\withQuestionId().

Referenced by saveToDb().

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

◆ setOrderingType()

assOrderingQuestion::setOrderingType ( int  $ordering_type = self::OQ_TERMS)

Definition at line 221 of file class.assOrderingQuestion.php.

222 {
223 if (!in_array($ordering_type, $this->getValidOrderingTypes())) {
224 throw new \InvalidArgumentException('Must be valid ordering type.');
225 }
226 $this->ordering_type = $ordering_type;
227 }

◆ solutionValuesToLog()

assOrderingQuestion::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 1311 of file class.assOrderingQuestion.php.

1314 : array {
1315 if ($solution_values === []) {
1316 return [];
1317 }
1320 $this->fetchIndexedValuesFromValuePairs($solution_values)
1321 )->getElements()
1322 );
1323 }

◆ solutionValuesToText()

assOrderingQuestion::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 1325 of file class.assOrderingQuestion.php.

1325 : array
1326 {
1327 if ($solution_values === []) {
1328 return [];
1329 }
1332 $this->fetchIndexedValuesFromValuePairs($solution_values)
1333 )->getElements()
1334 );
1335 }

◆ storeImageFile()

assOrderingQuestion::storeImageFile ( string  $upload_file,
string  $upload_name 
)

Definition at line 608 of file class.assOrderingQuestion.php.

608 : ?string
609 {
610 $name_parts = explode(".", $upload_name);
611 $suffix = strtolower(array_pop($name_parts));
612 if (!in_array($suffix, self::VALID_UPLOAD_SUFFIXES)) {
613 return null;
614 }
615
616 $this->ensureImagePathExists();
617 $target_filename = $this->buildHashedImageFilename($upload_name, true);
618 $target_filepath = $this->getImagePath() . $target_filename;
619 if (ilFileUtils::moveUploadedFile($upload_file, $target_filename, $target_filepath)) {
620 $thumb_path = $this->getImagePath() . $this->getThumbPrefix() . $target_filename;
621 ilShellUtil::convertImage($target_filepath, $thumb_path, "JPEG", (string) $this->getThumbSize());
622
623 return $target_filename;
624 }
625
626 return null;
627 }
buildHashedImageFilename(string $plain_image_filename, bool $unique=false)
static moveUploadedFile(string $a_file, string $a_name, string $a_target, bool $a_raise_errors=true, string $a_mode="move_uploaded")
move uploaded file

References ilShellUtil\convertImage(), and ilFileUtils\moveUploadedFile().

+ Here is the call graph for this function:

◆ toJSON()

assOrderingQuestion::toJSON ( )

Returns a JSON representation of the question.

Reimplemented from assQuestion.

Definition at line 835 of file class.assOrderingQuestion.php.

835 : string
836 {
837 $result = [];
838 $result['id'] = $this->getId();
839 $result['type'] = (string) $this->getQuestionType();
840 $result['title'] = $this->getTitleForHTMLOutput();
841 $result['question'] = $this->formatSAQuestion($this->getQuestion());
842 $result['nr_of_tries'] = $this->getNrOfTries();
843 $result['shuffle'] = true;
844 $result['points'] = $this->getPoints();
845 $result['feedback'] = [
846 'onenotcorrect' => $this->formatSAQuestion($this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(), false)),
847 'allcorrect' => $this->formatSAQuestion($this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(), true))
848 ];
849 if ($this->getOrderingType() == self::OQ_PICTURES) {
850 $result['path'] = $this->getImagePathWeb();
851 }
852
853 $counter = 1;
854 $answers = [];
855 foreach ($this->getOrderingElementList() as $orderingElement) {
856 $answers[$counter] = $orderingElement->getContent();
857 $counter++;
858 }
859 $answers = $this->getShuffler()->transform($answers);
860 $arr = [];
861 foreach ($answers as $order => $answer) {
862 array_push($arr, [
863 "answertext" => (string) $answer,
864 "order" => (int) $order
865 ]);
866 }
867 $result['answers'] = $arr;
868
869 $mobs = ilObjMediaObject::_getMobsOfObject("qpl:html", $this->getId());
870 $result['mobs'] = $mobs;
871
872 return json_encode($result);
873 }
getQuestionType()
Returns the question type of the question.
static _getMobsOfObject(string $a_type, int $a_id, int $a_usage_hist_nr=0, string $a_lang="-")
$counter

References $counter, ilObjMediaObject\_getMobsOfObject(), and ILIAS\Survey\Mode\getId().

+ Here is the call graph for this function:

◆ toLog()

assOrderingQuestion::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 1263 of file class.assOrderingQuestion.php.

1263 : array
1264 {
1265 return [
1266 AdditionalInformationGenerator::KEY_QUESTION_TYPE => (string) $this->getQuestionType(),
1267 AdditionalInformationGenerator::KEY_QUESTION_TITLE => $this->getTitleForHTMLOutput(),
1268 AdditionalInformationGenerator::KEY_QUESTION_TEXT => $this->formatSAQuestion($this->getQuestion()),
1269 AdditionalInformationGenerator::KEY_QUESTION_ORDERING_NESTING_TYPE => array_reduce(
1271 static fn(string $string, string $lang_var) => $string . $additional_info->getTagForLangVar($lang_var),
1272 ''
1273 ),
1274 AdditionalInformationGenerator::KEY_QUESTION_REACHABLE_POINTS => $this->getPoints(),
1275 AdditionalInformationGenerator::KEY_QUESTION_ANSWER_OPTION => $this->getSolutionOutputForLog(),
1276 AdditionalInformationGenerator::KEY_FEEDBACK => [
1277 AdditionalInformationGenerator::KEY_QUESTION_FEEDBACK_ON_INCOMPLETE => $this->formatSAQuestion($this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(), false)),
1278 AdditionalInformationGenerator::KEY_QUESTION_FEEDBACK_ON_COMPLETE => $this->formatSAQuestion($this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(), true))
1279 ]
1280 ];
1281 }
getOrderingTypeLangVars(int $ordering_type)

References ILIAS\Test\Logging\AdditionalInformationGenerator\getTagForLangVar().

+ Here is the call graph for this function:

◆ updateImageFile()

assOrderingQuestion::updateImageFile ( string  $existing_image_name)

Definition at line 629 of file class.assOrderingQuestion.php.

629 : ?string
630 {
631 $existing_image_path = $this->getImagePath() . $existing_image_name;
632 $target_filename = $this->buildHashedImageFilename($existing_image_name, true);
633 $target_filepath = $this->getImagePath() . $target_filename;
634 if (ilFileUtils::rename($existing_image_path, $target_filepath)) {
635 unlink($this->getImagePath() . $this->getThumbPrefix() . $existing_image_name);
636 $thumb_path = $this->getImagePath() . $this->getThumbPrefix() . $target_filename;
637 ilShellUtil::convertImage($target_filepath, $thumb_path, "JPEG", (string) $this->getThumbSize());
638
639 return $target_filename;
640 }
641
642 return $existing_image_name;
643 }
static rename(string $a_source, string $a_target)

References ilShellUtil\convertImage(), and ilFileUtils\rename().

+ Here is the call graph for this function:

◆ validateSolutionSubmit()

assOrderingQuestion::validateSolutionSubmit ( )

Reimplemented from assQuestion.

Definition at line 645 of file class.assOrderingQuestion.php.

645 : bool
646 {
647 $submittedSolutionList = $this->getSolutionListFromPostSubmit();
648
649 if (!$submittedSolutionList->hasElements()) {
650 return true;
651 }
652
653 return $this->getOrderingElementList()->hasSameElementSetByRandomIdentifiers($submittedSolutionList);
654 }

Field Documentation

◆ $element_height

int assOrderingQuestion::$element_height = null

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

◆ $element_list_for_deferred_saving

ilAssOrderingElementList assOrderingQuestion::$element_list_for_deferred_saving = null
protected

Definition at line 63 of file class.assOrderingQuestion.php.

◆ $leveled_ordering

assOrderingQuestion::$leveled_ordering = []

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

◆ $old_ordering_depth

assOrderingQuestion::$old_ordering_depth = []

Definition at line 59 of file class.assOrderingQuestion.php.

◆ $oq_repository

OQRepository assOrderingQuestion::$oq_repository = null
protected

Definition at line 61 of file class.assOrderingQuestion.php.

Referenced by getRepository().

◆ $postSolutionOrderingElementList

ilAssOrderingElementList assOrderingQuestion::$postSolutionOrderingElementList = null
private

Definition at line 1012 of file class.assOrderingQuestion.php.

◆ HAS_SPECIFIC_FEEDBACK

const assOrderingQuestion::HAS_SPECIFIC_FEEDBACK = false
protected

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

◆ OQ_CT_PICTURES

const assOrderingQuestion::OQ_CT_PICTURES = 'pics'

Definition at line 52 of file class.assOrderingQuestion.php.

◆ OQ_CT_TERMS

const assOrderingQuestion::OQ_CT_TERMS = 'terms'

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

◆ OQ_NESTED_PICTURES

◆ OQ_NESTED_TERMS

◆ OQ_PICTURES

◆ OQ_TERMS

◆ ORDERING_ELEMENT_FORM_CMD_REMOVE_IMG

const assOrderingQuestion::ORDERING_ELEMENT_FORM_CMD_REMOVE_IMG = 'removeElementImage'

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

◆ ORDERING_ELEMENT_FORM_CMD_UPLOAD_IMG

const assOrderingQuestion::ORDERING_ELEMENT_FORM_CMD_UPLOAD_IMG = 'uploadElementImage'

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

◆ ORDERING_ELEMENT_FORM_FIELD_POSTVAR

◆ VALID_UPLOAD_SUFFIXES

const assOrderingQuestion::VALID_UPLOAD_SUFFIXES = ["jpg", "jpeg", "png", "gif"]

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