[
'class' => 'yii\web\ErrorAction',
],
];
}
/**
* @inheritdoc
*/
public function behaviors()
{
return [
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'feedback' => [ 'post' ],
],
],
];
}
/**
* Displays homepage.
*
* @return mixed
*/
public function actionIndex()
{
$categories = Category::find()
->with('categories.lang', 'lang')
->where([ 'level' => 0 ])
->all();
$topItems = Product::find()
->with('lang', 'image', 'variants')
->where('mask & 1 != 0')
->limit(20)
->all();
$newItems = Product::find()
->with('lang', 'image', 'variants')
->where('mask & 2 != 0')
->limit(20)
->all();
$saleItems = Product::find()
->with('lang', 'image', 'variants')
->where('mask & 4 != 0')
->limit(20)
->all();
$productCount = Product::find()
->count();
$brandCount = Brand::find()
->count();
$brands = Brand::find()
->where([ 'status' => true ])
->andWhere(
[
'not',
[ 'image_id' => null ],
]
)
->orderBy([ 'sort' => SORT_ASC ])
->limit(6)
->with('image')
->all();
$articles = Article::find()
->orderBy('sort')
->with(
[
'lang',
'image',
'category.lang',
]
)
->limit(4)
->all();
return $this->render(
'index',
[
'categories' => $categories,
'topItems' => $topItems,
'newItems' => $newItems,
'saleItems' => $saleItems,
'productCount' => $productCount,
'brandCount' => $brandCount,
'brands' => $brands,
'articles' => $articles,
]
);
}
/**
* Displays contact page.
*
* @return mixed
*/
public function actionContact()
{
$contact = new Feedback();
return $this->render(
'contact',
[
'contact' => $contact,
]
);
}
/**
* Displays about page.
*
* @return mixed
*/
public function actionAbout()
{
return $this->render('about');
}
/**
* Action to view robots.txt file dinamycli
*
* @return string
*/
public function actionRobots()
{
$response = \Yii::$app->response;
/**
* @var Settings $settings
*/
$settings = Settings::find()
->one();
$temp = tmpfile();
fwrite($temp, $settings->robots);
$meta = stream_get_meta_data($temp);
$response->format = $response::FORMAT_RAW;
$response->headers->set('Content-Type', 'text/plain');
return $this->renderFile($meta[ 'uri' ]);
}
public function actionFeedback()
{
Yii::$app->response->format = Response::FORMAT_JSON;
if (empty(Yii::$app->request->post())) {
throw new BadRequestHttpException();
} else {
$model = new Feedback();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return [
'success' => true,
'message' => 'Success message',
'alert' => '
',
];
} else {
return [
'success' => false,
'error' => $model->errors,
];
}
}
}
public function actionCallback()
{
Yii::$app->response->format = Response::FORMAT_JSON;
$model = new Feedback(
[
'scenario' => Feedback::SCENARIO_CALLBACK,
]
);
if ($model->load(Yii::$app->request->post()) && $model->save()) {
\Yii::$app->session->setFlash(
'success',
Html::tag(
'div',
Html::tag(
'h3',
\Yii::t('app', 'Обратный звонок')
) . Html::tag(
'p',
\Yii::t(
'app',
'Ваша заявка успешно отправлена. Мы свяжемся с Вами в ближайшее время.'
)
)
)
);
return $this->redirect($model->returnUrl ? : [ 'index' ]);
} else {
return [
'success' => false,
'error' => $model->errors,
];
}
}
public function actionLogin()
{
if (!\Yii::$app->user->isGuest) {
return $this->redirect([ 'index' ]);
}
$loginForm = new LoginForm();
$signupForm = new SignupForm();
if ($loginForm->load(\Yii::$app->request->post()) && $loginForm->login()) {
if (!empty($loginForm->returnUrl)) {
return $this->redirect($loginForm->returnUrl);
} else {
return $this->redirect([ 'index' ]);
}
}
if ($signupForm->load(\Yii::$app->request->post())) {
if ($user = $signupForm->signup()) {
if (\Yii::$app->getUser()
->login($user)
) {
return $this->redirect([ 'index' ]);
}
}
}
return $this->render(
'login',
[
'loginForm' => $loginForm,
'signupForm' => $signupForm,
]
);
}
public function actionLogout()
{
\Yii::$app->user->logout();
return $this->redirect([ 'index' ]);
}
/**
* Requests password reset.
*
* @return mixed
*/
public function actionRequestPasswordReset()
{
$model = new PasswordResetRequestForm();
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
if ($model->sendEmail()) {
Yii::$app->session->setFlash('success', 'Check your email for further instructions.');
return $this->redirect([ 'index' ]);
} else {
Yii::$app->session->setFlash(
'error',
'Sorry, we are unable to reset password for the provided email address.'
);
}
}
return $this->render(
'requestPasswordResetToken',
[
'model' => $model,
]
);
}
/**
* Resets password.
*
* @param string $token
*
* @return mixed
* @throws BadRequestHttpException
*/
public function actionResetPassword($token)
{
try {
$model = new ResetPasswordForm($token);
} catch (InvalidParamException $e) {
throw new BadRequestHttpException($e->getMessage());
}
if ($model->load(Yii::$app->request->post()) && $model->validate() && $model->resetPassword()) {
Yii::$app->session->setFlash('success', 'New password saved.');
return $this->redirect([ 'index' ]);
}
return $this->render(
'resetPassword',
[
'model' => $model,
]
);
}
}