-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBootstrap.php
More file actions
83 lines (79 loc) · 3.71 KB
/
Copy pathBootstrap.php
File metadata and controls
83 lines (79 loc) · 3.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<?php
namespace chipmob\user;
use chipmob\user\models\Action;
use Yii;
use yii\base\BootstrapInterface;
class Bootstrap implements BootstrapInterface
{
private array $_modelMap = [
'Account' => 'chipmob\user\models\Account',
'Action' => 'chipmob\user\models\Action',
'Log' => 'chipmob\user\models\Log',
'Profile' => 'chipmob\user\models\Profile',
'Token' => 'chipmob\user\models\Token',
'User' => 'chipmob\user\models\User',
'GoogleTotpForm' => 'chipmob\user\models\form\GoogleTotpForm',
'LoginForm' => 'chipmob\user\models\form\LoginForm',
'RecoveryForm' => 'chipmob\user\models\form\RecoveryForm',
'RegistrationForm' => 'chipmob\user\models\form\RegistrationForm',
'ResendForm' => 'chipmob\user\models\form\ResendForm',
'SettingsForm' => 'chipmob\user\models\form\SettingsForm',
'TotpForm' => 'chipmob\user\models\form\TotpForm',
'ActionSearch' => 'chipmob\user\models\search\ActionSearch',
'UserSearch' => 'chipmob\user\models\search\UserSearch',
];
/** @inheritdoc */
public function bootstrap($app)
{
if (($module = $app->getModule('user')) instanceof Module) {
Yii::setAlias('@user', __DIR__);
$this->_modelMap = array_merge($this->_modelMap, $module->modelMap);
foreach ($this->_modelMap as $name => $definition) {
if (preg_match("/(Form|Query|Search)$/", $name, $match)) {
$folder = strtolower($match[1]);
$class = "chipmob\\user\\models\\$folder\\$name";
} else {
$class = "chipmob\\user\\models\\$name";
}
Yii::$container->set($class, $definition);
$modelClass = is_array($definition) ? $definition['class'] : $definition;
$module->modelMap[$name] = $modelClass;
if (in_array($name, ['Account', 'Action', 'Log', 'Profile', 'Token', 'User'])) {
Yii::$container->set("{$name}Query", fn() => $modelClass::find());
}
}
if ($app instanceof \yii\console\Application) {
$app->controllerMap['user'] = [
'class' => 'chipmob\user\commands\UserController',
'defaultAction' => 'create',
];
$app->controllerMap['migrate']['migrationPath'][] = '@user/migrations';
$module->defaultRoute = 'user';
} else {
$webUserClass = Yii::$app->has('user', false) ? Yii::$app->getComponents()['user']['class'] : 'yii\web\User';
Yii::$container->set($webUserClass, [
'identityClass' => $module->modelMap['User'],
'loginUrl' => ['/user/security/login'],
'on afterLogin' => fn($event) => Action::saveLogin($event),
'on afterLogout' => fn($event) => Action::saveLogout($event),
]);
$configUrlRule = [
'class' => 'yii\web\GroupUrlRule',
'prefix' => $module->urlPrefix,
'rules' => $module->urlRules,
];
if ($module->urlPrefix != 'user') {
$configUrlRule['routePrefix'] = 'user';
}
$rule = Yii::createObject($configUrlRule);
$app->urlManager->addRules([$rule], false);
}
$app->i18n->translations['user*'] = [
'class' => 'yii\i18n\PhpMessageSource',
'basePath' => '@user/messages',
'sourceLanguage' => 'en-US',
];
Yii::$container->set(Mailer::class, $module->mailerConfig);
}
}
}