private static function getFilesAttachedInAccessibleTemplates($userId) { $arAccessibleFilesIds = array(); // Array of accessible files ids $rsTemplate = CTaskTemplates::GetList(array(), array('CREATED_BY' => $userId)); while ($arTemplate = $rsTemplate->Fetch()) { $arTemplate['FILES'] = unserialize($arTemplate['FILES']); if (is_array($arTemplate['FILES'])) { foreach ($arTemplate['FILES'] as $fileId) { $arAccessibleFilesIds[] = (int) $fileId; } } } return array_unique($arAccessibleFilesIds); }
protected function getChildTemplateData($templateId) { $templateId = (int) $templateId; if (!$templateId) { return array(); } // template id not set $subTasksToCreate = array(); $res = CTaskTemplates::GetList(array('BASE_TEMPLATE_ID' => 'asc'), array('BASE_TEMPLATE_ID' => $templateId), false, array('INCLUDE_TEMPLATE_SUBTREE' => true), array('*', 'UF_*', 'BASE_TEMPLATE_ID')); while ($item = $res->fetch()) { if ($item['ID'] == $templateId) { continue; } $subTasksToCreate[$item['ID']] = $item; } // get check lists $res = \Bitrix\Tasks\Template\CheckListItemTable::getListByTemplateDependency($templateId, array('order' => array('SORT' => 'ASC'), 'select' => array('ID', 'TEMPLATE_ID', 'IS_COMPLETE', 'SORT_INDEX', 'TITLE'))); while ($item = $res->fetch()) { if (isset($subTasksToCreate[$item['TEMPLATE_ID']])) { $clId = $item['ID']; $tmpId = $item['TEMPLATE_ID']; unset($item['ID']); unset($item['TEMPLATE_ID']); $subTasksToCreate[$tmpId]['CHECK_LIST'][$clId] = $item; } } return $subTasksToCreate; }
if (array_key_exists('DESCRIPTION', $arData)) { $arData['DESCRIPTION'] = CTasksTools::SanitizeHtmlDescriptionIfNeed($arData['DESCRIPTION']); } if (array_key_exists('~DESCRIPTION', $arData)) { $arData['~DESCRIPTION'] = CTasksTools::SanitizeHtmlDescriptionIfNeed($arData['~DESCRIPTION']); } } else { $arData['META:DESCRIPTION_FOR_BBCODE'] = $arData['DESCRIPTION']; $parser = new CTextParser(); $arData['~DESCRIPTION'] = $parser->convertText($arData['META:DESCRIPTION_FOR_BBCODE']); $arData['DESCRIPTION'] = $arData['~DESCRIPTION']; } $arResult["DATA"] = $arData; // base template, if any if (intval($arResult["DATA"]['BASE_TEMPLATE_ID'])) { $baseTemplate = CTaskTemplates::GetList(array(), array("ID" => $arResult["DATA"]['BASE_TEMPLATE_ID']), array(), array('USER_ID' => $USER->getId()), array('*'))->GetNext(); if (is_array($baseTemplate)) { $arResult["DATA"]['BASE_TEMPLATE_DATA'] = $baseTemplate; } else { unset($arResult["DATA"]['BASE_TEMPLATE_ID']); } } // groups $rsGroups = CSocNetGroup::GetList(array("NAME" => "ASC"), array("SITE_ID" => SITE_ID)); $arResult["GROUPS"] = array(); $groupIDs = array(); while ($group = $rsGroups->GetNext()) { $arResult["GROUPS"][$group["ID"]] = $group; $groupIDs[] = $group["ID"]; } if (sizeof($groupIDs) > 0) {
CModule::IncludeModule('tasks'); __IncludeLang(dirname(__FILE__) . '/lang/' . LANGUAGE_ID . '/' . basename(__FILE__)); $SITE_ID = isset($_GET["SITE_ID"]) ? $_GET["SITE_ID"] : SITE_ID; if ($_REQUEST['MODE'] == 'SEARCH') { CUtil::JSPostUnescape(); $APPLICATION->RestartBuffer(); $search = $_REQUEST['SEARCH_STRING']; $arFilter = array("%TITLE" => $search, "!TPARAM_TYPE" => CTaskTemplates::TYPE_FOR_NEW_USER); $arGetListParams = array('USER_ID' => $GLOBALS['USER']->GetID()); if (isset($_GET["FILTER"])) { $arFilter = array_merge($arFilter, $_GET["FILTER"]); } $totalTasksToBeSelected = 10; if (intval($_REQUEST['TEMPLATE_ID'])) { $arFilter['BASE_TEMPLATE_ID'] = intval($_REQUEST['TEMPLATE_ID']); $arFilter['!=ID'] = intval($_REQUEST['TEMPLATE_ID']); // do not link to itself $arGetListParams['EXCLUDE_TEMPLATE_SUBTREE'] = true; // do not link to it`s subtree } $dbRes = CTaskTemplates::GetList(array('TITLE' => 'ASC'), $arFilter, array('NAV_PARAMS' => array('nTopCount' => 10)), $arGetListParams, array('ID', 'TITLE')); $arTasks = array(); while ($arRes = $dbRes->fetch()) { $arTasks[] = array("ID" => $arRes["ID"], "TITLE" => $arRes["TITLE"], "STATUS" => CTasks::STATE_PENDING); } header('Content-Type: application/x-javascript; charset=' . LANG_CHARSET); echo CUtil::PhpToJsObject($arTasks); CMain::FinalActions(); // to make events work on bitrix24 die; }
} elseif (isset($arParams["ORDER"])) { $arOrder = $arParams["ORDER"]; } else { $arOrder = array("TITLE" => "ASC"); } $arResult["ORDER"] = $arOrder; if (!is_array($arResult["FILTER"])) { $arResult["FILTER"] = array(); } if (is_array($arParams['FILTER'])) { $arResult["FILTER"] = $arParams['FILTER']; } else { $arResult["FILTER"] = array('BASE_TEMPLATE_ID' => intval($arParams['BASE_TEMPLATE_ID']) ? intval($arParams['BASE_TEMPLATE_ID']) : 0); } // filtering by user is always performed $arResult["FILTER"]["CREATED_BY"] = (int) $arParams['USER_ID']; $rsTemplates = CTaskTemplates::GetList($arOrder, $arResult["FILTER"], array('NAV_PARAMS' => array('nPageSize' => intval($arParams["ITEMS_COUNT"]) > 0 ? $arParams["ITEMS_COUNT"] : 10, 'bDescPageNumbering' => false)), array('USER_ID' => $USER->getId()), array('*', 'TEMPLATE_CHILDREN_COUNT', 'BASE_TEMPLATE_ID')); $arResult["NAV_STRING"] = $rsTemplates->GetPageNavString(GetMessage("TASKS_TITLE_TEMPLATES"), "arrows"); $arResult["NAV_PARAMS"] = $rsTemplates->GetNavParams(); $arResult["TEMPLATES"] = array(); while ($template = $rsTemplates->GetNext()) { $arResult["TEMPLATES"][] = $template; } if ($arParams["SET_TITLE"] == "Y") { $APPLICATION->SetTitle(GetMessage("TASKS_TITLE_MY_TEMPLATES")); } if ($arParams["SET_NAVCHAIN"] != "N") { $APPLICATION->AddChainItem(CUser::FormatName($arParams["NAME_TEMPLATE"], $arResult["USER"]), CComponentEngine::MakePathFromTemplate($arParams["~PATH_TO_USER_PROFILE"], array("user_id" => $arParams["USER_ID"]))); $APPLICATION->AddChainItem(GetMessage("TASKS_TITLE_TEMPLATES")); } $this->IncludeComponentTemplate();
function GetByID($ID, $arParams = array()) { if (!intval($ID)) { $dbResult = new CDBResult(); $dbResult->InitFromArray(array()); return $dbResult; } return CTaskTemplates::GetList(array(), array("ID" => $ID), array(), $arParams, array('*', 'UF_*')); }
/** * @deprecated * * This function is deprecated and strongly discouraged to be used. * But it will not be removed, because some agents can be still active for * using this function in future for at least one year. * Current date is: 06 Oct 2012, Sat. Code written, but updater not builded. * * @param $TASK_ID * @param string $time * @return string originally always returns an empty string */ function RepeatTask($TASK_ID, $time = "") { $rsTemplate = CTaskTemplates::GetList(array(), array('TASK_ID' => (int) $TASK_ID)); if (!($arTemplate = $rsTemplate->Fetch())) { return ''; } // Redirect call to new function if (isset($arTemplate['ID']) && $arTemplate['ID'] > 0) { self::RepeatTaskByTemplateId((int) $arTemplate['ID']); } return ''; }
if (!empty($arGroupsIDs)) { $rsGroups = CSocNetGroup::GetList(array("ID" => "ASC"), array("ID" => $arGroupsIDs)); while ($arGroup = $rsGroups->GetNext()) { $arGroup["EXPANDED"] = array_key_exists($arGroup["ID"], $arOpenedProjects) && $arOpenedProjects[$arGroup["ID"]] == "false" ? false : true; $arResult["GROUPS"][$arGroup["ID"]] = $arGroup; } } $arResult["CHILDREN_COUNT"] = array(); $rsChildrenCount = CTasks::GetChildrenCount($arFilter, $arTasksIDs); if ($rsChildrenCount) { while ($arChildrenCount = $rsChildrenCount->Fetch()) { $arResult["CHILDREN_COUNT"]["PARENT_" . $arChildrenCount["PARENT_ID"]] = $arChildrenCount["CNT"]; } } $arResult["UPDATES_COUNT"] = CTasks::GetUpdatesCount($arViewed); $rsTemplates = CTaskTemplates::GetList(array("ID" => "DESC"), array("CREATED_BY" => $USER->GetID(), 'BASE_TEMPLATE_ID' => false, '!TPARAM_TYPE' => CTaskTemplates::TYPE_FOR_NEW_USER), array('NAV_PARAMS' => array('nTopCount' => 10))); $arResult["TEMPLATES"] = array(); while ($template = $rsTemplates->GetNext()) { $arResult["TEMPLATES"][] = $template; } $sTitle = ""; if ($taskType == "group") { $sTitle = $sTitleShort = GetMessage("TASKS_TITLE_GROUP_TASKS"); } else { if ($arParams["USER_ID"] == $USER->GetID()) { $sTitle = $sTitleShort = GetMessage("TASKS_TITLE_MY_TASKS"); } else { $sTitle = CUser::FormatName($arParams["NAME_TEMPLATE"], $arResult["USER"], true, false) . ": " . GetMessage("TASKS_TITLE_TASKS"); $sTitleShort = GetMessage("TASKS_TITLE_TASKS"); } }
$arPaths['PATH_TO_TASKS_TASK'] = $_POST['path_to_task']; } if (isset($_POST['path_to_user'])) { $arPaths['PATH_TO_USER_PROFILE'] = $_POST['path_to_user']; } if (isset($_POST['path_to_user_tasks_task'])) { $arPaths['PATH_TO_USER_TASKS_TASK'] = $_POST['path_to_user_tasks_task']; } if (isset($_POST['path_to_templates_template'])) { $arPaths['PATH_TO_TEMPLATES_TEMPLATE'] = $_POST['path_to_templates_template']; } $arOrder = $_POST["order"] ? $_POST["order"] : array(); $arFilter = $_POST["filter"] ? $_POST["filter"] : array(); $arFilter["BASE_TEMPLATE_ID"] = intval($_POST["id"]); $depth = intval($_POST["depth"]) + 1; $res = CTaskTemplates::GetList($arOrder, $arFilter, false, array('USER_ID' => $USER->getId()), array('*', 'TEMPLATE_CHILDREN_COUNT', 'BASE_TEMPLATE_ID')); $templates = array(); while ($template = $res->GetNext()) { $templates[$template["ID"]] = $template; } $APPLICATION->RestartBuffer(); Header('Content-Type: text/html; charset=' . LANG_CHARSET); //$arGroups = array(); $i = 0; $iMax = count($templates); $bIsJSON = $_POST["type"] === "json"; if ($bIsJSON) { echo "["; } foreach ($templates as $template) { ++$i;
if ($isUserAuthorized) { CModule::IncludeModule("tasks"); $arParams = array('FILE_ID' => false, 'TEMPLATE_ID' => false, 'TASK_ID' => false); if (isset($_GET['fid'])) { $arParams['FILE_ID'] = (int) $_GET['fid']; } if (isset($_GET['tid'])) { $arParams['TEMPLATE_ID'] = (int) $_GET['tid']; } if (isset($_GET['TASK_ID'])) { $arParams['TASK_ID'] = (int) $_GET['TASK_ID']; } $bFound = false; if ($arParams["FILE_ID"] > 0) { if ($arParams["TEMPLATE_ID"]) { $rsTemplate = CTaskTemplates::GetList(array(), array("ID" => $arParams["TEMPLATE_ID"], "CREATED_BY" => $USER->GetID())); if ($arTemplate = $rsTemplate->Fetch()) { $arTemplate["FILES"] = unserialize($arTemplate["FILES"]); if (is_array($arTemplate["FILES"]) && in_array($arParams["FILE_ID"], $arTemplate["FILES"])) { $bFound = true; } } } else { if ($arParams['TASK_ID']) { if (CTaskFiles::isUserfieldFileAccessibleByUser($arParams['TASK_ID'], $arParams['FILE_ID'], $USER->GetID())) { $bFound = true; } } if (!$bFound && CTaskFiles::isFileAccessibleByUser((int) $arParams["FILE_ID"], $USER->GetID())) { $bFound = true; }
if (is_array($arParams["FILTER"])) { $arFilter = array_merge($arFilter, $arParams["FILTER"]); } if (intval($arParams['TEMPLATE_ID'])) { $arFilter['BASE_TEMPLATE_ID'] = intval($arParams['TEMPLATE_ID']); $arFilter['!=ID'] = intval($arParams['TEMPLATE_ID']); // do not link to itself $arGetListParams['EXCLUDE_TEMPLATE_SUBTREE'] = true; // do not link to it`s subtree } $dbRes = CTaskTemplates::GetList($arOrder, $arFilter, $arNavParams, $arGetListParams, $arSelect); $arResult["LAST_TEMPLATES"] = array(); while ($arRes = $dbRes->GetNext()) { $arResult["LAST_TEMPLATES"][] = $arRes; } // current templates if (!is_array($arParams['VALUE'])) { $arParams['VALUE'] = explode(',', $arParams['VALUE']); } foreach ($arParams['VALUE'] as $key => $ID) { $arParams['VALUE'][$key] = intval(trim($ID)); } $arParams['VALUE'] = array_unique($arParams['VALUE']); $arResult["CURRENT_TEMPLATES"] = array(); if (sizeof($arParams["VALUE"])) { $dbRes = CTaskTemplates::GetList(array('TITLE' => 'ASC'), array('ID' => $arParams['VALUE'], '!TPARAM_TYPE' => CTaskTemplates::TYPE_FOR_NEW_USER), false, $arGetListParams); while ($arRes = $dbRes->GetNext()) { $arResult["CURRENT_TEMPLATES"][] = $arRes; } } $this->IncludeComponentTemplate();
if ($arTemplate = $rsTemplate->fetch()) { $arLinkedTemplate = $arTemplate; } } } else { // Try to found this template in already fetched templates foreach ($arResult['TEMPLATES'] as &$arTemplate) { if ($arTemplate['TASK_ID'] == $arParams['TASK_ID']) { $arLinkedTemplate = $arTemplate; break; } } unset($arTemplate); // Template not found in fetched? Take it from DB if ($arLinkedTemplate === null) { $rsTemplate = CTaskTemplates::GetList(array(), array('TASK_ID' => $arParams['TASK_ID']), array(), array(), array('ID', 'TASK_ID', 'REPLICATE_PARAMS')); if ($arTemplate = $rsTemplate->fetch()) { $arLinkedTemplate = $arTemplate; } } } if ($arLinkedTemplate !== null) { if (isset($arLinkedTemplate['~REPLICATE_PARAMS'])) { $arLinkedTemplate['REPLICATE_PARAMS'] = unserialize($arLinkedTemplate['~REPLICATE_PARAMS']); } else { $arLinkedTemplate['REPLICATE_PARAMS'] = unserialize($arLinkedTemplate['REPLICATE_PARAMS']); } $arTask['TEMPLATE'] = $arTask['FORKED_BY_TEMPLATE'] = $arLinkedTemplate; } $arResult["TASK"] = $arTask; $arTasksIDs = array($arTask['ID']);
function lambda_sgkrg455d_funcCreateSubtasks($arFields, $arAllResponsibles, $index, $loggedInUserId, $woStepper = false, $parameters = array()) { $allResponsiblesCount = count($arAllResponsibles); $arResponsibles = array_slice($arAllResponsibles, $index); $cutoffTime = microtime(true) + 5; foreach ($arResponsibles as $responsible) { $arFields['RESPONSIBLE_ID'] = $responsible; ++$index; try { $arFieldsToSave = $arFields; // transform UF files if (is_array($arFieldsToSave['UF_TASK_WEBDAV_FILES']) && !empty($arFieldsToSave['UF_TASK_WEBDAV_FILES']) && \Bitrix\Main\Loader::includeModule('disk')) { // find which files are new and which are old $old = array(); $new = array(); foreach ($arFieldsToSave['UF_TASK_WEBDAV_FILES'] as $fileId) { if ((string) $fileId) { if (strpos($fileId, 'n') === 0) { $new[] = $fileId; } else { $old[] = $fileId; } } } if (!empty($old)) { $userFieldManager = \Bitrix\Disk\Driver::getInstance()->getUserFieldManager(); $old = $userFieldManager->cloneUfValuesFromAttachedObject($old, $loggedInUserId); if (is_array($old) && !empty($old)) { $new = array_merge($new, $old); } } $arFieldsToSave['UF_TASK_WEBDAV_FILES'] = $new; } $oTask = CTaskItem::add($arFieldsToSave, $loggedInUserId); // Save checklist data $GLOBALS['APPLICATION']->IncludeComponent("bitrix:tasks.task.detail.parts", ".default", array('MODE' => 'JUST AFTER TASK CREATED', 'BLOCKS' => array("checklist"), 'TASK_ID' => (int) $oTask->getId()), null, array('HIDE_ICONS' => 'Y')); // copy child tasks if ($parameters['COPY_PARAMS']['COPY_CHILD_TASKS'] && intval($parameters['COPY_PARAMS']['ORIGIN_TASK'])) { $parentTaskInstance = CTaskItem::getInstance(intval($parameters['COPY_PARAMS']['ORIGIN_TASK']), $loggedInUserId); $parentTaskInstance->duplicateChildTasks($oTask); // task access rights check inside } // create child tasks by child templates if ($parameters['COPY_PARAMS']['COPY_CHILD_TEMPLATES'] && intval($parameters['COPY_PARAMS']['ORIGIN_TEMPLATE'])) { // get template to ensure we own it... $templateData = CTaskTemplates::GetList(false, array('ID' => intval($parameters['COPY_PARAMS']['ORIGIN_TEMPLATE'])), false, array('USER_ID' => $loggedInUserId))->fetch(); if (is_array($templateData)) { $oTask->addChildTasksByTemplate(intval($parameters['COPY_PARAMS']['ORIGIN_TEMPLATE'])); // task access rights check inside } } } catch (Exception $e) { } // Timeout only if multistepper can be used if (!$woStepper && microtime(true) > $cutoffTime) { break; } } if ($woStepper) { $needStep = false; } else { $needStep = true; if ($index >= $allResponsiblesCount) { $needStep = false; } } return array($needStep, $index, $allResponsiblesCount); }