ListController.php 3.81 KB
<?php

namespace frontend\modules\map\controllers;

use Yii;
use yii\filters\VerbFilter;
use yii\helpers\ArrayHelper;
use yii\web\NotFoundHttpException;
//
use thread\actions\ListQuery;
//
use frontend\modules\map\models\{
    Area, Item, Type
};
use frontend\modules\location\models\Region;
use frontend\modules\map\Map;

/**
 * Class ListController
 *
 * @package frontend\modules\map\controllers
 * @author Alla Kuzmenko
 * @copyright (c) 2017
 */
class ListController extends \frontend\components\BaseController
{

    public $title = "Item";
    public $layout = "@app/layouts/base";
    public $defaultAction = 'index';
    public $actionListLinkStatus = '';

    /**
     * Хлібні крихти
     */

    public $breadcrumbs = [];

    /**
     *
     */
    public function init()
    {
        parent::init();
    }

    /**
     * @return array
     */
    public function behaviors()
    {
        return [
            'verbs' => [
                'class' => VerbFilter::class,
                'actions' => [
                    'map' => ['get'],
                    'list' => ['get'],
                    'type' => ['get'],
                    'view' => ['get']
                ],
            ],
        ];
    }

    /**
     * @return array
     */
    public function actions()
    {
        return (!in_array(Yii::$app->request->pathInfo, ['maps/project', 'maps/resource'])) ? [
            'list' => [
                'class' => ListQuery::class,
                'query' => Item::findByParams(),
                'recordOnPage' => 30,
                'layout' => $this->layout
            ],
            'type' => [
                'class' => ListQuery::class,
                'query' => Item::findByParams(),
                'recordOnPage' => 30,
                'layout' => $this->layout,
                'view' => 'type',
            ]
        ] : [];
    }

    /**
     * @param $type
     * @return string|\yii\web\Response
     */
    public function actionMap($type)
    {
        //TODO :: Временная заглушка
        if ($type == 'resource') {
            return $this->redirect(['/page/page/view', 'alias' => 'catch']);
        }

        $this->layout = "@app/layouts/map";
        $models = Item::findByType($type);
        $types = Type::findListByType($type);
        $regions = Region::findList();
        $areas = Area::getAll();
        $powers = ArrayHelper::map($models, 'electric_power', 'electric_power');
        $investment = ArrayHelper::map($models, 'investment', 'investment');
        $powers = [
            'min' => (!empty($powers)) ? min($powers) : 0,
            'max' => (!empty($powers)) ? max($powers) : 0
        ];
        $investment = [
            'min' => (!empty($investment)) ? min($investment) : 0,
            'max' => (!empty($investment)) ? max($investment) : 0
        ];

        return $this->render('map', [
            'models' => $models,
            'types' => $types,
            'regions' => $regions,
            'powers' => $powers,
            'investment' => $investment,
            'areas' => $areas
        ]);
    }

    /**
     * @param $action
     * @return bool
     * @throws \yii\web\BadRequestHttpException
     */
    public function beforeAction($action)
    {
        if ($this->action->id == 'type') {
            $types = Map::typeRange();

            $this->breadcrumbs[] = [
                'label' => Yii::t('map', 'Objects base'),
                'url' => ['/map/list/list']
            ];
            $this->breadcrumbs[] = [
                'label' => Yii::t('front', 't_' . $_GET['type']) ?? '',
            ];
        } elseif ($this->action->id == 'list') {
            $this->breadcrumbs = [
                [
                    'label' => Yii::t('map', 'Objects base'),
                ]
            ];
        }
        return parent::beforeAction($action);
    }

}