%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/user/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/user/Events.php |
<?php
namespace humhub\modules\user;
use humhub\components\Event;
use humhub\modules\content\models\ContentContainer;
use humhub\modules\ui\menu\MenuLink;
use humhub\modules\user\models\User;
use humhub\modules\user\models\Password;
use humhub\modules\user\models\Profile;
use humhub\modules\user\models\GroupUser;
use humhub\modules\user\models\Mentioning;
use humhub\modules\user\models\Follow;
use humhub\modules\user\permissions\PeopleAccess;
use Yii;
use yii\base\BaseObject;
/**
* Events provides callbacks for all defined module events.
*
* @author luke
*/
class Events extends BaseObject
{
/**
* On rebuild of the search index, rebuild all user records
*
* @param \yii\base\Event $event
*/
public static function onSearchRebuild($event)
{
foreach (User::find()->active()->each() as $user) {
Yii::$app->search->add($user);
}
}
/**
* On delete of a Content or ContentAddon
*
* @param \yii\base\Event $event
*/
public static function onContentDelete($event)
{
Mentioning::deleteAll(['object_model' => $event->sender->className(), 'object_id' => $event->sender->getPrimaryKey()]);
Follow::deleteAll(['object_model' => $event->sender->className(), 'object_id' => $event->sender->getPrimaryKey()]);
}
/**
* Callback to validate module database records.
*
* @param \yii\base\Event $event
*/
public static function onIntegrityCheck($event)
{
$integrityController = $event->sender;
$integrityController->showTestHeadline('User Module - ContentContainer (' . User::find()->count() . ' entries)');
foreach (User::find()->joinWith(['contentContainerRecord'])->each() as $user) {
if ($user->contentContainerRecord === null) {
if ($integrityController->showFix('Deleting user ' . $user->id . ' without content container record!')) {
$user->delete();
}
}
}
$integrityController->showTestHeadline('User Module - Users (' . User::find()->count() . ' entries)');
foreach (User::find()->joinWith(['profile'])->each() as $user) {
if ($user->profile->isNewRecord) {
$integrityController->showWarning('User with id ' . $user->id . ' has no profile record!');
}
}
foreach (GroupUser::find()->joinWith(['user'])->each() as $groupUser) {
if ($groupUser->user == null) {
if ($integrityController->showFix('Deleting group admin ' . $groupUser->id . ' without existing user!')) {
$groupUser->delete();
}
}
}
$integrityController->showTestHeadline('User Module - Password (' . Password::find()->count() . ' entries)');
foreach (Password::find()->joinWith(['user'])->each() as $password) {
if ($password->user == null) {
if ($integrityController->showFix('Deleting password ' . $password->id . ' without existing user!')) {
$password->delete();
}
}
}
$integrityController->showTestHeadline('User Module - Profile (' . Profile::find()->count() . ' entries)');
foreach (Profile::find()->joinWith(['user'])->each() as $profile) {
if ($profile->user == null) {
if ($integrityController->showFix('Deleting profile ' . $profile->user_id . ' without existing user!')) {
$profile->delete();
}
}
}
$integrityController->showTestHeadline('User Module - Mentioning (' . Mentioning::find()->count() . ' entries)');
foreach (Mentioning::find()->joinWith(['user'])->each() as $mentioning) {
if ($mentioning->user == null) {
if ($integrityController->showFix('Deleting mentioning ' . $mentioning->id . ' of non existing user!')) {
$mentioning->delete();
}
}
if ($mentioning->getPolymorphicRelation() == null) {
if ($integrityController->showFix('Deleting mentioning ' . $mentioning->id . ' of non target!')) {
$mentioning->delete();
}
}
}
$integrityController->showTestHeadline('User Module - Follow (' . Follow::find()->count() . ' entries)');
foreach (Follow::find()->joinWith(['user'])->each() as $follow) {
if ($follow->user == null) {
if ($integrityController->showFix('Deleting follow ' . $follow->id . ' of non existing user!')) {
$follow->delete();
}
}
try {
if ($follow->getTarget() == null) {
if ($integrityController->showFix('Deleting follow ' . $follow->id . ' of non target!')) {
$follow->delete();
}
}
} catch (\Exception $e) {
if ($integrityController->showFix('Deleting follow ' . $follow->id . ' of non target!')) {
$follow->delete();
}
}
}
$userIds = User::find()->select('id')->asArray()->all();
foreach ($userIds as $key => $id) {
$userIds[$key] = $id['id'];
}
$integrityController->showTestHeadline('User Module - Content container (' . ContentContainer::find()->count() . ' entries)');
foreach (ContentContainer::find()->where(['NOT IN', 'owner_user_id', $userIds])->each() as $contentContainer) {
if ($contentContainer['class'] == User::class && $contentContainer['pk'] == $contentContainer['owner_user_id']) {
if ($integrityController->showFix('Deleting content container ' . $contentContainer->id . ' without existing user!')) {
$contentContainer->delete();
}
}
}
}
/**
* Tasks on hourly cron job
*
* @param \yii\base\Event $event
*/
public static function onHourlyCron($event)
{
Yii::$app->queue->push(new jobs\SyncUsers());
Yii::$app->queue->push(new jobs\DeleteExpiredSessions());
}
/**
* On build of the TopMenu
*
* @param Event $event
*/
public static function onTopMenuInit($event)
{
if (Yii::$app->user->isGuest) {
return;
}
if (!Yii::$app->user->can(PeopleAccess::class)) {
return;
}
$event->sender->addEntry(new MenuLink([
'id' => 'people',
'icon' => 'users',
'label' => Yii::t('UserModule.base', 'People'),
'url' => ['/user/people'],
'sortOrder' => 200,
'isActive' => MenuLink::isActiveState('user', 'people'),
]));
}
}