diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a09c56d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/.idea diff --git a/README.md b/README.md index 821c0c7..a49d528 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ return [ // 'frontend/config/main.php' and/or 'backend/config/main.php' (OR you can add it // to 'common/config' if you remove it from frontend/backend) 'user' => [ - 'class' => 'amnah\yii2\user\components\User', + 'class' => 'faro\core\user\components\User', ], 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', @@ -60,7 +60,7 @@ return [ ], 'modules' => [ 'user' => [ - 'class' => 'amnah\yii2\user\Module', + 'class' => 'faro\core\user\Module', // set custom module properties here ... ], ], @@ -211,7 +211,7 @@ To do so, you can use the helper command ```CopyController```. // app/config/console.php 'modules' => [ 'user' => [ - 'class' => 'amnah\yii2\user\Module', + 'class' => 'faro\core\user\Module', ], ], ``` @@ -235,7 +235,7 @@ php yii user/copy --from=@vendor/amnah/yii2-user --to=@app/modules/user --namesp ``` **Alternatively,** you can do this manually. Just copy/paste the files wherever you'd like and -change the namespaces in the files. Replace ```amnah\yii2\user``` with ```app\modules\user```. +change the namespaces in the files. Replace ```faro\core\user``` with ```app\modules\user```. ## Todo * Tests diff --git a/SOCIAL.md b/SOCIAL.md index fc60068..957e2a0 100644 --- a/SOCIAL.md +++ b/SOCIAL.md @@ -45,7 +45,7 @@ auth clients** 'clientSecret' => 'yyyyyyyyyy', ], 'reddit' => [ - 'class' => 'amnah\yii2\user\components\RedditAuth', + 'class' => 'faro\core\user\components\RedditAuth', 'clientId' => 'xxxxxxxxxx', 'clientSecret' => 'yyyyyyyyyy', 'scope' => 'identity', // comma separated string, NO SPACES @@ -113,8 +113,8 @@ Let's take a look at the basic implementation for facebook: */ protected function setInfoFacebook($attributes) { - /** @var \amnah\yii2\user\models\User $user */ - /** @var \amnah\yii2\user\models\Profile $profile */ + /** @var \faro\core\user\models\User $user */ + /** @var \faro\core\user\models\Profile $profile */ $user = Yii::$app->getModule("user")->model("User"); $profile = Yii::$app->getModule("user")->model("Profile"); diff --git a/composer.json b/composer.json index af83867..5ef4deb 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,5 @@ { - "name": "amnah/yii2-user", + "name": "faro/yii2-user", "description": "Yii 2 user authentication module", "keywords": ["yii", "yii2", "user", "auth", "authentication"], "type": "yii2-extension", @@ -12,9 +12,35 @@ ], "require": { "yiisoft/yii2": "*", - "yiisoft/yii2-authclient": "*" + "yiisoft/yii2-authclient": "*", + "faro/core": "2022.1.*" }, "autoload": { - "psr-4": { "amnah\\yii2\\user\\": "" } - } + "psr-4": { "faro\\core\\user\\": "src" } + }, + "extra": { + "branch-alias": {} + }, + "repositories": [ + { + "type": "composer", + "url": "https://asset-packagist.org" + }, + { + "type": "vcs", + "url": "git@github.com:FARO-DataLab/faro-core.git" + }, + { + "type": "vcs", + "url": "git@github.com:FARO-DataLab/faro-media.git" + }, + { + "type": "vcs", + "url": "git@github.com:FARO-DataLab/faro-googleanalytics.git" + }, + { + "type": "vcs", + "url": "git@github.com:FARO-DataLab/yii2-user.git" + } + ] } \ No newline at end of file diff --git a/Module.php b/src/Module.php similarity index 88% rename from Module.php rename to src/Module.php index 11f6a29..a98671f 100644 --- a/Module.php +++ b/src/Module.php @@ -1,7 +1,8 @@ */ -class Module extends \yii\base\Module +class Module extends FaroBaseModule { /** * @var string Module version */ - protected $version = "5.0.8"; + protected $version = "2022.1-dev"; /** * @var string Alias for module */ - public $alias = "@user"; + public $alias = "@faro/core/user"; /** * @var bool If true, users are required to enter an email @@ -100,11 +101,11 @@ class Module extends \yii\base\Module public $forceTranslation = false; /** - * @var array Model classes, e.g., ["User" => "amnah\yii2\user\models\User"] + * @var array Model classes, e.g., ["User" => "faro\core\user\models\User"] * Usage: * $user = Yii::$app->getModule("user")->model("User", $config); * (equivalent to) - * $user = new \amnah\yii2\user\models\User($config); + * $user = new \faro\core\user\models\User($config); * * The model classes here will be merged with/override the [[getDefaultModelClasses()|default ones]] */ @@ -182,8 +183,8 @@ protected function checkModuleProperties() // "common/config" instead of "frontend/config" and/or "backend/config" // -> this results in users failing to login without any feedback/error message $userComponent = Yii::$app->get('user', false); - if ($userComponent && !$userComponent instanceof \amnah\yii2\user\components\User) { - throw new InvalidConfigException('Yii::$app->user is not set properly. It needs to extend \amnah\yii2\user\components\User'); + if ($userComponent && !$userComponent instanceof \faro\core\user\components\User) { + throw new InvalidConfigException('Yii::$app->user is not set properly. It needs to extend \faro\core\user\components\User'); } } @@ -199,20 +200,20 @@ protected function getDefaultModelClasses() } elseif (class_exists('app\models\User')) { $userClass = 'app\models\User'; } else { - $userClass = 'amnah\yii2\user\models\User'; + $userClass = 'faro\core\user\models\User'; } return [ 'User' => $userClass, - 'Profile' => 'amnah\yii2\user\models\Profile', - 'Role' => 'amnah\yii2\user\models\Role', - 'UserToken' => 'amnah\yii2\user\models\UserToken', - 'UserAuth' => 'amnah\yii2\user\models\UserAuth', - 'ForgotForm' => 'amnah\yii2\user\models\forms\ForgotForm', - 'LoginForm' => 'amnah\yii2\user\models\forms\LoginForm', - 'ResendForm' => 'amnah\yii2\user\models\forms\ResendForm', - 'UserSearch' => 'amnah\yii2\user\models\search\UserSearch', - 'LoginEmailForm' => 'amnah\yii2\user\models\forms\LoginEmailForm', + 'Profile' => 'faro\core\user\models\Profile', + 'Role' => 'faro\core\user\models\Role', + 'UserToken' => 'faro\core\user\models\UserToken', + 'UserAuth' => 'faro\core\user\models\UserAuth', + 'ForgotForm' => 'faro\core\user\models\forms\ForgotForm', + 'LoginForm' => 'faro\core\user\models\forms\LoginForm', + 'ResendForm' => 'faro\core\user\models\forms\ResendForm', + 'UserSearch' => 'faro\core\user\models\search\UserSearch', + 'LoginEmailForm' => 'faro\core\user\models\forms\LoginEmailForm', ]; } diff --git a/components/RedditAuth.php b/src/components/RedditAuth.php similarity index 98% rename from components/RedditAuth.php rename to src/components/RedditAuth.php index 7d52655..8b1ffaa 100644 --- a/components/RedditAuth.php +++ b/src/components/RedditAuth.php @@ -1,6 +1,6 @@ updateLoginMeta(); parent::afterLogin($identity, $cookieBased, $duration); } @@ -67,7 +67,7 @@ public function afterLogin($identity, $cookieBased, $duration) */ public function getDisplayName() { - /** @var \amnah\yii2\user\models\User $user */ + /** @var \faro\core\user\models\User $user */ $user = $this->getIdentity(); return $user ? $user->getDisplayName() : ""; } @@ -90,7 +90,7 @@ public function can($permissionName, $params = [], $allowCaching = true) } // otherwise use our own custom permission (via the role table) - /** @var \amnah\yii2\user\models\User $user */ + /** @var \faro\core\user\models\User $user */ $user = $this->getIdentity(); return $user ? $user->can($permissionName) : false; } diff --git a/controllers/AdminController.php b/src/controllers/AdminController.php similarity index 83% rename from controllers/AdminController.php rename to src/controllers/AdminController.php index b75bf29..fe1b55b 100644 --- a/controllers/AdminController.php +++ b/src/controllers/AdminController.php @@ -1,9 +1,10 @@ user first because it doesn't exist in console commands (throws exception) - if (!empty(Yii::$app->user) && !Yii::$app->user->can("admin")) { - throw new ForbiddenHttpException('You are not allowed to perform this action.'); - } - + $this->view->params["navbar_menu_selected"] = "administracion"; + $this->view->params["ocultar_selector_fechas"] = true; parent::init(); } @@ -42,8 +39,18 @@ public function init() public function behaviors() { return [ + 'access' => [ + 'class' => AccessControl::class, + 'rules' => [ + [ + 'actions' => ['index', 'view', 'create', 'update', 'delete'], + 'allow' => true, + 'roles' => ['admin'] + ] + ], + ], 'verbs' => [ - 'class' => VerbFilter::className(), + 'class' => VerbFilter::class, 'actions' => [ 'delete' => ['post'], ], @@ -57,7 +64,7 @@ public function behaviors() */ public function actionIndex() { - /** @var \amnah\yii2\user\models\search\UserSearch $searchModel */ + /** @var \faro\core\user\models\search\UserSearch $searchModel */ $searchModel = $this->module->model("UserSearch"); $dataProvider = $searchModel->search(Yii::$app->request->getQueryParams()); @@ -83,8 +90,8 @@ public function actionView($id) */ public function actionCreate() { - /** @var \amnah\yii2\user\models\User $user */ - /** @var \amnah\yii2\user\models\Profile $profile */ + /** @var \faro\core\user\models\User $user */ + /** @var \faro\core\user\models\Profile $profile */ $user = $this->module->model("User"); $user->setScenario("admin"); @@ -174,7 +181,7 @@ public function actionDelete($id) */ protected function findModel($id) { - /** @var \amnah\yii2\user\models\User $user */ + /** @var \faro\core\user\models\User $user */ $user = $this->module->model("User"); $user = $user::findOne($id); if ($user) { diff --git a/controllers/AuthController.php b/src/controllers/AuthController.php similarity index 89% rename from controllers/AuthController.php rename to src/controllers/AuthController.php index cc378df..814fd6d 100644 --- a/controllers/AuthController.php +++ b/src/controllers/AuthController.php @@ -1,6 +1,6 @@ getUserAttributes(); @@ -117,9 +117,9 @@ protected function initUserAuth($client) */ protected function attemptLogin($client) { - /** @var \amnah\yii2\user\models\User $user */ - /** @var \amnah\yii2\user\models\UserAuth $userAuth */ - /** @var \amnah\yii2\user\models\UserToken $userToken */ + /** @var \faro\core\user\models\User $user */ + /** @var \faro\core\user\models\UserAuth $userAuth */ + /** @var \faro\core\user\models\UserToken $userToken */ $user = $this->module->model("User"); $userAuth = $this->module->model("UserAuth"); $userToken = $this->module->model("UserToken"); @@ -175,13 +175,13 @@ protected function attemptLogin($client) /** * Register a new user using client attributes and then associate userAuth * @param \yii\authclient\BaseClient $client - * @param \amnah\yii2\user\models\UserAuth $userAuth + * @param \faro\core\user\models\UserAuth $userAuth */ protected function registerAndLoginUser($client, $userAuth) { - /** @var \amnah\yii2\user\models\User $user */ - /** @var \amnah\yii2\user\models\Profile $profile */ - /** @var \amnah\yii2\user\models\Role $role */ + /** @var \faro\core\user\models\User $user */ + /** @var \faro\core\user\models\Profile $profile */ + /** @var \faro\core\user\models\Role $role */ $role = $this->module->model("Role"); // set user and profile info @@ -206,7 +206,7 @@ protected function registerAndLoginUser($client, $userAuth) /** * Double checks username to ensure that it isn't already taken. If so, * revert to fallback - * @param \amnah\yii2\user\models\User $user + * @param \faro\core\user\models\User $user * @param string $fallbackUsername * @return mixed */ @@ -230,8 +230,8 @@ protected function doubleCheckUsername($user, $fallbackUsername) */ protected function setInfoFacebook($attributes) { - /** @var \amnah\yii2\user\models\User $user */ - /** @var \amnah\yii2\user\models\Profile $profile */ + /** @var \faro\core\user\models\User $user */ + /** @var \faro\core\user\models\Profile $profile */ $user = $this->module->model("User"); $profile = $this->module->model("Profile"); @@ -261,8 +261,8 @@ protected function setInfoFacebook($attributes) */ protected function setInfoTwitter($attributes) { - /** @var \amnah\yii2\user\models\User $user */ - /** @var \amnah\yii2\user\models\Profile $profile */ + /** @var \faro\core\user\models\User $user */ + /** @var \faro\core\user\models\Profile $profile */ $user = $this->module->model("User"); $profile = $this->module->model("Profile"); @@ -279,8 +279,8 @@ protected function setInfoTwitter($attributes) */ protected function setInfoGoogle($attributes) { - /** @var \amnah\yii2\user\models\User $user */ - /** @var \amnah\yii2\user\models\Profile $profile */ + /** @var \faro\core\user\models\User $user */ + /** @var \faro\core\user\models\Profile $profile */ $user = $this->module->model("User"); $profile = $this->module->model("Profile"); @@ -297,8 +297,8 @@ protected function setInfoGoogle($attributes) */ protected function setInfoReddit($attributes) { - /** @var \amnah\yii2\user\models\User $user */ - /** @var \amnah\yii2\user\models\Profile $profile */ + /** @var \faro\core\user\models\User $user */ + /** @var \faro\core\user\models\Profile $profile */ $user = $this->module->model("User"); $profile = $this->module->model("Profile"); @@ -314,8 +314,8 @@ protected function setInfoReddit($attributes) */ protected function setInfoLinkedIn($attributes) { - /** @var \amnah\yii2\user\models\User $user */ - /** @var \amnah\yii2\user\models\Profile $profile */ + /** @var \faro\core\user\models\User $user */ + /** @var \faro\core\user\models\Profile $profile */ $user = $this->module->model("User"); $profile = $this->module->model("Profile"); @@ -334,8 +334,8 @@ protected function setInfoLinkedIn($attributes) */ protected function setInfoVkontakte($attributes) { - /** @var \amnah\yii2\user\models\User $user */ - /** @var \amnah\yii2\user\models\Profile $profile */ + /** @var \faro\core\user\models\User $user */ + /** @var \faro\core\user\models\Profile $profile */ $user = $this->module->model("User"); $profile = $this->module->model("Profile"); diff --git a/controllers/CopyController.php b/src/controllers/CopyController.php similarity index 99% rename from controllers/CopyController.php rename to src/controllers/CopyController.php index 8e3637c..da7c951 100644 --- a/controllers/CopyController.php +++ b/src/controllers/CopyController.php @@ -1,6 +1,6 @@ module->model("LoginForm"); // load post data and login @@ -84,6 +84,8 @@ public function actionLogin() $returnUrl = $this->performLogin($model->getUser(), $model->rememberMe); return $this->redirect($returnUrl); } + + $this->layout = "@vendor/faro/core/src/themes/dmp2020/layouts/login"; return $this->render('login', compact("model")); } @@ -93,7 +95,7 @@ public function actionLogin() */ public function actionLoginEmail() { - /** @var \amnah\yii2\user\models\forms\LoginEmailForm $loginEmailForm */ + /** @var \faro\core\user\models\forms\LoginEmailForm $loginEmailForm */ $loginEmailForm = $this->module->model("LoginEmailForm"); // load post data and validate @@ -113,10 +115,10 @@ public function actionLoginEmail() */ public function actionLoginCallback($token) { - /** @var \amnah\yii2\user\models\User $user */ - /** @var \amnah\yii2\user\models\Profile $profile */ - /** @var \amnah\yii2\user\models\Role $role */ - /** @var \amnah\yii2\user\models\UserToken $userToken */ + /** @var \faro\core\user\models\User $user */ + /** @var \faro\core\user\models\Profile $profile */ + /** @var \faro\core\user\models\Role $role */ + /** @var \faro\core\user\models\UserToken $userToken */ $user = $this->module->model("User"); $profile = $this->module->model("Profile"); @@ -196,9 +198,9 @@ public function actionLogout() */ public function actionRegister() { - /** @var \amnah\yii2\user\models\User $user */ - /** @var \amnah\yii2\user\models\Profile $profile */ - /** @var \amnah\yii2\user\models\Role $role */ + /** @var \faro\core\user\models\User $user */ + /** @var \faro\core\user\models\Profile $profile */ + /** @var \faro\core\user\models\Role $role */ // set up new user/profile objects $user = $this->module->model("User", ["scenario" => "register"]); @@ -242,11 +244,11 @@ public function actionRegister() /** * Process data after registration - * @param \amnah\yii2\user\models\User $user + * @param \faro\core\user\models\User $user */ protected function afterRegister($user) { - /** @var \amnah\yii2\user\models\UserToken $userToken */ + /** @var \faro\core\user\models\UserToken $userToken */ $userToken = $this->module->model("UserToken"); // determine userToken type to see if we need to send email @@ -275,8 +277,8 @@ protected function afterRegister($user) */ public function actionConfirm($token) { - /** @var \amnah\yii2\user\models\UserToken $userToken */ - /** @var \amnah\yii2\user\models\User $user */ + /** @var \faro\core\user\models\UserToken $userToken */ + /** @var \faro\core\user\models\User $user */ // search for userToken $success = false; @@ -307,8 +309,8 @@ public function actionConfirm($token) */ public function actionAccount() { - /** @var \amnah\yii2\user\models\User $user */ - /** @var \amnah\yii2\user\models\UserToken $userToken */ + /** @var \faro\core\user\models\User $user */ + /** @var \faro\core\user\models\UserToken $userToken */ // set up user and load post data $user = Yii::$app->user->identity; @@ -352,7 +354,7 @@ public function actionAccount() */ public function actionProfile() { - /** @var \amnah\yii2\user\models\Profile $profile */ + /** @var \faro\core\user\models\Profile $profile */ // set up profile and load post data $profile = Yii::$app->user->identity->profile; @@ -379,7 +381,7 @@ public function actionProfile() */ public function actionResend() { - /** @var \amnah\yii2\user\models\forms\ResendForm $model */ + /** @var \faro\core\user\models\forms\ResendForm $model */ // load post data and send email $model = $this->module->model("ResendForm"); @@ -398,8 +400,8 @@ public function actionResend() */ public function actionResendChange() { - /** @var \amnah\yii2\user\models\User $user */ - /** @var \amnah\yii2\user\models\UserToken $userToken */ + /** @var \faro\core\user\models\User $user */ + /** @var \faro\core\user\models\UserToken $userToken */ // find userToken of type email change $user = Yii::$app->user->identity; @@ -420,8 +422,8 @@ public function actionResendChange() */ public function actionCancel() { - /** @var \amnah\yii2\user\models\User $user */ - /** @var \amnah\yii2\user\models\UserToken $userToken */ + /** @var \faro\core\user\models\User $user */ + /** @var \faro\core\user\models\UserToken $userToken */ // find userToken of type email change $user = Yii::$app->user->identity; @@ -440,14 +442,20 @@ public function actionCancel() */ public function actionForgot() { - /** @var \amnah\yii2\user\models\forms\ForgotForm $model */ + /** @var \faro\core\user\models\forms\ForgotForm $model */ // load post data and send email + $this->layout = '@faro/core/themes/faro20221/layouts/login'; $model = $this->module->model("ForgotForm"); - if ($model->load(Yii::$app->request->post()) && $model->sendForgotEmail()) { + if ($model->load(Yii::$app->request->post())) { // set flash (which will show on the current page) - Yii::$app->session->setFlash("Forgot-success", Yii::t("user", "Instructions to reset your password have been sent")); + if ($model->sendForgotEmail()) { + Yii::$app->session->setFlash("success", Yii::t("user", "Instructions to reset your password have been sent")); + } else { + Yii::$app->session->setFlash("error", Yii::t("user", "No se pudo enviar el email")); + } + return $this->refresh(); } @@ -459,10 +467,11 @@ public function actionForgot() */ public function actionReset($token) { - /** @var \amnah\yii2\user\models\User $user */ - /** @var \amnah\yii2\user\models\UserToken $userToken */ + /** @var \faro\core\user\models\User $user */ + /** @var \faro\core\user\models\UserToken $userToken */ // get user token and check expiration + $this->layout = '@faro/core/themes/faro20221/layouts/login'; $userToken = $this->module->model("UserToken"); $userToken = $userToken::findByToken($token, $userToken::TYPE_PASSWORD_RESET); if (!$userToken) { diff --git a/helpers/Timezone.php b/src/helpers/Timezone.php similarity index 96% rename from helpers/Timezone.php rename to src/helpers/Timezone.php index ee87bf6..856d002 100644 --- a/helpers/Timezone.php +++ b/src/helpers/Timezone.php @@ -1,6 +1,6 @@ $userToken->token], true); diff --git a/mail/forgotPassword.php b/src/mail/forgotPassword.php similarity index 75% rename from mail/forgotPassword.php rename to src/mail/forgotPassword.php index 9e03513..c8ddc8a 100644 --- a/mail/forgotPassword.php +++ b/src/mail/forgotPassword.php @@ -5,8 +5,8 @@ /** * @var string $subject - * @var \amnah\yii2\user\models\User $user - * @var \amnah\yii2\user\models\UserToken $userToken + * @var \faro\core\user\models\User $user + * @var \faro\core\user\models\UserToken $userToken */ $url = Url::toRoute(["/user/reset", "token" => $userToken->token], true); diff --git a/mail/layouts/html.php b/src/mail/layouts/html.php similarity index 100% rename from mail/layouts/html.php rename to src/mail/layouts/html.php diff --git a/mail/loginToken.php b/src/mail/loginToken.php similarity index 70% rename from mail/loginToken.php rename to src/mail/loginToken.php index 9668c56..9377737 100644 --- a/mail/loginToken.php +++ b/src/mail/loginToken.php @@ -5,8 +5,8 @@ /** * @var string $subject - * @var \amnah\yii2\user\models\User $user - * @var \amnah\yii2\user\models\UserToken $userToken + * @var \faro\core\user\models\User $user + * @var \faro\core\user\models\UserToken $userToken */ $url = Url::toRoute(["/user/login-callback", "token" => $userToken->token], true); diff --git a/messages/de/user.php b/src/messages/de/user.php similarity index 100% rename from messages/de/user.php rename to src/messages/de/user.php diff --git a/messages/es/user.php b/src/messages/es/user.php similarity index 100% rename from messages/es/user.php rename to src/messages/es/user.php diff --git a/messages/fa/user.php b/src/messages/fa/user.php similarity index 100% rename from messages/fa/user.php rename to src/messages/fa/user.php diff --git a/messages/hu/user.php b/src/messages/hu/user.php similarity index 100% rename from messages/hu/user.php rename to src/messages/hu/user.php diff --git a/messages/it/user.php b/src/messages/it/user.php similarity index 100% rename from messages/it/user.php rename to src/messages/it/user.php diff --git a/messages/ja/user.php b/src/messages/ja/user.php similarity index 100% rename from messages/ja/user.php rename to src/messages/ja/user.php diff --git a/messages/pl/user.php b/src/messages/pl/user.php similarity index 100% rename from messages/pl/user.php rename to src/messages/pl/user.php diff --git a/messages/pt-BR/user.php b/src/messages/pt-BR/user.php similarity index 100% rename from messages/pt-BR/user.php rename to src/messages/pt-BR/user.php diff --git a/messages/pt/user.php b/src/messages/pt/user.php similarity index 100% rename from messages/pt/user.php rename to src/messages/pt/user.php diff --git a/messages/ru/user.php b/src/messages/ru/user.php similarity index 100% rename from messages/ru/user.php rename to src/messages/ru/user.php diff --git a/messages/sk/user.php b/src/messages/sk/user.php similarity index 100% rename from messages/sk/user.php rename to src/messages/sk/user.php diff --git a/messages/th/user.php b/src/messages/th/user.php similarity index 100% rename from messages/th/user.php rename to src/messages/th/user.php diff --git a/messages/uk/user.php b/src/messages/uk/user.php similarity index 100% rename from messages/uk/user.php rename to src/messages/uk/user.php diff --git a/messages/zh-CN/user.php b/src/messages/zh-CN/user.php similarity index 100% rename from messages/zh-CN/user.php rename to src/messages/zh-CN/user.php diff --git a/migrations/m150214_044831_init_user.php b/src/migrations/m150214_044831_init_user.php similarity index 68% rename from migrations/m150214_044831_init_user.php rename to src/migrations/m150214_044831_init_user.php index 058f620..7041fbc 100644 --- a/migrations/m150214_044831_init_user.php +++ b/src/migrations/m150214_044831_init_user.php @@ -1,5 +1,8 @@ createTable('{{%role}}', [ + $this->createTable('{{%core_acl_rol}}', [ 'id' => Schema::TYPE_PK, 'name' => Schema::TYPE_STRING . ' not null', 'created_at' => Schema::TYPE_TIMESTAMP . ' null', 'updated_at' => Schema::TYPE_TIMESTAMP . ' null', 'can_admin' => Schema::TYPE_SMALLINT . ' not null default 0', ], $tableOptions); - $this->createTable('{{%user}}', [ + $this->createTable('{{%core_acl_usuario}}', [ 'id' => Schema::TYPE_PK, 'role_id' => Schema::TYPE_INTEGER . ' not null', 'status' => Schema::TYPE_SMALLINT . ' not null', @@ -37,7 +40,7 @@ public function up() 'banned_at' => Schema::TYPE_TIMESTAMP . ' null', 'banned_reason' => Schema::TYPE_STRING . ' null', ], $tableOptions); - $this->createTable('{{%user_token}}', [ + $this->createTable('{{%core_acl_usuario_token}}', [ 'id' => Schema::TYPE_PK, 'user_id' => Schema::TYPE_INTEGER . ' null', 'type' => Schema::TYPE_SMALLINT . ' not null', @@ -46,7 +49,7 @@ public function up() 'created_at' => Schema::TYPE_TIMESTAMP . ' null', 'expired_at' => Schema::TYPE_TIMESTAMP . ' null', ], $tableOptions); - $this->createTable('{{%profile}}', [ + $this->createTable('{{%core_acl_perfil}}', [ 'id' => Schema::TYPE_PK, 'user_id' => Schema::TYPE_INTEGER . ' not null', 'created_at' => Schema::TYPE_TIMESTAMP . ' null', @@ -54,7 +57,7 @@ public function up() 'full_name' => Schema::TYPE_STRING . ' null', 'timezone' => Schema::TYPE_STRING . ' null', ], $tableOptions); - $this->createTable('{{%user_auth}}', [ + $this->createTable('{{%core_acl_usuario_auth}}', [ 'id' => Schema::TYPE_PK, 'user_id' => Schema::TYPE_INTEGER . ' not null', 'provider' => Schema::TYPE_STRING . ' not null', @@ -65,20 +68,20 @@ public function up() ], $tableOptions); // add indexes for performance optimization - $this->createIndex('{{%user_email}}', '{{%user}}', 'email', true); - $this->createIndex('{{%user_username}}', '{{%user}}', 'username', true); - $this->createIndex('{{%user_token_token}}', '{{%user_token}}', 'token', true); - $this->createIndex('{{%user_auth_provider_id}}', '{{%user_auth}}', 'provider_id', false); + $this->createIndex('{{%core_acl_usuario_email}}', '{{%core_acl_usuario}}', 'email', true); + $this->createIndex('{{%core_acl_usuario_username}}', '{{%core_acl_usuario}}', 'username', true); + $this->createIndex('{{%core_acl_usuario_token_token}}', '{{%core_acl_usuario_token}}', 'token', true); + $this->createIndex('{{%core_acl_usuario_auth_provider_id}}', '{{%core_acl_usuario_auth}}', 'provider_id', false); // add foreign keys for data integrity - $this->addForeignKey('{{%user_role_id}}', '{{%user}}', 'role_id', '{{%role}}', 'id'); - $this->addForeignKey('{{%profile_user_id}}', '{{%profile}}', 'user_id', '{{%user}}', 'id'); - $this->addForeignKey('{{%user_token_user_id}}', '{{%user_token}}', 'user_id', '{{%user}}', 'id'); - $this->addForeignKey('{{%user_auth_user_id}}', '{{%user_auth}}', 'user_id', '{{%user}}', 'id'); + $this->addForeignKey('{{%core_acl_usuario_role_id}}', '{{%core_acl_usuario}}', 'role_id', '{{%core_acl_rol}}', 'id'); + $this->addForeignKey('{{%core_acl_perfil_user_id}}', '{{%core_acl_perfil}}', 'user_id', '{{%core_acl_usuario}}', 'id'); + $this->addForeignKey('{{%core_acl_usuario_token_user_id}}', '{{%core_acl_usuario_token}}', 'user_id', '{{%core_acl_usuario}}', 'id'); + $this->addForeignKey('{{%core_acl_usuario_auth_user_id}}', '{{%core_acl_usuario_auth}}', 'user_id', '{{%core_acl_usuario}}', 'id'); // insert role data $columns = ['name', 'can_admin', 'created_at']; - $this->batchInsert('{{%role}}', $columns, [ + $this->batchInsert('{{%core_acl_rol}}', $columns, [ ['Admin', 1, gmdate('Y-m-d H:i:s')], ['User', 0, gmdate('Y-m-d H:i:s')], ]); @@ -86,11 +89,11 @@ public function up() // insert admin user: neo/neo $security = Yii::$app->security; $columns = ['role_id', 'email', 'username', 'password', 'status', 'created_at', 'access_token', 'auth_key']; - $this->batchInsert('{{%user}}', $columns, [ + $this->batchInsert('{{%core_acl_usuario}}', $columns, [ [ 1, // Role::ROLE_ADMIN - 'neo@neo.com', - 'neo', + 'admin@faro.works', + 'admin', '$2y$13$dyVw4WkZGkABf2UrGWrhHO4ZmVBv.K4puhOL59Y9jQhIdj63TlV.O', // neo 1, // User::STATUS_ACTIVE gmdate('Y-m-d H:i:s'), @@ -101,7 +104,7 @@ public function up() // insert profile data $columns = ['user_id', 'full_name', 'created_at']; - $this->batchInsert('{{%profile}}', $columns, [ + $this->batchInsert('{{%core_acl_perfil}}', $columns, [ [1, 'the one', gmdate('Y-m-d H:i:s')], ]); } @@ -109,10 +112,10 @@ public function up() public function down() { // drop tables in reverse order (for foreign key constraints) - $this->dropTable('{{%user_auth}}'); - $this->dropTable('{{%profile}}'); - $this->dropTable('{{%user_token}}'); - $this->dropTable('{{%user}}'); - $this->dropTable('{{%role}}'); + $this->dropTable('{{%core_acl_usuario_auth}}'); + $this->dropTable('{{%core_acl_perfil}}'); + $this->dropTable('{{%core_acl_usuario_token}}'); + $this->dropTable('{{%core_acl_usuario}}'); + $this->dropTable('{{%core_acl_rol}}'); } } diff --git a/models/Profile.php b/src/models/Profile.php similarity index 86% rename from models/Profile.php rename to src/models/Profile.php index 5690fa9..d02bfa5 100644 --- a/models/Profile.php +++ b/src/models/Profile.php @@ -1,6 +1,6 @@ 255], + [['full_name'], 'string', 'min' => 3, 'max' => 255], + [['full_name'], 'required'], [['timezone'], 'string', 'max' => 255], ]; } diff --git a/models/Role.php b/src/models/Role.php similarity index 90% rename from models/Role.php rename to src/models/Role.php index cb6f4e4..402c6d2 100644 --- a/models/Role.php +++ b/src/models/Role.php @@ -1,9 +1,12 @@ module) { - $this->module = Yii::$app->getModule("user"); - } - } - - /** - * @inheritdoc - */ - public function attributeLabels() - { - return [ - 'id' => Yii::t('user', 'ID'), - 'user_id' => Yii::t('user', 'User ID'), - 'type' => Yii::t('user', 'Type'), - 'token' => Yii::t('user', 'Token'), - 'data' => Yii::t('user', 'Data'), - 'created_at' => Yii::t('user', 'Created At'), - 'expired_at' => Yii::t('user', 'Expired At'), - ]; - } - - /** - * @inheritdoc - */ - public function behaviors() - { - return [ - 'timestamp' => [ - 'class' => 'yii\behaviors\TimestampBehavior', - 'updatedAtAttribute' => false, - 'value' => function ($event) { - return gmdate("Y-m-d H:i:s"); - }, - ], - ]; - } - - /** - * @return \yii\db\ActiveQuery + * @return string */ - public function getUser() + public static function tableName() { - $user = $this->module->model("User"); - return $this->hasOne($user::className(), ['id' => 'user_id']); + return "{{%core_acl_usuario_token}}"; } /** @@ -129,6 +86,18 @@ public static function generate($userId, $type, $data = null, $expireTime = null return $model; } + /** + * Find a userToken by userId + * @param int $userId + * @param array|int $type + * @param bool $checkExpiration + * @return static + */ + public static function findByUser($userId, $type, $checkExpiration = true) + { + return static::findBy("user_id", $userId, $type, $checkExpiration); + } + /** * Find a userToken by specified field/value * @param string $field @@ -139,7 +108,7 @@ public static function generate($userId, $type, $data = null, $expireTime = null */ public static function findBy($field, $value, $type, $checkExpiration) { - $query = static::find()->where([$field => $value, "type" => $type ]); + $query = static::find()->where([$field => $value, "type" => $type]); if ($checkExpiration) { $now = gmdate("Y-m-d H:i:s"); $query->andWhere("([[expired_at]] >= '$now' or [[expired_at]] is NULL)"); @@ -148,15 +117,15 @@ public static function findBy($field, $value, $type, $checkExpiration) } /** - * Find a userToken by userId - * @param int $userId + * Find a userToken by data + * @param string $data * @param array|int $type * @param bool $checkExpiration * @return static */ - public static function findByUser($userId, $type, $checkExpiration = true) + public static function findByData($data, $type, $checkExpiration = true) { - return static::findBy("user_id", $userId, $type, $checkExpiration); + return static::findBy("data", $data, $type, $checkExpiration); } /** @@ -172,14 +141,53 @@ public static function findByToken($token, $type, $checkExpiration = true) } /** - * Find a userToken by data - * @param string $data - * @param array|int $type - * @param bool $checkExpiration - * @return static + * @inheritdoc */ - public static function findByData($data, $type, $checkExpiration = true) + public function init() { - return static::findBy("data", $data, $type, $checkExpiration); + if (!$this->module) { + $this->module = Yii::$app->getModule("user"); + } + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'id' => Yii::t('user', 'ID'), + 'user_id' => Yii::t('user', 'User ID'), + 'type' => Yii::t('user', 'Type'), + 'token' => Yii::t('user', 'Token'), + 'data' => Yii::t('user', 'Data'), + 'created_at' => Yii::t('user', 'Created At'), + 'expired_at' => Yii::t('user', 'Expired At'), + ]; + } + + /** + * @inheritdoc + */ + public function behaviors() + { + return [ + 'timestamp' => [ + 'class' => 'yii\behaviors\TimestampBehavior', + 'updatedAtAttribute' => false, + 'value' => function ($event) { + return gmdate("Y-m-d H:i:s"); + }, + ], + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getUser() + { + $user = $this->module->model("User"); + return $this->hasOne($user::className(), ['id' => 'user_id']); } } \ No newline at end of file diff --git a/models/forms/ForgotForm.php b/src/models/forms/ForgotForm.php similarity index 85% rename from models/forms/ForgotForm.php rename to src/models/forms/ForgotForm.php index 4eb2180..b71f26d 100644 --- a/models/forms/ForgotForm.php +++ b/src/models/forms/ForgotForm.php @@ -1,9 +1,10 @@ validate()) { @@ -117,9 +118,16 @@ public function sendForgotEmail() // send email $subject = Yii::$app->id . " - " . Yii::t("user", "Forgot password"); $result = $mailer->compose('forgotPassword', compact("subject", "user", "userToken")) + ->setFrom(Yii::$app->params["senderEmail"]) ->setTo($user->email) ->setSubject($subject) ->send(); + + if (!$result) { + VarDumper::dump("no se pudo"); + VarDumper::dump($mailer->getErrors()); + die(); + } // restore view path and return result $mailer->viewPath = $oldViewPath; diff --git a/models/forms/LoginEmailForm.php b/src/models/forms/LoginEmailForm.php similarity index 96% rename from models/forms/LoginEmailForm.php rename to src/models/forms/LoginEmailForm.php index 772f89a..04996cf 100644 --- a/models/forms/LoginEmailForm.php +++ b/src/models/forms/LoginEmailForm.php @@ -1,6 +1,6 @@ validate()) { return false; diff --git a/models/forms/LoginForm.php b/src/models/forms/LoginForm.php similarity index 93% rename from models/forms/LoginForm.php rename to src/models/forms/LoginForm.php index af39a97..e89ead8 100644 --- a/models/forms/LoginForm.php +++ b/src/models/forms/LoginForm.php @@ -1,6 +1,6 @@ status == $user::STATUS_INACTIVE) { - /** @var \amnah\yii2\user\models\UserToken $userToken */ + /** @var \faro\core\user\models\UserToken $userToken */ $userToken = $this->module->model("UserToken"); $userToken = $userToken::generate($user->id, $userToken::TYPE_EMAIL_ACTIVATE); $user->sendEmailConfirmation($userToken); @@ -103,7 +103,7 @@ public function validatePassword() return; } - /** @var \amnah\yii2\user\models\User $user */ + /** @var \faro\core\user\models\User $user */ // check if password is correct $user = $this->getUser(); @@ -114,7 +114,7 @@ public function validatePassword() /** * Get user based on email and/or username - * @return \amnah\yii2\user\models\User|null + * @return \faro\core\user\models\User|null */ public function getUser() { diff --git a/models/forms/ResendForm.php b/src/models/forms/ResendForm.php similarity index 88% rename from models/forms/ResendForm.php rename to src/models/forms/ResendForm.php index 05d4af7..09b3104 100644 --- a/models/forms/ResendForm.php +++ b/src/models/forms/ResendForm.php @@ -1,6 +1,6 @@ user === false) { - /** @var \amnah\yii2\user\models\User $user */ - /** @var \amnah\yii2\user\models\UserToken $userToken */ + /** @var \faro\core\user\models\User $user */ + /** @var \faro\core\user\models\UserToken $userToken */ $user = $this->module->model("User"); $userToken = $this->module->model("UserToken"); @@ -110,7 +110,7 @@ public function sendEmail() return false; } - /** @var \amnah\yii2\user\models\UserToken $userToken */ + /** @var \faro\core\user\models\UserToken $userToken */ $user = $this->getUser(); $userToken = $this->module->model("UserToken"); diff --git a/models/search/UserSearch.php b/src/models/search/UserSearch.php similarity index 93% rename from models/search/UserSearch.php rename to src/models/search/UserSearch.php index 7881880..468ee36 100644 --- a/models/search/UserSearch.php +++ b/src/models/search/UserSearch.php @@ -1,14 +1,14 @@ module->model("User"); diff --git a/views/admin/_form.php b/src/views/admin/_form.php similarity index 89% rename from views/admin/_form.php rename to src/views/admin/_form.php index 5a861ee..1ed6a35 100644 --- a/views/admin/_form.php +++ b/src/views/admin/_form.php @@ -5,10 +5,10 @@ /** * @var yii\web\View $this - * @var amnah\yii2\user\Module $module - * @var amnah\yii2\user\models\User $user - * @var amnah\yii2\user\models\Profile $profile - * @var amnah\yii2\user\models\Role $role + * @var faro\core\user\Module $module + * @var faro\core\user\models\User $user + * @var faro\core\user\models\Profile $profile + * @var faro\core\user\models\Role $role * @var yii\widgets\ActiveForm $form */ diff --git a/views/admin/_search.php b/src/views/admin/_search.php similarity index 95% rename from views/admin/_search.php rename to src/views/admin/_search.php index c010fe4..cde0cee 100644 --- a/views/admin/_search.php +++ b/src/views/admin/_search.php @@ -5,7 +5,7 @@ /** * @var yii\web\View $this - * @var amnah\yii2\user\models\search\UserSearch $model + * @var faro\core\user\models\search\UserSearch $model * @var yii\widgets\ActiveForm $form */ ?> diff --git a/views/admin/create.php b/src/views/admin/create.php similarity index 62% rename from views/admin/create.php rename to src/views/admin/create.php index 55c0e55..babcd2e 100644 --- a/views/admin/create.php +++ b/src/views/admin/create.php @@ -1,26 +1,30 @@ title = Yii::t('user', 'Create {modelClass}', [ - 'modelClass' => 'User', + 'modelClass' => 'Usuario', ]); + $this->params['breadcrumbs'][] = ['label' => Yii::t('user', 'Users'), 'url' => ['index']]; $this->params['breadcrumbs'][] = $this->title; ?>
- = Html::a(Yii::t('user', 'Create {modelClass}', [ - 'modelClass' => 'User', - ]), ['create'], ['class' => 'btn btn-success']) ?> -
- - = GridView::widget([ + = FaroGridView::widget([ 'dataProvider' => $dataProvider, - 'filterModel' => $searchModel, + 'filterModel' => null, + 'headerContainer' => ['class' => ''], + 'striped' => false, + "bordered" => false, + "layout" => "{items}\n{pager}", 'columns' => [ - ['class' => 'yii\grid\SerialColumn'], - - 'id', [ 'attribute' => 'role_id', 'label' => Yii::t('user', 'Role'), 'filter' => $role::dropdown(), - 'value' => function($model, $index, $dataColumn) use ($role) { + 'value' => function ($model, $index, $dataColumn) use ($role) { $roleDropdown = $role::dropdown(); return $roleDropdown[$model->role_id]; }, ], + 'profile.full_name' => [ + "attribute" => "profile.full_name", + "format" => "raw", + "value" => function ($model) { + return \yii\bootstrap4\Html::a($model->profile->full_name, + ["view", "id" => $model->id]); + } + ], + 'email:email', [ 'attribute' => 'status', 'label' => Yii::t('user', 'Status'), 'filter' => $user::statusDropdown(), - 'value' => function($model, $index, $dataColumn) use ($user) { + 'value' => function ($model, $index, $dataColumn) use ($user) { $statusDropdown = $user::statusDropdown(); return $statusDropdown[$model->status]; }, ], - 'email:email', - 'profile.full_name', + 'profile.timezone', - 'created_at', + 'created_at:relativeTime', // 'username', // 'password', // 'auth_key', @@ -71,10 +89,9 @@ // 'updated_at', // 'banned_at', // 'banned_reason', - - ['class' => 'yii\grid\ActionColumn'], ], ]); ?> +Para eliminar este usuario ingresá desde acá. Si creés que en un futuro puede volver a ser + necesario te sugerimos que lo desactives.
+ + = Alert::widget([ + "body" => " Esta acción no puede deshacerse", + "closeButton" => false, + "options" => ["class" => "alert-danger"] + ]) ?> + + = + Html::a("Eliminar usuario", ['delete', 'id' => $user->id], [ + 'class' => 'btn btn-danger btn-block shadow-sm d-sm-inline-block', + 'data' => [ + 'confirm' => Yii::t('app', 'Esta seguro que desea eliminar este usuario?'), + 'method' => 'post', + ], + ]) + ?> + + + +- = Html::a(Yii::t('user', 'Update'), ['update', 'id' => $user->id], ['class' => 'btn btn-primary']) ?> - = Html::a(Yii::t('user', 'Delete'), ['delete', 'id' => $user->id], [ - 'class' => 'btn btn-danger', - 'data' => [ - 'confirm' => Yii::t('user', 'Are you sure you want to delete this item?'), - 'method' => 'post', - ], - ]) ?> -
+= $flash ?>
+No te preocupes, ingresá tu email y te enviaremos un link para reiniciarla!
+ + = $form->field($model, 'email') ?> += $flash ?>
-= Yii::t("user", "Password has been reset") ?>
+= Html::a(Yii::t("user", "Log in here"), ["/user/login"]) ?>
+ += Yii::t("user", "Invalid token") ?>
+= Yii::t("user", "Email") ?> [ = $user->email ?> ]
+= $flash ?>
-= Yii::t("user", "Password has been reset") ?>
-= Html::a(Yii::t("user", "Log in here"), ["/user/login"]) ?>
- -= Yii::t("user", "Invalid token") ?>
-= Yii::t("user", "Email") ?> [ = $user->email ?> ]
-