ImageController.php 3.37 KB
<?php

namespace backend\controllers;

use backend\components\croppers\CropContext;
use backend\components\croppers\CropFactory;

use backend\components\Helper;
use Yii;
use yii\helpers\FileHelper;
use yii\web\Controller;
use backend\models\UploadForm;
use yii\web\UploadedFile;

class ImageController extends Controller
{
    public function beforeAction($action) {
        $this->enableCsrfValidation = false;
        return parent::beforeAction($action);
    }

    public function actionIndex()
    {
        $request = Yii::$app->request;
        $model = new UploadForm();
        $ukrSeeds = Yii::$app->params['ukrSeeds'];

        if ($request->isPost) {
            $model->imageFiles = UploadedFile::getInstances($model, 'imageFiles');
            $crop_id = $request->post('crop_id');
            $model->upload($ukrSeeds[$crop_id]);

            $cropFactory = CropFactory::getInstance();
            $minHeight = $cropFactory->findMinHeight();
            $cropContext = new CropContext($cropFactory->getCrop($crop_id));
            $basePath = dirname(dirname(__DIR__)) . '/uploads/'. $ukrSeeds[$crop_id] . '/';
            foreach($model->imageFiles as $file) {
                $baseName = Helper::transliterate($file->name);
                $path = $basePath . $baseName;
                $image = Yii::$app->imagine->open($path);
                $image = $cropContext->cropImage($image, $path);
                $box = $image->getSize()->heighten($minHeight);
                $image->resize($box)
                    ->save($basePath . 'resized-' . $baseName);
            }
        }
        return $this->render('index', ['model' => $model, 'ukrSeeds' => $ukrSeeds]);
    }

    public function actionGallery()
    {
        $files = FileHelper::findFiles(dirname(dirname(__DIR__)) . '/uploads/');
        $images = [];

        foreach($files as $file) {
            if(Helper::isImage($file)) {
                $images[] = Helper::findUrl($file, 2);
            }
        }
        return $this->render('gallery', ['files' => $images]);
    }

    public function actionGetParams($crop_id)
    {
        if (Yii::$app->request->isAjax) {

            $cropFactory = CropFactory::getInstance();

            $res = [
                'body'    => $cropFactory->getCrop($crop_id)->getConstants(),
                'success' => true,
            ];

            return json_encode($res);
        }
    }

    public function actionDownloadAll()
    {
        $files = FileHelper::findFiles(dirname(dirname(__DIR__)) . '/uploads/');
        $zip = new \ZipArchive();

        $filename = dirname(dirname(__DIR__)) . '/uploads/images.zip';
        $zip->open($filename, \ZipArchive::OVERWRITE);
        foreach($files as $k => $file) {
            if(Helper::isImage($file)) {
                $zip->addFile($file, Helper::findUrl($file, 1));
            }
        }
        $zip->close();

        $response = Yii::$app->response;
        $response->sendFile($filename);
    }

    public function actionDeleteImages()
    {
        if (Yii::$app->request->isAjax) {

            $data = Yii::$app->request->post();

            $files = $data['images'];
            $basePath = dirname(dirname(__DIR__));

            foreach($files as $file) {
                $path = $basePath . $file;
                if(file_exists($path))
                    unlink($path);
            }

            return json_encode($data);
        }
    }
}