AjaxController.php 2.7 KB
<?php

namespace app\controllers;


use app\models\Host;
use Yii;
use yii\db\Query;
use yii\filters\AccessControl;
use yii\web\Controller;
use yii\web\Response;
use yii\filters\VerbFilter;

class AjaxController extends Controller
{
    /**
     * {@inheritdoc}
     */
    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'actions' => ['calc-status'],
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],
            'contentNegotiator' => [
                'class' => 'yii\filters\ContentNegotiator',
                'formats' => [
                    'application/json' => Response::FORMAT_JSON,
                ],
            ],
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'get-plants' => ['GET']
                ],
            ],
        ];
    }

    /**
     * Displays homepage.
     *
     * @return string
     */
    public function actionCalcStatus()
    {
        $update = [
            Host::STATUS_OFF => [],
            Host::STATUS_ON  => []
        ];
        $filters = Collection::get_filter(Filter::TYPE_AFTER);
        $query = (new Query())->select('id, domain')->from('{{%host}}');
        if ($query)
        foreach ($query->batch(1000) as $hosts)
            {
                foreach ($hosts as $host)
                    $update[(Collection::apply_filter($host['domain'], $filters) === false ? Host::STATUS_OFF : Host::STATUS_ON)][] = $host['id'];
                unset($host);
                if (count($update[Filter::STATUS_OFF])>0)
                    {
                        Yii::$app->db->createCommand()
                            ->update('{{%host}}', ['status' => Host::STATUS_OFF], ['in', 'id', $update[Host::STATUS_OFF]])
                            ->execute();
                        $update[Host::STATUS_OFF] = [];
                    }
                if (count($update[Host::STATUS_ON])>0)
                    {
                        Yii::$app->db->createCommand()
                            ->update('{{%host}}', ['status' => Host::STATUS_ON], ['in', 'id', $update[Host::STATUS_ON]])
                            ->execute();
                        $update[Host::STATUS_ON] = [];
                    }
            }
        unset($hosts);
        unset($query);
        unset($filters);
        unset($update);
        return [
            'controller' => 'ajax',
            'is_guest' => Yii::$app->user->isGuest,
            'user_id' => Yii::$app->user->getId()
        ];
    }


}