%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/file/actions/
Upload File :
Create Path :
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)
        ];
    }

}

Zerion Mini Shell 1.0