/** * Handles uploaded files. */ public function upload() { // save files $files = $this->parameters['__files']->getFiles(); $file = $files[0]; try { if (!$file->getValidationErrorType()) { $data = array('userID' => WCF::getUser()->userID ?: null, 'filename' => $file->getFilename(), 'fileType' => $file->getMimeType(), 'fileHash' => sha1_file($file->getLocation()), 'filesize' => $file->getFilesize(), 'uploadTime' => TIME_NOW); // save file $upload = FileUploadEditor::create($data); // move uploaded file if (@copy($file->getLocation(), $upload->getLocation())) { @unlink($file->getLocation()); // return result return array('uploadID' => $upload->uploadID, 'filename' => $upload->filename, 'filesize' => $upload->filesize, 'formattedFilesize' => FileUtil::formatFilesize($upload->filesize)); } else { // moving failed; delete file $editor = new FileUploadEditor($upload); $editor->delete(); throw new UserInputException('fileUpload', 'uploadFailed'); } } } catch (UserInputException $e) { $file->setValidationErrorType($e->getType()); } return array('errorType' => $file->getValidationErrorType()); }
/** * @see \wcf\data\IEditableObject::deleteAll() */ public static function deleteAll(array $objectIDs = array()) { // delete files first $conditionBuilder = new PreparedStatementConditionBuilder(); $conditionBuilder->add("uploadID IN (?)", array($objectIDs)); $sql = "SELECT\t*\n\t\t\tFROM\tfilebase" . WCF_N . "_upload\n\t\t\t" . $conditionBuilder; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute($conditionBuilder->getParameters()); while ($upload = $statement->fetchObject(static::$baseClass)) { $editor = new FileUploadEditor($upload); $editor->deleteFile(); } return parent::deleteAll($objectIDs); }