FormController.php 2.29 KB
<?php

namespace frontend\modules\faq\controllers;

use Yii;
use yii\filters\VerbFilter;
use yii\base\Exception;
use yii\log\Logger;
//
use thread\modules\sys\modules\mailcarrier\queuejob\sendFromBase;
//
use frontend\components\BaseController;
use frontend\modules\faq\models\Question;

/**
 * Class FormController
 *
 * @package frontend\modules\faq\controllers
 * @author FilamentV <vortex.filament@gmail.com>
 * @copyright (c), Thread
 */
class FormController extends BaseController
{
    public $defaultAction = 'index';

    /**
     * @return array
     */
    public function behaviors()
    {
        return [
            'verbs' => [
                'class' => VerbFilter::class,
                'actions' => [
                    'send' => ['post'],
                ],
            ],
        ];
    }

    /**
     *
     */
    public function actionIndex()
    {

    }

    /**
     *
     */
    public function actionSend()
    {
        $model = new Question([
            'scenario' => 'add_syq'
        ]);
        if ($model->load(Yii::$app->getRequest()->post())) {
            $transaction = $model::getDb()->beginTransaction();
            try {
                $save = $model->save();

                ($save) ? $transaction->commit() : $transaction->rollBack();
                if ($save) {
                    $this->send($model);
                    Yii::$app->getSession()->addFlash('faq-form-send', 'alert-success');
                }
            } catch (Exception $e) {
                Yii::getLogger()->log($e->getMessage(), Logger::LEVEL_ERROR);
                $transaction->rollBack();
            }
        }
        return $this->redirect(['faq/index']);
    }

    /**
     * @param Question $question
     * @return mixed
     */
    protected function send(Question $question)
    {
        /**
         * @var $carrier \thread\modules\sys\modules\mailcarrier\components\MailCarrier
         * @var $queue \yii\queue\file\Queue
         */
        $carrier = Yii::$app->get('mail-carrier');
        $carrier->setCarrier('faq')->initCarrier('faq');
        //
        $queue = Yii::$app->get('queue-mailer');
        return $queue->push(new sendFromBase([
            'letter_id' => $carrier->saveLetterToBase([
                'question' => $question,
            ], 'faq/index')
        ]));
    }
}