ImageController.php 2.84 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 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->baseName);
                $path = $basePath . $baseName . '.' . $file->extension;
                $image = Yii::$app->imagine->open($path);
                $image = $cropContext->cropImage($image, $path);
                $box = $image->getSize()->heighten($minHeight);
                $image->resize($box)
                    ->save($basePath . $baseName . '-resized' . '.' . $file->extension);
            }
        }
        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);
    }
}