/** @inheritdoc */ public function init() { $this->finder = \Yii::$container->get(Finder::className()); $this->mailer = \Yii::$container->get(Mailer::className()); $this->module = \Yii::$app->getModule('user'); parent::init(); }
/** @inheritdoc */ public function bootstrap($app) { /** @var $module Module */ if ($app->hasModule('user') && ($module = $app->getModule('user')) instanceof Module) { $this->_modelMap = array_merge($this->_modelMap, $module->modelMap); foreach ($this->_modelMap as $name => $definition) { $class = "dektrium\\user\\models\\" . $name; \Yii::$container->set($class, $definition); $modelName = is_array($definition) ? $definition['class'] : $definition; $module->modelMap[$name] = $modelName; if (in_array($name, ['User', 'Profile', 'Token', 'Account'])) { \Yii::$container->set($name . 'Query', function () use($modelName) { return $modelName::find(); }); } } \Yii::$container->setSingleton(Finder::className(), ['userQuery' => \Yii::$container->get('UserQuery'), 'profileQuery' => \Yii::$container->get('ProfileQuery'), 'tokenQuery' => \Yii::$container->get('TokenQuery'), 'accountQuery' => \Yii::$container->get('AccountQuery')]); if ($app instanceof ConsoleApplication) { $module->controllerNamespace = 'dektrium\\user\\commands'; } else { \Yii::$container->set('yii\\web\\User', ['enableAutoLogin' => true, 'loginUrl' => ['/user/security/login'], 'identityClass' => $module->modelMap['User']]); $configUrlRule = ['prefix' => $module->urlPrefix, 'rules' => $module->urlRules]; if ($module->urlPrefix != 'user') { $configUrlRule['routePrefix'] = 'user'; } $app->get('urlManager')->rules[] = new GroupUrlRule($configUrlRule); if (!$app->has('authClientCollection')) { $app->set('authClientCollection', ['class' => Collection::className()]); } } $app->get('i18n')->translations['user*'] = ['class' => PhpMessageSource::className(), 'basePath' => __DIR__ . '/messages']; $defaults = ['welcomeSubject' => \Yii::t('user', 'Welcome to {0}', \Yii::$app->name), 'confirmationSubject' => \Yii::t('user', 'Confirm account on {0}', \Yii::$app->name), 'reconfirmationSubject' => \Yii::t('user', 'Confirm email change on {0}', \Yii::$app->name), 'recoverySubject' => \Yii::t('user', 'Complete password reset on {0}', \Yii::$app->name)]; \Yii::$container->set('dektrium\\user\\Mailer', array_merge($defaults, $module->mailer)); } }
/** * Tests login method. */ public function testLogin() { $user = \Yii::createObject(User::className()); test::double(Finder::className(), ['findUserByUsernameOrEmail' => $user]); $form = Yii::createObject(LoginForm::className()); $form->beforeValidate(); test::double($form, ['validate' => false]); verify($form->login())->false(); test::double($form, ['validate' => true]); test::double(\yii\web\User::className(), ['login' => false]); verify($form->login())->false(); test::double(\yii\web\User::className(), ['login' => true]); verify($form->login())->true(); }
/** * Setup admin user (create, update password, confirm) */ public function actionSetupAdminUser() { $finder = \Yii::$container->get(Finder::className()); $admin = $finder->findUserByUsername('admin'); if ($admin === null) { $email = $this->prompt('E-Mail for application admin user:'******'default' => getenv('APP_ADMIN_EMAIL')]); $this->action('user/create', [$email, 'admin']); $password = $this->prompt('Password for application admin user:'******'default' => getenv('APP_ADMIN_PASSWORD')]); } else { $password = $this->prompt('Update password for application admin user (leave empty to skip):'); } if ($password) { $this->action('user/password', ['admin', $password]); } sleep(1); // confirmation may not succeed without a short pause $this->action('user/confirm', ['admin']); }
/** * Tests recovery request form. */ public function testRecoveryRequest() { $mailer = test::double(Mailer::className(), ['sendRecoveryMessage' => true]); $form = Yii::createObject(['class' => RecoveryForm::className(), 'scenario' => 'request']); $this->specify('form is not valid when email is empty', function () use($form) { $form->setAttributes(['email' => '']); verify($form->validate())->false(); verify($form->getErrors('email'))->contains('Email cannot be blank.'); }); $this->specify('form is not valid when email is incorrect', function () use($form) { $form->setAttributes(['email' => 'foobar']); verify($form->validate())->false(); verify($form->getErrors('email'))->contains('Email is not a valid email address.'); }); $this->specify('form is not valid when user does not exist', function () use($form) { test::double(ActiveQuery::className(), ['exists' => false]); $form->setAttributes(['email' => '*****@*****.**']); verify($form->validate())->false(); verify($form->getErrors('email'))->contains('There is no user with this email address'); test::double(ActiveQuery::className(), ['exists' => true]); }); $this->specify('form is not valid when user is not confirmed', function () use($form) { $user = \Yii::createObject(User::className()); test::double($user, ['getIsConfirmed' => false]); test::double(Finder::className(), ['findUserByEmail' => $user]); $form->setAttributes(['email' => '*****@*****.**']); verify($form->validate())->false(); verify($form->getErrors('email'))->contains('You need to confirm your email address'); test::double($user, ['getIsConfirmed' => true]); verify($form->validate())->true(); }); $this->specify('sendRecoveryMessage return true if validation succeeded', function () use($form, $mailer) { test::double($form, ['validate' => true]); $token = test::double(Token::className(), ['save' => true]); $user = \Yii::createObject(['class' => User::className(), 'id' => 1]); test::double(Finder::className(), ['findUserByEmail' => $user]); verify($form->sendRecoveryMessage())->true(); $token->verifyInvoked('save'); verify(\Yii::$app->session->getFlash('info'))->equals('An email has been sent with instructions for resetting your password'); $mailer->verifyInvoked('sendRecoveryMessage'); }); }
/** @inheritdoc */ public function bootstrap($app) { /** @var Module $module */ /** @var \yii\db\ActiveRecord $modelName */ if ($app->hasModule('user') && ($module = $app->getModule('user')) instanceof Module) { $this->_modelMap = array_merge($this->_modelMap, $module->modelMap); foreach ($this->_modelMap as $name => $definition) { $class = "dektrium\\user\\models\\" . $name; Yii::$container->set($class, $definition); $modelName = is_array($definition) ? $definition['class'] : $definition; $module->modelMap[$name] = $modelName; if (in_array($name, ['User', 'Profile', 'Token', 'Account'])) { Yii::$container->set($name . 'Query', function () use($modelName) { return $modelName::find(); }); } } Yii::$container->setSingleton(Finder::className(), ['userQuery' => Yii::$container->get('UserQuery'), 'profileQuery' => Yii::$container->get('ProfileQuery'), 'tokenQuery' => Yii::$container->get('TokenQuery'), 'accountQuery' => Yii::$container->get('AccountQuery')]); if ($app instanceof ConsoleApplication) { $module->controllerNamespace = 'dektrium\\user\\commands'; } else { Yii::$container->set('yii\\web\\User', ['enableAutoLogin' => true, 'loginUrl' => ['/user/security/login'], 'identityClass' => $module->modelMap['User']]); $configUrlRule = ['prefix' => $module->urlPrefix, 'rules' => $module->urlRules]; if ($module->urlPrefix != 'user') { $configUrlRule['routePrefix'] = 'user'; } $configUrlRule['class'] = 'yii\\web\\GroupUrlRule'; $rule = Yii::createObject($configUrlRule); $app->urlManager->addRules([$rule], false); if (!$app->has('authClientCollection')) { $app->set('authClientCollection', ['class' => Collection::className()]); } } if (!isset($app->get('i18n')->translations['user*'])) { $app->get('i18n')->translations['user*'] = ['class' => PhpMessageSource::className(), 'basePath' => __DIR__ . '/messages']; } Yii::$container->set('dektrium\\user\\Mailer', $module->mailer); } }
/** * @return Finder */ protected static function getFinder() { if (static::$finder === null) { static::$finder = Yii::$container->get(Finder::className()); } return static::$finder; }
/** * @return Finder * @throws \yii\base\InvalidConfigException */ protected function getFinder() { return Yii::$container->get(Finder::className()); }
public static function finder() { $finder = Yii::createObject(Finder::className()); return $finder; }