%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/file/actions/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/file/actions/UploadAction.php |
<?php /** * @link https://www.humhub.org/ * @copyright Copyright (c) 2016 HumHub GmbH & Co. KG * @license https://www.humhub.com/licences */ namespace humhub\modules\file\actions; use humhub\libs\Html; use humhub\modules\file\libs\ImageHelper; use Yii; use yii\base\Action; use yii\web\UploadedFile; use humhub\libs\Helpers; use humhub\modules\file\models\FileUpload; use humhub\modules\file\libs\FileHelper; use humhub\modules\file\models\File; use humhub\modules\content\components\ContentActiveRecord; use humhub\modules\content\components\ContentAddonActiveRecord; /** * UploadAction provides an Ajax/JSON way to upload new files * * @since 1.2 * @author Luke */ class UploadAction extends Action { /** * The record to whom this files belongs to. * Optional, since "free" files can also attached to a record later. * * @var \humhub\components\ActiveRecord the records */ public $record = null; /** * @var string the file model (you may want to overwrite this for own validations) */ protected $fileClass = 'humhub\modules\file\models\FileUpload'; /** * @var string scenario for file upload validation */ protected $scenario = null; /** * @var string */ public $uploadName = 'files'; /** * @inheritdoc */ public function init() { Yii::$app->response->format = 'json'; $this->loadRecord(); } /** * @inheritdoc */ public function run() { $files = []; $hideInStream = $this->isHideInStreamRequest(); foreach (UploadedFile::getInstancesByName($this->uploadName) as $cFile) { $files[] = $this->handleFileUpload($cFile, $hideInStream); } return ['files' => $files]; } /** * Handles the file upload for are particular UploadedFile */ protected function handleFileUpload(UploadedFile $uploadedFile, $hideInStream = false) { /* @var $file FileUpload */ $file = Yii::createObject($this->fileClass); if ($this->scenario !== null) { $file->scenario = $this->scenario; } $file->setUploadedFile($uploadedFile); if ($hideInStream) { $file->show_in_stream = false; } if ($file->save()) { if ($this->record !== null) { $this->record->fileManager->attach($file); } $this->afterFileUpload($file); return array_merge(['error' => false], FileHelper::getFileInfos($file)); } else { return $this->getErrorResponse($file); } } protected function isHideInStreamRequest() { return (Yii::$app->request->post('hideInStream') == 1) || (Yii::$app->request->get('hideInStream') == 1); } /** * Is called after a file has been successfully uploaded and saved. * * @param File $file * @since 1.7 */ protected function afterFileUpload(File $file) { ImageHelper::downscaleImage($file); } /** * Loads the target record by request parameter if defined. * The default implementation only supports uploads to ContentActiveRecord or ContentAddonActiveRecords. */ protected function loadRecord() { if (Yii::$app->request->get('objectModel')) { $model = Yii::$app->request->get('objectModel'); $pk = Yii::$app->request->get('objectId'); } else { $model = Yii::$app->request->post('objectModel'); $pk = Yii::$app->request->post('objectId'); } if ($model != '' && $pk != '' && Helpers::CheckClassType($model, \yii\db\ActiveRecord::class)) { $record = $model::findOne(['id' => $pk]); if ($record !== null && ($record instanceof ContentActiveRecord || $record instanceof ContentAddonActiveRecord)) { if ($record->content->canEdit()) { $this->record = $record; } } } } /** * Returns the error response for a file upload as array * * @param File $file * @return array the upload error information */ protected function getErrorResponse(File $file) { $errorMessage = Yii::t('FileModule.base', 'File {fileName} could not be uploaded!', ['fileName' => Html::encode($file->file_name)]); if ($file->getErrors()) { $errorMessage = $file->getErrors('uploadedFile'); } return [ 'error' => true, 'errors' => $errorMessage, 'name' => Html::encode($file->file_name), 'size' => Html::encode($file->size) ]; } }