403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/socialnetwork/lib/item/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/socialnetwork/lib/item/workgroup.php
<?php

/**
 * Bitrix Framework
 * @package bitrix
 * @subpackage socialnetwork
 * @copyright 2001-2012 Bitrix
 */
namespace Bitrix\Socialnetwork\Item;

use Bitrix\Main;
use Bitrix\Main\ArgumentException;
use Bitrix\Main\Config\Option;
use Bitrix\Main\Engine\CurrentUser;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\ModuleManager;
use Bitrix\Main\ObjectPropertyException;
use Bitrix\Main\SystemException;
use Bitrix\Socialnetwork\Integration\UI\EntitySelector\Config;
use Bitrix\Socialnetwork\Internals\Registry\GroupRegistry;
use Bitrix\Socialnetwork\Item\Workgroup\Type;
use Bitrix\Socialnetwork\Integration\Intranet\Structure\WorkgroupDepartmentsSynchronizer;
use Bitrix\Socialnetwork\WorkgroupTable;
use Bitrix\Socialnetwork\UserToGroupTable;
use Bitrix\Socialnetwork\Helper;

Loc::loadMessages(__FILE__);

class Workgroup implements Main\Type\Contract\Arrayable, Main\Type\Contract\Jsonable
{
	protected array $fields;
	protected static $groupsIdToCheckList = [];

	public static function createFromId(int $groupId = 0): static
	{
		return new static(['ID' => $groupId]);
	}

	public function __construct(array $fields = [])
	{
		$this->fields = $fields;
	}

	/**
	 * @use GroupRegistry::get
	 *
	 * @throws ObjectPropertyException
	 * @throws SystemException
	 * @throws ArgumentException
	 */
	public static function getById($groupId = 0, $useCache = true): bool|static
	{
		$groupId = (int)$groupId;

		if ($groupId <= 0)
		{
			return false;
		}

		$useCache = (bool)$useCache;

		$registry = GroupRegistry::getInstance();

		if (!$useCache)
		{
			$registry->invalidate($groupId);
		}

		$group = $registry->get($groupId);

		if ($group === null)
		{
			return false; // disgusting! compatability...
		}

		return $group;
	}

	public function setFields(array $fields = []): void
	{
		$this->fields = $fields;
	}

	public function getFields(): array
	{
		return $this->fields;
	}

	public function getId(): int
	{
		return (int)($this->fields['ID'] ?? 0);
	}

	public function getName(): string
	{
		return (string)($this->fields['NAME'] ?? '');
	}

	public function getDescription(): string
	{
		return (string)($this->fields['DESCRIPTION'] ?? '');
	}

	public function getChatId(): int
	{
		return (int)($this->fields['CHAT_ID'] ?? 0);
	}

	public function getDialogId(): string
	{
		return (string)($this->fields['DIALOG_ID'] ?? '');
	}

	public function getImageId(): int
	{
		return (int)($this->fields['IMAGE_ID'] ?? 0);
	}

	public function getOwnerId(): int
	{
		return (int)($this->fields['OWNER_ID'] ?? 0);
	}

	public function getSiteId(): string
	{
		return (string)($this->fields['SITE_ID'] ?? '');
	}

	public function getSiteIds(): array
	{
		return (array)($this->fields['SITE_IDS'] ?? []);
	}

	public function isVisible(): bool
	{
		return ($this->fields['VISIBLE'] ?? null) === 'Y';
	}

	public function getType(): ?Type
	{
		$type = $this->fields['TYPE'] ?? null;
		if ($type instanceof Type)
		{
			return $type;
		}

		return Type::tryFrom($type);
	}

	public function getAvatarType(): ?string
	{
		return $this->fields['AVATAR_TYPE'] ?? null;
	}

	public function getAvatarUrl(): string
	{
		$avatar = Helper\Workgroup::getAvatarEntitySelectorUrl($this->getAvatarType());
		if (!empty($avatar))
		{
			return $avatar;
		}

		$extranetSiteId = Option::get('extranet', 'extranet_site');
		$extranetSiteId = ($extranetSiteId && ModuleManager::isModuleInstalled('extranet') ? $extranetSiteId : false);
		$isExtranet = in_array($extranetSiteId, $this->fields['SITE_IDS'] ?? [], true);
		$type = ($isExtranet && !$this->isCollab()) ? 'extranet' : $this->getType()?->value;

		$avatarTypes = Config::getProjectAvatarTypes();

		return $avatarTypes[$type ?? 'default'] ?? $avatarTypes['default'];
	}

	public function getSynchronizedDepartmentIds(): array
	{
		$departments = $this->fields['UF_SG_DEPT'] ?? [];
		if ($departments === [])
		{
			return [];
		}

		$departmentIds = $departments['VALUE'] ?? [];
		if (empty($departmentIds))
		{
			return [];
		}

		Main\Type\Collection::normalizeArrayValuesByInt($departmentIds, false);

		return $departmentIds;
	}

	public function getUserMemberIds(): array
	{
		$memberIds = $this->fields['MEMBERS'] ?? [];
		if ($memberIds === [])
		{
			return [];
		}

		Main\Type\Collection::normalizeArrayValuesByInt($memberIds, false);

		return $memberIds;
	}

	public function getInvitedMemberIds(): array
	{
		$requestedIds = $this->fields['INVITED_MEMBERS'] ?? [];
		if ($requestedIds === [])
		{
			return [];
		}

		Main\Type\Collection::normalizeArrayValuesByInt($requestedIds, false);

		return $requestedIds;
	}

	public function getModeratorMemberIds(): array
	{
		$moderatorIds = $this->fields['MODERATOR_MEMBERS'] ?? [];
		if ($moderatorIds === [])
		{
			return [];
		}

		Main\Type\Collection::normalizeArrayValuesByInt($moderatorIds, false);

		return $moderatorIds;
	}

	public function getOrdinaryMembers(): array
	{
		$ordinaryMemberIds = $this->fields['ORDINARY_MEMBERS'] ?? [];
		if ($ordinaryMemberIds === [])
		{
			return [];
		}

		Main\Type\Collection::normalizeArrayValuesByInt($ordinaryMemberIds, false);

		return $ordinaryMemberIds;
	}

	public function getMemberIdsWithRole(): array
	{
		$invited = array_fill_keys($this->getInvitedMemberIds(), UserToGroupTable::ROLE_REQUEST);
		$ordinary = array_fill_keys($this->getOrdinaryMembers(), UserToGroupTable::ROLE_USER);
		$moderators = array_fill_keys($this->getModeratorMemberIds(), UserToGroupTable::ROLE_MODERATOR);
		$owner = [$this->getOwnerId() => UserToGroupTable::ROLE_OWNER];

		return $invited + $ordinary + $moderators + $owner;
	}

	public function isProject(): bool
	{
		return (
			isset($this->fields['PROJECT'])
			&& $this->fields['PROJECT'] === 'Y'
		);
	}

	public function isScrumProject(): bool
	{
		return (!empty($this->fields['SCRUM_MASTER_ID']));
	}

	public function isCollab(): bool
	{
		return $this->getType() === Type::Collab;
	}

	public function getDefaultSprintDuration(): int
	{
		return ($this->fields['SCRUM_SPRINT_DURATION'] ? : 0);
	}

	public function getScrumMaster(): int
	{
		return ($this->fields['SCRUM_MASTER_ID'] ? : 0);
	}

	public function getScrumTaskResponsible(): string
	{
		if ($this->fields['SCRUM_TASK_RESPONSIBLE'])
		{
			$scrumTaskResponsible = $this->fields['SCRUM_TASK_RESPONSIBLE'];
			$availableResponsibleTypes = ['A', 'M'];
			return (
				in_array($scrumTaskResponsible, $availableResponsibleTypes, true) ? $scrumTaskResponsible : 'A'
			);
		}

		return 'A';
	}

	/**
	 * @deprecated
	 * @use WorkgroupDeptSynchronizer::syncDeptConnection
	 */
	public function syncDeptConnection($exclude = false): void
	{
		$currentUserId = (int)CurrentUser::get()->getId();

		WorkgroupDepartmentsSynchronizer::getInstance()->synchronize($this, $currentUserId, $exclude);
	}

	public function getGroupUrlData($params = array())
	{
		static $cache = array();

		$groupFields = $this->getFields();
		$userId = (int)($params['USER_ID'] ?? 0);

		if (
			!empty($cache)
			&& !empty($cache[$groupFields["ID"]])
		)
		{
			$groupUrlTemplate = $cache[$groupFields['ID']]['URL_TEMPLATE'];
			$groupSiteId = $cache[$groupFields['ID']]['SITE_ID'];
		}
		else
		{
			$groupSiteId = \CSocNetGroup::getDefaultSiteId($groupFields["ID"], $groupFields["SITE_ID"]);
			$workgroupsPage = Option::get("socialnetwork", "workgroups_page", "/workgroups/", SITE_ID);
			$groupUrlTemplate = Helper\Path::get('group_path_template');
			$groupUrlTemplate = "#GROUPS_PATH#".mb_substr($groupUrlTemplate, mb_strlen($workgroupsPage), mb_strlen($groupUrlTemplate) - mb_strlen($workgroupsPage));

			$cache[$groupFields["ID"]] = array(
				'URL_TEMPLATE' => $groupUrlTemplate ,
				'SITE_ID' => $groupSiteId,
			);
		}

		$groupUrl = str_replace(array("#group_id#", "#GROUP_ID#"), $groupFields["ID"], $groupUrlTemplate);
		$serverName = $domainName = '';

		if ($userId > 0)
		{
			$tmp = \CSocNetLogTools::processPath(
				[
					'GROUP_URL' => $groupUrl,
				],
				$userId,
				$groupSiteId
			);

			$groupUrl = $tmp["URLS"]["GROUP_URL"];
			$serverName = (mb_strpos($groupUrl, "http://") === 0 || mb_strpos($groupUrl, "https://") === 0 ? "" : $tmp["SERVER_NAME"]);
			$domainName = (mb_strpos($groupUrl, "http://") === 0 || mb_strpos($groupUrl, "https://") === 0 ? "" : (isset($tmp["DOMAIN"]) && !empty($tmp["DOMAIN"]) ? "//".$tmp["DOMAIN"] : ""));
		}

		return [
			'URL' => $groupUrl,
			'SERVER_NAME' => $serverName,
			'DOMAIN' => $domainName,
		];
	}

	public function isLandingGroup(): bool
	{
		return ($this->getFields()['LANDING'] ?? null) === 'Y';
	}

	public function getInitiatePermission(): ?string
	{
		return $this->fields['INITIATE_PERMS'] ?? null;
	}

	public function toArray(): array
	{
		return $this->getFields();
	}

	public function toJson($options = 0): array
	{
		return $this->toArray();
	}

	public static function onBeforeIBlockSectionUpdate($section)
	{
		if (
			!isset($section['ID'], $section['IBLOCK_ID'])
			|| (int)$section['ID'] <= 0
			|| (int)$section['IBLOCK_ID'] <= 0
			|| (
				isset($section['ACTIVE'])
				&& $section['ACTIVE'] === 'N'
			)
			|| (int)$section['IBLOCK_ID'] !== (int)Option::get('intranet', 'iblock_structure', 0)
		)
		{
			return true;
		}

		$rootSectionIdList = [];
		$res = \CIBlockSection::getNavChain($section['IBLOCK_ID'], $section['ID'], array('ID'));
		while ($rootSection = $res->fetch())
		{
			if ((int)$rootSection['ID'] !== (int)$section['ID'])
			{
				$rootSectionIdList[] = $rootSection['ID'];
			}
		}

		if (!empty($rootSectionIdList))
		{
			$groupList = UserToGroup::getConnectedGroups($rootSectionIdList);
			self::$groupsIdToCheckList = array_merge(self::$groupsIdToCheckList, $groupList);
		}

		return true;
	}

	public static function onAfterIBlockSectionUpdate($section)
	{
		if(
			!isset($section['ID'], $section['IBLOCK_ID'])
			|| (int)$section['ID'] <= 0
			|| (int)$section['IBLOCK_ID'] <= 0
			|| (int)$section['IBLOCK_ID'] !== (int)Option::get('intranet', 'iblock_structure', 0)
		)
		{
			return true;
		}

		$oldGroupsIdToCheckList = self::$groupsIdToCheckList;
		$newGroupsIdToCheckList = [];

		if (
			isset($section['ACTIVE'])
			&& $section['ACTIVE'] === 'N'
		)
		{
			self::disconnectSection($section['ID']);
		}
		else
		{
			$res = \CIBlockSection::getNavChain($section['IBLOCK_ID'], $section['ID'], array('ID'));
			while ($rootSection = $res->fetch())
			{
				if ((int)$rootSection['ID'] !== (int)$section['ID'])
				{
					$rootSectionIdList[] = $rootSection['ID'];
				}
			}

			if (!empty($rootSectionIdList))
			{
				$newGroupsIdToCheckList = UserToGroup::getConnectedGroups($rootSectionIdList);
			}
		}

		if (!empty($oldGroupsIdToCheckList))
		{
			$oldGroupsIdToCheckList = array_unique($oldGroupsIdToCheckList);
			foreach($oldGroupsIdToCheckList as $groupId)
			{
				$groupItem = self::getById($groupId, false);
				$groupItem->syncDeptConnection(true);
			}
		}

		if (!empty($newGroupsIdToCheckList))
		{
			$newGroupsIdToCheckList = array_unique($newGroupsIdToCheckList);
			foreach($newGroupsIdToCheckList as $groupId)
			{
				$groupItem = self::getById($groupId, false);
				$groupItem->syncDeptConnection();
			}
		}

		return true;
	}

	public static function onBeforeIBlockSectionDelete($sectionId)
	{
		if ((int)$sectionId <= 0)
		{
			return true;
		}

		$res = \CIBlockSection::getList(
			[],
			[ 'ID' => $sectionId ],
			false,
			[ 'ID', 'IBLOCK_ID' ]
		);
		if (
			!($section = $res->fetch())
			|| !isset($section['IBLOCK_ID'])
			|| (int)$section['IBLOCK_ID'] <= 0
			|| (
				isset($section['ACTIVE'])
				&& $section['ACTIVE'] === 'N'
			)
			|| (int)$section['IBLOCK_ID'] !== (int)Option::get('intranet', 'iblock_structure', 0)
		)
		{
			return true;
		}

		$rootSectionIdList = [];
		$res = \CIBlockSection::getNavChain($section['IBLOCK_ID'], $section['ID'], array('ID'));
		while ($rootSection = $res->fetch())
		{
			if ((int)$rootSection['ID'] !== (int)$section['ID'])
			{
				$rootSectionIdList[] = $rootSection['ID'];
			}
		}

		if (!empty($rootSectionIdList))
		{
			$groupList = UserToGroup::getConnectedGroups($rootSectionIdList);
			self::$groupsIdToCheckList = array_merge(self::$groupsIdToCheckList, $groupList);
		}

		return true;
	}

	public static function onAfterIBlockSectionDelete($section): bool
	{
		if(
			!isset($section['ID'], $section['IBLOCK_ID'])
			|| (int)$section['ID'] <= 0
			|| (int)$section['IBLOCK_ID'] <= 0
			|| (int)$section['IBLOCK_ID'] !== (int)Option::get('intranet', 'iblock_structure', 0)
		)
		{
			return true;
		}

		self::disconnectSection($section['ID']);

		if (!empty(self::$groupsIdToCheckList))
		{
			$groupsToCheck = array_unique(self::$groupsIdToCheckList);
			foreach($groupsToCheck as $groupId)
			{
				$groupItem = self::getById($groupId, false);
				$groupItem->syncDeptConnection();
			}
		}

		return true;
	}

	private static function disconnectSection($sectionId): void
	{
		$groupList = array();
		$res = WorkgroupTable::getList(array(
			'filter' => array(
				'=UF_SG_DEPT' => $sectionId,
			),
			'select' => array('ID', 'UF_SG_DEPT'),
		));
		while($group = $res->fetch())
		{
			$groupList[] = $group;
		}

		foreach($groupList as $group)
		{
			$departmentListOld = array_map('intval',  $group['UF_SG_DEPT']);
			$departmentListNew = array_diff($departmentListOld, array($sectionId));

			\CSocNetGroup::update($group['ID'], array(
				'UF_SG_DEPT' => $departmentListNew,
			));

			$groupItem = self::getById($group['ID'], false);
			$groupItem->syncDeptConnection(true);
		}
	}

	public static function getTypes($params = []): array
	{
		return Helper\Workgroup::getTypes($params);
	}

	public static function getPresets($params = array()): array
	{
		return Helper\Workgroup::getPresets($params);
	}

	private static function getGroupContent($params = array()): string
	{
		static $fieldsList = null;;

		$content = '';

		$groupId = (int)($params['id'] ?? 0);

		if ($groupId <= 0)
		{
			return $content;
		}

		if ($fieldsList === null)
		{
			$fieldsList = self::getContentFieldsList();
		}

		if (
			isset($params['fields'])
			&& is_array($params['fields'])
			&& ($diff = array_diff($fieldsList, array_keys($params['fields'])))
			&& empty($diff)
		)
		{
			$groupFieldsList = $params['fields'];
		}
		else
		{
			$res = WorkgroupTable::getList(array(
				'filter' => array(
					'ID' => $groupId,
				),
				'select' => $fieldsList,
			));
			$groupFieldsList = $res->fetch();
		}

		if (!empty($groupFieldsList))
		{
			$content .= $groupFieldsList['NAME'];
			if (!empty($groupFieldsList['DESCRIPTION']))
			{
				$content .= ' '.$groupFieldsList['DESCRIPTION'];
			}

			if (!empty($groupFieldsList['KEYWORDS']))
			{
				$keywordList = explode(",", $groupFieldsList["KEYWORDS"]);
				$tagList = array();
				foreach($keywordList as $keyword)
				{
					$tagList[] = trim($keyword);
					$tagList[] = '#'.trim($keyword);
				}
				if (!empty($tagList))
				{
					$content .= ' '.implode(' ', $tagList);
				}
			}

			if (
				!empty($groupFieldsList['OWNER_ID'])
				&& (int)$groupFieldsList['OWNER_ID'] > 0
			)
			{
				$res = Main\UserTable::getList(array(
					'filter' => array(
						'ID' => (int)$groupFieldsList['OWNER_ID'],
					),
					'select' => array('ID', 'NAME', 'LAST_NAME', 'SECOND_NAME', 'LOGIN', 'EMAIL'),
				));
				if ($userFields = $res->fetch())
				{
					$content .= ' '.\CUser::formatName(\CSite::getNameFormat(null, $groupFieldsList['SITE_ID']), $userFields, true);
				}
			}
		}

		return $content;
	}

	public static function setIndex($params = array()): void
	{
		global $DB;

		static $connection = null;

		if (!is_array($params))
		{
			return;
		}

		$fields = (isset($params['fields']) ? $params['fields'] : array());

		if (
			!is_array($fields)
			|| empty($fields)
		)
		{
			return;
		}

		$groupId = (isset($fields['ID']) ? intval($fields['ID']) : 0);

		if ($groupId <= 0)
		{
			return;
		}

		$content = self::getGroupContent(array(
			'id' => $groupId,
			'fields' => $fields,
		));

		$content = self::prepareToken($content);

		$event = new Main\Event(
			'socialnetwork',
			'onWorkgroupIndexGetContent',
			array(
				'groupId' => $groupId,
			)
		);
		$event->send();

		foreach($event->getResults() as $eventResult)
		{
			if ($eventResult->getType() == \Bitrix\Main\EventResult::SUCCESS)
			{
				$eventParams = $eventResult->getParameters();

				if (
					is_array($eventParams)
					&& isset($eventParams['content'])
				)
				{
					$eventContent = $eventParams['content'];
					if (Main\Loader::includeModule('search'))
					{
						$eventContent = \CSearch::killTags($eventContent);
					}
					$eventContent = trim(str_replace(
						array("\r", "\n", "\t"),
						" ",
						$eventContent
					));

					$eventContent = self::prepareToken($eventContent);
					if (!empty($eventContent))
					{
						$content .= ' '.$eventContent;
					}
				}
			}
		}

		if (!empty($content))
		{
			if ($connection === null)
			{
				$connection = \Bitrix\Main\Application::getConnection();
			}

			$value = $DB->forSql($content);
			$encryptedValue = sha1($content);

			$connection->query("UPDATE ".WorkgroupTable::getTableName()." SET SEARCH_INDEX = CASE WHEN " . $connection->getSqlHelper()->getSha1Function('SEARCH_INDEX') . " = '{$encryptedValue}' THEN SEARCH_INDEX ELSE '{$value}' END WHERE ID = {$groupId}");
		}
	}

	public static function getContentFieldsList(): array
	{
		return [ 'NAME', 'DESCRIPTION', 'OWNER_ID', 'KEYWORDS', 'SITE_ID' ];
	}

	public static function prepareToken($str)
	{
		return str_rot13($str);
	}

	public static function getInitiatePermOptionsList(array $params = []): array
	{
		$ownerValue = Loc::getMessage('SOCIALNETWORK_ITEM_WORKGROUP_IP_OWNER');
		$moderatorsValue = Loc::getMessage('SOCIALNETWORK_ITEM_WORKGROUP_IP_MOD');
		$userValue = Loc::getMessage('SOCIALNETWORK_ITEM_WORKGROUP_IP_USER');

		if (
			isset($params['scrum'])
			&& $params['scrum']
		)
		{
			$ownerValue = Loc::getMessage('SOCIALNETWORK_ITEM_WORKGROUP_IP_OWNER_SCRUM2');
			$moderatorsValue = Loc::getMessage('SOCIALNETWORK_ITEM_WORKGROUP_IP_MOD_SCRUM2');
			$userValue = Loc::getMessage('SOCIALNETWORK_ITEM_WORKGROUP_IP_USER_SCRUM');
		}
		elseif (
			isset($params['project'])
			&& $params['project']
		)
		{
			$ownerValue = Loc::getMessage('SOCIALNETWORK_ITEM_WORKGROUP_IP_OWNER_PROJECT');
			$moderatorsValue = Loc::getMessage('SOCIALNETWORK_ITEM_WORKGROUP_IP_MOD_PROJECT');
			$userValue = Loc::getMessage('SOCIALNETWORK_ITEM_WORKGROUP_IP_USER_PROJECT');
		}

		return [
			UserToGroupTable::ROLE_OWNER => $ownerValue,
			UserToGroupTable::ROLE_MODERATOR => $moderatorsValue,
			UserToGroupTable::ROLE_USER => $userValue,
		];
	}

	public static function getSpamPermOptionsList(): array
	{
		return [
			UserToGroupTable::ROLE_OWNER => Loc::getMessage('SOCIALNETWORK_ITEM_WORKGROUP_IP_OWNER'),
			UserToGroupTable::ROLE_MODERATOR => Loc::getMessage('SOCIALNETWORK_ITEM_WORKGROUP_IP_MOD'),
			UserToGroupTable::ROLE_USER => Loc::getMessage('SOCIALNETWORK_ITEM_WORKGROUP_IP_USER'),
			SONET_ROLES_ALL => Loc::getMessage('SOCIALNETWORK_ITEM_WORKGROUP_IP_ALL'),
		];
	}

	/**
	 * returns array of workgroups filtered by access permissions of a user, only for the current site
	 * @param array $params
	 * @return array
	 */
	public static function getByFeatureOperation(array $params = []): array
	{
		return Helper\Workgroup::getByFeatureOperation($params);
	}

	public static function getListSprintDuration(): array
	{
		return Helper\Workgroup::getListSprintDuration();
	}

	public static function getScrumTaskResponsibleList(): array
	{
		return Helper\Workgroup::getScrumTaskResponsibleList();
	}

	public static function getTypeCodeByParams($params)
	{
		return Helper\Workgroup::getTypeCodeByParams($params);
	}

	public static function getTypeByCode($params = [])
	{
		return Helper\Workgroup::getTypeByCode($params);
	}

	public static function getEditFeaturesAvailability()
	{
		return Helper\Workgroup::getEditFeaturesAvailability();
	}

	public static function canWorkWithClosedWorkgroups(): bool
	{
		static $optionValue = null;
		if ($optionValue === null)
		{
			$optionValue = Option::get('socialnetwork', 'work_with_closed_groups', 'N');
		}

		return ($optionValue === 'Y');
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit