%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/activity/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/activity/Events.php |
<?php /** * @link https://www.humhub.org/ * @copyright Copyright (c) 2017 HumHub GmbH & Co. KG * @license https://www.humhub.com/licences */ namespace humhub\modules\activity; use humhub\modules\activity\components\MailSummary; use humhub\modules\activity\jobs\SendMailSummary; use humhub\modules\activity\models\Activity; use humhub\modules\admin\permissions\ManageSettings; use humhub\modules\admin\widgets\SettingsMenu; use humhub\modules\ui\menu\MenuLink; use humhub\modules\user\widgets\AccountMenu; use Yii; use yii\base\ActionEvent; use yii\base\BaseObject; use yii\base\Event; use yii\db\ActiveRecord; use yii\db\IntegrityException; /** * Events provides callbacks to handle events. * * @author luke */ class Events extends BaseObject { /** * Handles cron hourly run event to send mail summaries to the users * * @param ActionEvent $event */ public static function onCronHourlyRun($event) { if (static::getModule()->enableMailSummaries) { Yii::$app->queue->push(new SendMailSummary(['interval' => MailSummary::INTERVAL_HOURLY])); } } /** * Handles cron daily run event to send mail summaries to the users * * @param ActionEvent $event */ public static function onCronDailyRun($event) { $module = static::getModule(); if ($module->enableMailSummaries) { Yii::$app->queue->push(new SendMailSummary(['interval' => MailSummary::INTERVAL_DAILY])); if (date('w') == $module->weeklySummaryDay) { Yii::$app->queue->push(new SendMailSummary(['interval' => MailSummary::INTERVAL_WEEKLY])); } } } /** * On delete of some active record, check if there are related activities and delete them. * * @param Event $event */ public static function onActiveRecordDelete(Event $event) { if (!($event->sender instanceof ActiveRecord)) { throw new \LogicException('The handler can be applied only to the \yii\db\ActiveRecord.'); } /** @var \yii\db\ActiveRecord $activeRecordModel */ $activeRecordModel = $event->sender; $pk = $activeRecordModel->getPrimaryKey(); // Check if primary key exists and is not array (multiple pk) if ($pk !== null && !is_array($pk)) { $modelsActivity = Activity::find()->where([ 'object_id' => $pk, 'object_model' => get_class($activeRecordModel) ])->each(); foreach ($modelsActivity as $activity) { $activity->delete(); } } } public static function onAccountMenuInit($event) { if (static::getModule()->enableMailSummaries) { /** @var AccountMenu $menu */ $menu = $event->sender; $menu->addEntry(new MenuLink([ 'label' => Yii::t('ActivityModule.base', 'E-Mail Summaries'), 'id' => 'account-settings-emailsummary', 'icon' => 'envelope', 'url' => ['/activity/user'], 'sortOrder' => 105, 'isActive' => MenuLink::isActiveState('activity') ])); } } public static function onSettingsMenuInit($event) { if (static::getModule()->enableMailSummaries) { /** @var SettingsMenu $menu */ $menu = $event->sender; $menu->addEntry(new MenuLink([ 'label' => Yii::t('ActivityModule.base', 'E-Mail Summaries'), 'url' => ['/activity/admin/defaults'], 'sortOrder' => 300, 'isActive' => MenuLink::isActiveState('activity', 'admin', 'defaults'), 'isVisible' => Yii::$app->user->can(ManageSettings::class) ])); } } /** * Callback to validate module database records. * * @param Event $event * @throws \Throwable * @throws \yii\db\StaleObjectException */ public static function onIntegrityCheck($event) { $integrityController = $event->sender; $integrityController->showTestHeadline('Activity Module (' . Activity::find()->count() . ' entries)'); // Loop over all comments foreach (Activity::find()->each() as $a) { /** @var Activity $a */ // Check for object_model / object_id if ($a->object_model != '' && $a->object_id != '') { try { $source = $a->getSource(); } catch (IntegrityException $ex) { if ($integrityController->showFix('Deleting activity id ' . $a->id . ' without existing target! (' . $a->object_model . ')')) { $a->delete(); } } } // Check for moduleId is set if (empty($a->module) && $integrityController->showFix('Deleting activity id ' . $a->id . ' without module_id!')) { $a->delete(); } // Check Activity class exists if (!class_exists($a->class) && $integrityController->showFix('Deleting activity id ' . $a->id . ' class not exists! (' . $a->class . ')')) { $a->delete(); } } } /** * @return Module */ private static function getModule() { return Yii::$app->getModule('activity'); } }