/** * Do some post-processing of result of calling particular methods. * This method is only for rest purposes * * @access private */ public static function postProcessRestRequest($methodName, $result, $parameters = array()) { if (!is_array($parameters)) { $parameters = array(); } $originResult = $result; if ($methodName == 'getfiles') { $result = array('UF_TASK_WEBDAV_FILES' => $result); // translate file UF values $result = UserField::postProcessValues($result, array('FIELDS' => static::getEntityUserFields(), 'SERVER' => $parameters['SERVER'])); $result = $result['UF_TASK_WEBDAV_FILES']; } if ($methodName == 'addfile') { if (intval($result)) { $result = array('UF_TASK_WEBDAV_FILES' => array($result)); // translate file UF values $result = UserField::postProcessValues($result, array('FIELDS' => static::getEntityUserFields(), 'SERVER' => $parameters['SERVER'])); if (isset($result['UF_TASK_WEBDAV_FILES'][0])) { $result = $result['UF_TASK_WEBDAV_FILES'][0]; } else { return $originResult; } } } if ($methodName == 'getdata') { // CTaskItem::getData() does not return tags, but we want them in rest if (!empty($result) && intval($result['ID'])) { $result['TAGS'] = array(); // at this point we know we already have access to this task, so no rights check needed. use simple get list here $res = CTaskTags::GetList(array(), array('TASK_ID' => $result['ID'])); while ($item = $res->fetch()) { $result['TAGS'][] = $item['NAME']; } } // translate file UF values $result = UserField::postProcessValues($result, array('FIELDS' => static::getEntityUserFields(), 'SERVER' => $parameters['SERVER'])); } return $result; }
public static function GetList($arOrder, $arFilter) { global $DB; $arSqlSearch = array_filter(CTaskTags::GetFilter($arFilter)); $strSql = "\n\t\t\tSELECT\n\t\t\t\tTT.*\n\t\t\tFROM\n\t\t\t\tb_tasks_tag TT\n\t\t\t" . (sizeof($arSqlSearch) ? "WHERE " . implode(" AND ", $arSqlSearch) : "") . "\n\t\t"; if (!is_array($arOrder)) { $arOrder = array(); } foreach ($arOrder as $by => $order) { $by = strtolower($by); $order = strtolower($order); if ($order != "asc") { $order = "desc"; } if ($by == "task") { $arSqlOrder[] = " TT.TASK_ID " . $order . " "; } elseif ($by == "user") { $arSqlOrder[] = " TT.USER_ID " . $order . " "; } elseif ($by == "name") { $arSqlOrder[] = " TT.NAME " . $order . " "; } elseif ($by == "rand") { $arSqlOrder[] = CTasksTools::getRandFunction(); } else { $arSqlOrder[] = " TT.TASK_ID " . $order . " "; } } $strSqlOrder = ""; DelDuplicateSort($arSqlOrder); $arSqlOrderCnt = count($arSqlOrder); for ($i = 0; $i < $arSqlOrderCnt; $i++) { if ($i == 0) { $strSqlOrder = " ORDER BY "; } else { $strSqlOrder .= ","; } $strSqlOrder .= $arSqlOrder[$i]; } $strSql .= $strSqlOrder; //echo $strSql; return $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); }
function OnSearchReindex($NS = array(), $oCallback = NULL, $callback_method = "") { $arResult = array(); $arOrder = array('ID' => 'ASC'); $arFilter = array(); if (isset($NS['MODULE']) && $NS['MODULE'] === 'tasks' && isset($NS['ID']) && $NS['ID'] > 0) { $arFilter['>ID'] = (int) $NS['ID']; } else { $arFilter['>ID'] = 0; } $rsTasks = CTasks::GetList($arOrder, $arFilter); while ($arTask = $rsTasks->Fetch()) { $rsTags = CTaskTags::GetList(array(), array("TASK_ID" => $arTask["ID"])); $arTags = array(); while ($arTag = $rsTags->Fetch()) { $arTags[] = $arTag["NAME"]; } $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 ($arTask["GROUP_ID"] > 0) { $path = str_replace("#group_id#", $arTask["GROUP_ID"], COption::GetOptionString("tasks", "paths_task_group_entry", "/workgroups/group/#group_id#/tasks/task/view/#task_id#/", $arTask["SITE_ID"])); } else { $path = str_replace("#user_id#", $arTask["RESPONSIBLE_ID"], COption::GetOptionString("tasks", "paths_task_user_entry", "/company/personal/user/#user_id#/tasks/task/view/#task_id#/", $arTask["SITE_ID"])); } $path = str_replace("#task_id#", $arTask["ID"], $path); $arPermissions = CTasks::__GetSearchPermissions($arTask); $Result = array("ID" => $arTask["ID"], "LAST_MODIFIED" => $arTask["CHANGED_DATE"] ? $arTask["CHANGED_DATE"] : $arTask["CREATED_DATE"], "TITLE" => $arTask["TITLE"], "BODY" => strip_tags($arTask["DESCRIPTION"]) ? strip_tags($arTask["DESCRIPTION"]) : $arTask["TITLE"], "TAGS" => implode(",", $arTags), "URL" => $path, "SITE_ID" => $arTask["SITE_ID"], "PERMISSIONS" => $arPermissions); if ($oCallback) { $index_res = call_user_func(array($oCallback, $callback_method), $Result); if (!$index_res) { return $Result["ID"]; } } else { $arResult[] = $Result; } CTasks::UpdateForumTopicIndex($arTask["FORUM_TOPIC_ID"], "U", $arTask["RESPONSIBLE_ID"], "tasks", "view_all", $path, $arPermissions, $arTask["SITE_ID"]); } if ($oCallback) { return false; } return $arResult; }
/** * @param $userId * @param $arOrder * @param $arFilter * @param array $arParams * @param array $arSelect * @throws TasksException * @return array $arReturn with elements * <ul> * <li>$arReturn[0] - array of items * <li>$arReturn[1] - CDBResult * </ul> */ public static function fetchList($userId, $arOrder, $arFilter, $arParams = array(), $arSelect = array()) { $arItems = array(); try { $arParamsOut = array('USER_ID' => $userId, 'bIgnoreErrors' => true); if (isset($arParams['nPageTop'])) { $arParamsOut['nPageTop'] = $arParams['nPageTop']; } elseif (isset($arParams['NAV_PARAMS'])) { $arParamsOut['NAV_PARAMS'] = $arParams['NAV_PARAMS']; } $arFilter['CHECK_PERMISSIONS'] = 'Y'; // Always check permissions if (!empty($arSelect)) { $arSelect = array_merge($arSelect, array('ID', 'STATUS', 'REAL_STATUS', 'RESPONSIBLE_ID', 'CREATED_BY', 'GROUP_ID')); } $arItemsData = array(); $arTasksIDs = array(); $rsData = CTasks::getList($arOrder, $arFilter, $arSelect, $arParamsOut); if (!is_object($rsData)) { throw new TasksException(); } while ($arData = $rsData->fetch()) { $taskId = (int) $arData['ID']; $arTasksIDs[] = $taskId; $arData['AUDITORS'] = array(); $arData['ACCOMPLICES'] = array(); $arItemsData[$taskId] = $arData; } if (is_array($arTasksIDs) && !empty($arTasksIDs)) { // fill ACCOMPLICES and AUDITORS $rsMembers = CTaskMembers::GetList(array(), array('TASK_ID' => $arTasksIDs)); if (!is_object($rsMembers)) { throw new TasksException(); } while ($arMember = $rsMembers->fetch()) { $taskId = (int) $arMember['TASK_ID']; if (in_array($taskId, $arTasksIDs, true)) { if ($arMember['TYPE'] === 'A') { $arItemsData[$taskId]['ACCOMPLICES'][] = $arMember['USER_ID']; } elseif ($arMember['TYPE'] === 'U') { $arItemsData[$taskId]['AUDITORS'][] = $arMember['USER_ID']; } } } // fill tags if (isset($arParams['LOAD_TAGS']) && $arParams['LOAD_TAGS']) { foreach ($arTasksIDs as $taskId) { $arItemsData[$taskId]['TAGS'] = array(); } $rsTags = CTaskTags::getList(array(), array('TASK_ID' => $arTasksIDs)); if (!is_object($rsTags)) { throw new TasksException(); } while ($arTag = $rsTags->fetch()) { $taskId = (int) $arTag['TASK_ID']; if (in_array($taskId, $arTasksIDs, true)) { $arItemsData[$taskId]['TAGS'][] = $arTag['NAME']; } } } } } catch (Exception $e) { CTaskAssert::logError('[0xa819f6f1] probably SQL error at ' . $e->getFile() . ':' . $e->getLine()); throw new TasksException('', TasksException::TE_SQL_ERROR | TasksException::TE_ACTION_FAILED_TO_BE_PROCESSED); } foreach ($arItemsData as $arItemData) { $arItems[] = self::constructWithPreloadedData($userId, $arItemData); } return array($arItems, $rsData); }
} } foreach ($_POST["oldNames"] as $key => $value) { if ($_POST["oldNames"][$key] != $_POST["newNames"][$key]) { CTaskTags::Rename($_POST["oldNames"][$key], $_POST["newNames"][$key], $USER->GetID()); } } } if (sizeof($_POST["deleted"])) { $rsDeletedTags = CTaskTags::GetList(array(), array("USER_ID" => $USER->GetID(), "NAME" => $_POST["deleted"])); while ($arTag = $rsDeletedTags->Fetch()) { if (!in_array($arTag["TASK_ID"], $arAffectedTasks)) { $arAffectedTasks[] = $arTag["TASK_ID"]; } } CTaskTags::Delete(array("USER_ID" => $USER->GetID(), "NAME" => $_POST["deleted"])); } if (CModule::IncludeModule('search') && sizeof($arAffectedTasks)) { $rsTasks = CTasks::GetList(array(), array("ID" => $arAffectedTasks)); while ($arTask = $rsTasks->Fetch()) { $rsTaskTags = CTaskTags::GetList(array(), array("TASK_ID" => $arTask["ID"])); $arTags = array(); while ($tag = $rsTaskTags->Fetch()) { $arTags[] = $tag["NAME"]; } CTasks::Index($arTask, $arTags); } } CMain::FinalActions(); // to make events work on bitrix24 }
<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die; } $arResult["USER_TAGS"] = array(); if (!CModule::IncludeModule("tasks")) { ShowError(GetMessage("TASKS_MODULE_NOT_FOUND")); return; } $dbRes = CTaskTags::getTagsNamesByUserId($USER->getId()); $arResult["~USER_TAGS"] = $arResult["USER_TAGS"] = array(); while ($tag = $dbRes->GetNext()) { $arResult["USER_TAGS"][] = $tag["NAME"]; $arResult["~USER_TAGS"][] = $tag["~NAME"]; } if (isset($arParams["VALUE"]) && $arParams["VALUE"]) { if (!is_array($arParams["VALUE"])) { $arResult["VALUE"] = explode(",", $arParams["VALUE"]); $arResult["~VALUE"] = explode(",", $arParams["~VALUE"]); } else { $arResult["VALUE"] = $arParams["VALUE"]; $arResult["~VALUE"] = $arParams["~VALUE"]; } } else { $arResult["VALUE"] = $arResult["~VALUE"] = array(); } if (sizeof($arResult["VALUE"]) > 0) { $arResult["VALUE"] = array_map("trim", $arResult["VALUE"]); $arResult["~VALUE"] = array_map("trim", $arResult["~VALUE"]); }