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/components/bitrix/socialnetwork.group/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/components/bitrix/socialnetwork.group/class.php
<?php

if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true)
{
	die();
}

use Bitrix\Main\Config\Option;
use Bitrix\Main\Error;
use Bitrix\Main\ErrorCollection;
use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\ModuleManager;
use Bitrix\Socialnetwork\ComponentHelper;
use Bitrix\Socialnetwork\Integration\Tasks\Flow\Path\FlowPath;
use Bitrix\Socialnetwork\Item\Workgroup;
use Bitrix\Socialnetwork\UserToGroupTable;
use Bitrix\Socialnetwork\Helper\Path;

if (!Loader::includeModule('socialnetwork'))
{
	ShowError(Loc::getMessage('SONET_MODULE_NOT_INSTALL'));
	return false;
}

final class SocialnetworkGroup extends CBitrixComponent implements \Bitrix\Main\Engine\Contract\Controllerable, \Bitrix\Main\Errorable
{
	protected $errorCollection;

	public function configureActions(): array
	{
		return [];
	}

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

	public function getErrorByCode($code): Error
	{
		return $this->errorCollection->getErrorByCode($code);
	}

	protected function printErrors(): void
	{
		foreach ($this->errorCollection as $error)
		{
			ShowError($error);
		}
	}

	public function onPrepareComponentParams($params = [])
	{
		$this->errorCollection = new ErrorCollection();

		$params['GROUP_ID'] = (int)$params['GROUP_ID'];
		$params['SET_NAV_CHAIN'] = ($params['SET_NAV_CHAIN'] === 'N' ? 'N' : 'Y');

		$this->prepareRequestVarParams($params);
		$this->prepareSearchParams($params);
		$this->preparePathsParams($params);

		$params['DATE_TIME_FORMAT'] = trim(empty($params['DATE_TIME_FORMAT']) ? CDatabase::dateFormatToPHP(CSite::getDateFormat()) : $params['DATE_TIME_FORMAT']);
		$params['SHORT_FORM'] = (($params['SHORT_FORM'] ?? '') === 'Y');
		$params['ITEMS_COUNT'] = ((int)$params['ITEMS_COUNT'] > 0 ? (int)$params['ITEMS_COUNT'] : 6);
		$params['USE_MAIN_MENU'] = (isset($params['USE_MAIN_MENU']) && $params['USE_MAIN_MENU'] === 'Y' ? 'Y' : 'N');
		$params['GROUP_PROPERTY'] = (isset($params['GROUP_PROPERTY']) && is_array($params['GROUP_PROPERTY']) ? $params['GROUP_PROPERTY'] : []);
		$params['NAME_TEMPLATE'] = ($params['NAME_TEMPLATE'] ?? CSite::getNameFormat());
		$params['SHOW_LOGIN'] = (($params['SHOW_LOGIN'] ?? null) !== 'N' ? 'Y' : 'N');

		$tooltipParams = ComponentHelper::checkTooltipComponentParams($params);
		$params['SHOW_FIELDS_TOOLTIP'] = $tooltipParams['SHOW_FIELDS_TOOLTIP'];
		$params['USER_PROPERTY_TOOLTIP'] = $tooltipParams['USER_PROPERTY_TOOLTIP'];

		$params['CAN_OWNER_EDIT_DESKTOP'] = (
			ModuleManager::isModuleInstalled('intranet')
			? (($params['CAN_OWNER_EDIT_DESKTOP'] ?? null) !== 'Y' ? 'N' : 'Y')
			: (($params['CAN_OWNER_EDIT_DESKTOP'] ?? null) !== 'N' ? 'Y' : 'N')
		);

		$params['GROUP_USE_BAN'] = ($params['GROUP_USE_BAN'] ?? null) !== 'N' ? 'Y' : 'N';

		return $params;
	}

	public function executeComponent()
	{
		$this->arResult = $this->prepareData();
		if ($this->arResult === false)
		{
			$this->arResult = [];
		}

		if (!empty($this->getErrors()))
		{
			ob_start();
			$this->printErrors();
			$this->arResult['FatalError'] = ob_get_contents();
			$this->arResult['ErrorList'] = $this->getErrors();
			ob_end_clean();
		}

		$this->includeComponentTemplate();

		return $this->arResult['Group'];
	}

	protected function listKeysSignedParameters()
	{
		return [
			'GROUP_ID',
		];
	}

	public function prepareRequestVarParams(&$componentParams): void
	{
		ComponentHelper::checkEmptyParamString($componentParams, 'USER_VAR', 'user_id');
		ComponentHelper::checkEmptyParamString($componentParams, 'GROUP_VAR', 'group_id');
		ComponentHelper::checkEmptyParamString($componentParams, 'PAGE_VAR', 'page');
	}

	public function prepareSearchParams(&$componentParams): void
	{
		ComponentHelper::checkEmptyParamInteger($componentParams, 'SEARCH_TAGS_PAGE_ELEMENTS', 100);
		ComponentHelper::checkEmptyParamInteger($componentParams, 'SEARCH_TAGS_PERIOD', 0);
		ComponentHelper::checkEmptyParamInteger($componentParams, 'SEARCH_TAGS_FONT_MAX', 50);
		ComponentHelper::checkEmptyParamInteger($componentParams, 'SEARCH_TAGS_FONT_MIN', 10);

		ComponentHelper::checkEmptyParamString($componentParams, 'SEARCH_TAGS_COLOR_NEW', '3E74E6');
		ComponentHelper::checkEmptyParamString($componentParams, 'SEARCH_TAGS_COLOR_OLD', 'C0C0C0');
	}

	private function preparePathsParams(&$params): void
	{
		global $APPLICATION;

		ComponentHelper::checkEmptyParamString($params, 'PATH_TO_USER', htmlspecialcharsbx($APPLICATION->getCurPage() . '?' . $params['PAGE_VAR'] . '=user&' . $params['USER_VAR'] . '=#user_id#'));
		ComponentHelper::checkEmptyParamString($params, 'PATH_TO_GROUP', htmlspecialcharsbx($APPLICATION->getCurPage() . '?' . $params['PAGE_VAR'] . '=group&' . $params['GROUP_VAR'] . '=#group_id#'));
		ComponentHelper::checkEmptyParamString($params, 'PATH_TO_GROUP_EDIT', htmlspecialcharsbx($APPLICATION->getCurPage() . '?' . $params['PAGE_VAR'] . '=group_edit&' . $params['GROUP_VAR'] . '=#group_id#'));

		ComponentHelper::checkEmptyParamString($params, 'PATH_TO_GROUP_INVITE', '');
		if (empty($params['PATH_TO_GROUP_INVITE']))
		{
			$parent = $this->getParent();
			if (is_object($parent) && $parent->__name <> '')
			{
				$params['PATH_TO_GROUP_INVITE'] = $parent->arResult['PATH_TO_GROUP_INVITE'];
			}
		}

		$groupUsers = ($params['group_users'] ?? '');

		ComponentHelper::checkEmptyParamString($params, 'PATH_TO_GROUP_CREATE', htmlspecialcharsbx($APPLICATION->getCurPage() . '?' . $params['PAGE_VAR'] . '=group_create&' . $params['USER_VAR'] . '=#user_id#'));
		ComponentHelper::checkEmptyParamString($params, 'PATH_TO_GROUP_REQUEST_SEARCH', htmlspecialcharsbx($APPLICATION->getCurPage() . '?' . $params['PAGE_VAR'] . '=group_request_search&' . $params['GROUP_VAR'] . '=#group_id#'));
		ComponentHelper::checkEmptyParamString($params, 'PATH_TO_USER_REQUEST_GROUP', htmlspecialcharsbx($APPLICATION->getCurPage() . '?' . $params['PAGE_VAR'] . '=user_request_group&' . $params['USER_VAR'] . '=#user_id#&' . $params['GROUP_VAR'] . '=#group_id#'));
		ComponentHelper::checkEmptyParamString($params, 'PATH_TO_GROUP_REQUESTS', htmlspecialcharsbx($APPLICATION->getCurPage() . '?' . $params['PAGE_VAR'] . '=group_requests&' . $params['GROUP_VAR'] . '=#group_id#'));
		ComponentHelper::checkEmptyParamString($params, 'PATH_TO_GROUP_REQUESTS_OUT', htmlspecialcharsbx($APPLICATION->getCurPage() . '?' . $params['PAGE_VAR'] . '=group_requests_out&' . $params['GROUP_VAR'] . '=#group_id#'));
		ComponentHelper::checkEmptyParamString($params, 'PATH_TO_GROUP_MODS', htmlspecialcharsbx($APPLICATION->getCurPage() . '?' . $params['PAGE_VAR'] . '=group_mods&' . $params['GROUP_VAR'] . '=#group_id#'));
		ComponentHelper::checkEmptyParamString($params, 'PATH_TO_GROUP_USERS', htmlspecialcharsbx($APPLICATION->getCurPage() . '?' . $params['PAGE_VAR'] . '=group_mods&' . $groupUsers . '=#group_id#'));
		ComponentHelper::checkEmptyParamString($params, 'PATH_TO_USER_LEAVE_GROUP', htmlspecialcharsbx($APPLICATION->getCurPage() . '?' . $params['PAGE_VAR'] . '=user_leave_group&' . $groupUsers . '=#group_id#'));
		ComponentHelper::checkEmptyParamString($params, 'PATH_TO_GROUP_FEATURES', htmlspecialcharsbx($APPLICATION->getCurPage() . '?' . $params['PAGE_VAR'] . '=group_features&' . $groupUsers . '=#group_id#'));
		ComponentHelper::checkEmptyParamString($params, 'PATH_TO_GROUP_SUBSCRIBE', htmlspecialcharsbx($APPLICATION->getCurPage() . '?' . $params['PAGE_VAR'] . '=group_subscribe&' . $groupUsers . '=#group_id#'));
		ComponentHelper::checkEmptyParamString($params, 'PATH_TO_GROUP_DELETE', htmlspecialcharsbx($APPLICATION->getCurPage() . '?' . $params['PAGE_VAR'] . '=group_delete&' . $groupUsers . '=#group_id#'));
		ComponentHelper::checkEmptyParamString($params, 'PATH_TO_GROUP_BAN', htmlspecialcharsbx($APPLICATION->getCurPage() . '?' . $params['PAGE_VAR'] . '=group_ban&' . $groupUsers . '=#group_id#'));
		ComponentHelper::checkEmptyParamString($params, 'PATH_TO_MESSAGE_TO_GROUP', htmlspecialcharsbx($APPLICATION->getCurPage() . '?' . $params['PAGE_VAR'] . '=message_to_group&' . $groupUsers . '=#group_id#'));
		ComponentHelper::checkEmptyParamString($params, 'PATH_TO_SEARCH', htmlspecialcharsbx($APPLICATION->getCurPage() . '?' . $params['PAGE_VAR'] . '=search'));
		ComponentHelper::checkEmptyParamString($params, 'PATH_TO_GROUP_LOG', htmlspecialcharsbx($APPLICATION->getCurPage() . '?' . $params['PAGE_VAR'] . '=group-log&' . $groupUsers . '=#group_id#'));
		ComponentHelper::checkEmptyParamString($params, 'PATH_TO_CONPANY_DEPARTMENT', Path::get('department_path_template'));

		ComponentHelper::checkEmptyParamString($params, 'PATH_TO_USER_LOG', (ModuleManager::isModuleInstalled('intranet') ? SITE_DIR . 'company/personal/log/' : SITE_DIR . '/club/log/'));
		$params['~PATH_TO_USER_LOG'] = $params['PATH_TO_USER_LOG'];

		ComponentHelper::checkEmptyParamString($params, 'PATH_TO_POST', (ModuleManager::isModuleInstalled('intranet') ? SITE_DIR . 'company/personal/user/#user_id#/blog/#post_id#/' : SITE_DIR . 'club/personal/user/#user_id#/blog/#post_id#/'));
		$params['~PATH_TO_POST'] = $params['PATH_TO_POST'];
	}

	private function prepareData()
	{
		global $USER, $APPLICATION;

		$result = [];

		$result['IS_IFRAME'] = (
			\Bitrix\Main\Context::getCurrent()->getRequest()->get('IFRAME') === 'Y'
			|| ($this->arParams['IFRAME'] ?? null) === 'Y'
		);

		$groupFields = CSocNetGroup::getById($this->arParams['GROUP_ID']);
		if (
			!$groupFields
			|| !is_array($groupFields)
			|| $groupFields['ACTIVE'] !== 'Y'
		)
		{
			$this->errorCollection[] = new Error(Loc::getMessage('SONET_P_USER_NO_GROUP'));
			return false;
		}

		$result['bExtranet'] = (Loader::includeModule('extranet') && CExtranet::IsExtranetSite());
		$groupFields['IS_EXTRANET_GROUP'] = (
			Loader::includeModule('extranet')
			&& \CExtranet::isExtranetSocNetGroup($groupFields['ID'])
				? 'Y'
				: 'N'
		);

		$groupSitesList = [];
		$res = CSocNetGroup::getSite($groupFields['ID']);
		while ($groupSiteFields = $res->fetch())
		{
			$groupSitesList[] = $groupSiteFields['LID'];
		}

		if (!in_array(SITE_ID, $groupSitesList, true))
		{
			$this->errorCollection[] = new Error(Loc::getMessage('SONET_P_USER_NO_GROUP'));
			return false;
		}

		$result['Subjects'] = [];
		$res = CSocNetGroupSubject::getList(
			[ 'SORT' => 'ASC', 'NAME' => 'ASC' ],
			[ 'SITE_ID' => SITE_ID ],
			false,
			false,
			[ 'ID', 'NAME' ]
		);
		while ($subjectFields = $res->getNext())
		{
			$result['Subjects'][$subjectFields['ID']] = $subjectFields['NAME'];
		}

		if ($groupFields['NUMBER_OF_MODERATORS'] >= 1)
		{
			$groupFields['NUMBER_OF_MODERATORS']--;
		}

		$result['Group'] = $groupFields;

		$result['HideArchiveLinks'] = (
			$result['Group']['CLOSED'] === 'Y'
			&& Option::get('socialnetwork', 'work_with_closed_groups', 'N') !== 'Y'
		);

		$result['CurrentUserPerms'] = \Bitrix\Socialnetwork\Helper\Workgroup::getPermissions([
			'groupId' => $groupFields['ID'],
		]);

		$result['bSubscribed'] = (
			in_array($result['CurrentUserPerms']['UserRole'], UserToGroupTable::getRolesMember(), true)
			&& CSocNetSubscription::isUserSubscribed($USER->getId(), 'SG'.$this->arParams['GROUP_ID'])
		);

		$result['canCreateGroup'] = \Bitrix\Socialnetwork\Helper\Workgroup\Access::canCreate();

		$result['bUserCanRequestGroup'] = null;
		if (
			$result['Group']['VISIBLE'] === 'Y'
			&& !$result['bExtranet']
			&& !$result['HideArchiveLinks']
			&& (
				!$result['CurrentUserPerms']['UserRole']
				|| ($result['CurrentUserPerms']['UserRole'] === UserToGroupTable::ROLE_REQUEST && $result['CurrentUserPerms']['InitiatedByType'] === UserToGroupTable::INITIATED_BY_GROUP)
			)
		)
		{
			$result['bUserCanRequestGroup'] = true;
			$result['bDescriptionOpen'] = true;
		}
		elseif ($USER->isAuthorized())
		{
			$userOptions = CUserOptions::getOption('socialnetwork', 'sonet_group_description', []);
			if (isset($userOptions['state']))
			{
				$result['bDescriptionOpen'] = ($userOptions['state'] === 'Y');
			}
		}
		else
		{
			$result['bDescriptionOpen'] = true;
		}

		$result['bShowRequestSentMessage'] = null;
		//display flag to show information when the group request is sent
		if (
			$result['CurrentUserPerms']['UserRole'] === UserToGroupTable::ROLE_REQUEST
			&& $result['Group']['VISIBLE'] === 'Y' && !$result['HideArchiveLinks'])
		{
			$result['bShowRequestSentMessage'] = (
				$result['CurrentUserPerms']['InitiatedByType'] === UserToGroupTable::INITIATED_BY_GROUP
					? 'G'
					: 'U'
			);
		}

		if (!$result['CurrentUserPerms'] || !$result['CurrentUserPerms']['UserCanViewGroup'])
		{
			$this->errorCollection[] = new Error(Loc::getMessage('SONET_C5_NO_PERMS'));
			return false;
		}

		$this->setPaths($result);

		$group = Workgroup::getById($result['Group']['ID']);
		$result['isScrumProject'] = $group && $group->isScrumProject();

		$result['PageTitle'] = '';
		if ($this->arParams['SET_TITLE'] === 'Y')
		{
			$result['PageTitle'] = $result['Group']['NAME'];
			$APPLICATION->setTitle($result['PageTitle']);
		}

		if (!$this->arParams['SHORT_FORM'] && $this->arParams['SET_NAV_CHAIN'] !== 'N')
		{
			$APPLICATION->addChainItem($result['Group']['NAME']);
		}
		$this->setGroupAvatar($result);
		$this->setGroupProperties($result);

		if (!$this->arParams['SHORT_FORM'])
		{
			$this->setGroupOwner($result);
			$this->setGroupModerators($result);
			$this->setGroupMembers($result);
			$this->setScrumMaster($result);
			$this->setDepartments($result);
			$this->setFeatures($result);
		}

		return $result;
	}

	private function setPaths(&$result): void
	{
		global $USER;

		$result['Urls']['Edit'] = CComponentEngine::makePathFromTemplate($this->arParams['PATH_TO_GROUP_EDIT'], [ 'group_id' => $result['Group']['ID'] ]);
		$result['Urls']['Invite'] = CComponentEngine::makePathFromTemplate($this->arParams['PATH_TO_GROUP_INVITE'], [ 'group_id' => $result['Group']['ID'] ]);
		$result['Urls']['View'] = CComponentEngine::makePathFromTemplate($this->arParams['PATH_TO_GROUP'], [ 'group_id' => $result['Group']['ID'] ]);
		$result['Urls']['UserRequestGroup'] = CComponentEngine::makePathFromTemplate($this->arParams['PATH_TO_USER_REQUEST_GROUP'], [ 'group_id' => $result['Group']['ID'], 'user_id' => $USER->GetID() ]);
		$result['Urls']['GroupRequestSearch'] = CComponentEngine::makePathFromTemplate($this->arParams['PATH_TO_GROUP_REQUEST_SEARCH'], [ 'group_id' => $result['Group']['ID'] ]);
		$result['Urls']['GroupRequests'] = CComponentEngine::makePathFromTemplate($this->arParams['PATH_TO_GROUP_REQUESTS'], [ 'group_id' => $result['Group']['ID'] ]);
		$result['Urls']['GroupRequestsOut'] = CComponentEngine::makePathFromTemplate($this->arParams['PATH_TO_GROUP_REQUESTS_OUT'], [ 'group_id' => $result['Group']['ID'] ]);
		$result['Urls']['GroupMods'] = CComponentEngine::makePathFromTemplate($this->arParams['PATH_TO_GROUP_MODS'], [ 'group_id' => $result['Group']['ID'] ]);
		$result['Urls']['GroupUsers'] = CComponentEngine::makePathFromTemplate($this->arParams['PATH_TO_GROUP_USERS'], [ 'group_id' => $result['Group']['ID'] ]);
		$result['Urls']['UserLeaveGroup'] = CComponentEngine::makePathFromTemplate($this->arParams['PATH_TO_USER_LEAVE_GROUP'], [ 'group_id' => $result['Group']['ID'] ]);
		$result['Urls']['GroupDelete'] = CComponentEngine::makePathFromTemplate($this->arParams['PATH_TO_GROUP_DELETE'], [ 'group_id' => $result['Group']['ID'] ]);
		$result['Urls']['Features'] = CComponentEngine::makePathFromTemplate($this->arParams['PATH_TO_GROUP_FEATURES'], [ 'group_id' => $result['Group']['ID'] ]);
		$result['Urls']['GroupBan'] = CComponentEngine::makePathFromTemplate($this->arParams['PATH_TO_GROUP_BAN'], [ 'group_id' => $result['Group']['ID'] ]);
		$result['Urls']['UserSearch'] = CComponentEngine::makePathFromTemplate($this->arParams['PATH_TO_SEARCH'], []);
		$result['Urls']['Subscribe'] = CComponentEngine::makePathFromTemplate($this->arParams['PATH_TO_GROUP_SUBSCRIBE'], [ 'group_id' => $result['Group']['ID'] ]);
		$result['Urls']['MessageToGroup'] = CComponentEngine::makePathFromTemplate($this->arParams['PATH_TO_MESSAGE_TO_GROUP'], [ 'group_id' => $result['Group']['ID'] ]);
		$result['Urls']['GroupLog'] = CComponentEngine::makePathFromTemplate($this->arParams['PATH_TO_GROUP_LOG'], [ 'group_id' => $result['Group']['ID'] ]);
		$result['Urls']['Copy'] = CComponentEngine::makePathFromTemplate($this->arParams['PATH_TO_GROUP_COPY'] ?? '', [ 'group_id' => $result['Group']['ID'] ]);

		if (Loader::includeModule('tasks'))
		{
			$result['Urls']['Flows'] = FlowPath::get((int)$USER->getId(), (int)$result['Group']['ID']);
		}
	}

	private function setGroupAvatar(&$result): void
	{
		$imageSize = 300;
		if ($this->arParams['SHORT_FORM'])
		{
			$imageSize = 100;
		}

		if ((int)$result['Group']['IMAGE_ID'] <= 0)
		{
			$result['Group']['IMAGE_ID'] = Option::get('socialnetwork', 'default_group_picture', false, SITE_ID);
		}

		$imageFields = CSocNetTools::initImage($result['Group']['IMAGE_ID'], $imageSize, '/bitrix/images/socialnetwork/nopic_group_100.gif', 100, '', false);

		$result['Group']['IMAGE_ID_FILE'] = $imageFields['FILE'];
		$result['Group']['IMAGE_ID_IMG'] = $imageFields['IMG'];
	}

	private function setGroupProperties(&$result): void
	{
		global $USER_FIELD_MANAGER;

		$result['GroupProperties'] = [
			'SHOW' => 'N',
			'DATA' => []
		];

		if (empty($this->arParams['GROUP_PROPERTY']))
		{
			return;
		}

		$userFieldsList = $USER_FIELD_MANAGER->getUserFields('SONET_GROUP', $result['Group']['ID'], LANGUAGE_ID);
		foreach ($userFieldsList as $fieldName => $userField)
		{
			if (!in_array($fieldName, $this->arParams['GROUP_PROPERTY'], true))
			{
				continue;
			}

			$userField['EDIT_FORM_LABEL'] = (
				(string)$userField['EDIT_FORM_LABEL'] !== ''
					? $userField['EDIT_FORM_LABEL']
					: $userField['FIELD_NAME']
			);
			$userField['EDIT_FORM_LABEL'] = htmlspecialcharsEx($userField['EDIT_FORM_LABEL']);
			$userField['~EDIT_FORM_LABEL'] = $userField['EDIT_FORM_LABEL'];
			$userField['PROPERTY_VALUE_LINK'] = '';

			$result['GroupProperties']['DATA'][$fieldName] = $userField;
		}

		if (!empty($result['GroupProperties']['DATA']))
		{
			$result['GroupProperties']['SHOW'] = 'Y';
		}
	}

	private function setGroupOwner(&$result): void
	{
		$result['Owner'] = false;

		$res = CSocNetUserToGroup::getList(
			[ 'ROLE' => 'ASC' ],
			[
				'GROUP_ID' => $result['Group']['ID'],
				'<=ROLE' => UserToGroupTable::ROLE_OWNER,
				'USER_ACTIVE' => 'Y'
			],
			false,
			[ 'nTopCount' => 1 ],
			[ 'ID', 'USER_ID', 'ROLE', 'USER_NAME', 'USER_LAST_NAME', 'USER_SECOND_NAME', 'USER_LOGIN', 'USER_PERSONAL_PHOTO', 'USER_PERSONAL_GENDER', 'USER_WORK_POSITION' ]
		);
		if (!$res)
		{
			return;
		}
		while ($ownerFields = $res->getNext())
		{
			$result['Owner'] = $this->getUserFields($ownerFields);
		}
	}

	private function setGroupModerators(&$result): void
	{
		$result['Moderators'] = false;

		$res = CSocNetUserToGroup::getList(
			[ 'ROLE' => 'ASC' ],
			[
				'GROUP_ID' => $result['Group']['ID'],
				'=ROLE' => UserToGroupTable::ROLE_MODERATOR,
				'USER_ACTIVE' => 'Y'
			],
			false,
			[ 'nTopCount' => $this->arParams['ITEMS_COUNT'] ],
			[ 'ID', 'USER_ID', 'ROLE', 'USER_NAME', 'USER_LAST_NAME', 'USER_SECOND_NAME', 'USER_LOGIN', 'USER_PERSONAL_PHOTO', 'USER_PERSONAL_GENDER', 'USER_WORK_POSITION' ]
		);
		if (!$res)
		{
			return;
		}

		$result['Moderators'] = [];

		$result['Moderators']['List'] = false;
		while ($moderatorFields = $res->getNext())
		{
			if ($result['Moderators']['List'] === false)
			{
				$result['Moderators']['List'] = [];
			}

			$result['Moderators']['List'][] = $this->getUserFields($moderatorFields);
		}
	}

	private function setGroupMembers(&$result): void
	{
		$result['Members'] = false;

		$res = CSocNetUserToGroup::getList(
			[ 'RAND' => 'ASC' ],
			[
				'GROUP_ID' => $result['Group']['ID'],
				'<=ROLE' => SONET_ROLES_USER,
				'USER_ACTIVE' => 'Y'
			],
			false,
			[ 'nTopCount' => $this->arParams['ITEMS_COUNT'] ],
			[ 'ID', 'USER_ID', 'ROLE', 'USER_NAME', 'USER_LAST_NAME', 'USER_SECOND_NAME', 'USER_LOGIN', 'USER_PERSONAL_PHOTO', 'USER_PERSONAL_GENDER', 'USER_WORK_POSITION' ]
		);
		if (!$res)
		{
			return;
		}

		$result['Members'] = [];
		$result['Members']['List'] = false;

		while ($memberFields = $res->getNext())
		{
			if ($result['Members']['List'] === false)
			{
				$result['Members']['List'] = [];
			}

			$result['Members']['List'][] = $this->getUserFields($memberFields);
		}
	}

	private function setScrumMaster(&$result): void
	{
		$result['ScrumMaster'] = [];

		$scrumMasterId = (int)$result['Group']['SCRUM_MASTER_ID'];
		if ($scrumMasterId <= 0)
		{
			return;
		}

		$res = \Bitrix\Main\UserTable::getList([
			'filter' => [
				'=ID' => $scrumMasterId,
			],
			'select' => [
				'USER_ID' => 'ID',
				'USER_NAME' => 'NAME',
				'USER_LAST_NAME' => 'LAST_NAME',
				'USER_SECOND_NAME' => 'SECOND_NAME',
				'USER_LOGIN' => 'LOGIN',
				'USER_PERSONAL_PHOTO' => 'PERSONAL_PHOTO',
				'USER_PERSONAL_GENDER' => 'PERSONAL_GENDER',
				'USER_WORK_POSITION' => 'WORK_POSITION',
			],
		]);
		$scrumMasterFields = $res->fetch();
		if (empty($scrumMasterFields))
		{
			return;
		}

		$result['ScrumMaster'] = $this->getUserFields($scrumMasterFields);
	}

	private function setDepartments(&$result): void
	{
		if (
			empty($result['Group']['UF_SG_DEPT'])
			|| !is_array($result['Group']['UF_SG_DEPT'])
			|| !Loader::includeModule('intranet')
		)
		{
			return;
		}

		$departmentsData = CIntranetUtils::getDepartmentsData($result['Group']['UF_SG_DEPT']);
		if (!empty($departmentsData))
		{
			$result['GroupDepartments'] = [];
			foreach ($departmentsData as $departmentId => $departmentName)
			{
				$result['GroupDepartments'][] = [
					'ID' => $departmentId,
					'NAME' => $departmentName,
					'URL' => str_replace('#ID#', $departmentId, $this->arParams['PATH_TO_CONPANY_DEPARTMENT']),
				];
			}
		}
	}

	private function getUserFields($userFields): array
	{
		global $USER;

		$profileUrl = CComponentEngine::makePathFromTemplate($this->arParams['PATH_TO_USER'], [ 'user_id' => $userFields['USER_ID'] ]);
		$canViewProfile = CSocNetUserPerms::canPerformOperation($USER->getId(), $userFields['USER_ID'], 'viewprofile', CSocNetUser::isCurrentUserModuleAdmin());
		$imageFields = $this->getUserAvatarFields($userFields, $profileUrl, $canViewProfile);
		$extranetUserIdList = self::getExtranetUserIdList([
			'groupId' => $this->arParams['GROUP_ID'],
		]);

		$result = [
			'ID' => $userFields['ID'] ?? 0,
			'USER_ID' => $userFields['USER_ID'],
			'USER_NAME' => $userFields['USER_NAME'],
			'USER_LAST_NAME' => $userFields['USER_LAST_NAME'],
			'USER_SECOND_NAME' => $userFields['USER_SECOND_NAME'],
			'USER_WORK_POSITION' => $userFields['USER_WORK_POSITION'],
			'USER_LOGIN' => $userFields['USER_LOGIN'],
			'USER_PERSONAL_PHOTO' => $userFields['USER_PERSONAL_PHOTO'],
			'USER_PERSONAL_PHOTO_FILE' => $imageFields['FILE'],
			'USER_PERSONAL_PHOTO_IMG' => $imageFields['IMG'],
			'USER_PROFILE_URL' => $profileUrl,
			'SHOW_PROFILE_LINK' => $canViewProfile,
			'USER_IS_EXTRANET' => (
				!empty($extranetUserIdList)
				&& in_array((int)$userFields['USER_ID'], $extranetUserIdList, true)
					? 'Y'
					: 'N'
			),
		];

		if ((int)$userFields['USER_PERSONAL_PHOTO'] > 0)
		{
			$resizedImageFields = \CFile::resizeImageGet(
				(int)$userFields['USER_PERSONAL_PHOTO'],
				[
					'width' => 100,
					'height' => 100,
				],
				BX_RESIZE_IMAGE_EXACT
			);
		}
		else
		{
			$resizedImageFields = ['src' => ''];
		}

		if (!is_array($result['USER_PERSONAL_PHOTO_FILE']))
		{
			$result['USER_PERSONAL_PHOTO_FILE'] = [];
		}
		$result['USER_PERSONAL_PHOTO_FILE']['SRC_RESIZED'] = $resizedImageFields['src'];
		$result['NAME_FORMATTED'] = \CUser::formatName(
			$this->arParams['NAME_TEMPLATE'],
			[
				'NAME' => htmlspecialcharsBack($result['USER_NAME']),
				'LAST_NAME' => htmlspecialcharsBack($result['USER_LAST_NAME']),
				'SECOND_NAME' => htmlspecialcharsBack($result['USER_SECOND_NAME']),
				'LOGIN' => htmlspecialcharsBack($result['USER_LOGIN']),
			],
			true
		);

		return $result;
	}

	private function getUserAvatarFields($userFields, $profileUrl, $canViewProfile): array
	{
		if ((int)$this->arParams['THUMBNAIL_LIST_SIZE'] > 0)
		{
			if ((int)$userFields['USER_PERSONAL_PHOTO'] <= 0)
			{
				switch ($userFields['USER_PERSONAL_GENDER'])
				{
					case 'M':
						$suffix = 'male';
						break;
					case 'F':
						$suffix = 'female';
						break;
					default:
						$suffix = 'unknown';
				}
				$userFields['USER_PERSONAL_PHOTO'] = Option::get('socialnetwork', 'default_user_picture_' . $suffix, false, SITE_ID);
			}
			$imageFields = CSocNetTools::initImage($userFields['USER_PERSONAL_PHOTO'], $this->arParams['THUMBNAIL_LIST_SIZE'], '/bitrix/images/socialnetwork/nopic_30x30.gif', 30, $profileUrl, $canViewProfile);
		}
		else
		{
			$imageFields = CSocNetTools::initImage($userFields['USER_PERSONAL_PHOTO'], 50, '/bitrix/images/socialnetwork/nopic_user_50.gif', 50, $profileUrl, $canViewProfile);
		}

		return $imageFields;
	}

	private function setFeatures(&$result): void
	{
		global $USER;

		$result['ActiveFeatures'] = CSocNetFeatures::getActiveFeaturesNames(SONET_ENTITY_GROUP, $result['Group']['ID']);

		//Blog
		$result['BLOG'] = [
			'SHOW' => false,
			'TITLE' => Loc::getMessage('SONET_C6_BLOG_T'),
		];
		if (
			array_key_exists('blog', $result['ActiveFeatures'])
			&& Loader::includeModule('blog')
			&& (
				CSocNetFeaturesPerms::CanPerformOperation($USER->getID(), SONET_ENTITY_GROUP, $result['Group']['ID'], 'blog', 'view_post', CSocNetUser::isCurrentUserModuleAdmin())
				|| CMain::GetGroupRight('forum') >= 'W'
			)
		)
		{
			$result['BLOG']['SHOW'] = true;
			if ((string)$result['ActiveFeatures']['blog'] !== '')
			{
				$result['BLOG']['TITLE'] = $result['ActiveFeatures']['blog'];
			}
		}

		$result['forum'] = [
			'SHOW' => false,
			'TITLE' => Loc::getMessage('SONET_C6_FORUM_T'),
		];
		if (
			array_key_exists('forum', $result['ActiveFeatures'])
			&& Loader::includeModule('forum')
			&& (
				CSocNetFeaturesPerms::CanPerformOperation($USER->GetID(), SONET_ENTITY_GROUP, $result['Group']['ID'], 'forum', 'view', CSocNetUser::isCurrentUserModuleAdmin())
				|| CMain::getGroupRight('forum') >= 'W'
			)
		)
		{
			$result['forum']['SHOW'] = true;
			if ((string)$result['ActiveFeatures']['forum'] !== '')
			{
				$result['forum']['TITLE'] = $result['ActiveFeatures']['forum'];
			}
		}

		$result['tasks'] = [
			'SHOW' => false,
			'TITLE' => Loc::getMessage('SONET_C6_TASKS_T'),
		];
		if (
			array_key_exists('tasks', $result['ActiveFeatures'])
			&& Loader::includeModule('intranet')
			&& (
				CSocNetFeaturesPerms::CanPerformOperation($USER->getId(), SONET_ENTITY_GROUP, $result['Group']['ID'], 'tasks', 'view', CSocNetUser::isCurrentUserModuleAdmin())
				|| CMain::getGroupRight('intranet') >= 'W'
			)
		)
		{
			$result['tasks']['SHOW'] = true;
			if ((string)$result['ActiveFeatures']['tasks'] !== '')
			{
				$result['tasks']['TITLE'] = $result['ActiveFeatures']['tasks'];
			}
		}
	}

	private static function getExtranetUserIdList(array $params = []): array
	{
		static $cache = [];

		$groupId = (int)($params['groupId'] ?? 0);
		if ($groupId <= 0)
		{
			return [];
		}

		if (!isset($cache[$groupId]))
		{
			$cache[$groupId] = [];

			if (Loader::includeModule('extranet'))
			{
				$userIdList = [];
				$res = UserToGroupTable::getList([
					'filter' => [
						'GROUP_ID' => $groupId,
						'@ROLE' => UserToGroupTable::getRolesMember(),
					],
					'select' => [ 'USER_ID' ],
				]);
				while ($relationFields = $res->fetch())
				{
					$userIdList[] = (int)$relationFields['USER_ID'];
				}

				if (!empty($userIdList))
				{
					$res = CUser::getList(
						'ID',
						'asc',
						[
							'ID' => implode('|', $userIdList),
							'GROUPS_ID' => [ CExtranet::getExtranetUserGroupId() ],
							'UF_DEPARTMENT' => false,
						],
						[
							'FIELDS' => [ 'ID' ],
						]
					);
					while ($userFields = $res->fetch())
					{
						$cache[$groupId][] = (int)$userFields['ID'];
					}
				}
			}
		}

		return $cache[$groupId];
	}

}

Youez - 2016 - github.com/yon3zu
LinuXploit