Image.php 2.81 KB
<?php
    
    namespace artbox\core\models;

    use artbox\core\components\imagemanager\components\ImageManagerGetPath;
    use yii\behaviors\TimestampBehavior;
    use yii\db\ActiveRecord;
    use yii\db\Expression;
    use yii\helpers\Html;
    use yii\db\ActiveQuery;
    
    /**
     * Class Image
     *
     * @property integer   $id
     * @property string    $fileName
     * @property string    $fileHash
     * @property string    $url
     * @property string    $extension
     * @property ImageLang $lang
     * @package artbox\core\models
     */
    class Image extends ActiveRecord
    {
        /**
         * @inheritdoc
         */
        public static function tableName()
        {
            return 'ImageManager';
        }
    
        /**
         * @inheritdoc
         */
        public function behaviors()
        {
            return [
                [
                    'class'              => TimestampBehavior::className(),
                    'createdAtAttribute' => 'created',
                    'updatedAtAttribute' => 'modified',
                    'value'              => new Expression('NOW()'),
                ],
            ];
        }
        
        /**
         * Path to stored image
         *
         * @return string
         */
        public function getPath(): string
        {
            /**
             * @var ImageManagerGetPath $manager
             */
            $manager = \Yii::$app->get('imagemanager');
    
            $path = $manager->mediaPath . '/' . $this->id . '_' . $this->fileHash . '.' . $this->extension;
    
            if (file_exists($path)) {
                return $path;
            } else {
                return \Yii::getAlias('@frontend/web/img/no-image.png');
            }
        }
        
        /**
         * Url to stored image
         *
         * @return string
         */
        public function getUrl(): string
        {
            return '/storage/' . $this->id . '_' . $this->fileHash . '.' . $this->extension;
        }
        
        /**
         * Gets image tag
         *
         * @param array $options
         *
         * @return string
         */
        public function getImg(array $options = []): string
        {
            return Html::img($this->getUrl(), $options);
        }
        
        /**
         * Gets file extension
         *
         * @return string
         */
        public function getExtension()
        {
            return pathinfo($this->fileName, PATHINFO_EXTENSION);
        }
    
        /**
         * Multy language model with image's alt, title and description
         *
         * @return null|ActiveQuery
         */
        public function getLang()
        {
            return $this->hasOne(ImageLang::className(), [ 'image_id' => 'id' ])
                        ->inverseOf('image');
        }
    }