Project.php 3.61 KB
<?php

namespace common\models;

/**
 * This is the model class for table "project".
 *
 * @property integer $project_id
 * @property string $title
 * @property string $link
 * @property string $description
 * @property integer $date_add
 * @property ProjectImage[] $images
 * @property array $imagesConfig
 */
class Project extends \yii\db\ActiveRecord
{
    
    public $imagesUpload = [];
    
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'project';
    }
    
    /**
     * @inheritdoc
     */
    public function behaviors()
    {
        return [
            'slug' => [
                'class' => 'common\behaviors\Slug',
                'in_attribute' => 'title',
                'out_attribute' => 'link',
                'translit' => true
            ],
        ];
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['date_add'], 'default', 'value' => function() {
                return time();
            }],
            [['title'], 'required'],
            [['description'], 'string'],
            [['date_add', 'imagesUpload'], 'safe'],
            [['title', 'link'], 'string', 'max' => 255],
            [['date_add'], 'filter', 'filter' => function($value) {
                return strtotime($value)?:time();
            }],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'project_id' => 'Project ID',
            'title' => 'Title',
            'link' => 'Link',
            'description' => 'Description',
            'date_add' => 'Date Add',
            'images'             => 'Images',
        ];
    }
    
    public function getImages()
    {
        return $this->hasMany(ProjectImage::className(), [ 'project_id' => 'project_id' ]);
    }
    
    public function getImagesHTML()
    {
        $op = [];
        if($this->images) {
            foreach($this->images as $image) {
                $op[] = \common\components\artboximage\ArtboxImageHelper::getImage($image->imageUrl, 'admin_thumb');
            }
        }
        return $op;
    }
    
    public function getImagesConfig()
    {
        $op = [];
        if($this->images) {
            foreach($this->images as $image) {
                $op[] = [
                    'caption' => $image->image,
                    'width'   => '120px',
                    'url'     => \yii\helpers\Url::to([
                        '/project/delimg',
                        'id' => $image->project_image_id,
                    ]),
                    'key'     => $image->project_image_id,
                    'extra'   => [
                        'id' => $image->project_image_id,
                    ],
                ];
            }
        }
        return $op;
    }
    
    public function imagesUpload()
    {
        if($this->validate()) {
            $images = [];
            foreach($this->imagesUpload as $image) {
                $imageName = $image->baseName . '.' . $image->extension;
                $i = 0;
                while(file_exists(\Yii::getAlias('@storage/projects/' . $imageName))) {
                    $i++;
                    $imageName = $image->baseName . '_' . $i . '.' . $image->extension;
                }
                $imgDir = \Yii::getAlias('@storage/projects/');
                if(!is_dir($imgDir)) {
                    mkdir($imgDir, 0755, true);
                }
                
                $image->saveAs($imgDir . $imageName);
                $images[] = $imageName;
            }
            return $images;
        } else {
            return false;
        }
    }
}