AnonSec Shell
Server IP : 85.193.89.191  /  Your IP : 3.146.35.212
Web Server : Apache
System : Linux 956367-cx40159.tmweb.ru 3.10.0-1160.105.1.el7.x86_64 #1 SMP Thu Dec 7 15:39:45 UTC 2023 x86_64
User : bitrix ( 600)
PHP Version : 8.1.27
Disable Function : NONE
MySQL : OFF  |  cURL : OFF  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /home/bitrix/www/bitrix/components/bitrix/socialnetwork.spaces/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /home/bitrix/www/bitrix/components/bitrix/socialnetwork.spaces/class.php
<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true)
{
	die();
}

use Bitrix\Main\Config\Option;
use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;
use Bitrix\Socialnetwork\Item\Workgroup;
use Bitrix\Socialnetwork\Space\List\SpaceListMode;

class SpacesComponent extends CBitrixComponent
{
	private $application;

	public function __construct($component = null)
	{
		parent::__construct($component);
		$this->init();
	}

	public function onIncludeComponentLang()
	{
		$this->includeComponentLang(basename(__FILE__));

		Loc::loadMessages(__FILE__);
	}

	public function onPrepareComponentParams($params)
	{
		$params['SEF_MODE'] = 'Y';
		$params['SEF_FOLDER'] = $params['SEF_FOLDER'] ?? '/spaces/';
		$params['USER_SEF_FOLDER'] = $this->getUserSefFolder();
		$params['GROUP_SEF_FOLDER'] = $this->getGroupSefFolder();

		if (
			!isset($params['VARIABLE_ALIASES'])
			|| !is_array($params['VARIABLE_ALIASES'])
		)
		{
			$params['VARIABLE_ALIASES'] = [];
		}

		return $params;
	}

	public function executeComponent()
	{
		if (!\Bitrix\Socialnetwork\Space\Service::isAvailable())
		{
			ShowError('Functionality not available.');

			return;
		}

		$this->application->setTitle(Loc::getMessage('SN_SPACES_TITLE'));

		$defaultUrlTemplates404 = $this->prepareDefaultUrlTemplates(
			$this->arParams['USER_SEF_FOLDER'],
			$this->arParams['GROUP_SEF_FOLDER'],
		);

		$variables = [];
		$defaultVariableAliases404 = [];
		$componentVariables = $this->getComponentVariables();

		$engine = new CComponentEngine($this);

		if ($this->isDiskEnabled())
		{
			$engine->addGreedyPart('#PATH#');
			$engine->addGreedyPart('#FILE_PATH#');
			$engine->addGreedyPart('#TRASH_PATH#');
			$engine->addGreedyPart('#TRASH_FILE_PATH#');
			$engine->setResolveCallback([
				\Bitrix\Disk\Driver::getInstance()->getUrlManager(),
				'resolveSocNetPathComponentEngine',
			]);
		}

		$urlTemplates = CComponentEngine::makeComponentUrlTemplates(
			$defaultUrlTemplates404,
			[]
		);
		$variableAliases = CComponentEngine::makeComponentVariableAliases(
			$defaultVariableAliases404,
			$this->arParams['VARIABLE_ALIASES']
		);

		$componentPage = $engine->guessComponentPath(
			$this->arParams['SEF_FOLDER'],
			$urlTemplates,
			$variables,
		);

		if ($componentPage === 'group')
		{
			$groupId = (int)($variables['group_id'] ?? 0);
			$group = Workgroup::getById($groupId);
			$isScrum = $group && $group->isScrumProject();
			$componentPage = $isScrum ? 'group_tasks' : 'group_discussions';
		}

		if ($componentPage === 'index')
		{
			$componentPage = 'user_discussions';
		}

		CComponentEngine::initComponentVariables(
			$componentPage,
			$componentVariables,
			$variableAliases,
			$variables
		);

		$this->arResult = $this->prepareResult(
			$variables,
			$variableAliases,
			$urlTemplates
		);

		$this->includeComponentTemplate($componentPage);
	}

	private function prepareDefaultUrlTemplates(
		string $userSefFolder,
		string $groupSefFolder
	): array
	{
		$urls = [
			'index' => 'index.php',

			'user_discussions' => 'discussions/',

			'user_tasks' => 'tasks/',

			'user_calendar' => 'calendar/',

			'group' => 'group/#group_id#/',
			'group_discussions' => 'group/#group_id#/general/',

			'group_tasks' => 'group/#group_id#/tasks/',
			'group_tasks_task' => $groupSefFolder . 'group/#group_id#/tasks/task/#action#/#task_id#/',
			'group_tasks_view' => 'group/#group_id#/tasks/view/#action#/#view_id#/',
			'group_tasks_report' => 'group/#group_id#/tasks/report/',

			'group_calendar' => 'group/#group_id#/calendar/',

			'group_photo_section' => 'group/#group_id#/photo/album/#section_id#/',

			'scrum_team_speed' => $groupSefFolder . 'group/#group_id#/scrum/team_speed/',
			'scrum_burn_down' => $groupSefFolder . 'group/#group_id#/scrum/burn_down/#sprint_id#/',

			'group_features' => 'group/#group_id#/features/',
			'group_users' => 'group/#group_id#/users/',
			'group_invite' => 'group/#group_id#/invite/',
		];

		if ($this->isDiskEnabled())
		{
			$urls['spaces_user_files'] = 'files/user/#user_id#/';
			$urls['user_files'] = 'files/user/#user_id#/disk/path/#PATH#';
			$urls['user_files_file'] = 'files/user/#user_id#/disk/file/#FILE_PATH#';
			$urls['user_files_file_history'] = 'files/user/#user_id#/disk/file-history/#FILE_ID#';
			$urls['user_files_trashcan_list'] = 'files/user/#user_id#/disk/trashcan/#TRASH_PATH#';
			$urls['user_files_trashcan_file_view'] = 'files/user/#user_id#/disk/trash/file/#TRASH_FILE_PATH#';
			$urls["user_files_external_link_list"] = 'user/#user_id#/disk/external';
			$urls["user_files_volume"] = $userSefFolder . 'user/#user_id#/disk/volume/#ACTION#';

			$urls['group_files'] = 'group/#group_id#/disk/path/#PATH#';
			$urls['group_files_file'] = 'group/#group_id#/disk/file/#FILE_PATH#';
			$urls['group_files_file_history'] = 'group/#group_id#/disk/file-history/#FILE_ID#';
			$urls['group_files_trashcan_list'] = 'group/#group_id#/disk/trashcan/#TRASH_PATH#';
			$urls['group_files_trashcan_file_view'] = 'group/#group_id#/disk/trash/file/#TRASH_FILE_PATH#';
			$urls['group_files_bizproc_workflow_admin'] = $groupSefFolder . 'group/#group_id#/disk/bp/';
			$urls['group_disk_bizproc_workflow_edit'] = $groupSefFolder . 'group/#group_id#/disk/bp_edit/#ID#/';
			$urls['group_files_start_bizproc'] = $groupSefFolder . 'group/#group_id#/disk/bp_start/#ELEMENT_ID#/';
			$urls['group_files_task'] = 'group/#group_id#/disk/bp_task/#ID#/';
			$urls['group_files_task_list'] = 'group/#group_id#/disk/bp_task_list/';
		}

		return $urls;
	}

	private function prepareResult(
		array $variables,
		array $variableAliases,
		array $urlTemplates
	): array
	{
		$urls = $this->prepareUrls(
			$this->arParams['SEF_FOLDER'],
			$this->arParams['USER_SEF_FOLDER'],
			$urlTemplates
		);

		$result = [
			'VARIABLES' => $variables,
			'ALIASES' => $variableAliases,
		];

		$result = array_merge($result, $urls);

		$result['NAME_TEMPLATE'] = CSite::getNameFormat();
		$result['DATE_TIME_FORMAT'] = CIntranetUtils::getCurrentDateTimeFormat();
		$result['DATE_TIME_FORMAT_WITHOUT_YEAR'] = CIntranetUtils::getCurrentDateTimeFormat(
			['woYear' => true]
		);

		$result['IS_LIST_DEPLOYED'] = $this->getListMode();

		return $result;
	}

	private function prepareUrls(
		string $sefFolder,
		string $userSefFolder,
		array $urlTemplates
	): array
	{
		$urls = [];

		foreach ($urlTemplates as $url => $value)
		{
			$urls['PATH_TO_' . mb_strtoupper($url)] = (
				(mb_substr($value, 0, 1) === '/') ? $value : $sefFolder . $value
			);
		}

		$urls['PATH_TO_USER'] = $userSefFolder . 'user/#user_id#/';

		$urls['PATH_TO_MESSAGES_CHAT'] = $userSefFolder . 'messages/chat/#user_id#/';
		$urls['PATH_TO_USER_BLOG_POST_IMPORTANT'] = $userSefFolder . 'user/#user_id#/blog/important/';
		$urls['PATH_TO_SEARCH_TAG'] = isModuleInstalled('search') ? SITE_DIR . 'search/?tags=#tag#' : '';
		$urls['PATH_TO_VIDEO_CALL'] = isModuleInstalled('video') ? $userSefFolder . 'video/#user_id#/' : '';
		$urls['PATH_TO_COMPANY_DEPARTMENT'] = (
			isModuleInstalled('intranet')
				? '/company/structure.php?set_filter_structure=Y&structure_UF_DEPARTMENT=#ID#'
				: ''
		);

		$urls['PATH_TO_USER_TASKS_TASK'] = $userSefFolder . 'user/#user_id#/tasks/task/#action#/#task_id#/';
		$urls['PATH_TO_USER_TASKS_VIEW'] = $userSefFolder . 'user/#user_id#/tasks/view/#action#/#view_id#/';
		$urls['PATH_TO_USER_TASKS_REPORT'] = $userSefFolder . 'user/#user_id#/tasks/report/';
		$urls['PATH_TO_USER_TASKS_TEMPLATES'] = $userSefFolder . 'user/#user_id#/tasks/templates/';

		return $urls;
	}

	private function getComponentVariables(): array
	{
		return [
			'user_id',
			'group_id',
			'page',
			'message_id',
			'subject_id',
			'path',
			'section_id',
			'element_id',
			'action',
			'post_id',
			'category',
			'topic_id',
			'task_id',
			'view_id',
			'type',
			'report_id',
			'placement_id',
			'sprint_id',
		];
	}

	private function getUserSefFolder(): string
	{
		return Option::get(
			'socialnetwork',
			'user_page',
			(
				IsModuleInstalled('extranet')
				&& $this->getSiteId() == Option::get('extranet', 'extranet_site')
					? '/extranet/contacts/personal/'
					: '/company/personal/'
			),
			$this->getSiteId()
		);
	}

	private function getGroupSefFolder(): string
	{
		return Option::get(
			'socialnetwork',
			'workgroups_page',
			(
				IsModuleInstalled('extranet')
				&& $this->getSiteId() == Option::get('extranet', 'extranet_site')
					? '/extranet/workgroups/'
					: 'workgroups/'
			),
			$this->getSiteId()
		);
	}

	private function isDiskEnabled(): bool
	{
		return (
			Option::get('disk', 'successfully_converted', false)
			&& Loader::includeModule('disk')
		);
	}

	private function getListMode(): string
	{
		return SpaceListMode::getOption();
	}

	private function init(): void
	{
		Loader::includeModule('socialnetwork');

		global $APPLICATION;
		$this->application = $APPLICATION;
	}
}

Anon7 - 2022
AnonSec Team