ILIAS  trunk Revision v5.2.0beta1-34132-g2d4d73d4a0
assFileUpload Class Reference

Class for file upload questions. 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 (bool $for_test=true, string $title='', string $author='', int $owner=-1, $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 ()
 
 determineMaxFilesize ()
 
 saveWorkingData ($active_id, $pass=null, $authorized=true)
 public More...
 
 getUserSolutionPreferingIntermediate ($active_id, $pass=null)
 
 removeIntermediateSolution (int $active_id, int $pass)
 
 getQuestionType ()
 
 getAdditionalTableName ()
 
 getAnswerTableName ()
 
 deleteAnswers ($question_id)
 
 getRTETextWithMediaObjects ()
 Collects all text in the question which could contain media objects which were created with the Rich Text Editor. More...
 
 setExportDetailsXLSX (ilAssExcelFormatHelper $worksheet, int $startrow, int $col, int $active_id, int $pass)
 {} More...
 
 fromXML ($item, int $questionpool_id, ?int $tst_id, &$tst_object, int &$question_counter, array $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)
 
 getBestSolution ($active_id, $pass)
 
 getMaxSize ()
 
 setMaxSize (?int $value)
 
 getAllowedExtensionsArray ()
 
 getAllowedExtensions ()
 
 setAllowedExtensions (string $a_value)
 
 hasFileUploads (int $test_id)
 
 deliverFileUploadZIPFile (int $ref_id, int $test_id, string $test_title)
 
 isCompletionBySubmissionEnabled ()
 
 setCompletionBySubmission (bool $bool)
 
 buildTestPresentationConfig ()
 
- Public Member Functions inherited from assQuestion
 __construct (string $title="", string $comment="", string $author="", int $owner=-1, string $question="")
 assQuestion constructor More...
 
 getShuffler ()
 
 setShuffler (Transformation $shuffler)
 
 setProcessLocker (ilAssQuestionProcessLocker $processLocker)
 
 getProcessLocker ()
 
 fromXML ($item, int $questionpool_id, ?int $tst_id, &$tst_object, int &$question_counter, array $import_mapping, array &$solutionhints=[])
 Receives parameters from a QTI parser and creates a valid ILIAS question object. More...
 
 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...
 
 isComplete ()
 Returns true, if a question is complete for use. 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 ()
 
 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 $authorizedSolution=true)
 returns the reached points ... More...
 
 calculateResultsFromSolution (int $active_id, int $pass, bool $obligationsEnabled=false)
 Calculates the question results from a previously saved question solution. More...
 
 persistWorkingState (int $active_id, $pass, bool $obligationsEnabled=false, bool $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 (int $active_id, int $pass, bool $authorized=true)
 Saves the learners input of the question to the database. More...
 
 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, $pass=null)
 
 getSolutionValues ($active_id, $pass=null, bool $authorized=true)
 Loads solutions of a given user from the database an returns it. More...
 
 getAdditionalTableName ()
 
 getAnswerTableName ()
 
 deleteAnswers (int $question_id)
 
 deleteAdditionalTableData (int $question_id)
 
 delete (int $question_id)
 
 getTotalAnswers ()
 
 copyXHTMLMediaObjectsOfQuestion (int $a_q_id)
 
 syncXHTMLMediaObjectsOfQuestion ()
 
 createPageObject ()
 
 copyPageOfQuestion (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=-1)
 
 saveToDb ()
 
 deleteSuggestedSolutions ()
 
 getSuggestedSolution (int $subquestion_index=0)
 
 resolveInternalLink (string $internal_link)
 
 _resolveIntLinks (int $question_id)
 
 syncWithOriginal ()
 
 getPoints ()
 
 setPoints (float $points)
 
 getSolutionMaxPass (int $active_id)
 
 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...
 
 buildHashedImageFilename (string $plain_image_filename, bool $unique=false)
 
 getQuestion ()
 
 getQuestionForHTMLOutput ()
 
 setQuestion (string $question="")
 
 getQuestionType ()
 Returns the question type of the question. More...
 
 getQuestionTypeID ()
 
 syncHints ()
 
 cleanupMediaObjectUsage ()
 
 getInstances ()
 
 getActiveUserData (int $active_id)
 Returns the user id and the test id for a given active id. More...
 
 hasSpecificFeedback ()
 
 setExportDetailsXLSX (ilAssExcelFormatHelper $worksheet, int $startrow, int $col, int $active_id, int $pass)
 
 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)
 
 ensureHintPageObjectExists ($pageObjectId)
 
 isAnswered (int $active_id, int $pass)
 
 getAdditionalContentEditingMode ()
 
 setAdditionalContentEditingMode (?string $additionalContentEditingMode)
 
 isAdditionalContentEditingModePageObject ()
 
 isValidAdditionalContentEditingMode (string $additionalContentEditingMode)
 
 getValidAdditionalContentEditingModes ()
 
 getHtmlUserSolutionPurifier ()
 
 getHtmlQuestionContentPurifier ()
 
 setLastChange ($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 ()
 
 duplicate (bool $for_test=true, string $title="", string $author="", int $owner=-1, $testObjId=null)
 
 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 $valuePairs)
 
 areObligationsToBeConsidered ()
 
 setObligationsToBeConsidered (bool $obligationsToBeConsidered)
 
 updateTimestamp ()
 
 getTestPresentationConfig ()
 
- Public Member Functions inherited from ilObjFileHandlingQuestionType
 getFileUploadPath (int $test_id, int $active_id, int $question_id=null)
 

Static Public Member Functions

static isObligationPossible (int $question_id)
 
- Static Public Member Functions inherited from assQuestion
static setForcePassResultUpdateEnabled (bool $forcePassResultsUpdateEnabled)
 
static isForcePassResultUpdateEnabled ()
 
static _getSuggestedSolutionOutput (int $question_id)
 
static _getReachedPoints (int $active_id, int $question_id, int $pass)
 
static logAction (string $logtext, int $active_id, int $question_id)
 
static isFileAvailable (string $file)
 
static saveOriginalId (int $questionId, int $originalId)
 
static resetOriginalId (int $questionId)
 
static _getInternalLinkHref (string $target="")
 
static instantiateQuestion (int $question_id)
 
static _getSolutionMaxPass (int $question_id, int $active_id)
 Returns the maximum pass a users question solution. More...
 
static _isWriteable (int $question_id, int $user_id)
 
static _setReachedPoints (int $active_id, int $question_id, float $points, float $maxpoints, int $pass, bool $manualscoring, bool $obligationsEnabled)
 Sets the points, a learner has reached answering the question Additionally objective results are updated. More...
 
static _needsManualScoring (int $question_id)
 
static getFeedbackClassNameByQuestionType (string $questionType)
 
static instantiateQuestionGUI (int $a_question_id)
 
static _questionExistsInTest (int $question_id, int $test_id)
 
static lookupParentObjId (int $questionId)
 
static isObligationPossible (int $questionId)
 
static implodeKeyValues (array $keyValues)
 
static explodeKeyValues (string $keyValues)
 
static convertISO8601FormatH_i_s_ExtendedToSeconds (string $time)
 
static extendedTrim (string $value)
 Trim non-printable characters from the beginning and end of a string. More...
 

Data Fields

const REUSE_FILES_TBL_POSTVAR = 'reusefiles'
 
const DELETE_FILES_TBL_POSTVAR = 'deletefiles'
 
- Data Fields inherited from assQuestion
const TRIM_PATTERN = '/^[\p{C}\p{Z}]+|[\p{C}\p{Z}]+$/u'
 
const ADDITIONAL_CONTENT_EDITING_MODE_RTE = 'default'
 
const ADDITIONAL_CONTENT_EDITING_MODE_IPE = 'pageobject'
 
ilAssQuestionFeedback $feedbackOBJ
 
bool $prevent_rte_usage = false
 
bool $selfassessmenteditingmode = false
 
int $defaultnroftries = 0
 
string $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...
 
 deletePreviewFileUploads ($userId, $userSolution, $files)
 
 getMaxFilesizeInBytes ()
 
 resolveRIDStoDelete ()
 
 removeSolutionRecordById (int $solution_id)
 
 savePreviewData (ilAssQuestionPreviewSession $previewSession)
 
 handleSubmission (int $active_id, int $pass, bool $obligations_answered, bool $authorized)
 
 isFileDeletionAction ()
 
 isFileDeletionSubmitAvailable ()
 
 isFileReuseSubmitAvailable ()
 
 isFileReuseHandlingRequired ()
 
 isFileUploadAvailable ()
 
- Protected Member Functions inherited from assQuestion
 getQuestionAction ()
 
 isNonEmptyItemListPostSubmission (string $postSubmissionFieldname)
 
 log (int $active_id, string $langVar)
 
 savePreviewData (ilAssQuestionPreviewSession $previewSession)
 
 deletePageOfQuestion (int $question_id)
 
 onDuplicate (int $originalParentId, int $originalQuestionId, int $duplicateParentId, int $duplicateQuestionId)
 
 beforeSyncWithOriginal (int $origQuestionId, int $dupQuestionId, int $origParentObjId, int $dupParentObjId)
 
 afterSyncWithOriginal (int $origQuestionId, int $dupQuestionId, int $origParentObjId, int $dupParentObjId)
 
 onCopy (int $sourceParentId, int $sourceQuestionId, int $targetParentId, int $targetQuestionId)
 
 syncSuggestedSolutions (int $target_question_id, int $target_obj_id)
 
 duplicateSuggestedSolutionFiles (int $parent_id, int $question_id)
 Duplicates the files of a suggested solution if the question is duplicated. More...
 
 syncSuggestedSolutionFiles (int $target_question_id, int $target_obj_id)
 
 copySuggestedSolutionFiles (int $source_questionpool_id, int $source_question_id)
 
 ensureNonNegativePoints ($points)
 
 purifyAndPrepareTextAreaOutput (string $content)
 
 getRTETextWithMediaObjects ()
 
 getSelfAssessmentFormatter ()
 
 lmMigrateQuestionTypeGenericContent (ilAssSelfAssessmentMigrator $migrator)
 
 lmMigrateQuestionTypeSpecificContent (ilAssSelfAssessmentMigrator $migrator)
 
 duplicateQuestionHints (int $originalQuestionId, int $duplicateQuestionId)
 
 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 ()
 build basic test question configuration instance More...
 
 getSuggestedSolutionsRepo ()
 
 loadSuggestedSolutions ()
 

Protected Attributes

const HAS_SPECIFIC_FEEDBACK = false
 
int $maxsize = null
 
string $allowedextensions = ''
 
 $completion_by_submission = false
 
- Protected Attributes inherited from assQuestion
const HAS_SPECIFIC_FEEDBACK = true
 
const DEFAULT_THUMB_SIZE = 150
 
const MINIMUM_THUMB_SIZE = 20
 
ILIAS TestQuestionPool QuestionInfoService $questioninfo
 
ILIAS Test TestParticipantInfoService $testParticipantInfo
 
ILIAS HTTP Services $http
 
ILIAS Refinery Factory $refinery
 
ILIAS TestQuestionPool QuestionFilesService $questionFilesService
 
ILIAS DI LoggingServices $ilLog
 
int $id
 
string $title
 
string $comment
 
string $owner
 
string $author
 
int $thumb_size
 
string $question
 The question text. More...
 
float $points
 The maximum available points for the question. More...
 
bool $shuffle
 Indicates whether the answers will be shuffled or not. More...
 
int $test_id
 The database id of a test in which the question is contained. More...
 
int $obj_id = 0
 Object id of the container object. More...
 
 $ilias
 
ilGlobalPageTemplate $tpl
 
ilLanguage $lng
 
ilDBInterface $db
 
Container $dic
 
array $suggested_solutions
 
int $original_id = null
 
 $page
 
string $external_id = null
 
ilAssQuestionProcessLocker $processLocker
 
 $step
 
 $lastChange
 
Transformation $shuffler
 
ilTestQuestionConfig $testQuestionConfig
 
ilAssQuestionLifecycle $lifecycle
 
ilObjUser $current_user
 
SkillUsageService $skillUsageService
 
assQuestionSuggestedSolutionsDatabaseRepository $suggestedsolution_repo = null
 

Private Attributes

ILIAS ResourceStorage Services $irss
 
ILIAS FileDelivery Services $file_delivery
 
ILIAS FileUpload FileUpload $file_upload
 

Additional Inherited Members

- Static Protected Member Functions inherited from assQuestion
static getNumExistingSolutionRecords (int $activeId, int $pass, int $questionId)
 
- Static Protected Attributes inherited from assQuestion
static $forcePassResultsUpdateEnabled = false
 
static $imageSourceFixReplaceMap
 

Detailed Description

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 32 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 64 of file class.assFileUpload.php.

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

70  {
72  global $DIC;
73  $this->irss = $DIC->resourceStorage();
74  $this->file_delivery = $DIC->fileDelivery();
75  $this->file_upload = $DIC->upload();
76  }
$DIC
Definition: xapitoken.php:62
string $question
The question text.
__construct(Container $dic, ilPlugin $plugin)
+ Here is the call graph for this function:

Member Function Documentation

◆ buildTestPresentationConfig()

assFileUpload::buildTestPresentationConfig ( )

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

References ilTestQuestionConfig\setFormChangeDetectionEnabled().

1091  {
1092  return parent::buildTestPresentationConfig()
1094  }
setFormChangeDetectionEnabled($enableFormChangeDetection)
Set if the detection of form changes is enabled.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
+ Here is the call graph for this function:

◆ 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 313 of file class.assFileUpload.php.

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

313  : float
314  {
315  if ($returndetails) {
316  throw new ilTestException('return details not implemented for ' . __METHOD__);
317  }
318 
319  if ($this->isCompletionBySubmissionEnabled()) {
320  if (is_null($pass)) {
321  $pass = $this->getSolutionMaxPass($active_id);
322  }
323 
324  global $DIC;
325 
326  $result = $this->getCurrentSolutionResultSet($active_id, $pass, $authorizedSolution);
327 
328  while ($data = $DIC->database()->fetchAssoc($result)) {
329  if ($this->isDummySolutionRecord($data)) {
330  continue;
331  }
332 
333  return $this->getPoints();
334  }
335  }
336 
337  return 0.0;
338  }
isDummySolutionRecord(array $solutionRecord)
Base Exception for all Exceptions relating to Modules/Test.
$DIC
Definition: xapitoken.php:62
getSolutionMaxPass(int $active_id)
getCurrentSolutionResultSet(int $active_id, int $pass, bool $authorized=true)
+ Here is the call graph for this function:

◆ calculateReachedPointsForSolution()

assFileUpload::calculateReachedPointsForSolution (   $userSolution)
protected

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

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

341  {
342  if ($this->isCompletionBySubmissionEnabled() &&
343  is_array($userSolution) &&
344  count($userSolution)) {
345  return $this->getPoints();
346  }
347 
348  return 0;
349  }
+ Here is the call graph for this function:

◆ checkUpload()

assFileUpload::checkUpload ( )

Check file upload.

Returns
boolean Input ok, true/false

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

References getAllowedExtensionsArray(), getMaxFilesizeInBytes(), and ILIAS\Repository\lng().

Referenced by savePreviewData(), and saveWorkingData().

356  : bool
357  {
358  $this->lng->loadLanguageModule('form');
359 
360  foreach (
361  $this->file_upload->getResults() as $upload_result
362  ) { // only one supported at the moment, but we check all
363  if (!$upload_result->isOK()) {
364  return false;
365  }
366 
367  // check file size
368  $size_bytes = $upload_result->getSize();
369  if ($size_bytes > $this->getMaxFilesizeInBytes()) {
370  $this->tpl->setOnScreenMessage('failure', $this->lng->txt('form_msg_file_size_exceeds'), true);
371  return false;
372  }
373 
374  // check suffixes
375  if (count($this->getAllowedExtensionsArray())) {
376  $filename_arr = pathinfo($upload_result->getName());
377  $suffix = $filename_arr['extension'];
378  $mimetype = $upload_result->getMimeType();
379  if ($suffix === '') {
380  $this->tpl->setOnScreenMessage('failure', $this->lng->txt('form_msg_file_missing_file_ext'), true);
381  return false;
382  }
383 
384  if (!in_array(strtolower($suffix), $this->getAllowedExtensionsArray(), true)) {
385  $this->tpl->setOnScreenMessage('failure', $this->lng->txt('form_msg_file_wrong_file_type'), true);
386  return false;
387  }
388  }
389  // virus handling already done in upload-service
390  }
391  return true;
392  }
+ 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 237 of file class.assFileUpload.php.

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

237  : int
238  {
239  if ($this->getId() <= 0) {
240  throw new RuntimeException('The question has not been saved. It cannot be duplicated');
241  }
242  // duplicate the question in database
243  $clone = $this;
244  $original_id = $this->questioninfo->getOriginalId($this->id);
245  $clone->id = -1;
246  $source_questionpool_id = $this->getObjId();
247  $clone->setObjId($target_questionpool_id);
248  if ($title) {
249  $clone->setTitle($title);
250  }
251  $clone->saveToDb();
252 
253  // copy question page content
254  $clone->copyPageOfQuestion($original_id);
255  // copy XHTML media objects
256  $clone->copyXHTMLMediaObjectsOfQuestion($original_id);
257 
258  $clone->onCopy($source_questionpool_id, $original_id, $clone->getObjId(), $clone->getId());
259 
260  return $clone->id;
261  }
+ Here is the call graph for this function:

◆ createNewOriginalFromThisDuplicate()

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

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

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

263  : int
264  {
265  if ($this->getId() <= 0) {
266  throw new RuntimeException('The question has not been saved. It cannot be duplicated');
267  }
268 
269  $sourceQuestionId = $this->id;
270  $sourceParentId = $this->getObjId();
271 
272  // duplicate the question in database
273  $clone = $this;
274  $clone->id = -1;
275 
276  $clone->setObjId($targetParentId);
277 
278  if ($targetQuestionTitle) {
279  $clone->setTitle($targetQuestionTitle);
280  }
281 
282  $clone->saveToDb();
283  // copy question page content
284  $clone->copyPageOfQuestion($sourceQuestionId);
285  // copy XHTML media objects
286  $clone->copyXHTMLMediaObjectsOfQuestion($sourceQuestionId);
287 
288  $clone->onCopy($sourceParentId, $sourceQuestionId, $clone->getObjId(), $clone->getId());
289 
290  return $clone->id;
291  }
+ Here is the call graph for this function:

◆ deleteAnswers()

assFileUpload::deleteAnswers (   $question_id)
Parameters
integer$question_idThe question id which should be deleted in the answers table

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

944  : void
945  {
946  }

◆ deletePreviewFileUploads()

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

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

References getPreviewFileUploadPath().

Referenced by savePreviewData().

590  {
591  foreach ($files as $name) {
592  if (isset($userSolution[$name])) {
593  unset($userSolution[$name]);
594  @unlink($this->getPreviewFileUploadPath($userId) . $name);
595  }
596  }
597 
598  return $userSolution;
599  }
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:

◆ deliverFileUploadZIPFile()

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

Implements ilObjFileHandlingQuestionType.

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

References ILIAS\Repository\lng().

1059  : void
1060  {
1061  $exporter = new ilAssFileUploadUploadsExporter(
1062  $this->db,
1063  $this->lng,
1064  $ref_id,
1065  $test_id
1066  );
1067 
1068  $exporter->setTestTitle($test_title);
1069  $exporter->setQuestion($this);
1070 
1071  $exporter->buildAndDownload();
1072  }
$ref_id
Definition: ltiauth.php:65
int $test_id
The database id of a test in which the question is contained.
+ Here is the call graph for this function:

◆ determineMaxFilesize()

assFileUpload::determineMaxFilesize ( )

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

Referenced by getMaxFilesizeInBytes().

625  : int
626  {
627  $upload_max_filesize = ini_get('upload_max_filesize');
628  $post_max_size = ini_get('post_max_size');
629 
630  //convert from short-string representation to "real" bytes
631  $multiplier_a = [ "K" => 1024, "M" => 1024 * 1024, "G" => 1024 * 1024 * 1024 ];
632  $umf_parts = preg_split(
633  "/(\d+)([K|G|M])/",
634  $upload_max_filesize,
635  -1,
636  PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY
637  );
638  $pms_parts = preg_split(
639  "/(\d+)([K|G|M])/",
640  $post_max_size,
641  -1,
642  PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY
643  );
644 
645  if (count($umf_parts) === 2) {
646  $upload_max_filesize = $umf_parts[0] * $multiplier_a[$umf_parts[1]];
647  }
648 
649  if (count($pms_parts) === 2) {
650  $post_max_size = $pms_parts[0] * $multiplier_a[$pms_parts[1]];
651  }
652 
653  // use the smaller one as limit
654  $max_filesize = min($upload_max_filesize, $post_max_size);
655 
656  if (!$max_filesize) {
657  $max_filesize = max($upload_max_filesize, $post_max_size);
658  return $max_filesize;
659  }
660 
661  return $max_filesize;
662  }
+ Here is the caller graph for this function:

◆ duplicate()

assFileUpload::duplicate ( bool  $for_test = true,
string  $title = '',
string  $author = '',
int  $owner = -1,
  $testObjId = null 
)

Duplicates an assFileUpload.

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

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

190  : int {
191  if ($this->id <= 0) {
192  // The question has not been saved. It cannot be duplicated
193  return -1;
194  }
195  // duplicate the question in database
196  $this_id = $this->getId();
197  $thisObjId = $this->getObjId();
198 
199  $clone = $this;
200  $original_id = $this->questioninfo->getOriginalId($this->id);
201  $clone->id = -1;
202 
203  if ((int) $testObjId > 0) {
204  $clone->setObjId($testObjId);
205  }
206 
207  if ($title) {
208  $clone->setTitle($title);
209  }
210 
211  if ($author) {
212  $clone->setAuthor($author);
213  }
214  if ($owner) {
215  $clone->setOwner($owner);
216  }
217 
218  if ($for_test) {
219  $clone->saveToDb($original_id);
220  } else {
221  $clone->saveToDb();
222  }
223 
224  // copy question page content
225  $clone->copyPageOfQuestion($this_id);
226  // copy XHTML media objects
227  $clone->copyXHTMLMediaObjectsOfQuestion($this_id);
228 
229  $clone->onDuplicate($thisObjId, $this_id, $clone->getObjId(), $clone->getId());
230 
231  return $clone->id;
232  }
+ Here is the call graph for this function:

◆ fromXML()

assFileUpload::fromXML (   $item,
int  $questionpool_id,
?int  $tst_id,
$tst_object,
int &  $question_counter,
array  $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
ilQTIItem$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 991 of file class.assFileUpload.php.

991  : array
992  {
993  $import = new assFileUploadImport($this);
994  return $import->fromXML($item, $questionpool_id, $tst_id, $tst_object, $question_counter, $import_mapping);
995  }
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...

◆ getAdditionalTableName()

assFileUpload::getAdditionalTableName ( )

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

Referenced by loadFromDb(), and saveAdditionalQuestionDataToDb().

931  : string
932  {
933  return 'qpl_qst_fileupload';
934  }
+ Here is the caller graph for this function:

◆ getAllowedExtensions()

assFileUpload::getAllowedExtensions ( )

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

References $allowedextensions.

Referenced by saveAdditionalQuestionDataToDb().

1028  : string
1029  {
1030  return $this->allowedextensions;
1031  }
+ Here is the caller graph for this function:

◆ getAllowedExtensionsArray()

assFileUpload::getAllowedExtensionsArray ( )

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

Referenced by checkUpload().

1019  : array
1020  {
1021  if ($this->allowedextensions === '') {
1022  return [];
1023  }
1024 
1025  return array_filter(array_map('trim', explode(',', $this->allowedextensions)));
1026  }
+ Here is the caller graph for this function:

◆ getAnswerTableName()

assFileUpload::getAnswerTableName ( )

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

936  : string
937  {
938  return '';
939  }

◆ getBestSolution()

assFileUpload::getBestSolution (   $active_id,
  $pass 
)

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

1003  : array
1004  {
1005  $user_solution = [];
1006  return $user_solution;
1007  }

◆ getFileUploadPath()

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

Returns the filesystem path for file uploads.

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

References CLIENT_WEB_DIR, and assQuestion\getId().

Referenced by getUploadedFilesForWeb().

397  : string
398  {
399  if (is_null($question_id)) {
400  $question_id = $this->getId();
401  }
402  return CLIENT_WEB_DIR . "/assessment/tst_{$test_id}/{$active_id}/{$question_id}/files/";
403  }
const CLIENT_WEB_DIR
Definition: constants.php:47
+ 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 418 of file class.assFileUpload.php.

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

Referenced by getUploadedFilesForWeb().

419  {
420  if (is_null($question_id)) {
421  $question_id = $this->getId();
422  }
424  . "/assessment/tst_{$test_id}/{$active_id}/{$question_id}/files/";
425  return str_replace(
426  ilFileUtils::removeTrailingPathSeparators(ILIAS_ABSOLUTE_PATH),
428  $webdir
429  );
430  }
static removeTrailingPathSeparators(string $path)
const CLIENT_WEB_DIR
Definition: constants.php:47
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getMaxFilesizeAsString()

assFileUpload::getMaxFilesizeAsString ( )

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

References getMaxFilesizeInBytes().

601  : string
602  {
603  $size = $this->getMaxFilesizeInBytes();
604  if ($size < 1024) {
605  return sprintf('%d Bytes', $size);
606  }
607 
608  if ($size < 1024 * 1024) {
609  return sprintf('%.1f KB', $size / 1024);
610  }
611 
612  return sprintf('%.1f MB', $size / 1024 / 1024);
613  }
+ Here is the call graph for this function:

◆ getMaxFilesizeInBytes()

assFileUpload::getMaxFilesizeInBytes ( )
protected

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

References determineMaxFilesize(), and getMaxSize().

Referenced by checkUpload(), and getMaxFilesizeAsString().

615  : int
616  {
617  if ($this->getMaxSize() > 0) {
618  return $this->getMaxSize();
619  }
620 
621  return $this->determineMaxFilesize();
622  }
+ 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 298 of file class.assFileUpload.php.

References assQuestion\getPoints().

Referenced by isComplete().

298  : float
299  {
300  return $this->getPoints();
301  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getMaxSize()

assFileUpload::getMaxSize ( )

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

References $maxsize.

Referenced by getMaxFilesizeInBytes(), and saveAdditionalQuestionDataToDb().

1009  : ?int
1010  {
1011  return $this->maxsize;
1012  }
+ Here is the caller graph for this function:

◆ getPreviewFileUploadPath()

assFileUpload::getPreviewFileUploadPath (   $userId)
protected

Returns the filesystem path for file uploads.

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

References CLIENT_WEB_DIR.

Referenced by deletePreviewFileUploads(), and savePreviewData().

408  : string
409  {
410  return CLIENT_WEB_DIR . "/assessment/qst_preview/{$userId}/{$this->getId()}/fileuploads/";
411  }
const CLIENT_WEB_DIR
Definition: constants.php:47
+ Here is the caller graph for this function:

◆ getPreviewFileUploadPathWeb()

assFileUpload::getPreviewFileUploadPathWeb (   $userId)
protected

Returns the filesystem path for file uploads.

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

References CLIENT_WEB_DIR, and ilFileUtils\removeTrailingPathSeparators().

Referenced by savePreviewData().

436  {
438  . "/assessment/qst_preview/{$userId}/{$this->getId()}/fileuploads/";
439  return str_replace(
440  ilFileUtils::removeTrailingPathSeparators(ILIAS_ABSOLUTE_PATH),
442  $webdir
443  );
444  }
static removeTrailingPathSeparators(string $path)
const CLIENT_WEB_DIR
Definition: constants.php:47
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getPreviewFileUploads()

assFileUpload::getPreviewFileUploads ( ilAssQuestionPreviewSession  $previewSession)

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

References ilAssQuestionPreviewSession\getParticipantsSolution().

477  : array
478  {
479  if ($previewSession->getParticipantsSolution() === false || $previewSession->getParticipantsSolution() === null) {
480  return [];
481  }
482 
483  return $previewSession->getParticipantsSolution();
484  }
+ Here is the call graph for this function:

◆ getQuestionType()

assFileUpload::getQuestionType ( )

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

925  : string
926  {
927  return 'assFileUpload';
928  //return QuestionIdentifiers::FILE_UPLOAD_IDENTIFIER;
929  }

◆ 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 952 of file class.assFileUpload.php.

952  : string
953  {
954  return parent::getRTETextWithMediaObjects();
955  }

◆ 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 451 of file class.assFileUpload.php.

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

Referenced by getUploadedFilesForWeb(), and handleSubmission().

451  : array
452  {
453  global $DIC;
454  $ilDB = $DIC['ilDB'];
455 
456  if (is_null($pass)) {
457  $pass = $this->getSolutionMaxPass($active_id);
458  }
459  // fau: testNav - check existing value1 because the intermediate solution will have a dummy entry
460  $result = $ilDB->queryF(
461  'SELECT * FROM tst_solutions WHERE active_fi = %s '
462  . 'AND question_fi = %s AND pass = %s AND authorized = %s '
463  . 'AND value1 IS NOT NULL ORDER BY tstamp',
464  ['integer', 'integer', 'integer', 'integer'],
465  [$active_id, $this->getId(), $pass, (int) $authorized]
466  );
467  // fau.
468  $found = [];
469 
470  while ($data = $ilDB->fetchAssoc($result)) {
471  array_push($found, $data);
472  }
473 
474  return $found;
475  }
$DIC
Definition: xapitoken.php:62
getSolutionMaxPass(int $active_id)
+ 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 491 of file class.assFileUpload.php.

References $data, $path, assQuestion\$step, assQuestion\$test_id, $url, getFileUploadPath(), getFileUploadPathWeb(), assQuestion\getSolutionValues(), assQuestion\getStep(), getUploadedFiles(), and assQuestion\setStep().

491  : array
492  {
493  $found = $this->getUploadedFiles($active_id, $pass);
494  $result = $this->db->queryF(
495  'SELECT test_fi FROM tst_active WHERE active_id = %s',
496  ['integer'],
497  [$active_id]
498  );
499  if ($result->numRows() == 1) {
500  $row = $this->db->fetchAssoc($result);
501  $test_id = $row['test_fi'];
502  $path = $this->getFileUploadPathWeb($test_id, $active_id);
503  foreach ($found as $idx => $data) {
504  // depending on whether the files are already stored in the IRSS or not, the files are compiled differently here.
505  // this can be removed with ILIAs 10 and switched exclusively to the IRSS variant.
506  // We recommend then to revise the whole handling of files
507 
508  if ($data['value2'] === 'rid') {
509  $rid = $this->irss->manage()->find($data['value1']);
510  if($rid === null) {
511  continue;
512  }
513  $revision = $this->irss->manage()->getCurrentRevision($rid);
514  $stream = $this->irss->consume()->stream($rid)->getStream();
515  $url = $this->file_delivery->buildTokenURL(
516  $stream,
517  $revision->getTitle(),
518  Disposition::ATTACHMENT,
519  $this->current_user->getId(),
520  1
521  );
522 
523  $path = (string) $url;
524  $found[$idx]['webpath'] = $path;
525  $found[$idx]['value2'] = $revision->getTitle();
526  } else {
527  $found[$idx]['webpath'] = $path;
528  }
529  }
530  }
531  return $found;
532  }
getFileUploadPathWeb($test_id, $active_id, $question_id=null)
Returns the file upload path for web accessible files of a question.
$path
Definition: ltiservices.php:30
$url
Definition: ltiregstart.php:36
int $test_id
The database id of a test in which the question is contained.
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 
)
Parameters
int$active_id
int | null$pass

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

References assQuestion\getSolutionValues().

822  : array
823  {
824  $solution = $this->getSolutionValues($active_id, $pass, false);
825 
826  if (!count($solution)) {
827  $solution = $this->getSolutionValues($active_id, $pass, true);
828  } else {
829  $cleaned = [];
830  foreach ($solution as $row) {
831  if (!empty($row['value1'])) {
832  $cleaned[] = $row;
833  }
834  }
835  $solution = $cleaned;
836  }
837 
838  return $solution;
839  }
getSolutionValues($active_id, $pass=null, bool $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 ( int  $active_id,
int  $pass,
bool  $obligations_answered,
bool  $authorized 
)
protected

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

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

905  : void
906  {
907  if (!$authorized
909  || !$this->getUploadedFiles($active_id, $pass, $authorized)) {
910  return;
911  }
912 
913  $maxpoints = $this->questioninfo->getMaximumPoints($this->getId());
914 
915  $points = $maxpoints;
916 
917  assQuestion::_setReachedPoints($active_id, $this->getId(), $points, $maxpoints, $pass, true, $obligations_answered);
918 
920  ilObjTest::_getObjectIDFromActiveID((int) $active_id),
921  ilObjTestAccess::_getParticipantId((int) $active_id)
922  );
923  }
static _getParticipantId($active_id)
Get user id for active id.
static _getObjectIDFromActiveID($active_id)
Returns the ILIAS test object id for a given active id.
float $points
The maximum available points for the question.
static _setReachedPoints(int $active_id, int $question_id, float $points, float $maxpoints, int $pass, bool $manualscoring, bool $obligationsEnabled)
Sets the points, a learner has reached answering the question Additionally objective results are upda...
getUploadedFiles($active_id, $pass=null, $authorized=true)
Returns the uploaded files for an active user in a given pass.
static _updateStatus(int $a_obj_id, int $a_usr_id, ?object $a_obj=null, bool $a_percentage=false, bool $a_force_raise=false)
+ Here is the call graph for this function:

◆ hasFileUploads()

assFileUpload::hasFileUploads ( int  $test_id)

Implements ilObjFileHandlingQuestionType.

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

References assQuestion\getId().

1038  : bool
1039  {
1040  $query = '
1041  SELECT tst_solutions.solution_id
1042  FROM tst_solutions, tst_active, qpl_questions
1043  WHERE tst_solutions.active_fi = tst_active.active_id
1044  AND tst_solutions.question_fi = qpl_questions.question_id
1045  AND tst_solutions.question_fi = %s AND tst_active.test_fi = %s
1046  AND tst_solutions.value1 is not null';
1047  $result = $this->db->queryF(
1048  $query,
1049  ['integer', 'integer'],
1050  [$this->getId(), $test_id]
1051  );
1052  if ($result->numRows() > 0) {
1053  return true;
1054  }
1055 
1056  return false;
1057  }
int $test_id
The database id of a test in which the question is contained.
+ Here is the call graph for this function:

◆ 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 83 of file class.assFileUpload.php.

References getMaximumPoints().

83  : bool
84  {
85  if (
86  strlen($this->title)
87  && ($this->author)
88  && ($this->question)
89  && ($this->getMaximumPoints() >= 0)
90  && is_numeric($this->getMaximumPoints())) {
91  return true;
92  }
93  return false;
94  }
getMaximumPoints()
Returns the maximum points, a learner can reach answering the question.
+ Here is the call graph for this function:

◆ isCompletionBySubmissionEnabled()

assFileUpload::isCompletionBySubmissionEnabled ( )

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

References $completion_by_submission.

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

1074  : bool
1075  {
1077  }
+ Here is the caller graph for this function:

◆ isFileDeletionAction()

assFileUpload::isFileDeletionAction ( )
protected

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

References assFileUploadGUI\DELETE_FILES_ACTION, and assQuestion\getQuestionAction().

Referenced by resolveRIDStoDelete(), savePreviewData(), and saveWorkingData().

1096  : bool
1097  {
1099  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isFileDeletionSubmitAvailable()

assFileUpload::isFileDeletionSubmitAvailable ( )
protected

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

References assQuestion\isNonEmptyItemListPostSubmission().

Referenced by resolveRIDStoDelete(), savePreviewData(), and saveWorkingData().

1101  : bool
1102  {
1103  return $this->isNonEmptyItemListPostSubmission(self::DELETE_FILES_TBL_POSTVAR);
1104  }
isNonEmptyItemListPostSubmission(string $postSubmissionFieldname)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isFileReuseHandlingRequired()

assFileUpload::isFileReuseHandlingRequired ( )
protected

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

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

Referenced by saveWorkingData().

1111  : bool
1112  {
1113  if (!$this->getTestPresentationConfig()->isPreviousPassSolutionReuseAllowed()) {
1114  return false;
1115  }
1116 
1117  if (!$this->isFileReuseSubmitAvailable()) {
1118  return false;
1119  }
1120 
1121  return true;
1122  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isFileReuseSubmitAvailable()

assFileUpload::isFileReuseSubmitAvailable ( )
protected

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

References assQuestion\isNonEmptyItemListPostSubmission().

Referenced by isFileReuseHandlingRequired().

1106  : bool
1107  {
1108  return $this->isNonEmptyItemListPostSubmission(self::REUSE_FILES_TBL_POSTVAR);
1109  }
isNonEmptyItemListPostSubmission(string $postSubmissionFieldname)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isFileUploadAvailable()

assFileUpload::isFileUploadAvailable ( )
protected

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

Referenced by savePreviewData(), and saveWorkingData().

1124  : bool
1125  {
1126  if (!$this->file_upload->hasBeenProcessed()) {
1127  $this->file_upload->process();
1128  }
1129  return $this->file_upload->hasUploads();
1130  }
+ Here is the caller graph for this function:

◆ isObligationPossible()

static assFileUpload::isObligationPossible ( int  $question_id)
static

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

1085  : bool
1086  {
1087  return true;
1088  }

◆ 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 138 of file class.assFileUpload.php.

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

138  : void
139  {
140  global $DIC;
141  $ilDB = $DIC['ilDB'];
142  $result = $ilDB->queryF(
143  'SELECT qpl_questions.*, ' . $this->getAdditionalTableName()
144  . '.* FROM qpl_questions LEFT JOIN ' . $this->getAdditionalTableName()
145  . ' ON ' . $this->getAdditionalTableName()
146  . '.question_fi = qpl_questions.question_id WHERE qpl_questions.question_id = %s',
147  ['integer'],
148  [$question_id]
149  );
150  if ($result->numRows() == 1) {
151  $data = $ilDB->fetchAssoc($result);
152  $this->setId($question_id);
153  $this->setTitle((string) $data['title']);
154  $this->setComment((string) $data['description']);
155  $this->setNrOfTries($data['nr_of_tries']);
156  $this->setOriginalId($data['original_id']);
157  $this->setObjId($data['obj_fi']);
158  $this->setAuthor($data['author']);
159  $this->setOwner($data['owner']);
160  $this->setPoints($data['points']);
161 
162  $this->setQuestion(ilRTE::_replaceMediaObjectImageSrc((string) $data['question_text'], 1));
163  $this->setMaxSize(($data['maxsize'] ?? null) ? (int) $data['maxsize'] : null);
164  $this->setAllowedExtensions($data['allowedextensions'] ?? '');
165  $this->setCompletionBySubmission($data['compl_by_submission'] == 1 ? true : false);
166 
167  try {
171  }
172 
173  try {
174  $this->setAdditionalContentEditingMode($data['add_cont_edit_mode']);
175  } catch (ilTestQuestionPoolException $e) {
176  }
177  }
178  parent::loadFromDb($question_id);
179  }
static _replaceMediaObjectImageSrc(string $a_text, int $a_direction=0, string $nic='')
Replaces image source from mob image urls with the mob id or replaces mob id with the correct image s...
setNrOfTries(int $a_nr_of_tries)
setOwner(int $owner=-1)
setMaxSize(?int $value)
setComment(string $comment="")
setCompletionBySubmission(bool $bool)
$DIC
Definition: xapitoken.php:62
setPoints(float $points)
setObjId(int $obj_id=0)
setId(int $id=-1)
setOriginalId(?int $original_id)
setTitle(string $title="")
setLifecycle(ilAssQuestionLifecycle $lifecycle)
setAuthor(string $author="")
setAdditionalContentEditingMode(?string $additionalContentEditingMode)
setAllowedExtensions(string $a_value)
setQuestion(string $question="")
+ Here is the call graph for this function:

◆ removeIntermediateSolution()

assFileUpload::removeIntermediateSolution ( int  $active_id,
int  $pass 
)

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

References assQuestion\$test_id.

842  : void
843  {
844  parent::removeIntermediateSolution($active_id, $pass);
845 
846  $test_id = $this->testParticipantInfo->lookupTestIdByActiveId($active_id);
847  if ($test_id !== -1) {
848  // TODO: This can be removed with ILIAS 10
849  $this->deleteUnusedFiles([], $test_id, $active_id, $pass);
850  }
851  }
int $test_id
The database id of a test in which the question is contained.

◆ removeSolutionRecordById()

assFileUpload::removeSolutionRecordById ( int  $solution_id)
protected

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

Referenced by saveWorkingData().

813  : int
814  {
815  return parent::removeSolutionRecordById($solution_id);
816  }
+ Here is the caller graph for this function:

◆ resolveRIDStoDelete()

assFileUpload::resolveRIDStoDelete ( )
protected

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

References Vendor\Package\$d, $res, isFileDeletionAction(), and isFileDeletionSubmitAvailable().

Referenced by saveWorkingData().

794  : array
795  {
796  $rids_to_delete = [];
797  if ($this->isFileDeletionAction() && $this->isFileDeletionSubmitAvailable()) {
798  $res = $this->db->query(
799  "SELECT value1 FROM tst_solutions WHERE value2 = 'rid' AND " . $this->db->in(
800  'solution_id',
801  $_POST[self::DELETE_FILES_TBL_POSTVAR],
802  false,
803  'integer'
804  )
805  );
806  while ($d = $this->db->fetchAssoc($res)) {
807  $rids_to_delete[] = $d['value1'];
808  }
809  }
810  return $rids_to_delete;
811  }
$res
Definition: ltiservices.php:67
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ saveAdditionalQuestionDataToDb()

assFileUpload::saveAdditionalQuestionDataToDb ( )

Saves a record to the question types additional data table.

Returns
mixed

Implements ilObjQuestionScoringAdjustable.

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

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

Referenced by saveToDb().

112  {
113  global $DIC;
114  $ilDB = $DIC['ilDB'];
115  $ilDB->manipulateF(
116  'DELETE FROM ' . $this->getAdditionalTableName() . ' WHERE question_fi = %s',
117  ['integer'],
118  [$this->getId()]
119  );
120  $ilDB->manipulateF(
121  'INSERT INTO ' . $this->getAdditionalTableName(
122  ) . ' (question_fi, maxsize, allowedextensions, compl_by_submission) VALUES (%s, %s, %s, %s)',
123  ['integer', 'float', 'text', 'integer' ],
124  [
125  $this->getId(),
126  $this->getMaxSize(),
127  (strlen($this->getAllowedExtensions())) ? $this->getAllowedExtensions() : null,
128  (int) $this->isCompletionBySubmissionEnabled()
129  ]
130  );
131  }
$DIC
Definition: xapitoken.php:62
+ 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 854 of file class.assFileUpload.php.

References $version, checkUpload(), deletePreviewFileUploads(), ilAssQuestionPreviewSession\getParticipantsSolution(), getPreviewFileUploadPath(), getPreviewFileUploadPathWeb(), ilAssQuestionPreviewSession\getUserId(), isFileDeletionAction(), isFileDeletionSubmitAvailable(), isFileUploadAvailable(), ILIAS\Repository\lng(), ilFileUtils\makeDirParents(), ilFileUtils\moveUploadedFile(), and ilAssQuestionPreviewSession\setParticipantsSolution().

854  : void
855  {
856  $userSolution = $previewSession->getParticipantsSolution();
857 
858  if (!is_array($userSolution)) {
859  $userSolution = [];
860  }
861 
862  // hey: prevPassSolutions - readability spree - get a chance to understand the code
863  if ($this->isFileDeletionAction()) {
864  // hey.
865  // hey: prevPassSolutions - readability spree - get a chance to understand the code
866  if ($this->isFileDeletionSubmitAvailable()) {
867  // hey.
868  $userSolution = $this->deletePreviewFileUploads($previewSession->getUserId(), $userSolution, $_POST['deletefiles']);
869  } else {
870  $this->tpl->setOnScreenMessage('info', $this->lng->txt('no_checkbox'), true);
871  }
872  } else {
873  // hey: prevPassSolutions - readability spree - get a chance to understand the code
874  if ($this->isFileUploadAvailable()) {
875  // hey.
876  if ($this->checkUpload()) {
877  if (!@file_exists($this->getPreviewFileUploadPath($previewSession->getUserId()))) {
879  }
880 
881  $version = time();
882  $filename_arr = pathinfo($_FILES['upload']['name']);
883  $extension = $filename_arr['extension'];
884  $newfile = 'file_' . md5($_FILES['upload']['name']) . '_' . $version . '.' . $extension;
886  $_FILES['upload']['tmp_name'],
887  $_FILES['upload']['name'],
888  $this->getPreviewFileUploadPath($previewSession->getUserId()) . $newfile
889  );
890 
891  $userSolution[$newfile] = [
892  'solution_id' => $newfile,
893  'value1' => $newfile,
894  'value2' => $_FILES['upload']['name'],
895  'tstamp' => $version,
896  'webpath' => $this->getPreviewFileUploadPathWeb($previewSession->getUserId())
897  ];
898  }
899  }
900  }
901 
902  $previewSession->setParticipantsSolution($userSolution);
903  }
getPreviewFileUploadPathWeb($userId)
Returns the filesystem path for file uploads.
$version
Definition: plugin.php:24
deletePreviewFileUploads($userId, $userSolution, $files)
static makeDirParents(string $a_dir)
Create a new directory and all parent directories.
checkUpload()
Check file upload.
static moveUploadedFile(string $a_file, string $a_name, string $a_target, bool $a_raise_errors=true, string $a_mode="move_uploaded")
move uploaded file
getPreviewFileUploadPath($userId)
Returns the filesystem path for file uploads.
+ Here is the call graph for this function:

◆ saveToDb()

assFileUpload::saveToDb (   $original_id = '')

Saves a assFileUpload object to a database.

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

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

99  : void
100  {
101  if ($original_id == '') {
102  $this->saveQuestionDataToDb();
103  } else {
105  }
106 
108  parent::saveToDb();
109  }
saveAdditionalQuestionDataToDb()
Saves a record to the question types additional data table.
saveQuestionDataToDb(int $original_id=-1)
+ Here is the call graph for this function:

◆ saveWorkingData()

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

public

Parameters
integer$active_idActive id of the user
integer$passTest pass

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

References assQuestion\$test_id, ilObjAssessmentFolder\_enabledAssessmentLogging(), ilObjAssessmentFolder\_getLogLanguage(), ilObjTest\_getPass(), checkUpload(), assQuestion\deleteDummySolutionRecord(), assQuestion\forceExistingIntermediateSolution(), assQuestion\getId(), assQuestion\getProcessLocker(), assQuestion\getSolutionRecordById(), assQuestion\intermediateSolutionExists(), isFileDeletionAction(), isFileDeletionSubmitAvailable(), isFileReuseHandlingRequired(), isFileUploadAvailable(), ILIAS\Repository\lng(), assQuestion\logAction(), assQuestion\removeCurrentSolution(), removeSolutionRecordById(), resolveRIDStoDelete(), assQuestion\saveCurrentSolution(), and assQuestion\updateCurrentSolutionsAuthorization().

669  : bool
670  {
671  if ($pass === null || $pass < 0) {
672  $pass = \ilObjTest::_getPass($active_id);
673  }
674 
675  $test_id = $this->testParticipantInfo->lookupTestIdByActiveId($active_id);
676 
677  $upload_handling_required = $this->isFileUploadAvailable() && $this->checkUpload();
678  $rid = null;
679 
680  if ($upload_handling_required) {
681  // upload new file to storage
682  $upload_results = $this->file_upload->getResults();
683  $upload_result = end($upload_results); // only one supported at the moment
684  $rid = $this->irss->manage()->upload(
685  $upload_result,
687  );
688  }
689 
690  $entered_values = false;
691 
692  // RIDS to delete
693  // Unfortunately, at the moment it is not possible to delete the files from the IRSS, because the process takes
694  // place within the ProcessLocker and the IRSS tables cannot be used. we have to remove them after the lock.
695  // therefore we store the rids to delete in an array for later deletion.
696 
697  $rids_to_delete = $this->resolveRIDStoDelete();
698 
699  $this->getProcessLocker()->executeUserSolutionUpdateLockOperation(
700  function () use (
701  &$entered_values,
702  $upload_handling_required,
703  $test_id,
704  $active_id,
705  $pass,
706  $authorized,
707  $rid
708  ) {
709  if ($authorized === false) {
710  $this->forceExistingIntermediateSolution($active_id, $pass, true);
711  }
712 
713  if ($this->isFileDeletionAction()) {
714  if ($this->isFileDeletionSubmitAvailable()) {
715  foreach ($_POST[self::DELETE_FILES_TBL_POSTVAR] as $solution_id) {
716  $this->removeSolutionRecordById($solution_id);
717  }
718  } else {
719  $this->tpl->setOnScreenMessage('info', $this->lng->txt('no_checkbox'), true);
720  }
721  } else {
722  if ($this->isFileReuseHandlingRequired()) {
723  foreach ($_POST[self::REUSE_FILES_TBL_POSTVAR] as $solutionId) {
724  $solution = $this->getSolutionRecordById($solutionId);
725 
726  $this->saveCurrentSolution(
727  $active_id,
728  $pass,
729  $solution['value1'],
730  $solution['value2'],
731  false,
732  $solution['tstamp']
733  );
734  }
735  }
736 
737  if ($upload_handling_required && $rid !== null) {
738 
739  $revision = $this->irss->manage()->getCurrentRevision($rid);
740 
741  $this->saveCurrentSolution(
742  $active_id,
743  $pass,
744  $rid->serialize(),
745  'rid',
746  false,
747  time()
748  );
749 
750  $entered_values = true;
751  }
752  }
753 
754  if ($authorized === true && $this->intermediateSolutionExists($active_id, $pass)) {
755  // remove the dummy record of the intermediate solution
756  $this->deleteDummySolutionRecord($active_id, $pass);
757 
758  // delete the authorized solution and make the intermediate solution authorized (keeping timestamps)
759  $this->removeCurrentSolution($active_id, $pass, true);
760  $this->updateCurrentSolutionsAuthorization($active_id, $pass, true, true);
761  }
762 
763  }
764  );
765 
766  $this->deleteUnusedFiles(
767  $rids_to_delete,
768  $test_id,
769  $active_id,
770  $pass
771  );
772 
773  if ($entered_values) {
775  assQuestion::logAction($this->lng->txtlng(
776  'assessment',
777  'log_user_entered_values',
779  ), $active_id, $this->getId());
780  }
781  } else {
783  assQuestion::logAction($this->lng->txtlng(
784  'assessment',
785  'log_user_not_entered_values',
787  ), $active_id, $this->getId());
788  }
789  }
790 
791  return true;
792  }
static _getPass($active_id)
Retrieves the actual pass of a given user for a given test.
updateCurrentSolutionsAuthorization(int $activeId, int $pass, bool $authorized, bool $keepTime=false)
deleteDummySolutionRecord(int $activeId, int $passIndex)
saveCurrentSolution(int $active_id, int $pass, $value1, $value2, bool $authorized=true, $tstamp=0)
static logAction(string $logtext, int $active_id, int $question_id)
checkUpload()
Check file upload.
intermediateSolutionExists(int $active_id, int $pass)
int $test_id
The database id of a test in which the question is contained.
removeCurrentSolution(int $active_id, int $pass, bool $authorized=true)
removeSolutionRecordById(int $solution_id)
forceExistingIntermediateSolution(int $activeId, int $passIndex, bool $considerDummyRecordCreation)
getSolutionRecordById(int $solutionId)
+ Here is the call graph for this function:

◆ setAllowedExtensions()

assFileUpload::setAllowedExtensions ( string  $a_value)

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

Referenced by loadFromDb().

1033  : void
1034  {
1035  $this->allowedextensions = strtolower(trim($a_value));
1036  }
+ Here is the caller graph for this function:

◆ setCompletionBySubmission()

assFileUpload::setCompletionBySubmission ( bool  $bool)

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

Referenced by loadFromDb().

1079  : assFileUpload
1080  {
1081  $this->completion_by_submission = (bool) $bool;
1082  return $this;
1083  }
Class for file upload questions.
+ Here is the caller graph for this function:

◆ setExportDetailsXLSX()

assFileUpload::setExportDetailsXLSX ( ilAssExcelFormatHelper  $worksheet,
int  $startrow,
int  $col,
int  $active_id,
int  $pass 
)

{}

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

References $i, ilExcel\getColumnCoord(), assQuestion\getSolutionValues(), ILIAS\Repository\lng(), ilExcel\setBold(), and ilAssExcelFormatHelper\setCell().

960  : int
961  {
962  parent::setExportDetailsXLSX($worksheet, $startrow, $col, $active_id, $pass);
963 
964  $i = 1;
965  $solutions = $this->getSolutionValues($active_id, $pass);
966  foreach ($solutions as $solution) {
967  $worksheet->setCell($startrow + $i, $col, $this->lng->txt('result'));
968  $worksheet->setBold($worksheet->getColumnCoord($col) . ($startrow + $i));
969  if (strlen($solution['value1'])) {
970  $worksheet->setCell($startrow + $i, $col + 2, $solution['value1']);
971  $worksheet->setCell($startrow + $i, $col + 3, $solution['value2']);
972  }
973  $i++;
974  }
975 
976  return $startrow + $i + 1;
977  }
getSolutionValues($active_id, $pass=null, bool $authorized=true)
Loads solutions of a given user from the database an returns it.
getColumnCoord(int $a_col)
Get column "name" from number.
setCell($a_row, $a_col, $a_value, $datatype=null)
setBold(string $a_coords)
Set cell(s) to bold.
$i
Definition: saml1-acs.php:28
+ Here is the call graph for this function:

◆ setMaxSize()

assFileUpload::setMaxSize ( ?int  $value)

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

Referenced by loadFromDb().

1014  : void
1015  {
1016  $this->maxsize = $value;
1017  }
+ 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 
)

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

997  : string
998  {
999  $export = new assFileUploadExport($this);
1000  return $export->toXML($a_include_header, $a_include_binary, $a_shuffle, $test_output, $force_image_references);
1001  }
Class for file upload question exports.

Field Documentation

◆ $allowedextensions

string assFileUpload::$allowedextensions = ''
protected

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

Referenced by getAllowedExtensions().

◆ $completion_by_submission

assFileUpload::$completion_by_submission = false
protected

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

Referenced by isCompletionBySubmissionEnabled().

◆ $file_delivery

ILIAS FileDelivery Services assFileUpload::$file_delivery
private

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

◆ $file_upload

ILIAS FileUpload FileUpload assFileUpload::$file_upload
private

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

◆ $irss

ILIAS ResourceStorage Services assFileUpload::$irss
private

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

◆ $maxsize

int assFileUpload::$maxsize = null
protected

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

Referenced by getMaxSize().

◆ DELETE_FILES_TBL_POSTVAR

const assFileUpload::DELETE_FILES_TBL_POSTVAR = 'deletefiles'

◆ HAS_SPECIFIC_FEEDBACK

const assFileUpload::HAS_SPECIFIC_FEEDBACK = false
protected

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

◆ REUSE_FILES_TBL_POSTVAR

const assFileUpload::REUSE_FILES_TBL_POSTVAR = 'reusefiles'

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