function CanCurrentUserViewTopic($topicID) { global $USER; $isSocNetModuleIncluded = CModule::IncludeModule("socialnetwork"); if (($topicID = intval($topicID)) && is_object($USER)) { if ($USER->IsAdmin() || CTasksTools::IsPortalB24Admin()) { return true; } $rsTask = $res = CTasks::GetList(array(), array("FORUM_TOPIC_ID" => $topicID)); if ($arTask = $rsTask->Fetch()) { if ((int) $arTask['GROUP_ID'] > 0) { if (in_array(CSocNetFeaturesPerms::GetOperationPerm(SONET_ENTITY_GROUP, $arTask["GROUP_ID"], "tasks", "view_all"), array("G2", "AU"))) { return true; } elseif ($isSocNetModuleIncluded && false !== CSocNetFeaturesPerms::CurrentUserCanPerformOperation(SONET_ENTITY_GROUP, $arTask['GROUP_ID'], 'tasks', 'view_all')) { return true; } } $arTask["ACCOMPLICES"] = $arTask["AUDITORS"] = array(); $rsMembers = CTaskMembers::GetList(array(), array("TASK_ID" => $arTask["ID"])); while ($arMember = $rsMembers->Fetch()) { if ($arMember["TYPE"] == "A") { $arTask["ACCOMPLICES"][] = $arMember["USER_ID"]; } elseif ($arMember["TYPE"] == "U") { $arTask["AUDITORS"][] = $arMember["USER_ID"]; } } if (in_array($USER->GetID(), array_unique(array_merge(array($arTask["CREATED_BY"], $arTask["RESPONSIBLE_ID"]), $arTask["ACCOMPLICES"], $arTask["AUDITORS"])))) { return true; } $dbRes = CUser::GetList($by = 'ID', $order = 'ASC', array('ID' => $arTask["RESPONSIBLE_ID"]), array('SELECT' => array('UF_DEPARTMENT'))); if (($arRes = $dbRes->Fetch()) && is_array($arRes['UF_DEPARTMENT']) && count($arRes['UF_DEPARTMENT']) > 0) { if (in_array($USER->GetID(), array_keys(CTasks::GetDepartmentManagers($arRes['UF_DEPARTMENT'], $arTask["RESPONSIBLE_ID"])))) { return true; } } } } return false; }
$arSubDeps = CTasks::GetSubordinateDeps(); $GLOBALS['GROUP_SITE_ID'] = $arParams['SITE_ID']; if ($arParams["GROUP_ID_FOR_SITE"] && CModule::IncludeModule("extranet") && CModule::IncludeModule("socialnetwork")) { $arSites = array(); $rsGroupSite = CSocNetGroup::GetSite($arParams["GROUP_ID_FOR_SITE"]); while ($arGroupSite = $rsGroupSite->Fetch()) { $arSites[] = $arGroupSite["LID"]; } $extranet_site_id = CExtranet::GetExtranetSiteID(); if ($extranet_site_id && in_array(CExtranet::GetExtranetSiteID(), $arSites)) { $GLOBALS['GROUP_SITE_ID'] = $extranet_site_id; } } $arManagers = array(); if (($arDepartments = CTasks::GetUserDepartments($USER->GetID())) && is_array($arDepartments) && count($arDepartments) > 0) { $arManagers = array_keys(CTasks::GetDepartmentManagers($arDepartments, $USER->GetID())); } $bSubordinateOnly = isset($arParams["SUBORDINATE_ONLY"]) && $arParams["SUBORDINATE_ONLY"] == "Y"; $IBlockID = COption::GetOptionInt('intranet', 'iblock_structure'); $arSecFilter = array('IBLOCK_ID' => $IBlockID); if ($bSubordinateOnly) { if (!$arSubDeps) { $arSubDeps = array(-1); } $arSecFilter["ID"] = $arSubDeps; } $obCache = new CPHPCache(); $arStructure = array(); $arSections = array(); if (!CModule::IncludeModule('extranet') || CExtranet::IsIntranetUser()) { if ($obCache->InitCache(CTasksTools::CACHE_TTL_UNLIM, md5(serialize($arSecFilter)) . (string) $arParams['SHOW_INACTIVE_USERS'], "/tasks/subordinatedeps")) {
} elseif ($SITE_ID != '') { $GLOBALS["GROUP_SITE_ID"] = $SITE_ID; } require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"; require_once "functions.php"; if (!$USER->IsAuthorized()) { die; } CModule::IncludeModule('intranet'); CModule::IncludeModule('tasks'); __IncludeLang(dirname(__FILE__) . '/lang/' . LANGUAGE_ID . '/' . basename(__FILE__)); $arSubDeps = CTasks::GetSubordinateDeps(); $dbRes = CUser::GetList($by = 'ID', $order = 'ASC', array('ID' => $USER->GetID()), array('SELECT' => array('UF_DEPARTMENT'))); $arManagers = array(); if (($arRes = $dbRes->Fetch()) && is_array($arRes['UF_DEPARTMENT']) && count($arRes['UF_DEPARTMENT']) > 0) { $arManagers = array_keys(CTasks::GetDepartmentManagers($arRes['UF_DEPARTMENT'], $USER->GetID())); } $bSubordinateOnly = isset($_GET["S_ONLY"]) && $_GET["S_ONLY"] == "Y"; if (isset($_REQUEST["nt"])) { preg_match_all("/(#NAME#)|(#NOBR#)|(#\\/NOBR#)|(#LAST_NAME#)|(#SECOND_NAME#)|(#NAME_SHORT#)|(#SECOND_NAME_SHORT#)|\\s|\\,/", urldecode($_REQUEST["nt"]), $matches); $nameTemplate = implode("", $matches[0]); } else { $nameTemplate = CSite::GetNameFormat(false); } if ($_REQUEST['MODE'] == 'EMPLOYEES' && (!CModule::IncludeModule('extranet') || CExtranet::IsIntranetUser() || $SECTION_ID == 'extranet')) { if ($SECTION_ID != 'extranet') { $SECTION_ID = intval($_REQUEST['SECTION_ID']); } $arUsers = TasksGetDepartmentUsers($SECTION_ID, $SITE_ID, $arSubDeps, $arManagers, $_REQUEST['SHOW_INACTIVE_USERS'], $nameTemplate); $APPLICATION->RestartBuffer(); Header('Content-Type: application/x-javascript; charset=' . LANG_CHARSET);