File: /home/safarimaris/home/safarimaris/frontend/controllers/SiteController.php
<?php
namespace frontend\controllers;
use common\components\UserRole;
use Yii;
use yii\base\InvalidParamException;
use yii\helpers\Url;
use yii\web\BadRequestHttpException;
use yii\filters\AccessControl;
use common\models\LoginForm;
use common\models\User;
use frontend\models\PasswordResetRequestForm;
use frontend\models\ResetPasswordForm;
use frontend\models\SignupForm;
use frontend\models\ContactForm;
/**
* Site controller
*/
class SiteController extends \yii\web\Controller
{
/**
* @inheritdoc
*/
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'only' => ['signup', 'login'],
'rules' => [
[
'actions' => ['signup'],
'allow' => true,
'roles' => ['?'],
],
[
'actions' => ['login'],
'allow' => true,
'roles' => ['?'],
],
],
],
'eauth' => [
// required to disable csrf validation on OpenID requests
'class' => \nodge\eauth\openid\ControllerBehavior::className(),
'only' => ['login'],
],
];
}
/**
* @inheritdoc
*/
public function actions()
{
return [
/*'error' => [
'class' => 'yii\web\ErrorAction',
],*/
'captcha' => [
'class' => 'yii\captcha\CaptchaAction',
'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
],
];
}
/**
* Displays homepage.
*
* @return mixed
*/
public function actionIndex()
{
return $this->render('index');
}
/**
* Logs in a user.
*
* @return mixed
*/
public function actionLogin() {
$this->view->params['skipRemember'] = true;
$serviceName = Yii::$app->getRequest()->getQueryParam('service');
if (isset($serviceName)) {
/** @var $eauth \nodge\eauth\ServiceBase */
$eauth = Yii::$app->get('eauth')->getIdentity($serviceName);
$eauth->setRedirectUrl(Yii::$app->getUser()->getReturnUrl());
$eauth->setCancelUrl(Yii::$app->getUrlManager()->createAbsoluteUrl('site/login'));
try {
if ($eauth->authenticate()) {
$profile = $eauth->getAttributes();
$user = User::findByEmail($profile['email']);
$user = $user ? $user : new User();
$user->username = $profile['name'];
$user->email = $profile['email'];
$user->facebookId = $profile['id'];
//$user->profile = json_encode($profile);
$user->save();
$identity = User::findByEAuth($eauth);
//VarDumper::dump($identity);exit;
Yii::$app->getUser()->login($identity);
Yii::$app->sys->saveCookieEmail($user->email, $user->role == UserRole::INSTRUCTOR);
// special redirect with closing popup window
$eauth->redirect();
}
else {
// close popup window and redirect to cancelUrl
$eauth->cancel();
}
}
catch (\nodge\eauth\ErrorException $e) {
// save error to show it later
Yii::$app->getSession()->setFlash('error', 'EAuthException: '.$e->getMessage());
// close popup window and redirect to cancelUrl
// $eauth->cancel();
$eauth->redirect($eauth->getCancelUrl());
}
}
//var_dump(Yii::$app->user->can('showISpecial'), Yii::$app->user->id);
// default authorization code through login/password ..
if (!Yii::$app->user->isGuest) {
//return $this->goHome();
}
$model = new LoginForm();
if ($model->load(Yii::$app->request->post()) && $model->login()) {
$user = $model->getUser();
Yii::$app->sys->saveCookieEmail($user->email, $user->role == UserRole::INSTRUCTOR);
return $this->goBack();
} else {
if (Yii::$app->request->post()) {
Yii::$app->session->setFlash(
'errorLogin',
"Аккаунта с таким адресом электронной почты не существует или Вы допустили ошибку при вводе данных"
);
}
return $this->render('login', [
'model' => $model,
]);
}
}
/**
* Logs out the current user.
*
* @return mixed
*/
public function actionLogout()
{
$this->view->params['skipRemember'] = true;
Yii::$app->user->logout();
return $this->goHome();
}
/**
* Displays contact page.
*
* @return mixed
*/
public function actionContact()
{
$model = new ContactForm();
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
if ($model->sendEmail(Yii::$app->params['supportEmail'])) {
Yii::$app->session->setFlash('success', 'Thank you for contacting us. We will respond to you as soon as possible.');
} else {
Yii::$app->session->setFlash('error', 'There was an error sending email.');
}
return $this->refresh();
} else {
return $this->render('contact', [
'model' => $model,
]);
}
}
/**
* Displays about page.
*
* @return mixed
*/
public function actionAbout()
{
return $this->render('about');
}
/**
* Signs user up.
*
* @return mixed
*/
public function actionSignup()
{
$this->view->params['skipRemember'] = true;
$model = new SignupForm();
if ($model->load(Yii::$app->request->post())) {
if ($user = $model->signup()) {
//if (Yii::$app->getUser()->login($user)) {
return $this->redirect(['site/signup-done']);
//}
}
}
return $this->render('signup', [
'model' => $model,
]);
}
public function actionSignupDone()
{
return $this->render('signup-done');
}
/**
* 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', Yii::t('app', 'Check your email for further instructions.'));
return $this->goHome();
} else {
Yii::$app->session->setFlash('error', Yii::t('app', 'Sorry, we are unable to reset password for email provided.'));
}
}
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 was saved.');
return $this->goHome();
}
return $this->render('resetPassword', [
'model' => $model,
]);
}
public function actionError()
{
$list = [
'country/beliz' => Url::to(['country/show', 'url' => 'belize']),
'country/country_croatia' => Url::to(['country/show', 'url' => 'croatia']),
'country/kuba' => Url::to(['country/show', 'url' => 'cuba']),
'country/malaisia' => Url::to(['country/show', 'url' => 'malaysia']),
'country/ostrov-kokos' => Url::to(['country/show', 'url' => 'costa-rica']),
'country/sri_lanka' => Url::to(['country/show', 'url' => 'sri-lanka']),
'country/tailand' => Url::to(['country/show', 'url' => 'thailand']),
];
foreach ($list as $oldUrl => $newUrl) {
if ($oldUrl === Yii::$app->getRequest()->getPathInfo()) {
return Yii::$app->getResponse()->redirect($newUrl, 301)->send();
}
}
return Yii::$app->getResponse()->redirect(Yii::$app->getHomeUrl(), 301)->send();
}
}