Example #1
0
 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;
 }
Example #2
0
 /**
  * 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;
 }
Example #3
0
 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;
 }
Example #4
0
     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()':
Example #5
0
 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);
 }