%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/notification/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/notification/Events.php |
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2015 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\modules\notification;
use humhub\components\Event;
use humhub\modules\user\models\User;
use humhub\modules\space\models\Space;
use Yii;
use humhub\modules\notification\models\Notification;
/**
* Events provides callbacks for all defined module events.
*
* @author luke
*/
class Events extends \yii\base\BaseObject
{
/**
* On User delete, also delete all posts
*
* @param Event $event
*/
public static function onUserDelete($event)
{
/** @var User $user */
$user = $event->sender;
foreach (Notification::findAll(['user_id' => $user->id]) as $notification) {
$notification->delete();
}
foreach (Notification::findAll(['originator_user_id' => $user->id]) as $notification) {
$notification->delete();
}
foreach (Notification::findAll(['source_class' => User::class, 'source_pk' => $user->id]) as $notification) {
$notification->delete();
}
return true;
}
/**
* On workspace deletion make sure to delete all posts
*
* @param type $event
*/
public static function onSpaceDelete($event)
{
foreach (Notification::findAll(['space_id' => $event->sender->id]) as $notification) {
$notification->delete();
}
}
/**
* Callback to validate module database records.
*
* @param Event $event
*/
public static function onIntegrityCheck($event)
{
$integrityChecker = $event->sender;
$integrityChecker->showTestHeadline("Notification Module (" . Notification::find()->count() . " entries)");
foreach (Notification::find()->joinWith(['user'])->each() as $notification) {
/** @var Notification $notification */
// Check if Space still exists
if (!empty($notification->space_id)) {
$space = Space::findOne(['id' => $notification->space_id]);
if ($space === null) {
if ($integrityChecker->showFix("Deleting notification id " . $notification->id . " workspace seems to no longer exist!")) {
$notification->delete();
}
}
}
// Check if source object exists when defined
try {
if ($notification->source_class != "" && $notification->getSourceObject() == null) {
if ($integrityChecker->showFix("Deleting notification id " . $notification->id . " source class set but seems to no longer exist!")) {
$notification->delete();
}
}
} catch (\Exception $e) {
// Handles errors for getSourceObject() calls
if ($integrityChecker->showFix("Deleting notification id " . $notification->id . " source class set but seems to no longer exist!")) {
$notification->delete();
}
}
// Check if target user exists
if ($notification->user == null) {
if ($integrityChecker->showFix("Deleting notification id " . $notification->id . " target user seems to no longer exist!")) {
$notification->delete();
}
}
// Check if target user exists
if (!class_exists($notification->class)) {
if ($integrityChecker->showFix("Deleting notification id " . $notification->id . " without valid class!")) {
$notification->delete();
}
}
// Check if module id is set
if ($notification->module == "") {
if ($integrityChecker->showFix("Deleting notification id " . $notification->id . " without valid module!")) {
$notification->delete();
}
}
if (!empty($notification->originator_user_id) && $notification->originator === null) {
if ($integrityChecker->showFix("Deleting notification id " . $notification->id . " without valid originator!")) {
$notification->delete();
}
}
}
}
/**
* On run of the cron, do some cleanup stuff.
* We delete all notifications which are older than 2 month and are seen.
*
* @param Event $event
*/
public static function onCronDailyRun($event)
{
/* @var Module $module */
$module = Yii::$app->getModule('notification');
$controller = $event->sender;
$controller->stdout('Deleting old notifications... ');
// Delete seen notifications which are older than 2 months
self::deleteNotifications(true, $module->deleteSeenNotificationsMonths);
// Delete unseen notifications which are older than 3 months
self::deleteNotifications(false, $module->deleteUnseenNotificationsMonths);
$controller->stdout('done.' . PHP_EOL, \yii\helpers\Console::FG_GREEN);
}
/**
* Delete notifications after X months
*
* @param bool $seen
* @param int $months
* @return int Number of deleted notifications
*/
private static function deleteNotifications(bool $seen, int $months): int
{
return Notification::deleteAll(['AND',
['seen' => (int)$seen],
['<', 'created_at', date('Y-m-d', mktime(0, 0, 0, date('m') - $months))],
]);
}
public static function onActiveRecordDelete($event)
{
models\Notification::deleteAll([
'source_class' => $event->sender->className(),
'source_pk' => $event->sender->getPrimaryKey(),
]);
}
public static function onLayoutAddons($event)
{
if (Yii::$app->request->isPjax) {
$event->sender->addWidget(widgets\UpdateNotificationCount::class);
}
}
}