} $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()) {
public static function __GetSearchPermissions($arTask) { $arPermissions = array(); if (!isset($arTask['ACCOMPLICES']) || !isset($arTask['AUDITORS'])) { if (!isset($arTask['ACCOMPLICES'])) { $arTask['ACCOMPLICES'] = array(); } if (!isset($arTask['AUDITORS'])) { $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 ($arTask["GROUP_ID"] > 0 && CModule::IncludeModule("socialnetwork")) { $prefix = "SG" . $arTask["GROUP_ID"] . "_"; $letter = CSocNetFeaturesPerms::GetOperationPerm(SONET_ENTITY_GROUP, $arTask["GROUP_ID"], "tasks", "view_all"); switch ($letter) { case "N": //All $arPermissions[] = 'G2'; break; case "L": //Authorized $arPermissions[] = 'AU'; break; case "K": //Group members includes moderators and admins $arPermissions[] = $prefix . 'K'; case "E": //Moderators includes admins $arPermissions[] = $prefix . 'E'; case "A": //Admins $arPermissions[] = $prefix . 'A'; break; } } if (!in_array("G2", $arPermissions) && !in_array("AU", $arPermissions)) { if (!$arTask["ACCOMPLICES"]) { $arTask["ACCOMPLICES"] = array(); } if (!$arTask["AUDITORS"]) { $arTask["AUDITORS"] = array(); } $arParticipants = array_unique(array_merge(array($arTask["CREATED_BY"], $arTask["RESPONSIBLE_ID"]), $arTask["ACCOMPLICES"], $arTask["AUDITORS"])); foreach ($arParticipants as $userId) { $arPermissions[] = "U" . $userId; } $arDepartments = array(); $arSubUsers = array_unique(array($arTask['RESPONSIBLE_ID'], $arTask['CREATED_BY'])); foreach ($arSubUsers as $subUserId) { $arUserDepartments = CTasks::GetUserDepartments($subUserId); if (is_array($arUserDepartments) && count($arUserDepartments)) { $arDepartments = array_merge($arDepartments, $arUserDepartments); } } $arDepartments = array_unique($arDepartments); $arManagersTmp = CTasks::GetDepartmentManagers($arDepartments); if (is_array($arManagersTmp)) { $arManagers = array_keys($arManagersTmp); // Remove $arSubUsers from $arManagers $arManagers = array_diff($arManagers, $arSubUsers); foreach ($arManagers as $userId) { if (!in_array("U" . $userId, $arPermissions)) { $arPermissions[] = "U" . $userId; } } } } return $arPermissions; }