function tasksGetLastSelected($arManagers, $bSubordinateOnly = false, $nameTemplate = "") { static $arLastUsers; global $USER; if (!isset($arLastUsers)) { $arSubDeps = CTasks::GetSubordinateDeps(); if (!class_exists('CUserOptions')) { include_once $_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/classes/" . $GLOBALS['DBType'] . "/favorites.php"; } $arLastSelected = CUserOptions::GetOption("tasks", "user_search", array()); if (is_array($arLastSelected) && strlen($arLastSelected['last_selected']) > 0) { $arLastSelected = array_unique(explode(',', $arLastSelected['last_selected'])); } else { $arLastSelected = false; } if (is_array($arLastSelected)) { $currentUser = array_search($USER->GetID(), $arLastSelected); if ($currentUser !== false) { unset($arLastSelected[$currentUser]); } array_unshift($arLastSelected, $USER->GetID()); } else { $arLastSelected[] = $USER->GetID(); } $arFilter = array('ACTIVE' => 'Y'); if ($bSubordinateOnly) { $arFilter["UF_DEPARTMENT"] = $arSubDeps; } else { $arFilter['!UF_DEPARTMENT'] = false; } $arFilter['ID'] = is_array($arLastSelected) ? implode('|', array_slice($arLastSelected, 0, 10)) : '-1'; $dbRes = CUser::GetList($by = 'last_name', $order = 'asc', $arFilter, array('SELECT' => array('UF_DEPARTMENT'))); $arLastUsers = array(); while ($arRes = $dbRes->GetNext()) { $arPhoto = array('IMG' => ''); if (!$arRes['PERSONAL_PHOTO']) { switch ($arRes['PERSONAL_GENDER']) { case "M": $suffix = "male"; break; case "F": $suffix = "female"; break; default: $suffix = "unknown"; } $arRes['PERSONAL_PHOTO'] = COption::GetOptionInt("socialnetwork", "default_user_picture_" . $suffix, false, isset($arParams['SITE_ID']) ? $arParams['SITE_ID'] : SITE_ID); } if ($arRes['PERSONAL_PHOTO'] > 0) { $arPhoto = CIntranetUtils::InitImage($arRes['PERSONAL_PHOTO'], 30, 0, BX_RESIZE_IMAGE_EXACT); } $arLastUsers[$arRes['ID']] = array('ID' => $arRes['ID'], 'NAME' => CUser::FormatName(empty($nameTemplate) ? CSite::GetNameFormat() : $nameTemplate, $arRes, true, false), 'LOGIN' => $arRes['LOGIN'], 'EMAIL' => $arRes['EMAIL'], 'WORK_POSITION' => htmlspecialcharsBack($arRes['WORK_POSITION'] ? $arRes['WORK_POSITION'] : $arRes['PERSONAL_PROFESSION']), 'PHOTO' => isset($arPhoto['CACHE']['src']) ? $arPhoto['CACHE']['src'] : "", 'HEAD' => false, 'SUBORDINATE' => is_array($arSubDeps) && is_array($arRes['UF_DEPARTMENT']) && array_intersect($arRes['UF_DEPARTMENT'], $arSubDeps) ? 'Y' : 'N', 'SUPERORDINATE' => in_array($arRes["ID"], $arManagers) ? 'Y' : 'N'); } } return $arLastUsers; }
} if (isset($_POST['DESCRIPTION_IN_BBCODE']) && in_array($_POST['DESCRIPTION_IN_BBCODE'], array('Y', 'N'))) { $arFields['DESCRIPTION_IN_BBCODE'] = $_POST['DESCRIPTION_IN_BBCODE']; } else { $arFields['DESCRIPTION_IN_BBCODE'] = 'N'; } // for compatibility $arFields["REPLICATE_PARAMS"] = array(); foreach ($_POST as $field => $value) { if (substr($field, 0, 10) == "REPLICATE_") { $arFields["REPLICATE_PARAMS"][substr($field, 10)] = substr($field, -5) == "_DATE" ? ConvertDateTime($value) : $value; } } $arFields["REPLICATE_PARAMS"] = serialize($arFields["REPLICATE_PARAMS"]); $arFields["SITE_ID"] = SITE_ID; $arSectionIDs = CTasks::GetSubordinateDeps(); if ($_POST["MULTITASK"] == "Y" && sizeof($_POST["RESPONSIBLES"]) > 0) { $arFields["MULTITASK"] = "Y"; $arFields["CREATED_BY"] = $arFields["RESPONSIBLE_ID"] = $USER->GetID(); } else { $arFields["MULTITASK"] = "N"; $arFields["CREATED_BY"] = $_POST["CREATED_BY"]; // if creator is not a current user and creator is not an admin if ($arFields["CREATED_BY"] != $USER->GetID() && !$arResult['USER_IS_ADMIN']) { $arFields["RESPONSIBLE_ID"] = $USER->GetID(); } else { $arFields["RESPONSIBLE_ID"] = $_POST["RESPONSIBLE_ID"]; } } if ($arFields["RESPONSIBLE_ID"] != $USER->GetID()) { $rsUser = CUser::GetByID($arFields["RESPONSIBLE_ID"]);
/** * @param $arOrder * @param $arFilter * @param array $arNavParams * @param array $arParams * @param array $arSelect * @return bool|CDBResult * * @global $DB CDatabase * @global $DBType string */ public static function GetList($arOrder, $arFilter, $arNavParams = array(), $arParams = array(), $arSelect = array()) { global $DB, $DBType, $USER_FIELD_MANAGER; $arSqlSearch = CTaskTemplates::GetFilter($arFilter, $arParams); // check permissions if (isset($arParams['USER_ID'])) { $executiveUserId = (int) $arParams['USER_ID']; $isAdmin = CTasksTools::IsAdmin($executiveUserId) || CTasksTools::IsPortalB24Admin($executiveUserId); if (!$isAdmin) { $sql = 'TT.CREATED_BY = ' . (int) $executiveUserId; if ($executiveUserId && ($arDepsIDs = CTasks::GetSubordinateDeps($executiveUserId))) { if (!is_array($arDepsIDs)) { $arDepsIDs = array(intval($arDepsIDs)); } /** @noinspection PhpDynamicAsStaticMethodCallInspection */ $rsDepartmentField = CUserTypeEntity::GetList(array(), array("ENTITY_ID" => "USER", "FIELD_NAME" => "UF_DEPARTMENT")); $cntOfDepartments = count($arDepsIDs); if ($cntOfDepartments && ($arDepartmentField = $rsDepartmentField->Fetch())) { if (strtolower($DBType) === 'oracle' && ($valuesLimit = 1000) && $cntOfDepartments > $valuesLimit) { $arConstraints = array(); $sliceIndex = 0; while ($sliceIndex < $cntOfDepartments) { $arConstraints[] = 'BUF1.VALUE_INT IN (' . implode(',', array_slice($arDepsIDs, $sliceIndex, $valuesLimit)) . ')'; $sliceIndex += $valuesLimit; } $strConstraint = '(' . implode(' OR ', $arConstraints) . ')'; } else { $strConstraint = "BUF1.VALUE_INT IN (" . implode(",", $arDepsIDs) . ")"; } $sql .= "\n\t\t\t\t\t\t\tOR EXISTS (\n\t\t\t\t\t\t\t\tSELECT\n\t\t\t\t\t\t\t\t\t'x'\n\t\t\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\t\t\tb_utm_user BUF1\n\t\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\t\tBUF1.FIELD_ID = " . $arDepartmentField["ID"] . "\n\t\t\t\t\t\t\t\tAND BUF1.VALUE_ID = TT.CREATED_BY\n\t\t\t\t\t\t\t\tAND " . $strConstraint . "\n\t\t\t\t\t\t\t) "; } } $arSqlSearch[] = ' (' . $sql . ') '; } } $obUserFieldsSql = new CUserTypeSQL(); $obUserFieldsSql->SetEntity("TASKS_TASK_TEMPLATE", "TT.ID"); $obUserFieldsSql->SetSelect($arSelect); $obUserFieldsSql->SetFilter($arFilter); $obUserFieldsSql->SetOrder($arOrder); $r = $obUserFieldsSql->GetFilter(); if (strlen($r) > 0) { $arSqlSearch[] = "(" . $r . ")"; } $arFields = array('ID' => array('FIELD' => 'TT.ID', 'DEFAULT' => true), 'TITLE' => array('FIELD' => 'TT.TITLE', 'DEFAULT' => true), 'DESCRIPTION' => array('FIELD' => 'TT.DESCRIPTION', 'DEFAULT' => true), 'DESCRIPTION_IN_BBCODE' => array('FIELD' => 'TT.DESCRIPTION_IN_BBCODE', 'DEFAULT' => true), 'PRIORITY' => array('FIELD' => 'TT.PRIORITY', 'DEFAULT' => true), 'STATUS' => array('FIELD' => 'TT.STATUS', 'DEFAULT' => true), 'RESPONSIBLE_ID' => array('FIELD' => 'TT.RESPONSIBLE_ID', 'DEFAULT' => true), 'DEADLINE_AFTER' => array('FIELD' => 'TT.DEADLINE_AFTER', 'DEFAULT' => true), 'REPLICATE' => array('FIELD' => 'TT.REPLICATE', 'DEFAULT' => true), 'REPLICATE_PARAMS' => array('FIELD' => 'TT.REPLICATE_PARAMS', 'DEFAULT' => true), 'CREATED_BY' => array('FIELD' => 'TT.CREATED_BY', 'DEFAULT' => true), 'XML_ID' => array('FIELD' => 'TT.XML_ID', 'DEFAULT' => true), 'ALLOW_CHANGE_DEADLINE' => array('FIELD' => 'TT.ALLOW_CHANGE_DEADLINE', 'DEFAULT' => true), 'ALLOW_TIME_TRACKING' => array('FIELD' => 'TT.ALLOW_TIME_TRACKING', 'DEFAULT' => true), 'TASK_CONTROL' => array('FIELD' => 'TT.TASK_CONTROL', 'DEFAULT' => true), 'ADD_IN_REPORT' => array('FIELD' => 'TT.ADD_IN_REPORT', 'DEFAULT' => true), 'GROUP_ID' => array('FIELD' => 'TT.GROUP_ID', 'DEFAULT' => true), 'PARENT_ID' => array('FIELD' => 'TT.PARENT_ID', 'DEFAULT' => true), 'MULTITASK' => array('FIELD' => 'TT.MULTITASK', 'DEFAULT' => true), 'SITE_ID' => array('FIELD' => 'TT.SITE_ID', 'DEFAULT' => true), 'ACCOMPLICES' => array('FIELD' => 'TT.ACCOMPLICES', 'DEFAULT' => true), 'AUDITORS' => array('FIELD' => 'TT.AUDITORS', 'DEFAULT' => true), 'RESPONSIBLES' => array('FIELD' => 'TT.RESPONSIBLES', 'DEFAULT' => true), 'FILES' => array('FIELD' => 'TT.FILES', 'DEFAULT' => true), 'TAGS' => array('FIELD' => 'TT.TAGS', 'DEFAULT' => true), 'DEPENDS_ON' => array('FIELD' => 'TT.DEPENDS_ON', 'DEFAULT' => true), 'TASK_ID' => array('FIELD' => 'TT.TASK_ID', 'DEFAULT' => true), 'TPARAM_TYPE' => array('FIELD' => 'TT.TPARAM_TYPE', 'DEFAULT' => true), 'BASE_TEMPLATE_ID' => array('FIELD' => 'CASE WHEN TDD.' . Template\DependencyTable::getPARENTIDColumnName() . ' IS NULL THEN 0 ELSE TDD.' . Template\DependencyTable::getPARENTIDColumnName() . ' END', 'DEFAULT' => false), 'TEMPLATE_CHILDREN_COUNT' => array('FIELD' => 'CASE WHEN TEMPLATE_CHILDREN_COUNT IS NULL THEN 0 ELSE TEMPLATE_CHILDREN_COUNT END', 'DEFAULT' => false), 'CREATED_BY_NAME' => array('FIELD' => 'CU.NAME', 'DEFAULT' => true, 'ALWAYS' => true), 'CREATED_BY_LAST_NAME' => array('FIELD' => 'CU.LAST_NAME ', 'DEFAULT' => true, 'ALWAYS' => true), 'CREATED_BY_SECOND_NAME' => array('FIELD' => 'CU.SECOND_NAME', 'DEFAULT' => true, 'ALWAYS' => true), 'CREATED_BY_LOGIN' => array('FIELD' => 'CU.LOGIN', 'DEFAULT' => true, 'ALWAYS' => true), 'CREATED_BY_WORK_POSITION' => array('FIELD' => 'CU.WORK_POSITION', 'DEFAULT' => true, 'ALWAYS' => true), 'CREATED_BY_PHOTO' => array('FIELD' => 'CU.PERSONAL_PHOTO', 'DEFAULT' => true, 'ALWAYS' => true), 'RESPONSIBLE_NAME' => array('FIELD' => 'RU.NAME', 'DEFAULT' => true, 'ALWAYS' => true), 'RESPONSIBLE_LAST_NAME' => array('FIELD' => 'RU.LAST_NAME', 'DEFAULT' => true, 'ALWAYS' => true), 'RESPONSIBLE_SECOND_NAME' => array('FIELD' => 'RU.SECOND_NAME', 'DEFAULT' => true, 'ALWAYS' => true), 'RESPONSIBLE_LOGIN' => array('FIELD' => 'RU.LOGIN', 'DEFAULT' => true, 'ALWAYS' => true), 'RESPONSIBLE_WORK_POSITION' => array('FIELD' => 'RU.WORK_POSITION', 'DEFAULT' => true, 'ALWAYS' => true), 'RESPONSIBLE_PHOTO' => array('FIELD' => 'RU.PERSONAL_PHOTO', 'DEFAULT' => true, 'ALWAYS' => true)); $filterByBaseTemplate = false; $selectBaseTemplateId = false; $useChildrenCount = false; if (!is_array($arSelect)) { $arSelect = array(); } $defaultSelect = array(); $alwaysSelect = array(); foreach ($arFields as $field => $rule) { if ($rule['DEFAULT']) { $defaultSelect[] = $field; } if ($rule['ALWAYS']) { $alwaysSelect[] = $field; } } if (count($arSelect) <= 0) { $arSelect = $defaultSelect; } elseif (in_array("*", $arSelect)) { $arSelect = array_diff(array_merge($defaultSelect, $arSelect), array("*")); } $arSelect = array_merge($arSelect, $alwaysSelect); $selectBaseTemplateId = in_array('BASE_TEMPLATE_ID', $arSelect); $useChildrenCount = in_array('TEMPLATE_CHILDREN_COUNT', $arSelect); if (!is_array($arOrder)) { $arOrder = array(); } foreach ($arOrder as $field => $direction) { if ($field == 'BASE_TEMPLATE_ID') { $selectBaseTemplateId = true; } if ($field == 'TEMPLATE_CHILDREN_COUNT') { $useChildrenCount = true; } } if (!is_array($arFilter)) { $arFilter = array(); } if (!is_array($arParams)) { $arParams = array(); } foreach ($arFilter as $key => $value) { $keyParsed = CTasks::MkOperationFilter($key); if ($keyParsed['FIELD'] == 'BASE_TEMPLATE_ID') { $filterByBaseTemplate = true; } if ($keyParsed['FIELD'] == 'TEMPLATE_CHILDREN_COUNT') { $useChildrenCount = true; } } $includeSubtree = $arParams['INCLUDE_TEMPLATE_SUBTREE'] === true || $arParams['INCLUDE_TEMPLATE_SUBTREE'] === 'Y'; $excludeSubtree = $arParams['EXCLUDE_TEMPLATE_SUBTREE'] === true || $arParams['EXCLUDE_TEMPLATE_SUBTREE'] === 'Y'; $treeJoin = ''; if ($excludeSubtree) { $treeJoin = ""; } else { $treeJoin = "LEFT JOIN " . Template\DependencyTable::getTableName() . " TD on TT.ID = TD.TEMPLATE_ID" . ($includeSubtree ? "" : " AND TD.DIRECT = '1'"); } $temporalTableName = \Bitrix\Tasks\DB\Helper::getTemporaryTableNameSql(); $strFrom = "FROM\n\t\t\t\tb_tasks_template TT\n\n\t\t\t" . $treeJoin . "\n\n\t\t\t" . ($selectBaseTemplateId ? "\n\t\t\tLEFT JOIN\n\t\t\t\t" . Template\DependencyTable::getTableName() . " TDD ON TT.ID = TDD.TEMPLATE_ID AND TDD.DIRECT = '1'\n\t\t\t" : "\n\t\t\t") . "\n\n\t\t\t" . ($useChildrenCount ? "\n\t\t\t\tLEFT JOIN (\n\t\t\t\t\tSELECT TTI.ID, COUNT(TDDC.TEMPLATE_ID) AS TEMPLATE_CHILDREN_COUNT\n\t\t\t\t\tfrom\n\t\t\t\t\t\tb_tasks_template TTI\n\t\t\t\t\t\tINNER JOIN " . Template\DependencyTable::getTableName() . " TDDC ON TTI.ID = TDDC.PARENT_TEMPLATE_ID AND TDDC.DIRECT = '1'\n\t\t\t\t\tGROUP BY TTI.ID\n\t\t\t\t) " . $temporalTableName . " on " . $temporalTableName . ".ID = TT.ID\n\t\t\t" : "\n\t\t\t") . "\n\n\t\t\tLEFT JOIN\n\t\t\t\tb_user CU ON CU.ID = TT.CREATED_BY\n\t\t\tLEFT JOIN\n\t\t\t\tb_user RU ON RU.ID = TT.RESPONSIBLE_ID\n\t\t\t\n\t\t\t" . $obUserFieldsSql->GetJoin("TT.ID") . "\n\n\t\t\t" . (sizeof($arSqlSearch) ? "WHERE " . implode(" AND ", $arSqlSearch) : "") . " "; foreach ($arOrder as $by => $order) { $by = strtolower($by); $order = strtolower($order); if ($order != "asc") { $order = "desc"; } if ($by == "task") { $arSqlOrder[] = " TT " . $order . " "; } elseif ($by == "title") { $arSqlOrder[] = " TT.TITLE " . $order . " "; } elseif ($by == "depends_on") { $arSqlOrder[] = " TT.DEPENDS_ON " . $order . " "; } elseif ($by == "rand") { $arSqlOrder[] = CTasksTools::getRandFunction(); } elseif ($by === 'responsible_last_name') { $arSqlOrder[] = " RU.LAST_NAME " . $order . " "; } elseif ($by === 'tparam_type') { $arSqlOrder[] = " TT.TPARAM_TYPE " . $order . " "; } elseif ($by === 'template_children_count') { $arSqlOrder[] = " TEMPLATE_CHILDREN_COUNT " . $order . " "; } elseif ($by === 'base_template_id') { $arSqlOrder[] = " BASE_TEMPLATE_ID " . $order . " "; } elseif (substr($by, 0, 3) === 'uf_') { if ($s = $obUserFieldsSql->GetOrder($by)) { $arSqlOrder[$by] = " " . $s . " " . $order . " "; } } else { $arSqlOrder[] = " TT.ID " . $order . " "; $by = "id"; } if ($by !== 'rand' && !in_array(strtoupper($by), $arSelect)) { $arSelect[] = strtoupper($by); } } $strSqlOrder = ""; DelDuplicateSort($arSqlOrder); $arSqlOrderCnt = count($arSqlOrder); for ($i = 0; $i < $arSqlOrderCnt; $i++) { if ($i == 0) { $strSqlOrder = " ORDER BY "; } else { $strSqlOrder .= ","; } $strSqlOrder .= $arSqlOrder[$i]; } if (!in_array("ID", $arSelect)) { $arSelect[] = "ID"; } $arSqlSelect = array(); foreach ($arSelect as $field) { $field = strtoupper($field); if (array_key_exists($field, $arFields)) { $arSqlSelect[$field] = \Bitrix\Tasks\DB\Helper::wrapColumnWithFunction($arFields[$field]['FIELD'], $arFields[$field]['WRAP']) . " AS " . $field; } } if (!sizeof($arSqlSelect)) { $arSqlSelect = "TT.ID AS ID"; } else { $arSqlSelect = implode(",\n", $arSqlSelect); } $ufSelect = $obUserFieldsSql->GetSelect(); if (strlen($ufSelect)) { $arSqlSelect .= $ufSelect; } $strSql = "\n\t\t\tSELECT \n\t\t\t\t" . $arSqlSelect . "\n\t\t\t\t" . $strFrom . "\n\t\t\t\t" . $strSqlOrder; if (isset($arNavParams["NAV_PARAMS"]) && is_array($arNavParams["NAV_PARAMS"])) { $nTopCount = (int) $arNavParams['NAV_PARAMS']['nTopCount']; if ($nTopCount > 0) { $strSql = $DB->TopSql($strSql, $nTopCount); $res = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); $res->SetUserFields($USER_FIELD_MANAGER->GetUserFields("TASKS_TASK_TEMPLATE")); } else { $res_cnt = $DB->Query("SELECT COUNT(TT.ID) as C " . $strFrom); $res_cnt = $res_cnt->Fetch(); $res = new CDBResult(); $res->SetUserFields($USER_FIELD_MANAGER->GetUserFields("TASKS_TASK_TEMPLATE")); $res->NavQuery($strSql, $res_cnt["C"], $arNavParams["NAV_PARAMS"]); } } else { $res = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); $res->SetUserFields($USER_FIELD_MANAGER->GetUserFields("TASKS_TASK_TEMPLATE")); } return $res; }
die; } global $APPLICATION; //cache data $cache = new CPHPCache(); $cache_time = 3600 * 24 * 365; $detailurl = $_REQUEST["detail_url"]; $cache_path = '/mobile_cache/' . $action; $data = null; $action = $_REQUEST["mobile_action"]; $arStructure = array(); $arSections = array(); $curUserId = (int) $GLOBALS["USER"]->GetID(); CModule::IncludeModule('tasks'); $IBlockID = COption::GetOptionInt('intranet', 'iblock_structure', 0); $arSubDeps = CTasks::GetSubordinateDeps(); $withTags = $_REQUEST["tags"] == "N" ? "N" : "Y"; $cache_id = "mobileAction|get_subordinated_user_list|" . $curUserId . "|" . $detailurl . "|" . $withTags . '|' . md5(serialize($arSubDeps)) . '|' . time() . '|' . CSite::GetNameFormat(false); if ($cache->InitCache($cache_time, $cache_id, $cache_path)) { $cachedData = $cache->GetVars(); $data = $cachedData["DATA"]; $tableType = $cachedData["TYPE"]; } else { $GLOBALS["CACHE_MANAGER"]->StartTagCache($cache_path); $GLOBALS["CACHE_MANAGER"]->RegisterTag("sonet_user2group_U" . $curUserId); $GLOBALS["CACHE_MANAGER"]->RegisterTag("USER_CARD"); $GLOBALS["CACHE_MANAGER"]->RegisterTag("iblock_id_" . $IBlockID); $tmpData = array("NAME" => GetMessage("MD_EMPLOYEES_ALL"), "ID" => 0, "OUTSECTION" => true); if (SITE_CHARSET != "utf-8") { $tmpData = $APPLICATION->ConvertCharsetArray($tmpData, SITE_CHARSET, "utf-8"); }
public static function GetSubordinateSql($sAliasPrefix = "", $arParams = array()) { if (is_array($arParams) && isset($arParams['USER_ID'])) { $arDepsIDs = CTasks::GetSubordinateDeps($arParams['USER_ID']); } else { $arDepsIDs = CTasks::GetSubordinateDeps(); } if (sizeof($arDepsIDs)) { $rsDepartmentField = CUserTypeEntity::GetList(array(), array("ENTITY_ID" => "USER", "FIELD_NAME" => "UF_DEPARTMENT")); if ($arDepartmentField = $rsDepartmentField->Fetch()) { return CTasks::GetDeparmentSql($arDepsIDs, $sAliasPrefix); } } return false; }