ILIAS  release_7 Revision v7.30-3-g800a261c036
All Data Structures Namespaces Files Functions Variables Modules Pages
assFileUpload Class Reference

This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Learning e.V. More...

+ Inheritance diagram for assFileUpload:
+ Collaboration diagram for assFileUpload:

Public Member Functions

 __construct ( $title="", $comment="", $author="", $owner=-1, $question="")
 assFileUpload constructor More...
 
 isComplete ()
 Returns true, if the question is complete for use. More...
 
 saveToDb ($original_id="")
 Saves a assFileUpload object to a database. More...
 
 saveAdditionalQuestionDataToDb ()
 Saves a record to the question types additional data table. More...
 
 loadFromDb ($question_id)
 Loads a assFileUpload object from a database. More...
 
 duplicate ($for_test=true, $title="", $author="", $owner="", $testObjId=null)
 Duplicates an assFileUpload. More...
 
 copyObject ($target_questionpool_id, $title="")
 Copies an assFileUpload object. More...
 
 createNewOriginalFromThisDuplicate ($targetParentId, $targetQuestionTitle="")
 
 getMaximumPoints ()
 Returns the maximum points, a learner can reach answering the question. More...
 
 calculateReachedPoints ($active_id, $pass=null, $authorizedSolution=true, $returndetails=false)
 Returns the points, a learner has reached answering the question. More...
 
 checkUpload ()
 Check file upload. More...
 
 getFileUploadPath ($test_id, $active_id, $question_id=null)
 Returns the filesystem path for file uploads. More...
 
 getFileUploadPathWeb ($test_id, $active_id, $question_id=null)
 Returns the file upload path for web accessible files of a question. More...
 
 getUploadedFiles ($active_id, $pass=null, $authorized=true)
 Returns the uploaded files for an active user in a given pass. More...
 
 getPreviewFileUploads (ilAssQuestionPreviewSession $previewSession)
 
 getUploadedFilesForWeb ($active_id, $pass)
 Returns the web accessible uploaded files for an active user in a given pass. More...
 
 getMaxFilesizeAsString ()
 Return the maximum allowed file size as string. More...
 
 getMaxFilesizeInBytes ()
 Return the maximum allowed file size in bytes. More...
 
 saveWorkingData ($active_id, $pass=null, $authorized=true)
 Saves the learners input of the question to the database. More...
 
 getUserSolutionPreferingIntermediate ($active_id, $pass=null)
 Get the user solution preferring the intermediate solution. More...
 
 removeIntermediateSolution ($active_id, $pass)
 Remove an intermediate soluton (overridden to remove unused fies) 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...
 
 deleteAnswers ($question_id)
 Deletes datasets from answers tables. More...
 
 getRTETextWithMediaObjects ()
 Collects all text in the question which could contain media objects which were created with the Rich Text Editor. More...
 
 setExportDetailsXLS ($worksheet, $startrow, $active_id, $pass)
 {} More...
 
 fromXML (&$item, &$questionpool_id, &$tst_id, &$tst_object, &$question_counter, &$import_mapping, array $solutionhints=[])
 Creates a question from a QTI file. More...
 
 toXML ($a_include_header=true, $a_include_binary=true, $a_shuffle=false, $test_output=false, $force_image_references=false)
 Returns a QTI xml representation of the question and sets the internal domxml variable with the DOM XML representation of the QTI xml representation. More...
 
 getBestSolution ($active_id, $pass)
 Returns the best solution for a given pass of a participant. More...
 
 getMaxSize ()
 Get max file size. More...
 
 setMaxSize ($a_value)
 Set max file size. More...
 
 getAllowedExtensionsArray ()
 Get allowed file extensions. More...
 
 getAllowedExtensions ()
 Get allowed file extensions. More...
 
 setAllowedExtensions ($a_value)
 Set allowed file extensions. More...
 
 __get ($value)
 Object getter. More...
 
 __set ($key, $value)
 Object setter. More...
 
 hasFileUploads ($test_id)
 Checks if file uploads exist for a given test and the original id of the question. More...
 
 deliverFileUploadZIPFile ($ref_id, $test_id, $test_title)
 Generates a ZIP file containing all file uploads for a given test and the original id of the question. More...
 
 isCompletionBySubmissionEnabled ()
 Checks whether completion by submission is enabled or not. More...
 
 setCompletionBySubmission ($bool)
 Enabled/Disable completion by submission. More...
 
 isAnswered ($active_id, $pass=null)
 returns boolean wether the question is answered during test pass or not More...
 
 isAutosaveable ()
 
 buildTestPresentationConfig ()
 Get the test question configuration Overridden from parent to disable the form change detection Otherwise just checking a file would delete it at navigation. More...
 
- Public Member Functions inherited from assQuestion
 getShuffler ()
 
 setShuffler (ilArrayElementShuffler $shuffler)
 
 setProcessLocker ($processLocker)
 
 getProcessLocker ()
 
 fromXML (&$item, &$questionpool_id, &$tst_id, &$tst_object, &$question_counter, &$import_mapping, array $solutionhints=[])
 Receives parameters from a QTI parser and creates a valid ILIAS question object. More...
 
 toXML ($a_include_header=true, $a_include_binary=true, $a_shuffle=false, $test_output=false, $force_image_references=false)
 Returns a QTI xml representation of the question. More...
 
 isComplete ()
 Returns true, if a question is complete for use. More...
 
 questionTitleExists ($questionpool_id, $title)
 Returns TRUE if the question title exists in the database. More...
 
 setTitle ($title="")
 Sets the title string of the assQuestion object. More...
 
 setId ($id=-1)
 Sets the id of the assQuestion object. More...
 
 setTestId ($id=-1)
 Sets the test id of the assQuestion object. More...
 
 setComment ($comment="")
 Sets the comment string of the assQuestion object. More...
 
 setOutputType ($outputType=OUTPUT_HTML)
 Sets the output type. More...
 
 setShuffle ($shuffle=true)
 Sets the shuffle flag. More...
 
 setEstimatedWorkingTime ($hour=0, $min=0, $sec=0)
 Sets the estimated working time of a question from given hour, minute and second. More...
 
 setEstimatedWorkingTimeFromDurationString ($durationString)
 Sets the estimated working time of a question from a given datetime string. More...
 
 keyInArray ($searchkey, $array)
 returns TRUE if the key occurs in an array More...
 
 setAuthor ($author="")
 Sets the authors name of the assQuestion object. More...
 
 setOwner ($owner="")
 Sets the creator/owner ID of the assQuestion object. More...
 
 getTitle ()
 Gets the title string of the assQuestion object. More...
 
 getTitleFilenameCompliant ()
 returns the object title prepared to be used as a filename More...
 
 getId ()
 Gets the id of the assQuestion object. More...
 
 getShuffle ()
 Gets the shuffle flag. More...
 
 getTestId ()
 Gets the test id of the assQuestion object. More...
 
 getComment ()
 Gets the comment string of the assQuestion object. More...
 
 getOutputType ()
 Gets the output type. More...
 
 getDescriptionForHTMLOutput ()
 
 supportsJavascriptOutput ()
 Returns true if the question type supports JavaScript output. More...
 
 supportsNonJsOutput ()
 
 requiresJsSwitch ()
 
 getEstimatedWorkingTime ()
 Gets the estimated working time of a question. More...
 
 getAuthor ()
 Gets the authors name of the assQuestion object. More...
 
 getAuthorForHTMLOutput ()
 
 getOwner ()
 Gets the creator/owner ID of the assQuestion object. More...
 
 getObjId ()
 Get the object id of the container object. More...
 
 setObjId ($obj_id=0)
 Set the object id of the container object. More...
 
 getLifecycle ()
 
 setLifecycle (ilAssQuestionLifecycle $lifecycle)
 
 setExternalId ($external_id)
 
 getExternalId ()
 
 getSuggestedSolutionOutput ()
 
_getSuggestedSolution ($question_id, $subquestion_index=0)
 Returns a suggested solution for a given subquestion index. More...
 
 getSuggestedSolutions ()
 Return the suggested solutions. More...
 
 getReachedPoints ($active_id, $pass=null)
 Returns the points, a learner has reached answering the question This is the fast way to get the points directly from the database. More...
 
 getMaximumPoints ()
 Returns the maximum points, a learner can reach answering the question. More...
 
 getAdjustedReachedPoints ($active_id, $pass=null, $authorizedSolution=true)
 returns the reached points ... More...
 
 calculateResultsFromSolution ($active_id, $pass=null, $obligationsEnabled=false)
 Calculates the question results from a previously saved question solution. More...
 
 persistWorkingState ($active_id, $pass=null, $obligationsEnabled=false, $authorized=true)
 persists the working state for current testactive and testpass More...
 
 persistPreviewState (ilAssQuestionPreviewSession $previewSession)
 persists the preview state for current user and question More...
 
 validateSolutionSubmit ()
 
 saveWorkingData ($active_id, $pass=null, $authorized=true)
 Saves the learners input of the question to the database. More...
 
 moveUploadedMediaFile ($file, $name)
 Move an uploaded media file to an public accessible temp dir to present it. More...
 
 getSuggestedSolutionPath ()
 Returns the path for a suggested solution. More...
 
 getJavaPath ()
 Returns the image path for web accessable images of a question. More...
 
 getImagePath ($question_id=null, $object_id=null)
 Returns the image path for web accessable images of a question. More...
 
 buildImagePath ($questionId, $parentObjectId)
 
 getFlashPath ()
 Returns the image path for web accessable flash files of a question. More...
 
 getJavaPathWeb ()
 Returns the web image path for web accessable java applets of a question. More...
 
 getSuggestedSolutionPathWeb ()
 Returns the web path for a suggested solution. More...
 
 getImagePathWeb ()
 Returns the web image path for web accessable images of a question. More...
 
 getFlashPathWeb ()
 Returns the web image path for web accessable flash applications of a question. More...
 
 getTestOutputSolutions ($activeId, $pass)
 
 getUserSolutionPreferingIntermediate ($active_id, $pass=null)
 
 getSolutionValues ($active_id, $pass=null, $authorized=true)
 Loads solutions of a given user from the database an returns it. More...
 
 isInUse ($question_id="")
 Checks whether the question is in use or not. More...
 
 isClone ($question_id="")
 Checks whether the question is a clone of another question or not. More...
 
 pcArrayShuffle ($array)
 Shuffles the values of a given array. 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...
 
 deleteAnswers ($question_id)
 Deletes datasets from answers tables. More...
 
 deleteAdditionalTableData ($question_id)
 Deletes datasets from the additional question table in the database. More...
 
 delete ($question_id)
 Deletes a question and all materials from the database. More...
 
 getTotalAnswers ()
 get total number of answers More...
 
 _getTotalAnswers ($a_q_id)
 get number of answers for question id (static) note: do not use $this inside this method More...
 
 copyXHTMLMediaObjectsOfQuestion ($a_q_id)
 
 syncXHTMLMediaObjectsOfQuestion ()
 
 createPageObject ()
 create page object of question More...
 
 copyPageOfQuestion ($a_q_id)
 
 getPageOfQuestion ()
 
 setOriginalId ($original_id)
 
 getOriginalId ()
 
 fixSvgToPng ($imageFilenameContainingString)
 
 fixUnavailableSkinImageSources ($html)
 
 loadFromDb ($question_id)
 Loads the question from the database. More...
 
 createNewQuestion ($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 ($original_id="")
 
 saveToDb ($original_id="")
 Saves the question to the database. More...
 
 setNewOriginalId ($newId)
 
 deleteSuggestedSolutions ()
 Deletes all suggestes solutions in the database. More...
 
 getSuggestedSolution ($subquestion_index=0)
 Returns a suggested solution for a given subquestion index. More...
 
 getSuggestedSolutionTitle ($subquestion_index=0)
 Returns the title of a suggested solution at a given subquestion_index. More...
 
 setSuggestedSolution ($solution_id="", $subquestion_index=0, $is_import=false)
 Sets a suggested solution for the question. More...
 
 _resolveInternalLink ($internal_link)
 
 _resolveIntLinks ($question_id)
 
 syncWithOriginal ()
 
 _questionExists ($question_id)
 Returns true if the question already exists in the database. More...
 
 _questionExistsInPool ($question_id)
 Returns true if the question already exists in the database and is assigned to a question pool. More...
 
 getPoints ()
 Returns the maximum available points for the question. More...
 
 setPoints ($a_points)
 Sets the maximum available points for the question. More...
 
 getSolutionMaxPass ($active_id)
 Returns the maximum pass a users question solution. More...
 
 calculateReachedPoints ($active_id, $pass=null, $authorizedSolution=true, $returndetails=false)
 Returns the points, a learner has reached answering the question. More...
 
 deductHintPointsFromReachedPoints (ilAssQuestionPreviewSession $previewSession, $reachedPoints)
 
 calculateReachedPointsFromPreviewSession (ilAssQuestionPreviewSession $previewSession)
 
 isPreviewSolutionCorrect (ilAssQuestionPreviewSession $previewSession)
 
 adjustReachedPointsByScoringOptions ($points, $active_id, $pass=null)
 Adjust the given reached points by checks for all special scoring options in the test container. More...
 
 isHTML ($a_text)
 Checks if a given string contains HTML or not. More...
 
 prepareTextareaOutput ($txt_output, $prepare_for_latex_output=false, $omitNl2BrWhenTextArea=false)
 Prepares a string for a text area output in tests. More...
 
 QTIMaterialToString ($a_material)
 Reads an QTI material tag an creates a text string. More...
 
 addQTIMaterial (&$a_xml_writer, $a_material, $close_material_tag=true, $add_mobs=true)
 Creates a QTI material tag from a plain text or xhtml text. More...
 
 buildHashedImageFilename ($plain_image_filename, $unique=false)
 
 getQuestion ()
 Gets the question string of the question object. More...
 
 setQuestion ($question="")
 Sets the question string of the question object. More...
 
 getQuestionForHTMLOutput ()
 
 getQuestionType ()
 Returns the question type of the question. More...
 
 getQuestionTypeID ()
 Returns the question type of the question. More...
 
 cleanupMediaObjectUsage ()
 synchronises appearances of media objects in the question with media object usage table More...
 
getInstances ()
 Gets all instances of the question. More...
 
 getActiveUserData ($active_id)
 Returns the user id and the test id for a given active id. More...
 
 setExportDetailsXLS ($worksheet, $startrow, $active_id, $pass)
 Creates an Excel worksheet for the detailed cumulated results of this question. More...
 
 __get ($value)
 Object getter. More...
 
 __set ($key, $value)
 Object setter. More...
 
 getNrOfTries ()
 
 setNrOfTries ($a_nr_of_tries)
 
 setExportImagePath ($a_path)
 
 formatSAQuestion ($a_q)
 Format self assessment question. More...
 
 setPreventRteUsage ($a_val)
 Set prevent rte usage. More...
 
 getPreventRteUsage ()
 Get prevent rte usage. More...
 
 migrateContentForLearningModule (ilAssSelfAssessmentMigrator $migrator)
 
 setSelfAssessmentEditingMode ($a_selfassessmenteditingmode)
 Set Self-Assessment Editing Mode. More...
 
 getSelfAssessmentEditingMode ()
 Get Self-Assessment Editing Mode. More...
 
 setDefaultNrOfTries ($a_defaultnroftries)
 Set Default Nr of Tries. More...
 
 getDefaultNrOfTries ()
 Get Default Nr of Tries. More...
 
 syncSkillAssignments ($srcParentId, $srcQuestionId, $trgParentId, $trgQuestionId)
 
 isAnswered ($active_id, $pass=null)
 returns boolean wether the question is answered during test pass or not More...
 
 isAutosaveable ()
 
 getAdditionalContentEditingMode ()
 getter for additional content editing mode for this question More...
 
 setAdditionalContentEditingMode ($additinalContentEditingMode)
 setter for additional content editing mode for this question More...
 
 isAdditionalContentEditingModePageObject ()
 isser for additional "pageobject" content editing mode More...
 
 isValidAdditionalContentEditingMode ($additionalContentEditingMode)
 returns the fact wether the passed additional content mode is valid or not More...
 
 getValidAdditionalContentEditingModes ()
 getter for valid additional content editing modes More...
 
 addQuestionChangeListener (ilQuestionChangeListener $listener)
 
 getQuestionChangeListeners ()
 
 getHtmlUserSolutionPurifier ()
 
 getHtmlQuestionContentPurifier ()
 
 setLastChange ($lastChange)
 
 getLastChange ()
 
 removeIntermediateSolution ($active_id, $pass)
 
 removeCurrentSolution ($active_id, $pass, $authorized=true)
 
 saveCurrentSolution ($active_id, $pass, $value1, $value2, $authorized=true, $tstamp=null)
 
 updateCurrentSolution ($solutionId, $value1, $value2, $authorized=true)
 
 updateCurrentSolutionsAuthorization ($activeId, $pass, $authorized, $keepTime=false)
 
 setStep ($step)
 
 getStep ()
 
 toJSON ()
 
 duplicate ($for_test=true, $title="", $author="", $owner="", $testObjId=null)
 
 intermediateSolutionExists ($active_id, $pass)
 
 authorizedSolutionExists ($active_id, $pass)
 
 authorizedOrIntermediateSolutionExists ($active_id, $pass)
 
 isAddableAnswerOptionValue ($qIndex, $answerOptionValue)
 
 addAnswerOptionValue ($qIndex, $answerOptionValue, $points)
 
 removeAllExistingSolutions ()
 
 removeExistingSolutions ($activeId, $pass)
 
 resetUsersAnswer ($activeId, $pass)
 
 removeResultRecord ($activeId, $pass)
 
 fetchValuePairsFromIndexedValues (array $indexedValues)
 
 fetchIndexedValuesFromValuePairs (array $valuePairs)
 
 areObligationsToBeConsidered ()
 
 setObligationsToBeConsidered ($obligationsToBeConsidered)
 
 updateTimestamp ()
 
 getTestPresentationConfig ()
 Get the test question configuration (initialised once) More...
 
 savePartial ()
 
 isInActiveTest ()
 

Static Public Member Functions

static isObligationPossible ($questionId)
 returns boolean wether it is possible to set this question type as obligatory or not considering the current question configuration More...
 
- Static Public Member Functions inherited from assQuestion
static setForcePassResultUpdateEnabled ($forcePassResultsUpdateEnabled)
 
static isForcePassResultUpdateEnabled ()
 
static isAllowedImageMimeType ($mimeType)
 
static fetchMimeTypeIdentifier ($contentTypeString)
 
static getAllowedFileExtensionsForMimeType ($mimeType)
 
static isAllowedImageFileExtension ($mimeType, $fileExtension)
 
static getAllowedImageMaterialFileExtensions ()
 
static _getMaximumPoints ($question_id)
 Returns the maximum points, a learner can reach answering the question. More...
 
static _getQuestionInfo ($question_id)
 Returns question information from the database. More...
 
static _getSuggestedSolutionCount ($question_id)
 Returns the number of suggested solutions associated with a question. More...
 
static _getSuggestedSolutionOutput ($question_id)
 Returns the output of the suggested solution. More...
 
static _getReachedPoints ($active_id, $question_id, $pass=null)
 Returns the points, a learner has reached answering the question. More...
 
static _updateTestResultCache ($active_id, ilAssQuestionProcessLocker $processLocker=null)
 Move this to a proper place. More...
 
static logAction ($logtext="", $active_id="", $question_id="")
 Logs an action into the Test&Assessment log. More...
 
static getQuestionTypeFromDb ($question_id)
 get question type for question id More...
 
static _getTotalRightAnswers ($a_q_id)
 get number of answers for question id (static) note: do not use $this inside this method More...
 
static _getTitle ($a_q_id)
 Returns the title of a question. More...
 
static _getQuestionText ($a_q_id)
 Returns question text. More...
 
static isFileAvailable ($file)
 
static _getQuestionType ($question_id)
 Returns the question type of a question with a given id. More...
 
static _getQuestionTitle ($question_id)
 Returns the question title of a question with a given id. More...
 
static saveOriginalId ($questionId, $originalId)
 
static resetOriginalId ($questionId)
 
static _getInternalLinkHref ($target="")
 
static _getOriginalId ($question_id)
 Returns the original id of a question. More...
 
static originalQuestionExists ($questionId)
 
static _instanciateQuestion ($question_id)
 Creates an instance of a question with a given question id. More...
 
static _instantiateQuestion ($question_id)
 
static _getSolutionMaxPass ($question_id, $active_id)
 Returns the maximum pass a users question solution. More...
 
static _isWriteable ($question_id, $user_id)
 Returns true if the question is writeable by a certain user. More...
 
static _isUsedInRandomTest ($question_id="")
 Checks whether the question is used in a random test or not. More...
 
static _isWorkedThrough ($active_id, $question_id, $pass=null)
 Returns true if the question was worked through in the given pass Worked through means that the user entered at least one value. More...
 
static _areAnswered ($a_user_id, $a_question_ids)
 Checks if an array of question ids is answered by an user or not. More...
 
static _setReachedPoints ($active_id, $question_id, $points, $maxpoints, $pass, $manualscoring, $obligationsEnabled)
 Sets the points, a learner has reached answering the question Additionally objective results are updated. More...
 
static _needsManualScoring ($question_id)
 
static _includeClass ($question_type, $gui=0)
 Include the php class file for a given question type. More...
 
static getGuiClassNameByQuestionType ($questionType)
 
static getObjectClassNameByQuestionType ($questionType)
 
static getFeedbackClassNameByQuestionType ($questionType)
 
static isCoreQuestionType ($questionType)
 
static includeCoreClass ($questionType, $withGuiClass)
 
static includePluginClass ($questionType, $withGuiClass)
 
static _getQuestionTypeName ($type_tag)
 Return the translation for a given question type tag. More...
 
static & _instanciateQuestionGUI ($question_id)
 Creates an instance of a question gui with a given question id. More...
 
static instantiateQuestionGUI ($a_question_id)
 Creates an instance of a question gui with a given question id. More...
 
static _questionExistsInTest ($question_id, $test_id)
 
static lookupParentObjId ($questionId)
 ilDBInterface $ilDB More...
 
static lookupOriginalParentObjId ($originalQuestionId)
 returns the parent object id for given original question id (should be a qpl id, but theoretically it can be a tst id, too) More...
 
static isObligationPossible ($questionId)
 returns boolean wether it is possible to set this question type as obligatory or not considering the current question configuration More...
 
static implodeKeyValues ($keyValues)
 
static explodeKeyValues ($keyValues)
 
static setResultGateway ($resultGateway)
 
static getResultGateway ()
 
static sumTimesInISO8601FormatH_i_s_Extended ($time1, $time2)
 
static convertISO8601FormatH_i_s_ExtendedToSeconds ($time)
 
static missingResultRecordExists ($activeId, $pass, $questionIds)
 
static getQuestionsMissingResultRecord ($activeId, $pass, $questionIds)
 
static lookupResultRecordExist ($activeId, $questionId, $pass)
 

Data Fields

const REUSE_FILES_TBL_POSTVAR = 'reusefiles'
 
const DELETE_FILES_TBL_POSTVAR = 'deletefiles'
 
- Data Fields inherited from assQuestion
const IMG_MIME_TYPE_JPG = 'image/jpeg'
 
const IMG_MIME_TYPE_PNG = 'image/png'
 
const IMG_MIME_TYPE_GIF = 'image/gif'
 
const ADDITIONAL_CONTENT_EDITING_MODE_RTE = 'default'
 constant for additional content editing mode "default" More...
 
const ADDITIONAL_CONTENT_EDITING_MODE_IPE = 'pageobject'
 constant for additional content editing mode "pageobject" More...
 
 $feedbackOBJ = null
 
 $prevent_rte_usage = false
 
 $selfassessmenteditingmode = false
 
 $defaultnroftries = 0
 
 $questionActionCmd = 'handleQuestionAction'
 
const KEY_VALUES_IMPLOSION_SEPARATOR = ':'
 

Protected Member Functions

 calculateReachedPointsForSolution ($userSolution)
 
 getPreviewFileUploadPath ($userId)
 Returns the filesystem path for file uploads. More...
 
 getPreviewFileUploadPathWeb ($userId)
 Returns the filesystem path for file uploads. More...
 
 deleteUploadedFiles ($files, $test_id, $active_id, $authorized)
 Delete uploaded files. More...
 
 deletePreviewFileUploads ($userId, $userSolution, $files)
 
 savePreviewData (ilAssQuestionPreviewSession $previewSession)
 
 handleSubmission ($active_id, $pass, $obligationsAnswered, $authorized)
 This method is called after an user submitted one or more files. More...
 
 isFileDeletionAction ()
 
 isFileDeletionSubmitAvailable ()
 
 isFileReuseSubmitAvailable ()
 
 isFileReuseHandlingRequired ()
 
 isFileUploadAvailable ()
 
- Protected Member Functions inherited from assQuestion
 getQuestionAction ()
 
 isNonEmptyItemListPostSubmission ($postSubmissionFieldname)
 
 ensureCurrentTestPass ($active_id, $pass)
 
 lookupCurrentTestPass ($active_id, $pass)
 
 lookupTestId ($active_id)
 
 log ($active_id, $langVar)
 
 savePreviewData (ilAssQuestionPreviewSession $previewSession)
 
 deletePageOfQuestion ($question_id)
 Deletes the page object of a question with a given ID. More...
 
 onDuplicate ($originalParentId, $originalQuestionId, $duplicateParentId, $duplicateQuestionId)
 Will be called when a question is duplicated (inside a question pool or for insertion in a test) More...
 
 beforeSyncWithOriginal ($origQuestionId, $dupQuestionId, $origParentObjId, $dupParentObjId)
 
 afterSyncWithOriginal ($origQuestionId, $dupQuestionId, $origParentObjId, $dupParentObjId)
 
 onCopy ($sourceParentId, $sourceQuestionId, $targetParentId, $targetQuestionId)
 Will be called when a question is copied (into another question pool) More...
 
 duplicateSuggestedSolutionFiles ($parent_id, $question_id)
 Duplicates the files of a suggested solution if the question is duplicated. More...
 
 syncSuggestedSolutionFiles ($original_id)
 Syncs the files of a suggested solution if the question is synced. More...
 
 copySuggestedSolutionFiles ($source_questionpool_id, $source_question_id)
 
 ensureNonNegativePoints ($points)
 
 purifyAndPrepareTextAreaOutput (string $content)
 
 getRTETextWithMediaObjects ()
 Collects all text in the question which could contain media objects which were created with the Rich Text Editor. More...
 
 getSelfAssessmentFormatter ()
 
 lmMigrateQuestionTypeGenericContent (ilAssSelfAssessmentMigrator $migrator)
 
 lmMigrateQuestionTypeSpecificContent (ilAssSelfAssessmentMigrator $migrator)
 
 duplicateQuestionHints ($originalQuestionId, $duplicateQuestionId)
 
 duplicateSkillAssignments ($srcParentId, $srcQuestionId, $trgParentId, $trgQuestionId)
 
 buildQuestionDataQuery ()
 
 getCurrentSolutionResultSet ($active_id, $pass, $authorized=true)
 Get a restulset for the current user solution for a this question by active_id and pass. More...
 
 removeSolutionRecordById ($solutionId)
 
 getSolutionRecordById ($solutionId)
 
 deleteDummySolutionRecord ($activeId, $passIndex)
 
 isDummySolutionRecord ($solutionRecord)
 
 deleteSolutionRecordByValues ($activeId, $passIndex, $authorized, $matchValues)
 
 duplicateIntermediateSolutionAuthorized ($activeId, $passIndex)
 
 forceExistingIntermediateSolution ($activeId, $passIndex, $considerDummyRecordCreation)
 
 buildTestPresentationConfig ()
 build basic test question configuration instance More...
 

Protected Attributes

 $maxsize
 
 $allowedextensions
 
 $completion_by_submission = false
 
- Protected Attributes inherited from assQuestion
 $id
 
 $title
 
 $comment
 
 $owner
 
 $author
 
 $question
 
 $points
 
 $est_working_time
 
 $shuffle
 
 $test_id
 
 $obj_id
 
 $ilias
 
 $tpl
 
 $lng
 
 $db
 
 $refinery
 
 $outputType = OUTPUT_JAVASCRIPT
 
 $suggested_solutions
 
 $original_id
 
 $page
 
 $external_id = ''
 
 $questionChangeListeners = array()
 
 $processLocker
 
 $step = null
 
 $lastChange
 
 $shuffler
 
 $testQuestionConfig
 
 $lifecycle
 

Additional Inherited Members

- Static Protected Member Functions inherited from assQuestion
static getNumExistingSolutionRecords ($activeId, $pass, $questionId)
 returns the number of existing solution records for the given test active / pass and given question id More...
 
static getKeyValuesImplosionSeparator ()
 
- Static Protected Attributes inherited from assQuestion
static $allowedFileExtensionsByMimeType
 
static $allowedCharsetsByMimeType
 
static $allowedImageMaterialFileExtensionsByMimeType
 
static $forcePassResultsUpdateEnabled = false
 
static $imageSourceFixReplaceMap
 

Detailed Description

This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Learning e.V.

ILIAS is licensed with the GPL-3.0, see https://www.gnu.org/licenses/gpl-3.0.en.html You should have received a copy of said license along with the source code, too.

If this is not the case or you just want to try ILIAS, you'll find us at: https://www.ilias.de https://github.com/ILIAS-eLearning Class for file upload 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
Maximilian Becker mbeck.nosp@m.er@d.nosp@m.ataba.nosp@m.y.de
Version
$Id$

Definition at line 35 of file class.assFileUpload.php.

Constructor & Destructor Documentation

◆ __construct()

assFileUpload::__construct (   $title = "",
  $comment = "",
  $author = "",
  $owner = -1,
  $question = "" 
)

assFileUpload constructor

The constructor takes possible arguments an creates an instance of the assFileUpload object.

Parameters
string$titleA title string to describe the question
string$commentA comment string to describe the question
string$authorA string containing the name of the questions author
integer$ownerA numerical ID to identify the owner/creator
string$questionThe question string of the single choice question
See also
assQuestion:__construct()

Definition at line 62 of file class.assFileUpload.php.

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

+ Here is the call graph for this function:

Member Function Documentation

◆ __get()

assFileUpload::__get (   $value)

Object getter.

Definition at line 1089 of file class.assFileUpload.php.

References getAllowedExtensions(), getMaxSize(), and isCompletionBySubmissionEnabled().

1090  {
1091  switch ($value) {
1092  case "maxsize":
1093  return $this->getMaxSize();
1094  break;
1095  case "allowedextensions":
1096  return $this->getAllowedExtensions();
1097  break;
1098  case 'completion_by_submission':
1099  return $this->isCompletionBySubmissionEnabled();
1100  break;
1101  default:
1102  return parent::__get($value);
1103  break;
1104  }
1105  }
getAllowedExtensions()
Get allowed file extensions.
getMaxSize()
Get max file size.
isCompletionBySubmissionEnabled()
Checks whether completion by submission is enabled or not.
+ Here is the call graph for this function:

◆ __set()

assFileUpload::__set (   $key,
  $value 
)

Object setter.

Definition at line 1110 of file class.assFileUpload.php.

References setAllowedExtensions(), setCompletionBySubmission(), and setMaxSize().

1111  {
1112  switch ($key) {
1113  case "maxsize":
1114  $this->setMaxSize($value);
1115  break;
1116  case "allowedextensions":
1117  $this->setAllowedExtensions($value);
1118  break;
1119  case 'completion_by_submission':
1120  $this->setCompletionBySubmission($value);
1121  break;
1122  default:
1123  parent::__set($key, $value);
1124  break;
1125  }
1126  }
setAllowedExtensions($a_value)
Set allowed file extensions.
setMaxSize($a_value)
Set max file size.
setCompletionBySubmission($bool)
Enabled/Disable completion by submission.
+ Here is the call graph for this function:

◆ buildTestPresentationConfig()

assFileUpload::buildTestPresentationConfig ( )

Get the test question configuration Overridden from parent to disable the form change detection Otherwise just checking a file would delete it at navigation.

Returns
ilTestQuestionConfig

Definition at line 1262 of file class.assFileUpload.php.

1264  {
1265  // hey: refactored identifiers
1266  return parent::buildTestPresentationConfig()
1267  // hey.
1268  ->setFormChangeDetectionEnabled(false);
1269  }

◆ calculateReachedPoints()

assFileUpload::calculateReachedPoints (   $active_id,
  $pass = null,
  $authorizedSolution = true,
  $returndetails = false 
)

Returns the points, a learner has reached answering the question.

The points are calculated from the given answers.

public

Parameters
integer$active_id
integer$pass
boolean$returndetails(deprecated !!)
Returns
integer/array $points/$details (array $details is deprecated !!)

Definition at line 303 of file class.assFileUpload.php.

References $data, $DIC, $pass, $result, assQuestion\getCurrentSolutionResultSet(), assQuestion\getPoints(), assQuestion\getSolutionMaxPass(), isCompletionBySubmissionEnabled(), and assQuestion\isDummySolutionRecord().

304  {
305  if ($returndetails) {
306  throw new ilTestException('return details not implemented for ' . __METHOD__);
307  }
308 
309  if ($this->isCompletionBySubmissionEnabled()) {
310  if (is_null($pass)) {
311  $pass = $this->getSolutionMaxPass($active_id);
312  }
313 
314  global $DIC;
315 
316  $result = $this->getCurrentSolutionResultSet($active_id, $pass, $authorizedSolution);
317 
318  while ($data = $DIC->database()->fetchAssoc($result)) {
319  if ($this->isDummySolutionRecord($data)) {
320  continue;
321  }
322 
323  return $this->getPoints();
324  }
325  }
326 
327  return 0;
328  }
$data
Definition: storeScorm.php:23
$result
getPoints()
Returns the maximum available points for the question.
getSolutionMaxPass($active_id)
Returns the maximum pass a users question solution.
Base Exception for all Exceptions relating to Modules/Test.
global $DIC
Definition: goto.php:24
isDummySolutionRecord($solutionRecord)
getCurrentSolutionResultSet($active_id, $pass, $authorized=true)
Get a restulset for the current user solution for a this question by active_id and pass...
isCompletionBySubmissionEnabled()
Checks whether completion by submission is enabled or not.
+ Here is the call graph for this function:

◆ calculateReachedPointsForSolution()

assFileUpload::calculateReachedPointsForSolution (   $userSolution)
protected

Definition at line 330 of file class.assFileUpload.php.

References assQuestion\getPoints(), and isCompletionBySubmissionEnabled().

331  {
332  if ($this->isCompletionBySubmissionEnabled() && count($userSolution)) {
333  return $this->getPoints();
334  }
335 
336  return 0;
337  }
getPoints()
Returns the maximum available points for the question.
isCompletionBySubmissionEnabled()
Checks whether completion by submission is enabled or not.
+ Here is the call graph for this function:

◆ checkUpload()

assFileUpload::checkUpload ( )

Check file upload.

Returns
boolean Input ok, true/false

Definition at line 344 of file class.assFileUpload.php.

References $filename, getAllowedExtensionsArray(), getMaxFilesizeInBytes(), ilUtil\sendFailure(), and ilUtil\virusHandling().

Referenced by savePreviewData(), and saveWorkingData().

345  {
346  $this->lng->loadLanguageModule("form");
347  // remove trailing '/'
348  $_FILES["upload"]["name"] = rtrim($_FILES["upload"]["name"], '/');
349 
350  $filename = $_FILES["upload"]["name"];
351  $filename_arr = pathinfo($_FILES["upload"]["name"]);
352  $suffix = $filename_arr["extension"];
353  $mimetype = $_FILES["upload"]["type"];
354  $size_bytes = $_FILES["upload"]["size"];
355  $temp_name = $_FILES["upload"]["tmp_name"];
356  $error = $_FILES["upload"]["error"];
357 
358  if ($size_bytes > $this->getMaxFilesizeInBytes()) {
359  ilUtil::sendFailure($this->lng->txt("form_msg_file_size_exceeds"), true);
360  return false;
361  }
362 
363  // error handling
364  if ($error > 0) {
365  switch ($error) {
366  case UPLOAD_ERR_INI_SIZE:
367  ilUtil::sendFailure($this->lng->txt("form_msg_file_size_exceeds"), true);
368  return false;
369  break;
370 
371  case UPLOAD_ERR_FORM_SIZE:
372  ilUtil::sendFailure($this->lng->txt("form_msg_file_size_exceeds"), true);
373  return false;
374  break;
375 
376  case UPLOAD_ERR_PARTIAL:
377  ilUtil::sendFailure($this->lng->txt("form_msg_file_partially_uploaded"), true);
378  return false;
379  break;
380 
381  case UPLOAD_ERR_NO_FILE:
382  ilUtil::sendFailure($this->lng->txt("form_msg_file_no_upload"), true);
383  return false;
384  break;
385 
386  case UPLOAD_ERR_NO_TMP_DIR:
387  ilUtil::sendFailure($this->lng->txt("form_msg_file_missing_tmp_dir"), true);
388  return false;
389  break;
390 
391  case UPLOAD_ERR_CANT_WRITE:
392  ilUtil::sendFailure($this->lng->txt("form_msg_file_cannot_write_to_disk"), true);
393  return false;
394  break;
395 
396  case UPLOAD_ERR_EXTENSION:
397  ilUtil::sendFailure($this->lng->txt("form_msg_file_upload_stopped_ext"), true);
398  return false;
399  break;
400  }
401  }
402 
403  // check suffixes
404  if (count($this->getAllowedExtensionsArray())) {
405  if (!strlen($suffix)) {
406  ilUtil::sendFailure($this->lng->txt("form_msg_file_missing_file_ext"), true);
407  return false;
408  }
409 
410  if (!in_array(strtolower($suffix), $this->getAllowedExtensionsArray())) {
411  ilUtil::sendFailure($this->lng->txt("form_msg_file_wrong_file_type"), true);
412  return false;
413  }
414  }
415 
416  // virus handling
417  if (strlen($temp_name)) {
418  $vir = ilUtil::virusHandling($temp_name, $filename);
419  if ($vir[0] == false) {
420  ilUtil::sendFailure($this->lng->txt("form_msg_file_virus_found") . "<br />" . $vir[1], true);
421  return false;
422  }
423  }
424  return true;
425  }
static virusHandling($a_file, $a_orig_name="", $a_clean=true)
scan file for viruses and clean files if possible
getAllowedExtensionsArray()
Get allowed file extensions.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
$filename
Definition: buildRTE.php:89
getMaxFilesizeInBytes()
Return the maximum allowed file size in bytes.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ copyObject()

assFileUpload::copyObject (   $target_questionpool_id,
  $title = "" 
)

Copies an assFileUpload object.

Definition at line 222 of file class.assFileUpload.php.

References assQuestion\$original_id, assQuestion\$title, assQuestion\_getOriginalId(), and assQuestion\getObjId().

223  {
224  if ($this->id <= 0) {
225  // The question has not been saved. It cannot be duplicated
226  return;
227  }
228  // duplicate the question in database
229  $clone = $this;
230  include_once("./Modules/TestQuestionPool/classes/class.assQuestion.php");
232  $clone->id = -1;
233  $source_questionpool_id = $this->getObjId();
234  $clone->setObjId($target_questionpool_id);
235  if ($title) {
236  $clone->setTitle($title);
237  }
238  $clone->saveToDb();
239 
240  // copy question page content
241  $clone->copyPageOfQuestion($original_id);
242  // copy XHTML media objects
243  $clone->copyXHTMLMediaObjectsOfQuestion($original_id);
244 
245  $clone->onCopy($source_questionpool_id, $original_id, $clone->getObjId(), $clone->getId());
246 
247  return $clone->id;
248  }
static _getOriginalId($question_id)
Returns the original id of a question.
getObjId()
Get the object id of the container object.
+ Here is the call graph for this function:

◆ createNewOriginalFromThisDuplicate()

assFileUpload::createNewOriginalFromThisDuplicate (   $targetParentId,
  $targetQuestionTitle = "" 
)

Definition at line 250 of file class.assFileUpload.php.

References assQuestion\$id, and assQuestion\getObjId().

251  {
252  if ($this->id <= 0) {
253  // The question has not been saved. It cannot be duplicated
254  return;
255  }
256 
257  include_once("./Modules/TestQuestionPool/classes/class.assQuestion.php");
258 
259  $sourceQuestionId = $this->id;
260  $sourceParentId = $this->getObjId();
261 
262  // duplicate the question in database
263  $clone = $this;
264  $clone->id = -1;
265 
266  $clone->setObjId($targetParentId);
267 
268  if ($targetQuestionTitle) {
269  $clone->setTitle($targetQuestionTitle);
270  }
271 
272  $clone->saveToDb();
273  // copy question page content
274  $clone->copyPageOfQuestion($sourceQuestionId);
275  // copy XHTML media objects
276  $clone->copyXHTMLMediaObjectsOfQuestion($sourceQuestionId);
277 
278  $clone->onCopy($sourceParentId, $sourceQuestionId, $clone->getObjId(), $clone->getId());
279 
280  return $clone->id;
281  }
getObjId()
Get the object id of the container object.
+ Here is the call graph for this function:

◆ deleteAnswers()

assFileUpload::deleteAnswers (   $question_id)

Deletes datasets from answers tables.

Parameters
integer$question_idThe question id which should be deleted in the answers table

Definition at line 954 of file class.assFileUpload.php.

955  {
956  }

◆ deletePreviewFileUploads()

assFileUpload::deletePreviewFileUploads (   $userId,
  $userSolution,
  $files 
)
protected

Definition at line 605 of file class.assFileUpload.php.

References $name, and getPreviewFileUploadPath().

Referenced by savePreviewData().

606  {
607  foreach ($files as $name) {
608  if (isset($userSolution[$name])) {
609  unset($userSolution[$name]);
610  @unlink($this->getPreviewFileUploadPath($userId) . $name);
611  }
612  }
613 
614  return $userSolution;
615  }
if($format !==null) $name
Definition: metadata.php:230
getPreviewFileUploadPath($userId)
Returns the filesystem path for file uploads.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ deleteUploadedFiles()

assFileUpload::deleteUploadedFiles (   $files,
  $test_id,
  $active_id,
  $authorized 
)
protected

Delete uploaded files.

Parameters
arrayArray with ID's of the file datasets

Definition at line 537 of file class.assFileUpload.php.

References $data, $DIC, $ilDB, $pass, $result, assQuestion\$step, assQuestion\$test_id, getFileUploadPath(), assQuestion\getSolutionValues(), assQuestion\getStep(), and assQuestion\setStep().

538  {
539  global $DIC;
540  $ilDB = $DIC['ilDB'];
541 
542  $pass = null;
543  $active_id = null;
544  foreach ($files as $solution_id) {
545  $result = $ilDB->queryF(
546  "SELECT * FROM tst_solutions WHERE solution_id = %s AND authorized = %s",
547  array("integer", 'integer'),
548  array($solution_id, (int) $authorized)
549  );
550  if ($result->numRows() == 1) {
551  $data = $ilDB->fetchAssoc($result);
552  $pass = $data['pass'];
553  $active_id = $data['active_fi'];
554  @unlink($this->getFileUploadPath($test_id, $active_id) . $data['value1']);
555  }
556  }
557  foreach ($files as $solution_id) {
558  $affectedRows = $ilDB->manipulateF(
559  "DELETE FROM tst_solutions WHERE solution_id = %s AND authorized = %s",
560  array("integer", 'integer'),
561  array($solution_id, $authorized)
562  );
563  }
564  }
$data
Definition: storeScorm.php:23
$result
global $DIC
Definition: goto.php:24
getFileUploadPath($test_id, $active_id, $question_id=null)
Returns the filesystem path for file uploads.
global $ilDB
+ Here is the call graph for this function:

◆ deliverFileUploadZIPFile()

assFileUpload::deliverFileUploadZIPFile (   $ref_id,
  $test_id,
  $test_title 
)

Generates a ZIP file containing all file uploads for a given test and the original id of the question.

Parameters
int$test_id

Implements ilObjFileHandlingQuestionType.

Definition at line 1163 of file class.assFileUpload.php.

References $DIC, $ilDB, assQuestion\$lng, assQuestion\$test_id, and ilUtil\deliverFile().

1164  {
1165  global $DIC;
1166  $ilDB = $DIC['ilDB'];
1167  $lng = $DIC['lng'];
1168 
1169  require_once 'Modules/TestQuestionPool/classes/class.ilAssFileUploadUploadsExporter.php';
1170  $exporter = new ilAssFileUploadUploadsExporter($ilDB, $lng);
1171 
1172  $exporter->setRefId($ref_id);
1173  $exporter->setTestId($test_id);
1174  $exporter->setTestTitle($test_title);
1175  $exporter->setQuestion($this);
1176 
1177  $exporter->build();
1178 
1180  $exporter->getFinalZipFilePath(),
1181  $exporter->getDispoZipFileName(),
1182  $exporter->getZipFileMimeType(),
1183  false,
1184  true
1185  );
1186  }
global $DIC
Definition: goto.php:24
global $ilDB
static deliverFile( $a_file, $a_filename, $a_mime='', $isInline=false, $removeAfterDelivery=false, $a_exit_after=true)
deliver file for download via browser.
+ Here is the call graph for this function:

◆ duplicate()

assFileUpload::duplicate (   $for_test = true,
  $title = "",
  $author = "",
  $owner = "",
  $testObjId = null 
)

Duplicates an assFileUpload.

Definition at line 173 of file class.assFileUpload.php.

References assQuestion\$author, assQuestion\$original_id, assQuestion\$owner, assQuestion\$title, assQuestion\_getOriginalId(), assQuestion\getId(), and assQuestion\getObjId().

174  {
175  if ($this->id <= 0) {
176  // The question has not been saved. It cannot be duplicated
177  return;
178  }
179  // duplicate the question in database
180  $this_id = $this->getId();
181  $thisObjId = $this->getObjId();
182 
183  $clone = $this;
184  include_once("./Modules/TestQuestionPool/classes/class.assQuestion.php");
186  $clone->id = -1;
187 
188  if ((int) $testObjId > 0) {
189  $clone->setObjId($testObjId);
190  }
191 
192  if ($title) {
193  $clone->setTitle($title);
194  }
195 
196  if ($author) {
197  $clone->setAuthor($author);
198  }
199  if ($owner) {
200  $clone->setOwner($owner);
201  }
202 
203  if ($for_test) {
204  $clone->saveToDb($original_id);
205  } else {
206  $clone->saveToDb();
207  }
208 
209  // copy question page content
210  $clone->copyPageOfQuestion($this_id);
211  // copy XHTML media objects
212  $clone->copyXHTMLMediaObjectsOfQuestion($this_id);
213 
214  $clone->onDuplicate($thisObjId, $this_id, $clone->getObjId(), $clone->getId());
215 
216  return $clone->id;
217  }
getId()
Gets the id of the assQuestion object.
static _getOriginalId($question_id)
Returns the original id of a question.
getObjId()
Get the object id of the container object.
+ Here is the call graph for this function:

◆ fromXML()

assFileUpload::fromXML ( $item,
$questionpool_id,
$tst_id,
$tst_object,
$question_counter,
$import_mapping,
array  $solutionhints = [] 
)

Creates a question from a QTI file.

Receives parameters from a QTI parser and creates a valid ILIAS question object

Parameters
object$itemThe QTI item object
integer$questionpool_idThe id of the parent questionpool
integer$tst_idThe id of the parent test if the question is part of a test
object$tst_objectA reference to the parent test object
integer$question_counterA reference to a question counter to count the questions of an imported question pool
array$import_mappingAn array containing references to included ILIAS objects

Definition at line 1002 of file class.assFileUpload.php.

1003  {
1004  include_once "./Modules/TestQuestionPool/classes/import/qti12/class.assFileUploadImport.php";
1005  $import = new assFileUploadImport($this);
1006  $import->fromXML($item, $questionpool_id, $tst_id, $tst_object, $question_counter, $import_mapping);
1007  }
Class for file upload question imports.

◆ getAdditionalTableName()

assFileUpload::getAdditionalTableName ( )

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

Returns
string The additional table name

Definition at line 934 of file class.assFileUpload.php.

Referenced by loadFromDb(), and saveAdditionalQuestionDataToDb().

935  {
936  return "qpl_qst_fileupload";
937  }
+ Here is the caller graph for this function:

◆ getAllowedExtensions()

assFileUpload::getAllowedExtensions ( )

Get allowed file extensions.

Returns
string Allowed file extensions

Definition at line 1071 of file class.assFileUpload.php.

References $allowedextensions.

Referenced by __get(), and saveAdditionalQuestionDataToDb().

1072  {
1073  return $this->allowedextensions;
1074  }
+ Here is the caller graph for this function:

◆ getAllowedExtensionsArray()

assFileUpload::getAllowedExtensionsArray ( )

Get allowed file extensions.

Returns
array Allowed file extensions

Definition at line 1058 of file class.assFileUpload.php.

Referenced by checkUpload().

1059  {
1060  if (strlen($this->allowedextensions)) {
1061  return array_filter(array_map('trim', explode(",", $this->allowedextensions)));
1062  }
1063  return array();
1064  }
+ Here is the caller graph for this function:

◆ getAnswerTableName()

assFileUpload::getAnswerTableName ( )

Returns the name of the answer table in the database.

Returns
string The answer table name

Definition at line 944 of file class.assFileUpload.php.

945  {
946  return "";
947  }

◆ getBestSolution()

assFileUpload::getBestSolution (   $active_id,
  $pass 
)

Returns the best solution for a given pass of a participant.

Returns
array An associated array containing the best solution

Definition at line 1027 of file class.assFileUpload.php.

1028  {
1029  $user_solution = array();
1030  return $user_solution;
1031  }

◆ getFileUploadPath()

assFileUpload::getFileUploadPath (   $test_id,
  $active_id,
  $question_id = null 
)

Returns the filesystem path for file uploads.

Implements ilObjFileHandlingQuestionType.

Definition at line 430 of file class.assFileUpload.php.

References CLIENT_WEB_DIR, and assQuestion\getId().

Referenced by deleteUploadedFiles(), and saveWorkingData().

431  {
432  if (is_null($question_id)) {
433  $question_id = $this->getId();
434  }
435  return CLIENT_WEB_DIR . "/assessment/tst_$test_id/$active_id/$question_id/files/";
436  }
getId()
Gets the id of the assQuestion object.
const CLIENT_WEB_DIR
Definition: constants.php:45
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getFileUploadPathWeb()

assFileUpload::getFileUploadPathWeb (   $test_id,
  $active_id,
  $question_id = null 
)

Returns the file upload path for web accessible files of a question.

public

Definition at line 451 of file class.assFileUpload.php.

References CLIENT_WEB_DIR, assQuestion\getId(), and ilUtil\removeTrailingPathSeparators().

Referenced by getUploadedFilesForWeb().

452  {
453  if (is_null($question_id)) {
454  $question_id = $this->getId();
455  }
456  include_once "./Services/Utilities/classes/class.ilUtil.php";
457  $webdir = ilUtil::removeTrailingPathSeparators(CLIENT_WEB_DIR) . "/assessment/tst_$test_id/$active_id/$question_id/files/";
458  return str_replace(ilUtil::removeTrailingPathSeparators(ILIAS_ABSOLUTE_PATH), ilUtil::removeTrailingPathSeparators(ILIAS_HTTP_PATH), $webdir);
459  }
getId()
Gets the id of the assQuestion object.
const CLIENT_WEB_DIR
Definition: constants.php:45
static removeTrailingPathSeparators($path)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getMaxFilesizeAsString()

assFileUpload::getMaxFilesizeAsString ( )

Return the maximum allowed file size as string.

Returns
string The number of bytes of the maximum allowed file size

Definition at line 622 of file class.assFileUpload.php.

References $size, and getMaxFilesizeInBytes().

623  {
624  $size = $this->getMaxFilesizeInBytes();
625  if ($size < 1024) {
626  $max_filesize = sprintf("%d Bytes", $size);
627  } elseif ($size < 1024 * 1024) {
628  $max_filesize = sprintf("%.1f KB", $size / 1024);
629  } else {
630  $max_filesize = sprintf("%.1f MB", $size / 1024 / 1024);
631  }
632 
633  return $max_filesize;
634  }
$size
Definition: RandomTest.php:84
getMaxFilesizeInBytes()
Return the maximum allowed file size in bytes.
+ Here is the call graph for this function:

◆ getMaxFilesizeInBytes()

assFileUpload::getMaxFilesizeInBytes ( )

Return the maximum allowed file size in bytes.

Returns
integer The number of bytes of the maximum allowed file size

Definition at line 641 of file class.assFileUpload.php.

References getMaxSize().

Referenced by checkUpload(), and getMaxFilesizeAsString().

642  {
643  if (strlen($this->getMaxSize())) {
644  return $this->getMaxSize();
645  } else {
646  // get the value for the maximal uploadable filesize from the php.ini (if available)
647  $umf = get_cfg_var("upload_max_filesize");
648  // get the value for the maximal post data from the php.ini (if available)
649  $pms = get_cfg_var("post_max_size");
650 
651  //convert from short-string representation to "real" bytes
652  $multiplier_a = array("K" => 1024, "M" => 1024 * 1024, "G" => 1024 * 1024 * 1024);
653 
654  $umf_parts = preg_split("/(\d+)([K|G|M])/", $umf, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
655  $pms_parts = preg_split("/(\d+)([K|G|M])/", $pms, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
656 
657  if (count($umf_parts) == 2) {
658  $umf = $umf_parts[0] * $multiplier_a[$umf_parts[1]];
659  }
660  if (count($pms_parts) == 2) {
661  $pms = $pms_parts[0] * $multiplier_a[$pms_parts[1]];
662  }
663 
664  // use the smaller one as limit
665  $max_filesize = min($umf, $pms);
666 
667  if (!$max_filesize) {
668  $max_filesize = max($umf, $pms);
669  }
670  return $max_filesize;
671  }
672  }
getMaxSize()
Get max file size.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getMaximumPoints()

assFileUpload::getMaximumPoints ( )

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

See also
$points

Definition at line 288 of file class.assFileUpload.php.

References assQuestion\getPoints().

Referenced by isComplete().

289  {
290  return $this->getPoints();
291  }
getPoints()
Returns the maximum available points for the question.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getMaxSize()

assFileUpload::getMaxSize ( )

Get max file size.

Returns
double Max file size

Definition at line 1038 of file class.assFileUpload.php.

References $maxsize.

Referenced by __get(), getMaxFilesizeInBytes(), and saveAdditionalQuestionDataToDb().

1039  {
1040  return $this->maxsize;
1041  }
+ Here is the caller graph for this function:

◆ getPreviewFileUploadPath()

assFileUpload::getPreviewFileUploadPath (   $userId)
protected

Returns the filesystem path for file uploads.

Definition at line 441 of file class.assFileUpload.php.

References CLIENT_WEB_DIR.

Referenced by deletePreviewFileUploads(), and savePreviewData().

442  {
443  return CLIENT_WEB_DIR . "/assessment/qst_preview/$userId/{$this->getId()}/fileuploads/";
444  }
const CLIENT_WEB_DIR
Definition: constants.php:45
+ Here is the caller graph for this function:

◆ getPreviewFileUploadPathWeb()

assFileUpload::getPreviewFileUploadPathWeb (   $userId)
protected

Returns the filesystem path for file uploads.

Definition at line 464 of file class.assFileUpload.php.

References CLIENT_WEB_DIR, and ilUtil\removeTrailingPathSeparators().

Referenced by savePreviewData().

465  {
466  include_once "./Services/Utilities/classes/class.ilUtil.php";
467  $webdir = ilUtil::removeTrailingPathSeparators(CLIENT_WEB_DIR) . "/assessment/qst_preview/$userId/{$this->getId()}/fileuploads/";
468  return str_replace(ilUtil::removeTrailingPathSeparators(ILIAS_ABSOLUTE_PATH), ilUtil::removeTrailingPathSeparators(ILIAS_HTTP_PATH), $webdir);
469  }
const CLIENT_WEB_DIR
Definition: constants.php:45
static removeTrailingPathSeparators($path)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getPreviewFileUploads()

assFileUpload::getPreviewFileUploads ( ilAssQuestionPreviewSession  $previewSession)

Definition at line 500 of file class.assFileUpload.php.

References ilAssQuestionPreviewSession\getParticipantsSolution().

501  {
502  return (array) $previewSession->getParticipantsSolution();
503  }
+ Here is the call graph for this function:

◆ getQuestionType()

assFileUpload::getQuestionType ( )

Returns the question type of the question.

Returns
integer The question type of the question

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

925  {
926  return "assFileUpload";
927  }

◆ getRTETextWithMediaObjects()

assFileUpload::getRTETextWithMediaObjects ( )

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

Definition at line 962 of file class.assFileUpload.php.

963  {
964  $text = parent::getRTETextWithMediaObjects();
965  return $text;
966  }

◆ getUploadedFiles()

assFileUpload::getUploadedFiles (   $active_id,
  $pass = null,
  $authorized = true 
)

Returns the uploaded files for an active user in a given pass.

Returns
array Results

Definition at line 476 of file class.assFileUpload.php.

References $data, $DIC, $ilDB, $pass, $result, assQuestion\getId(), and assQuestion\getSolutionMaxPass().

Referenced by getUploadedFilesForWeb(), and handleSubmission().

477  {
478  global $DIC;
479  $ilDB = $DIC['ilDB'];
480 
481  if (is_null($pass)) {
482  $pass = $this->getSolutionMaxPass($active_id);
483  }
484  // fau: testNav - check existing value1 because the intermediate solution will have a dummy entry
485  $result = $ilDB->queryF(
486  "SELECT * FROM tst_solutions WHERE active_fi = %s AND question_fi = %s AND pass = %s AND authorized = %s AND value1 IS NOT NULL ORDER BY tstamp",
487  array("integer", "integer", "integer", 'integer'),
488  array($active_id, $this->getId(), $pass, (int) $authorized)
489  );
490  // fau.
491  $found = array();
492 
493  while ($data = $ilDB->fetchAssoc($result)) {
494  array_push($found, $data);
495  }
496 
497  return $found;
498  }
getId()
Gets the id of the assQuestion object.
$data
Definition: storeScorm.php:23
$result
getSolutionMaxPass($active_id)
Returns the maximum pass a users question solution.
global $DIC
Definition: goto.php:24
global $ilDB
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getUploadedFilesForWeb()

assFileUpload::getUploadedFilesForWeb (   $active_id,
  $pass 
)

Returns the web accessible uploaded files for an active user in a given pass.

Returns
array Results

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

References $data, $DIC, $ilDB, $pass, $result, assQuestion\$test_id, getFileUploadPathWeb(), and getUploadedFiles().

511  {
512  global $DIC;
513  $ilDB = $DIC['ilDB'];
514 
515  $found = $this->getUploadedFiles($active_id, $pass);
516  $result = $ilDB->queryF(
517  "SELECT test_fi FROM tst_active WHERE active_id = %s",
518  array('integer'),
519  array($active_id)
520  );
521  if ($result->numRows() == 1) {
522  $row = $ilDB->fetchAssoc($result);
523  $test_id = $row["test_fi"];
524  $path = $this->getFileUploadPathWeb($test_id, $active_id);
525  foreach ($found as $idx => $data) {
526  $found[$idx]['webpath'] = $path;
527  }
528  }
529  return $found;
530  }
$data
Definition: storeScorm.php:23
$result
getFileUploadPathWeb($test_id, $active_id, $question_id=null)
Returns the file upload path for web accessible files of a question.
global $DIC
Definition: goto.php:24
global $ilDB
getUploadedFiles($active_id, $pass=null, $authorized=true)
Returns the uploaded files for an active user in a given pass.
+ Here is the call graph for this function:

◆ getUserSolutionPreferingIntermediate()

assFileUpload::getUserSolutionPreferingIntermediate (   $active_id,
  $pass = null 
)

Get the user solution preferring the intermediate solution.

Parameters
int$active_id
int | null$pass
Returns
array

Definition at line 787 of file class.assFileUpload.php.

References $pass, and assQuestion\getSolutionValues().

788  {
789  $solution = $this->getSolutionValues($active_id, $pass, false);
790 
791  if (!count($solution)) {
792  $solution = $this->getSolutionValues($active_id, $pass, true);
793  } else {
794  $cleaned = array();
795  foreach ($solution as $row) {
796  if (!empty($row['value1'])) {
797  $cleaned[] = $row;
798  }
799  }
800  $solution = $cleaned;
801  }
802 
803  return $solution;
804  }
getSolutionValues($active_id, $pass=null, $authorized=true)
Loads solutions of a given user from the database an returns it.
+ Here is the call graph for this function:

◆ handleSubmission()

assFileUpload::handleSubmission (   $active_id,
  $pass,
  $obligationsAnswered,
  $authorized 
)
protected

This method is called after an user submitted one or more files.

It should handle the setting "Completion by Submission" and, if enabled, set the status of the current user.

Parameters
integer
integerprotected

Definition at line 890 of file class.assFileUpload.php.

References $pass, assQuestion\$points, assQuestion\_getMaximumPoints(), ilObjTest\_getObjectIDFromActiveID(), ilObjTestAccess\_getParticipantId(), assQuestion\_setReachedPoints(), ilLPStatusWrapper\_updateStatus(), assQuestion\getId(), getUploadedFiles(), and isCompletionBySubmissionEnabled().

891  {
892  if (!$authorized) {
893  return;
894  }
895 
896  if ($this->isCompletionBySubmissionEnabled()) {
897  $maxpoints = assQuestion::_getMaximumPoints($this->getId());
898 
899  if ($this->getUploadedFiles($active_id, $pass, $authorized)) {
900  $points = $maxpoints;
901  } else {
902  // fau: testNav - don't set reached points if no file is available
903  return;
904  // fau.
905  }
906 
907  assQuestion::_setReachedPoints($active_id, $this->getId(), $points, $maxpoints, $pass, 1, $obligationsAnswered);
908 
909  // update learning progress
910  include_once 'Modules/Test/classes/class.ilObjTestAccess.php';
911  include_once 'Services/Tracking/classes/class.ilLPStatusWrapper.php';
913  ilObjTest::_getObjectIDFromActiveID((int) $active_id),
914  ilObjTestAccess::_getParticipantId((int) $active_id)
915  );
916  }
917  }
getId()
Gets the id of the assQuestion object.
static _getParticipantId($active_id)
Get user id for active id.
static _updateStatus($a_obj_id, $a_usr_id, $a_obj=null, $a_percentage=false, $a_force_raise=false)
Update status.
static _getObjectIDFromActiveID($active_id)
Returns the ILIAS test object id for a given active id.
static _getMaximumPoints($question_id)
Returns the maximum points, a learner can reach answering the question.
getUploadedFiles($active_id, $pass=null, $authorized=true)
Returns the uploaded files for an active user in a given pass.
static _setReachedPoints($active_id, $question_id, $points, $maxpoints, $pass, $manualscoring, $obligationsEnabled)
Sets the points, a learner has reached answering the question Additionally objective results are upda...
isCompletionBySubmissionEnabled()
Checks whether completion by submission is enabled or not.
+ Here is the call graph for this function:

◆ hasFileUploads()

assFileUpload::hasFileUploads (   $test_id)

Checks if file uploads exist for a given test and the original id of the question.

Parameters
int$test_id
Returns
boolean TRUE if file uploads exist, FALSE otherwise

Implements ilObjFileHandlingQuestionType.

Definition at line 1135 of file class.assFileUpload.php.

References $DIC, $ilDB, $query, $result, assQuestion\$test_id, and assQuestion\getId().

1136  {
1137  global $DIC;
1138  $ilDB = $DIC['ilDB'];
1139  $query = "
1140  SELECT tst_solutions.solution_id
1141  FROM tst_solutions, tst_active, qpl_questions
1142  WHERE tst_solutions.active_fi = tst_active.active_id
1143  AND tst_solutions.question_fi = qpl_questions.question_id
1144  AND tst_solutions.question_fi = %s AND tst_active.test_fi = %s
1145  AND tst_solutions.value1 is not null";
1146  $result = $ilDB->queryF(
1147  $query,
1148  array("integer", "integer"),
1149  array($this->getId(), $test_id)
1150  );
1151  if ($result->numRows() > 0) {
1152  return true;
1153  } else {
1154  return false;
1155  }
1156  }
getId()
Gets the id of the assQuestion object.
$result
global $DIC
Definition: goto.php:24
$query
global $ilDB
+ Here is the call graph for this function:

◆ isAnswered()

assFileUpload::isAnswered (   $active_id,
  $pass = null 
)

returns boolean wether the question is answered during test pass or not

(overwrites method in class assQuestion)

ilDBInterface $ilDB

Parameters
integer$active_id
integer$pass
Returns
boolean $answered

Definition at line 1227 of file class.assFileUpload.php.

References $pass, assQuestion\getId(), and assQuestion\getNumExistingSolutionRecords().

1228  {
1229  $numExistingSolutionRecords = assQuestion::getNumExistingSolutionRecords($active_id, $pass, $this->getId());
1230 
1231  return $numExistingSolutionRecords > 0;
1232  }
getId()
Gets the id of the assQuestion object.
static getNumExistingSolutionRecords($activeId, $pass, $questionId)
returns the number of existing solution records for the given test active / pass and given question i...
+ Here is the call graph for this function:

◆ isAutosaveable()

assFileUpload::isAutosaveable ( )

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

1250  {
1251  return false;
1252  }

◆ isComplete()

assFileUpload::isComplete ( )

Returns true, if the question is complete for use.

Returns
boolean True, if the question is complete for use, otherwise false

Definition at line 77 of file class.assFileUpload.php.

References getMaximumPoints().

78  {
79  if (
80  strlen($this->title)
81  && ($this->author)
82  && ($this->question)
83  && ($this->getMaximumPoints() >= 0)
84  && is_numeric($this->getMaximumPoints())) {
85  return true;
86  }
87  return false;
88  }
getMaximumPoints()
Returns the maximum points, a learner can reach answering the question.
+ Here is the call graph for this function:

◆ isCompletionBySubmissionEnabled()

assFileUpload::isCompletionBySubmissionEnabled ( )

Checks whether completion by submission is enabled or not.

Returns
boolean public

Definition at line 1196 of file class.assFileUpload.php.

References $completion_by_submission.

Referenced by __get(), calculateReachedPoints(), calculateReachedPointsForSolution(), handleSubmission(), and saveAdditionalQuestionDataToDb().

1197  {
1199  }
+ Here is the caller graph for this function:

◆ isFileDeletionAction()

assFileUpload::isFileDeletionAction ( )
protected
Returns
bool

Definition at line 1276 of file class.assFileUpload.php.

References ilAssFileUploadFileTableDeleteButton\ACTION, and assQuestion\getQuestionAction().

Referenced by savePreviewData(), and saveWorkingData().

1277  {
1278  require_once 'Modules/TestQuestionPool/classes/questions/class.ilAssFileUploadFileTableDeleteButton.php';
1280  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isFileDeletionSubmitAvailable()

assFileUpload::isFileDeletionSubmitAvailable ( )
protected
Returns
bool

Definition at line 1285 of file class.assFileUpload.php.

References assQuestion\isNonEmptyItemListPostSubmission().

Referenced by savePreviewData(), and saveWorkingData().

1286  {
1287  return $this->isNonEmptyItemListPostSubmission(self::DELETE_FILES_TBL_POSTVAR);
1288  }
isNonEmptyItemListPostSubmission($postSubmissionFieldname)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isFileReuseHandlingRequired()

assFileUpload::isFileReuseHandlingRequired ( )
protected
Returns
bool

Definition at line 1301 of file class.assFileUpload.php.

References assQuestion\getTestPresentationConfig(), and isFileReuseSubmitAvailable().

Referenced by saveWorkingData().

1302  {
1303  if (!$this->getTestPresentationConfig()->isPreviousPassSolutionReuseAllowed()) {
1304  return false;
1305  }
1306 
1307  if (!$this->isFileReuseSubmitAvailable()) {
1308  return false;
1309  }
1310 
1311  return true;
1312  }
getTestPresentationConfig()
Get the test question configuration (initialised once)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isFileReuseSubmitAvailable()

assFileUpload::isFileReuseSubmitAvailable ( )
protected
Returns
bool

Definition at line 1293 of file class.assFileUpload.php.

References assQuestion\isNonEmptyItemListPostSubmission().

Referenced by isFileReuseHandlingRequired().

1294  {
1295  return $this->isNonEmptyItemListPostSubmission(self::REUSE_FILES_TBL_POSTVAR);
1296  }
isNonEmptyItemListPostSubmission($postSubmissionFieldname)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isFileUploadAvailable()

assFileUpload::isFileUploadAvailable ( )
protected
Returns
bool

Definition at line 1317 of file class.assFileUpload.php.

Referenced by savePreviewData(), and saveWorkingData().

1318  {
1319  if (!isset($_FILES['upload'])) {
1320  return false;
1321  }
1322 
1323  if (!isset($_FILES['upload']['tmp_name'])) {
1324  return false;
1325  }
1326 
1327  return strlen($_FILES['upload']['tmp_name']) > 0;
1328  }
+ Here is the caller graph for this function:

◆ isObligationPossible()

static assFileUpload::isObligationPossible (   $questionId)
static

returns boolean wether it is possible to set this question type as obligatory or not considering the current question configuration

(overwrites method in class assQuestion)

Parameters
integer$questionId
Returns
boolean $obligationPossible

Definition at line 1244 of file class.assFileUpload.php.

1245  {
1246  return true;
1247  }

◆ loadFromDb()

assFileUpload::loadFromDb (   $question_id)

Loads a assFileUpload object from a database.

Parameters
integer$question_idA unique key which defines the question in the database

Definition at line 127 of file class.assFileUpload.php.

References $data, $DIC, Vendor\Package\$e, $ilDB, $result, ilRTE\_replaceMediaObjectImageSrc(), getAdditionalTableName(), ilAssQuestionLifecycle\getDraftInstance(), ilAssQuestionLifecycle\getInstance(), assQuestion\setAdditionalContentEditingMode(), setAllowedExtensions(), assQuestion\setAuthor(), assQuestion\setComment(), setCompletionBySubmission(), assQuestion\setEstimatedWorkingTime(), assQuestion\setId(), assQuestion\setLifecycle(), setMaxSize(), assQuestion\setNrOfTries(), assQuestion\setObjId(), assQuestion\setOriginalId(), assQuestion\setOwner(), assQuestion\setPoints(), assQuestion\setQuestion(), assQuestion\setSuggestedSolution(), and assQuestion\setTitle().

128  {
129  global $DIC;
130  $ilDB = $DIC['ilDB'];
131  $result = $ilDB->queryF(
132  "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",
133  array("integer"),
134  array($question_id)
135  );
136  if ($result->numRows() == 1) {
137  $data = $ilDB->fetchAssoc($result);
138  $this->setId($question_id);
139  $this->setTitle($data["title"]);
140  $this->setComment($data["description"]);
141  $this->setNrOfTries($data['nr_of_tries']);
142  $this->setSuggestedSolution($data["solution_hint"]);
143  $this->setOriginalId($data["original_id"]);
144  $this->setObjId($data["obj_fi"]);
145  $this->setAuthor($data["author"]);
146  $this->setOwner($data["owner"]);
147  $this->setPoints($data["points"]);
148 
149  include_once("./Services/RTE/classes/class.ilRTE.php");
150  $this->setQuestion(ilRTE::_replaceMediaObjectImageSrc($data["question_text"], 1));
151  $this->setEstimatedWorkingTime(substr($data["working_time"], 0, 2), substr($data["working_time"], 3, 2), substr($data["working_time"], 6, 2));
152  $this->setMaxSize($data["maxsize"]);
153  $this->setAllowedExtensions($data["allowedextensions"]);
154  $this->setCompletionBySubmission($data['compl_by_submission'] == 1 ? true : false);
155 
156  try {
160  }
161 
162  try {
163  $this->setAdditionalContentEditingMode($data['add_cont_edit_mode']);
164  } catch (ilTestQuestionPoolException $e) {
165  }
166  }
167  parent::loadFromDb($question_id);
168  }
setSuggestedSolution($solution_id="", $subquestion_index=0, $is_import=false)
Sets a suggested solution for the question.
setAllowedExtensions($a_value)
Set allowed file extensions.
$data
Definition: storeScorm.php:23
$result
setId($id=-1)
Sets the id of the assQuestion object.
setEstimatedWorkingTime($hour=0, $min=0, $sec=0)
Sets the estimated working time of a question from given hour, minute and second. ...
setNrOfTries($a_nr_of_tries)
setAdditionalContentEditingMode($additinalContentEditingMode)
setter for additional content editing mode for this question
static _replaceMediaObjectImageSrc($a_text, $a_direction=0, $nic=IL_INST_ID)
Replaces image source from mob image urls with the mob id or replaces mob id with the correct image s...
setAuthor($author="")
Sets the authors name of the assQuestion object.
global $DIC
Definition: goto.php:24
setMaxSize($a_value)
Set max file size.
setPoints($a_points)
Sets the maximum available points for the question.
setQuestion($question="")
Sets the question string of the question object.
global $ilDB
setOriginalId($original_id)
getAdditionalTableName()
Returns the name of the additional question data table in the database.
setLifecycle(ilAssQuestionLifecycle $lifecycle)
setCompletionBySubmission($bool)
Enabled/Disable completion by submission.
setTitle($title="")
Sets the title string of the assQuestion object.
setObjId($obj_id=0)
Set the object id of the container object.
setComment($comment="")
Sets the comment string of the assQuestion object.
setOwner($owner="")
Sets the creator/owner ID of the assQuestion object.
+ Here is the call graph for this function:

◆ removeIntermediateSolution()

assFileUpload::removeIntermediateSolution (   $active_id,
  $pass 
)

Remove an intermediate soluton (overridden to remove unused fies)

Parameters
int$active_id
int$pass
Returns
int|object

Definition at line 815 of file class.assFileUpload.php.

References $DIC, $ilDB, $pass, $result, assQuestion\$test_id, and assQuestion\lookupTestId().

816  {
817  global $DIC;
818  $ilDB = $DIC['ilDB'];
819 
820  $result = parent::removeIntermediateSolution($active_id, $pass);
821 
822  // get the current test id
823  // hey: prevPassSolutions - exract until you drop :-D
824  $test_id = $this->lookupTestId($active_id);
825  // hey.
826 
827  $this->deleteUnusedFiles($test_id, $active_id, $pass);
828 
829  return $result;
830  }
$result
global $DIC
Definition: goto.php:24
lookupTestId($active_id)
global $ilDB
+ Here is the call graph for this function:

◆ saveAdditionalQuestionDataToDb()

assFileUpload::saveAdditionalQuestionDataToDb ( )

Saves a record to the question types additional data table.

Returns
mixed

Implements ilObjQuestionScoringAdjustable.

Definition at line 100 of file class.assFileUpload.php.

References $DIC, $ilDB, getAdditionalTableName(), getAllowedExtensions(), assQuestion\getId(), getMaxSize(), and isCompletionBySubmissionEnabled().

Referenced by saveToDb().

101  {
102  global $DIC;
103  $ilDB = $DIC['ilDB'];
104  $ilDB->manipulateF(
105  "DELETE FROM " . $this->getAdditionalTableName() . " WHERE question_fi = %s",
106  array( "integer" ),
107  array( $this->getId() )
108  );
109  $ilDB->manipulateF(
110  "INSERT INTO " . $this->getAdditionalTableName(
111  ) . " (question_fi, maxsize, allowedextensions, compl_by_submission) VALUES (%s, %s, %s, %s)",
112  array( "integer", "float", "text", "integer" ),
113  array(
114  $this->getId(),
115  (strlen($this->getMaxSize())) ? $this->getMaxSize() : null,
116  (strlen($this->getAllowedExtensions())) ? $this->getAllowedExtensions() : null,
117  (int) $this->isCompletionBySubmissionEnabled()
118  )
119  );
120  }
getId()
Gets the id of the assQuestion object.
getAllowedExtensions()
Get allowed file extensions.
getMaxSize()
Get max file size.
global $DIC
Definition: goto.php:24
global $ilDB
getAdditionalTableName()
Returns the name of the additional question data table in the database.
isCompletionBySubmissionEnabled()
Checks whether completion by submission is enabled or not.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ savePreviewData()

assFileUpload::savePreviewData ( ilAssQuestionPreviewSession  $previewSession)
protected

Definition at line 834 of file class.assFileUpload.php.

References $_POST, checkUpload(), deletePreviewFileUploads(), ilAssQuestionPreviewSession\getParticipantsSolution(), getPreviewFileUploadPath(), getPreviewFileUploadPathWeb(), ilAssQuestionPreviewSession\getUserId(), isFileDeletionAction(), isFileDeletionSubmitAvailable(), isFileUploadAvailable(), ilUtil\makeDirParents(), ilUtil\moveUploadedFile(), ilUtil\sendInfo(), and ilAssQuestionPreviewSession\setParticipantsSolution().

835  {
836  $userSolution = $previewSession->getParticipantsSolution();
837 
838  if (!is_array($userSolution)) {
839  $userSolution = array();
840  }
841 
842  // hey: prevPassSolutions - readability spree - get a chance to understand the code
843  if ($this->isFileDeletionAction()) {
844  // hey.
845  // hey: prevPassSolutions - readability spree - get a chance to understand the code
846  if ($this->isFileDeletionSubmitAvailable()) {
847  // hey.
848  $userSolution = $this->deletePreviewFileUploads($previewSession->getUserId(), $userSolution, $_POST['deletefiles']);
849  } else {
850  ilUtil::sendInfo($this->lng->txt('no_checkbox'), true);
851  }
852  } else {
853  // hey: prevPassSolutions - readability spree - get a chance to understand the code
854  if ($this->isFileUploadAvailable()) {
855  // hey.
856  if ($this->checkUpload()) {
857  if (!@file_exists($this->getPreviewFileUploadPath($previewSession->getUserId()))) {
858  ilUtil::makeDirParents($this->getPreviewFileUploadPath($previewSession->getUserId()));
859  }
860 
861  $version = time();
862  $filename_arr = pathinfo($_FILES["upload"]["name"]);
863  $extension = $filename_arr["extension"];
864  $newfile = "file_" . md5($_FILES["upload"]["name"]) . "_" . $version . "." . $extension;
865  ilUtil::moveUploadedFile($_FILES["upload"]["tmp_name"], $_FILES["upload"]["name"], $this->getPreviewFileUploadPath($previewSession->getUserId()) . $newfile);
866 
867  $userSolution[$newfile] = array(
868  'solution_id' => $newfile,
869  'value1' => $newfile,
870  'value2' => $_FILES['upload']['name'],
871  'tstamp' => $version,
872  'webpath' => $this->getPreviewFileUploadPathWeb($previewSession->getUserId())
873  );
874  }
875  }
876  }
877 
878  $previewSession->setParticipantsSolution($userSolution);
879  }
getPreviewFileUploadPathWeb($userId)
Returns the filesystem path for file uploads.
static makeDirParents($a_dir)
Create a new directory and all parent directories.
deletePreviewFileUploads($userId, $userSolution, $files)
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
static moveUploadedFile($a_file, $a_name, $a_target, $a_raise_errors=true, $a_mode="move_uploaded")
move uploaded file
checkUpload()
Check file upload.
getPreviewFileUploadPath($userId)
Returns the filesystem path for file uploads.
$_POST["username"]
+ Here is the call graph for this function:

◆ saveToDb()

assFileUpload::saveToDb (   $original_id = "")

Saves a assFileUpload object to a database.

Definition at line 93 of file class.assFileUpload.php.

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

94  {
97  parent::saveToDb();
98  }
saveAdditionalQuestionDataToDb()
Saves a record to the question types additional data table.
saveQuestionDataToDb($original_id="")
+ Here is the call graph for this function:

◆ saveWorkingData()

assFileUpload::saveWorkingData (   $active_id,
  $pass = null,
  $authorized = true 
)

Saves the learners input of the question to the database.

public

Parameters
integer$active_idActive id of the user
integer$passTest pass
Returns
boolean $status

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

References $_POST, $pass, assQuestion\$test_id, ilObjAssessmentFolder\_enabledAssessmentLogging(), ilObjAssessmentFolder\_getLogLanguage(), checkUpload(), assQuestion\deleteDummySolutionRecord(), assQuestion\ensureCurrentTestPass(), assQuestion\forceExistingIntermediateSolution(), getFileUploadPath(), assQuestion\getId(), assQuestion\getProcessLocker(), assQuestion\getSolutionRecordById(), ilFileUtils\getValidFilename(), assQuestion\intermediateSolutionExists(), isFileDeletionAction(), isFileDeletionSubmitAvailable(), isFileReuseHandlingRequired(), isFileUploadAvailable(), assQuestion\logAction(), assQuestion\lookupTestId(), ilUtil\makeDirParents(), ilUtil\moveUploadedFile(), assQuestion\removeCurrentSolution(), assQuestion\removeSolutionRecordById(), assQuestion\saveCurrentSolution(), ilUtil\sendInfo(), and assQuestion\updateCurrentSolutionsAuthorization().

686  {
687  $pass = $this->ensureCurrentTestPass($active_id, $pass);
688  $test_id = $this->lookupTestId($active_id);
689 
690  $uploadHandlingRequired = $this->isFileUploadAvailable() && $this->checkUpload();
691 
692  $entered_values = false;
693 
694  $this->getProcessLocker()->executeUserSolutionUpdateLockOperation(function () use (&$entered_values, $uploadHandlingRequired, $test_id, $active_id, $pass, $authorized) {
695  if ($authorized == false) {
696  $this->forceExistingIntermediateSolution($active_id, $pass, true);
697  }
698 
699  if ($this->isFileDeletionAction()) {
700  if ($this->isFileDeletionSubmitAvailable()) {
701  foreach ($_POST[self::DELETE_FILES_TBL_POSTVAR] as $solution_id) {
702  $this->removeSolutionRecordById($solution_id);
703  }
704  } else {
705  ilUtil::sendInfo($this->lng->txt('no_checkbox'), true);
706  }
707  } else {
708  if ($this->isFileReuseHandlingRequired()) {
709  foreach ($_POST[self::REUSE_FILES_TBL_POSTVAR] as $solutionId) {
710  $solution = $this->getSolutionRecordById($solutionId);
711 
712  $this->saveCurrentSolution(
713  $active_id,
714  $pass,
715  $solution['value1'],
716  $solution['value2'],
717  false,
718  $solution['tstamp']
719  );
720  }
721  }
722 
723  if ($uploadHandlingRequired) {
724  if (!@file_exists($this->getFileUploadPath($test_id, $active_id))) {
726  }
727 
728  $solutionFileVersioningUploadTS = time();
729  $filename_arr = pathinfo($_FILES["upload"]["name"]);
730  $extension = $filename_arr["extension"];
731  $newfile = "file_" . $active_id . "_" . $pass . "_" . $solutionFileVersioningUploadTS . "." . $extension;
732 
733  include_once 'Services/Utilities/classes/class.ilFileUtils.php';
734  $dispoFilename = ilFileUtils::getValidFilename($_FILES['upload']['name']);
735  $newfile = ilFileUtils::getValidFilename($newfile);
736 
737  ilUtil::moveUploadedFile($_FILES["upload"]["tmp_name"], $_FILES["upload"]["name"], $this->getFileUploadPath($test_id, $active_id) . $newfile);
738 
739  $this->saveCurrentSolution(
740  $active_id,
741  $pass,
742  $newfile,
743  $dispoFilename,
744  false,
745  $solutionFileVersioningUploadTS
746  );
747 
748  $entered_values = true;
749  }
750  }
751 
752  if ($authorized == true && $this->intermediateSolutionExists($active_id, $pass)) {
753  // remove the dummy record of the intermediate solution
754  $this->deleteDummySolutionRecord($active_id, $pass);
755 
756  // delete the authorized solution and make the intermediate solution authorized (keeping timestamps)
757  $this->removeCurrentSolution($active_id, $pass, true);
758  $this->updateCurrentSolutionsAuthorization($active_id, $pass, true, true);
759  }
760 
761  $this->deleteUnusedFiles($test_id, $active_id, $pass);
762  });
763 
764  if ($entered_values) {
765  include_once("./Modules/Test/classes/class.ilObjAssessmentFolder.php");
767  assQuestion::logAction($this->lng->txtlng("assessment", "log_user_entered_values", ilObjAssessmentFolder::_getLogLanguage()), $active_id, $this->getId());
768  }
769  } else {
770  include_once("./Modules/Test/classes/class.ilObjAssessmentFolder.php");
772  assQuestion::logAction($this->lng->txtlng("assessment", "log_user_not_entered_values", ilObjAssessmentFolder::_getLogLanguage()), $active_id, $this->getId());
773  }
774  }
775 
776  return true;
777  }
static makeDirParents($a_dir)
Create a new directory and all parent directories.
static logAction($logtext="", $active_id="", $question_id="")
Logs an action into the Test&Assessment log.
getId()
Gets the id of the assQuestion object.
forceExistingIntermediateSolution($activeId, $passIndex, $considerDummyRecordCreation)
intermediateSolutionExists($active_id, $pass)
deleteDummySolutionRecord($activeId, $passIndex)
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
removeSolutionRecordById($solutionId)
static _getLogLanguage()
retrieve the log language for assessment logging
static _enabledAssessmentLogging()
check wether assessment logging is enabled or not
updateCurrentSolutionsAuthorization($activeId, $pass, $authorized, $keepTime=false)
saveCurrentSolution($active_id, $pass, $value1, $value2, $authorized=true, $tstamp=null)
static moveUploadedFile($a_file, $a_name, $a_target, $a_raise_errors=true, $a_mode="move_uploaded")
move uploaded file
checkUpload()
Check file upload.
getFileUploadPath($test_id, $active_id, $question_id=null)
Returns the filesystem path for file uploads.
lookupTestId($active_id)
removeCurrentSolution($active_id, $pass, $authorized=true)
ensureCurrentTestPass($active_id, $pass)
$_POST["username"]
static getValidFilename($a_filename)
Get valid filename.
getSolutionRecordById($solutionId)
+ Here is the call graph for this function:

◆ setAllowedExtensions()

assFileUpload::setAllowedExtensions (   $a_value)

Set allowed file extensions.

Parameters
string$a_valueAllowed file extensions

Definition at line 1081 of file class.assFileUpload.php.

Referenced by __set(), and loadFromDb().

1082  {
1083  $this->allowedextensions = strtolower(trim($a_value));
1084  }
+ Here is the caller graph for this function:

◆ setCompletionBySubmission()

assFileUpload::setCompletionBySubmission (   $bool)

Enabled/Disable completion by submission.

Parameters
boolean
Returns
assFileUpload public

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

Referenced by __set(), and loadFromDb().

1211  {
1212  $this->completion_by_submission = (bool) $bool;
1213  return $this;
1214  }
+ Here is the caller graph for this function:

◆ setExportDetailsXLS()

assFileUpload::setExportDetailsXLS (   $worksheet,
  $startrow,
  $active_id,
  $pass 
)

{}

Definition at line 971 of file class.assFileUpload.php.

References $i, $pass, and assQuestion\getSolutionValues().

972  {
973  parent::setExportDetailsXLS($worksheet, $startrow, $active_id, $pass);
974 
975  $i = 1;
976  $solutions = $this->getSolutionValues($active_id, $pass);
977  foreach ($solutions as $solution) {
978  $worksheet->setCell($startrow + $i, 0, $this->lng->txt("result"));
979  $worksheet->setBold($worksheet->getColumnCoord(0) . ($startrow + $i));
980  if (strlen($solution["value1"])) {
981  $worksheet->setCell($startrow + $i, 2, $solution["value1"]);
982  $worksheet->setCell($startrow + $i, 3, $solution["value2"]);
983  }
984  $i++;
985  }
986 
987  return $startrow + $i + 1;
988  }
getSolutionValues($active_id, $pass=null, $authorized=true)
Loads solutions of a given user from the database an returns it.
$i
Definition: metadata.php:24
+ Here is the call graph for this function:

◆ setMaxSize()

assFileUpload::setMaxSize (   $a_value)

Set max file size.

Parameters
double$a_valueMax file size

Definition at line 1048 of file class.assFileUpload.php.

Referenced by __set(), and loadFromDb().

1049  {
1050  $this->maxsize = $a_value;
1051  }
+ Here is the caller graph for this function:

◆ toXML()

assFileUpload::toXML (   $a_include_header = true,
  $a_include_binary = true,
  $a_shuffle = false,
  $test_output = false,
  $force_image_references = false 
)

Returns a QTI xml representation of the question and sets the internal domxml variable with the DOM XML representation of the QTI xml representation.

Returns
string The QTI xml representation of the question

Definition at line 1015 of file class.assFileUpload.php.

1016  {
1017  include_once "./Modules/TestQuestionPool/classes/export/qti12/class.assFileUploadExport.php";
1018  $export = new assFileUploadExport($this);
1019  return $export->toXML($a_include_header, $a_include_binary, $a_shuffle, $test_output, $force_image_references);
1020  }
Class for file upload question exports.

Field Documentation

◆ $allowedextensions

assFileUpload::$allowedextensions
protected

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

Referenced by getAllowedExtensions().

◆ $completion_by_submission

assFileUpload::$completion_by_submission = false
protected

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

Referenced by isCompletionBySubmissionEnabled().

◆ $maxsize

assFileUpload::$maxsize
protected

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

Referenced by getMaxSize().

◆ DELETE_FILES_TBL_POSTVAR

const assFileUpload::DELETE_FILES_TBL_POSTVAR = 'deletefiles'

◆ REUSE_FILES_TBL_POSTVAR

const assFileUpload::REUSE_FILES_TBL_POSTVAR = 'reusefiles'

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