%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/legal/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/legal/Events.php |
<?php /** * @link https://www.humhub.org/ * @copyright Copyright (c) 2018 HumHub GmbH & Co. KG * @license https://www.humhub.com/licences */ namespace humhub\modules\legal; use humhub\modules\admin\controllers\UserController; use humhub\modules\comment\models\Comment; use humhub\modules\content\widgets\richtext\ProsemirrorRichText; use humhub\modules\legal\models\Page; use humhub\modules\legal\models\RegistrationChecks; use humhub\modules\legal\widgets\Content; use humhub\modules\legal\widgets\CookieNote; use humhub\modules\post\models\Post; use humhub\modules\rest\components\BaseController; use humhub\modules\user\models\forms\Registration; use humhub\modules\user\models\User; use humhub\widgets\LayoutAddons; use Yii; use yii\base\ActionEvent; use yii\helpers\Url; use yii\web\UserEvent; /** * @author luke */ class Events { const SESSION_KEY_LEGAL_CHECK = 'legalModuleChecked'; const SESSION_KEY_LEGAL_AFTER_REGISTRATION = 'legalModuleAfterRegistration'; public static function onFooterMenuInit($event) { /** @var Module $module */ $module = Yii::$app->getModule('legal'); $sortOrder = 100; foreach (Page::getPages() as $pageKey => $title) { if (!$module->isPageEnabled($pageKey) || !in_array($pageKey, Page::getFooterMenuPages())) { // Cookie notice is not a navigation page continue; } $page = Page::getPage($pageKey); if ($page !== null) { $sortOrder += 10; $event->sender->addItem(array( 'label' => $page->title, 'url' => Url::to(['/legal/page/view', 'pageKey' => $pageKey], true), 'sortOrder' => $sortOrder, )); } } } public static function onLayoutAddonInit($event) { /** @var Module $module */ $module = Yii::$app->getModule('legal'); /** @var LayoutAddons $layoutAddons */ $layoutAddons = $event->sender; if ($module->isPageEnabled(Page::PAGE_KEY_COOKIE_NOTICE)) { $layoutAddons->addWidget(CookieNote::class); } } public static function onBeforeControllerAction(ActionEvent $event) { if (Yii::$app->user->isGuest) { return; } // Legal already checked if (!empty(Yii::$app->session->get(static::SESSION_KEY_LEGAL_CHECK))) { return; } /** @var Module $module */ $module = Yii::$app->getModule('legal'); // Allow user delete action if ($event->action->controller->module->id === 'user' && $event->action->controller->id === 'account' && $event->action->id === 'delete') { return; } if ($event->action->controller->module->id === 'user' && $event->action->controller->id === 'auth') { return; } if ($event->action->controller->module->id === 'user' && $event->action->controller->id === 'must-change-password') { return; } if ($event->action->controller->module->id === 'mail' && $event->action->controller->id === 'mail') { return; } if ($event->action->controller->id === 'poll') { return; } if ($event->action->controller->module->id === 'file' && $event->action->controller->id === 'file' && $event->action->id === 'download') { return; } if ($event->action->controller instanceof BaseController) { // REST API request return; } if ($event->action->controller->module->id === 'twofa' && $event->action->controller->id === 'check') { return; } if ($event->action->controller->module->id === 'termsbox' && $event->action->controller->id === 'index') { return; } $registrationCheck = new RegistrationChecks(['user' => Yii::$app->user->getIdentity()]); if (!$registrationCheck->hasOpenCheck()) { Yii::$app->session->set(static::SESSION_KEY_LEGAL_CHECK, 'true'); Yii::$app->session->remove(static::SESSION_KEY_LEGAL_AFTER_REGISTRATION); return; } // Allow legal module usage if ($event->action->controller->module->id === 'legal') { if (Yii::$app->controller->id === 'page') { $event->sender->layout = '@user/views/layouts/main'; $event->sender->subLayout = '@legal/views/page/layout_login'; } return; } // Show legal update? if (empty(Yii::$app->session->get(static::SESSION_KEY_LEGAL_AFTER_REGISTRATION)) && $module->isPageEnabled(Page::PAGE_KEY_LEGAL_UPDATE) && Page::getPage(Page::PAGE_KEY_LEGAL_UPDATE) !== null) { $event->isValid = false; $event->result = Yii::$app->response->redirect(['/legal/page/update']); } // Show legal pages in full screen with confirm form, one by one (after account creation) elseif($registrationCheck->showTermsCheck() || $registrationCheck->showPrivacyCheck()) { $event->isValid = false; $event->result = Yii::$app->response->redirect(['/legal/page/confirm']); } } public static function skipVerifying(): bool { // Do not use on console request if (Yii::$app->request->isConsoleRequest) { return true; } // If, for example, users are automatically registered with LDAP during login, no legal checks should take place. // Otherwise the auto registration would be broken. if (Yii::$app->controller instanceof \humhub\modules\user\controllers\AuthController) { return true; } // Don't ask admin on creating of a new user from back-office if (Yii::$app->user->isAdmin() && (Yii::$app->controller instanceof UserController)) { return true; } return false; } public static function onRegistrationFormInit($event) { if (static::skipVerifying()) { return; } /** @var Registration $hForm */ $hForm = $event->sender; /** @var Module $module */ $module = Yii::$app->getModule('legal'); $hForm->models['RegistrationChecks'] = new RegistrationChecks(['restrictToSettingKey' => $module->showPagesAfterRegistration() ? RegistrationChecks::SETTING_KEY_AGE : false]); if ($module->showPagesAfterRegistration()) { Yii::$app->session->set(static::SESSION_KEY_LEGAL_AFTER_REGISTRATION, 'true'); } } public static function onRegistrationFormRender($event) { if (static::skipVerifying()) { return; } /** @var Registration $hForm */ $hForm = $event->sender; /** @var RegistrationChecks $model */ $model = $hForm->models['RegistrationChecks']; /** @var Module $module */ $module = Yii::$app->getModule('legal'); $elements = []; if ($model->showTermsCheck()) { $elements['termsCheck'] = [ 'type' => 'checkbox', 'class' => 'form-control', ]; } if ($model->showPrivacyCheck()) { $elements['dataPrivacyCheck'] = [ 'type' => 'checkbox', 'class' => 'form-control', ]; } if ($module->showAgeCheck()) { $elements['ageCheck'] = [ 'type' => 'checkbox', 'class' => 'form-control', ]; } $hForm->definition['elements']['RegistrationChecks'] = [ 'type' => 'form', 'elements' => $elements ]; } /** * @param UserEvent $event * @throws \yii\base\Exception */ public static function onRegistrationAfterRegistration(UserEvent $event) { if (static::skipVerifying()) { return; } /** @var User $user */ $user = $event->identity; /** @var Module $module */ $module = Yii::$app->getModule('legal'); $model = new RegistrationChecks(['user' => $user, 'restrictToSettingKey' => $module->showPagesAfterRegistration() ? RegistrationChecks::SETTING_KEY_AGE : false]); $model->load(Yii::$app->request->post()); $model->save(); } public static function onAfterRunRichText($event) { /* @var ProsemirrorRichText $richText */ $richText = $event->sender; if (!isset($richText->record) || empty($event->result)) { return; } if ($richText->record instanceof Post || $richText->record instanceof Comment) { $event->result = Content::widget(['content' => $event->result, 'richtext' => false]); } } }