public function add($data, $parameters = array()) { global $DB, $USER; $result = array(); if (!$USER->IsAuthorized()) { throw new Tasks\Exception("Authentication is required."); } $title = isset($data["title"]) ? trim($data["title"]) : ""; $responsible = isset($data["responsible"]) ? intval($data["responsible"]) : $USER->GetID(); $deadline = isset($data["deadline"]) && $DB->FormatDate($data["deadline"], \CSite::GetDateFormat("FULL")) ? $data["deadline"] : ""; $description = isset($data["description"]) ? trim($data["description"]) : ""; $project = isset($data["project"]) ? intval($data["project"]) : 0; $nameTemplate = isset($data["nameTemplate"]) ? trim($data["nameTemplate"]) : ""; $ganttMode = isset($data["ganttMode"]) && $data["ganttMode"] === "true"; if (strlen($nameTemplate) > 0) { preg_match_all("/(#NAME#)|(#NOBR#)|(#\\/NOBR#)|(#LAST_NAME#)|(#SECOND_NAME#)|(#NAME_SHORT#)|(#SECOND_NAME_SHORT#)|\\s|\\,/", $nameTemplate, $matches); $nameTemplate = implode("", $matches[0]); } else { $nameTemplate = \CSite::GetNameFormat(false); } $fields = array("TITLE" => $title, "DESCRIPTION" => $description, "RESPONSIBLE_ID" => $responsible, "DEADLINE" => $deadline, "SITE_ID" => $data["siteId"], "GROUP_ID" => $project, "NAME_TEMPLATE" => $nameTemplate, 'DESCRIPTION_IN_BBCODE' => "Y"); $taskItem = \CTaskItem::add($fields, $USER->GetId()); $task = $taskItem->getData(); $task["GROUP_NAME"] = ""; if ($task["GROUP_ID"]) { $socGroup = \CSocNetGroup::GetByID($task["GROUP_ID"]); if ($socGroup) { $task["GROUP_NAME"] = $socGroup["~NAME"]; } } \Bitrix\Main\FinderDestTable::merge(array("CONTEXT" => "TASK_RESPONSIBLE", "CODE" => array("U" . $task["RESPONSIBLE_ID"], "SG" . $task["GROUP_ID"]))); $taskId = $taskItem->getId(); $arPaths = array("PATH_TO_TASKS_TASK" => isset($data["pathToTask"]) ? trim($data["pathToTask"]) : "", "PATH_TO_USER_PROFILE" => isset($data["pathToUser"]) ? trim($data["pathToUser"]) : "", "PATH_TO_USER_TASKS_TASK" => isset($data["pathToUserTasksTask"]) ? trim($data["pathToUserTasksTask"]) : ""); $columnsOrder = null; if (isset($data["columnsOrder"]) && is_array($data["columnsOrder"])) { $columnsOrder = array_map("intval", $data["columnsOrder"]); } $order = isset($data["order"]) && checkSerializedData($data["order"]) ? unserialize($data["order"]) : array(); $filter = isset($data["filter"]) && checkSerializedData($data["filter"]) ? unserialize($data["filter"]) : array(); $navigation = isset($data["navigation"]) && checkSerializedData($data["navigation"]) ? unserialize($data["navigation"]) : array(); $select = isset($data["select"]) && checkSerializedData($data["select"]) ? unserialize($data["select"]) : array(); $result["taskRaw"] = $task; $result["taskId"] = $task["ID"]; $result["taskPath"] = \CComponentEngine::MakePathFromTemplate($arPaths["PATH_TO_TASKS_TASK"], array("task_id" => $task["ID"], "action" => "view")); $result["position"] = $this->getTaskPosition($taskId, $order, $filter, $navigation, $select); if ($ganttMode) { $result["task"] = $this->getJson($task, $arPaths, $nameTemplate); } else { $result["html"] = $this->getHtml($task, $arPaths, $nameTemplate, $columnsOrder); } return $result; }
/** * Add a new task */ public function add(array $data, array $parameters = array()) { global $USER; $result = array(); // todo: teach CTaskItem::add() accept CHECLIST, REMINDER, ... $task = \CTaskItem::add($data, $USER->GetId()); if ($parameters['RETURN_OPERATION_RESULT_DATA']) { $result['DATA']['TASK'] = $task->getData(false); // todo: some additional info here, like CHECKLIST, REMINDER, ...? $result['CAN']['TASK']['ACTION'] = static::translateAllowedActionNames($task->getAllowedActions()); } else { $result['DATA']['TASK']['ID'] = $task->getId(); } return $result; }
protected static function doAdd($userId, array $data, array $parameters, Collection $errors) { $task = \CTaskItem::add($data, $userId); $taskID = $task->getId(); if ($taskID) { if (is_array($data[static::SE_PREFIX . 'CHECKLIST']) && !empty($data[static::SE_PREFIX . 'CHECKLIST'])) { // add checklist here } if ($data["ADD_TO_TIMEMAN"] == "Y") { \CTaskPlannerMaintance::plannerActions(array('add' => array($taskID))); } } return $task; }
foreach ($arUserFields as $arUserField) { if ($arUserField['EDIT_IN_LIST'] !== 'Y') { continue; } if (!array_key_exists($arUserField['FIELD_NAME'], $arAction['taskData'])) { continue; } $value = $arAction['taskData'][$arUserField['FIELD_NAME']]; if ($arUserField['MULTIPLE'] === 'Y' && !is_array($value)) { $arAction['taskData'][$arUserField['FIELD_NAME']] = array($value); } } $arErrors = array(); $justCreatedTaskId = false; try { $oTask = CTaskItem::add($arAction['taskData'], $loggedInUserId); $justCreatedTaskId = $oTask->getId(); } catch (Exception $e) { if ($e->GetCode() & TasksException::TE_FLAG_SERIALIZED_ERRORS_IN_MESSAGE) { $arErrors = unserialize($e->GetMessage()); } else { $arErrors[] = array('text' => 'UNKNOWN ERROR OCCURED', 'id' => 'ERROR_TASKS_UNKNOWN'); } } $arCurOperationResult = array('returnValue' => null, 'justCreatedTaskId' => $justCreatedTaskId, 'errors' => $arErrors); if ($justCreatedTaskId === false) { $breakExecution = true; } break; case 'CTaskItem::getData()': case 'CTaskItem::getTaskData()':
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); }