abhi1693/yii2-user

View on GitHub
controllers/SettingsController.php

Summary

Maintainability
F
6 days
Test Coverage
<?php
/**
 * Created by PhpStorm.
 * User: Abhimanyu
 * Date: 12-03-2015
 * Time: 09:53
 */

namespace abhimanyu\user\controllers;

use abhimanyu\installer\helpers\Configuration;
use abhimanyu\installer\helpers\enums\Configuration as Enum;
use abhimanyu\user\models\SettingsForm;
use Yii;
use yii\authclient\clients\Facebook;
use yii\authclient\clients\GitHub;
use yii\authclient\clients\GoogleOAuth;
use yii\authclient\clients\LinkedIn;
use yii\authclient\clients\Live;
use yii\authclient\clients\Twitter;
use yii\authclient\Collection;
use yii\filters\AccessControl;
use yii\web\Controller;

class SettingsController extends Controller
{

    /**
     * @inheritdoc
     */
    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'allow'   => TRUE,
                        'actions' => ['index', 'auth-client'],
                        'roles'   => ['@'],
                    ]
                ]
            ],
        ];
    }

    public function actionIndex()
    {
        $model = new SettingsForm();
        $model->canRegister = Yii::$app->config->get(Enum::USER_REGISTRATION);
        $model->canRecoverPassword = Yii::$app->config->get(Enum::USER_FORGOT_PASSWORD);
        $model->rememberMeDuration = Yii::$app->config->get(Enum::REMEMBER_ME_DURATION);
        $model->loginType = Yii::$app->config->get(Enum::USER_LOGIN_TYPE);

        if ($model->load(Yii::$app->request->post())) {
            Yii::$app->config->set(Enum::USER_REGISTRATION, $model->canRegister);
            Yii::$app->config->set(Enum::USER_FORGOT_PASSWORD, $model->canRecoverPassword);
            Yii::$app->config->set(Enum::REMEMBER_ME_DURATION, $model->rememberMeDuration);
            Yii::$app->config->set(Enum::USER_LOGIN_TYPE, $model->loginType);

            Yii::$app->getSession()->setFlash('success', Yii::t('user', 'User module settings saved successfully'));
        }

        return $this->render('index', ['model' => $model]);
    }

    public function actionAuthClient()
    {
        $model = new SettingsForm();
        $model->googleClientId = Yii::$app->config->get(Enum::GOOGLE_CLIENT_ID);
        $model->googleClientSecret = Yii::$app->config->get(Enum::GOOGLE_CLIENT_SECRET);

        $model->facebookClientId = Yii::$app->config->get(Enum::FACEBOOK_CLIENT_ID);
        $model->facebookClientSecret = Yii::$app->config->get(Enum::FACEBOOK_CLIENT_SECRET);

        $model->linkedInClientId = Yii::$app->config->get(Enum::LINKED_IN_CLIENT_ID);
        $model->linkedInClientSecret = Yii::$app->config->get(Enum::LINKED_IN_CLIENT_SECRET);

        $model->githubClientId = Yii::$app->config->get(Enum::GITHUB_CLIENT_ID);
        $model->githubClientSecret = Yii::$app->config->get(Enum::GITHUB_CLIENT_SECRET);

        $model->liveClientId = Yii::$app->config->get(Enum::LIVE_CLIENT_ID);
        $model->liveClientSecret = Yii::$app->config->get(Enum::LIVE_CLIENT_SECRET);

        $model->twitterConsumerKey = Yii::$app->config->get(Enum::TWITTER_CONSUMER_KEY);
        $model->twitterConsumerSecret = Yii::$app->config->get(Enum::TWITTER_CONSUMER_SECRET);

        $config = Configuration::get();

        if ($model->load(Yii::$app->request->post())) {
            Yii::$app->config->set(Enum::GOOGLE_CLIENT_ID, $model->googleClientId);
            Yii::$app->config->set(Enum::GOOGLE_CLIENT_SECRET, $model->googleClientSecret);

            Yii::$app->config->set(Enum::FACEBOOK_CLIENT_ID, $model->facebookClientId);
            Yii::$app->config->set(Enum::FACEBOOK_CLIENT_SECRET, $model->facebookClientSecret);

            Yii::$app->config->set(Enum::LINKED_IN_CLIENT_ID, $model->linkedInClientId);
            Yii::$app->config->set(Enum::LINKED_IN_CLIENT_SECRET, $model->linkedInClientSecret);

            Yii::$app->config->set(Enum::GITHUB_CLIENT_ID, $model->githubClientId);
            Yii::$app->config->set(Enum::GITHUB_CLIENT_SECRET, $model->githubClientSecret);

            Yii::$app->config->set(Enum::LIVE_CLIENT_ID, $model->liveClientId);
            Yii::$app->config->set(Enum::LIVE_CLIENT_SECRET, $model->liveClientSecret);

            Yii::$app->config->set(Enum::TWITTER_CONSUMER_KEY, $model->twitterConsumerKey);
            Yii::$app->config->set(Enum::TWITTER_CONSUMER_SECRET, $model->twitterConsumerSecret);

            $config['components']['authClientCollection']['class'] = Collection::className();

            if (!empty($model->googleClientId) && !empty($model->googleClientSecret)) {
                Yii::$app->config->set(Enum::GOOGLE_AUTH, GoogleOAuth::className());
                Yii::$app->config->set(Enum::GOOGLE_CLIENT_ID, $model->googleClientId);
                Yii::$app->config->set(Enum::GOOGLE_CLIENT_SECRET, $model->googleClientSecret);

                $config['components']['authClientCollection']['clients']['google']['class'] = GoogleOAuth::className();
                $config['components']['authClientCollection']['clients']['google']['clientId'] = $model->googleClientId;
                $config['components']['authClientCollection']['clients']['google']['clientSecret'] = $model->googleClientSecret;
            } else {
                Yii::$app->config->set(Enum::GOOGLE_AUTH, NULL);
                unset($config['components']['authClientCollection']['clients']['google']);
            }

            if (!empty($model->facebookClientId) && !empty($model->facebookClientSecret)) {
                Yii::$app->config->set(Enum::FACEBOOK_AUTH, Facebook::className());
                Yii::$app->config->set(Enum::FACEBOOK_CLIENT_ID, $model->facebookClientId);
                Yii::$app->config->set(Enum::FACEBOOK_CLIENT_SECRET, $model->facebookClientSecret);

                $config['components']['authClientCollection']['clients']['facebook']['class'] = Facebook::className();
                $config['components']['authClientCollection']['clients']['facebook']['clientId'] = $model->facebookClientId;
                $config['components']['authClientCollection']['clients']['facebook']['clientSecret'] = $model->facebookClientSecret;
            } else {
                Yii::$app->config->set(Enum::FACEBOOK_AUTH, NULL);
                unset($config['components']['authClientCollection']['clients']['facebook']);
            }

            if (!empty($model->linkedInClientId) && !empty($model->linkedInClientSecret)) {
                Yii::$app->config->set(Enum::LINKED_IN_AUTH, LinkedIn::className());
                Yii::$app->config->set(Enum::LINKED_IN_CLIENT_ID, $model->linkedInClientId);
                Yii::$app->config->set(Enum::LINKED_IN_CLIENT_SECRET, $model->linkedInClientSecret);

                $config['components']['authClientCollection']['clients']['linkedin']['class'] = LinkedIn::className();
                $config['components']['authClientCollection']['clients']['linkedin']['clientId'] = $model->linkedInClientId;
                $config['components']['authClientCollection']['clients']['linkedin']['clientSecret'] = $model->linkedInClientSecret;
            } else {
                Yii::$app->config->set(Enum::LINKED_IN_AUTH, NULL);
                unset($config['components']['authClientCollection']['clients']['linkedin']);
            }

            if (!empty($model->githubClientId) && !empty($model->githubClientSecret)) {
                Yii::$app->config->set(Enum::GITHUB_AUTH, GitHub::className());
                Yii::$app->config->set(Enum::GITHUB_CLIENT_ID, $model->githubClientId);
                Yii::$app->config->set(Enum::GITHUB_CLIENT_SECRET, $model->githubClientSecret);

                $config['components']['authClientCollection']['clients']['github']['class'] = GitHub::className();
                $config['components']['authClientCollection']['clients']['github']['clientId'] = $model->githubClientId;
                $config['components']['authClientCollection']['clients']['github']['clientSecret'] = $model->githubClientSecret;
            } else {
                Yii::$app->config->set(Enum::GITHUB_AUTH, NULL);
                unset($config['components']['authClientCollection']['clients']['github']);
            }


            if (!empty($model->liveClientId) && !empty($model->liveClientSecret)) {
                Yii::$app->config->set(Enum::LIVE_AUTH, Live::className());
                Yii::$app->config->set(Enum::LIVE_CLIENT_ID, $model->liveClientId);
                Yii::$app->config->set(Enum::LIVE_CLIENT_SECRET, $model->liveClientSecret);

                $config['components']['authClientCollection']['clients']['live']['class'] = Live::className();
                $config['components']['authClientCollection']['clients']['live']['clientId'] = $model->liveClientId;
                $config['components']['authClientCollection']['clients']['live']['clientSecret'] = $model->liveClientSecret;
            } else {
                Yii::$app->config->set(Enum::LIVE_AUTH, NULL);
                unset($config['components']['authClientCollection']['clients']['live']);
            }

            if (!empty($model->twitterConsumerKey) && !empty($model->twitterConsumerSecret)) {
                Yii::$app->config->set(Enum::TWITTER_AUTH, Twitter::className());
                Yii::$app->config->set(Enum::TWITTER_CONSUMER_KEY, $model->twitterConsumerKey);
                Yii::$app->config->set(Enum::TWITTER_CONSUMER_SECRET, $model->twitterConsumerSecret);

                $config['components']['authClientCollection']['clients']['twitter']['class'] = Twitter::className();
                $config['components']['authClientCollection']['clients']['twitter']['consumerKey'] = $model->twitterConsumerKey;
                $config['components']['authClientCollection']['clients']['twitter']['consumerSecret'] = $model->twitterConsumerSecret;
            } else {
                Yii::$app->config->set(Enum::TWITTER_AUTH, NULL);
                unset($config['components']['authClientCollection']['clients']['twitter']);
            }

            Configuration::set($config);

            Yii::$app->getSession()->setFlash('success', Yii::t('user', 'User module settings saved successfully'));
        }

        return $this->render('authClient', ['model' => $model]);
    }
}