FileloaderController.php 3.57 KB
<?php
    namespace common\modules\fileloader\controllers;

    use common\modules\fileloader\models\Fileloader;
    use yii\filters\AccessControl;
    use yii\helpers\Html;
    use yii\web\UploadedFile;

    class FileloaderController extends \yii\web\Controller
    {

        /**
         * @inheritdoc
         */
        public function behaviors()
        {
            return [
                'access' => [
                    'class' => AccessControl::className(),
                    'rules' => [
                        [
                            'allow' => true,
                            'roles' => [ '@' ],
                        ],
                    ],
                ],
                'verbs' => [
                    'class'   => \yii\filters\VerbFilter::className(),
                    'actions' => [
                        '*' => [ 'post' ],
                    ],
                ],
            ];
        }

        /**
         * Handle ajax file uploading
         *
         * @return array
         */
        public function actionUpload()
        {
            $request = \Yii::$app->request;
            $response = \Yii::$app->response;
            $response->format = $response::FORMAT_JSON;
            $model = new Fileloader();
            $model->files = UploadedFile::getInstance($model, 'files');
            if(!empty( $model->files )) {
                $file_id = $model->saveFile($model->files);
                if(!empty( $file_id )) {
                    $child_model = $request->post('model', $model->className());
                    $child_model = new $child_model([ 'file' => $file_id ]);
                    $input = Html::activeHiddenInput($child_model, 'fileloader[]', [
                        'value' => $file_id,
                        'class' => 'fileloader-item-input',
                    ]);
                    return [
                        'result' => [
                            'file_id' => $file_id,
                            'file_name' => $model->name,
                            'file_href' => $model->dir,
                            'input' => $input,
                            'id' => $request->post('id'),
                        ],
                    ];
                } else {
                    return [ 'error' => 'Ошибка сохранения файла' ];
                }
            }
            return [ 'error' => 'Ошибка загрузки' ];
        }

        /**
         * Handle ajax file deleting
         *
         * @return array
         */
        public function actionDelete()
        {
            /**
             * @var Fileloader $model
             */
            $request = \Yii::$app->request;
            $response = \Yii::$app->response;
            $response->format = $response::FORMAT_JSON;
            if(empty( $request->post('id') )) {
                return [ 'error' => 'Не указан id файла' ];
            }
            $model = Fileloader::find()
                               ->where([
                                   'file_id' => $request->post('id'),
                                   'user_id' => \Yii::$app->user->getId(),
                               ])
                               ->one();
            if(empty( $model )) {
                return [ 'error' => 'Файл не найден' ];
            }
            if($model->delete()) {
                return [ 'result' => [ 'message' => 'Файл успешно удален' ] ];
            } else {
                return [ 'error' => 'Ошибка удаления файла' ];
            }
        }
        
    }