ImageController.php 3.12 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\helpers\StringHelper;
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');
            $model->upload();

            $crop_id = $request->post('crop_id');

            $cropFactory = CropFactory::getInstance();
            $minHeight = $cropFactory->findMinHeight();
            $cropContext = new CropContext($cropFactory->getCrop($crop_id));

            foreach($model->imageFiles as $file) {
                $baseName = Helper::transliterate($file->baseName);
                $path = dirname(dirname(__DIR__)) . '/uploads/' . $baseName . '.' . $file->extension;
                $image = Yii::$app->imagine->open($path);
                $image = $cropContext->cropImage($image, $path);
                $box = $image->getSize()->heighten($minHeight);
                $image->resize($box)
                    ->save(dirname(dirname(__DIR__)) . '/uploads/' . $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) {
            $a = getimagesize($file);
            $image_type = $a[2];

            if(in_array($image_type , [IMAGETYPE_GIF , IMAGETYPE_JPEG ,IMAGETYPE_PNG , IMAGETYPE_BMP]))
            {
                $images[] = '/uploads/' . StringHelper::basename($file);
            }
        }
        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::CREATE);
        foreach($files as $k => $file) {
            $a = getimagesize($file);
            $image_type = $a[2];
            if(in_array($image_type , [IMAGETYPE_GIF , IMAGETYPE_JPEG ,IMAGETYPE_PNG , IMAGETYPE_BMP]))
            {
                $zip->addFile($file, StringHelper::basename($file));
            }
        }
        $zip->close();

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