Fileloader.php 2.44 KB
<?php

namespace common\modules\fileloader\models;

use common\models\Tools;
use Yii;
use yii\behaviors\BlameableBehavior;
use yii\web\UploadedFile;

/**
 * This is the model class for table "file".
 *
 * @property integer $file_id
 * @property integer $status
 * @property string $name
 * @property string $dir
 */
class Fileloader extends \yii\db\ActiveRecord
{
    public $files;
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'file';
    }

    /**
     * @inheritdoc
     */
    public function behaviors()
    {
        return [
            [
                'class' => BlameableBehavior::className(),
                'createdByAttribute' => 'user_id',
                'updatedByAttribute' => false,
            ],
        ];
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['status'], 'integer'],
            [['name'], 'string', 'max' => 50],
            [['dir'], 'string', 'max' => 255],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'file_id' => 'File ID',
            'status' => 'Status',
            'name' => 'Name',
            'dir' => 'Dir',
        ];
    }

    /**
     * @param UploadedFile $file
     * @return int file id in model File
     */
    public function saveFile(UploadedFile $file){
        $imgDir = Yii::getAlias('@storage/'.'user_'.\Yii::$app->user->id.'/files/');
        $uploadName = preg_replace('/\s/', '_', $file->baseName).'_'. time().'.'.$file->extension;
        $uploadName = Tools::translit($uploadName, 'letter');
        if(!is_dir($imgDir)) {
            mkdir($imgDir, 0755, true);
        }
        if($file->saveAs($imgDir.$uploadName)){
            $this->dir = '/storage/user_'.\Yii::$app->user->id.'/files/'.$uploadName;
            $this->name = preg_replace('/\s/', '_', $file->baseName).'.'.$file->extension;
            $this->save();
            return $this->file_id;
        }
    }

    /**
     * Extends ActiveRecord::delete() method, also deletes file from file system
     *
     * @see ActiveRecord::delete()
     * @return false|int
     * @throws \Exception
     */
    public function delete()
    {
        if(!empty($this->dir)) {
            if(file_exists(Yii::getAlias('@documentRoot').$this->dir)) {
                unlink(Yii::getAlias('@documentRoot').$this->dir);
            }
        }
        return parent::delete();
    }
}