'rainlab.userplus::lang.plugin.name', 'description' => 'rainlab.userplus::lang.plugin.description', 'author' => 'Alexey Bobkov, Samuel Georges', 'icon' => 'icon-user-plus', 'homepage' => 'https://github.com/rainlab/userplus-plugin' ]; } public function boot() { $this->extendUserModel(); $this->extendUsersController(); $this->extendSaveDatabaseAction(); $this->extendUserEventBase(); } public function registerComponents() { return [ \RainLab\UserPlus\Components\Notifications::class => 'notifications', ]; } protected function extendUserModel() { UserModel::extend(function($model) { $model->addFillable([ 'phone', 'mobile', 'company', 'street_addr', 'city', 'zip' ]); $model->implement[] = 'RainLab.Location.Behaviors.LocationModel'; $model->morphMany['notifications'] = [ NotificationModel::class, 'name' => 'notifiable', 'order' => 'created_at desc' ]; }); } protected function extendUsersController() { UsersController::extendFormFields(function($widget) { // Prevent extending of related form instead of the intended User form if (!$widget->model instanceof UserModel) { return; } $configFile = plugins_path('rainlab/userplus/config/profile_fields.yaml'); $config = Yaml::parse(File::get($configFile)); $widget->addTabFields($config); }); } public function registerNotificationRules() { return [ 'events' => [], 'actions' => [], 'conditions' => [ \RainLab\UserPlus\NotifyRules\UserLocationAttributeCondition::class ], 'presets' => '$/rainlab/userplus/config/notify_presets.yaml', ]; } protected function extendUserEventBase() { if (!class_exists(UserEventBase::class)) { return; } UserEventBase::extend(function($event) { $event->conditions[] = \RainLab\UserPlus\NotifyRules\UserLocationAttributeCondition::class; }); } protected function extendSaveDatabaseAction() { if (!class_exists(SaveDatabaseAction::class)) { return; } SaveDatabaseAction::extend(function ($action) { $action->addTableDefinition([ 'label' => 'User activity', 'class' => UserModel::class, 'param' => 'user' ]); }); } }