%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/live/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/live/Module.php |
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2017 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\modules\live;
use humhub\modules\space\models\Space;
use Yii;
use humhub\modules\content\models\Content;
use humhub\modules\user\models\User;
use humhub\modules\user\models\Follow;
use humhub\modules\friendship\models\Friendship;
use humhub\modules\space\models\Membership;
use yii\db\Query;
/**
* Live module provides a live channel to the users browser.
*
* @since 1.2
*/
class Module extends \humhub\components\Module
{
/**
* @inheritdoc
*/
public $isCoreModule = true;
/**
* @var string cache prefix for legitimate content container ids by user
*/
public static $legitimateCachePrefix = 'live.contentcontainerId.legitmation.';
/**
* @var bool Activity flag, useful for JS config
*/
public $isActive = true;
/**
* Returns an array of content container ids which belongs to the given user.
*
* There are three separeted lists by visibility level:
* - Content::VISIBILITY_PUBLIC [1,2,3,4] (Public visibility only)
* - Content::VISIBILITY_PRIVATE [5,6,7] (Public and private visibility)
* - Content::VISIBILITY_OWNER (10) (No visibility, direct to the user)
*
* @param User $user the User
* @param boolean $cached use caching
* @return array multi dimensional array of user content container ids
*/
public function getLegitimateContentContainerIds(User $user, $cached = true)
{
$legitimation = Yii::$app->cache->get(self::$legitimateCachePrefix . $user->id);
if (!$cached || $legitimation === false) {
$legitimation = [
Content::VISIBILITY_PUBLIC => [],
Content::VISIBILITY_PRIVATE => [],
Content::VISIBILITY_OWNER => [],
];
// When no content container record exists (yet)
// This may happen during the registration process
if ($user->contentContainerRecord === null) {
return $legitimation;
}
// Add users own content container
$legitimation[Content::VISIBILITY_OWNER][] = $user->contentContainerRecord->id;
// Add member space container of the user
$privateContainerQuery = Membership::getMemberSpaceContainerIdQuery($user);
// Add friend container if friendship module is active
if (Yii::$app->getModule('friendship')->getIsEnabled()) {
$privateContainerQuery->union(Friendship::getFriendshipContainerIdQuery($user), true);
}
foreach ($privateContainerQuery->all() as $id => $value) {
$legitimation[Content::VISIBILITY_PRIVATE][] = $id;
}
// User sees public content of spaces and profiles the users follows
foreach (Follow::getFollowedContainerIdQuery($user)->all() as $id => $value) {
$legitimation[Content::VISIBILITY_PUBLIC][] = $id;
}
Yii::$app->cache->set(self::$legitimateCachePrefix . $user->id, $legitimation);
Yii::$app->live->driver->onContentContainerLegitimationChanged($user, $legitimation);
}
return $legitimation;
}
public function refreshLegitimateContentContainerIds(User $user)
{
Yii::$app->cache->delete(self::$legitimateCachePrefix . $user->id);
$this->getLegitimateContentContainerIds($user);
}
}