- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/copy/integration/groupstepper.php
- Класс: BitrixTasksCopyIntegrationGroupStepper
- Вызов: GroupStepper::execute
public function execute(array &$option)
{
if (!Loader::includeModule(self::$moduleId))
{
return false;
}
try
{
$queue = $this->getQueue();
$this->setQueue($queue);
$queueOption = $this->getOptionData($this->baseName);
if (empty($queueOption))
{
$this->deleteQueueOption();
return !$this->isQueueEmpty();
}
$executiveUserId = ($queueOption["executiveUserId"] ?? 0);
$groupId = ($queueOption["groupId"] ?? 0);
$copiedGroupId = ($queueOption["copiedGroupId"] ?? 0);
$errorOffset = ($queueOption["errorOffset"] ?? 0);
$limit = 3;
$offset = $this->getOffset($executiveUserId, $copiedGroupId) + $errorOffset;
$tasksIds = $this->getTasksIdsByGroupId($executiveUserId, $groupId);
$count = count($tasksIds);
$tasksIds = array_slice($tasksIds, $offset, $limit);
$mapIdsCopiedStages = ($queueOption["mapIdsCopiedStages"] ?? []);
$mapIdsCopiedTasks = ($queueOption["mapIdsCopiedTasks"] ?? []);
$features = ($queueOption["features"] ?? []);
$projectTerm = $queueOption["projectTerm"] ?? [];
if ($tasksIds)
{
$option["count"] = $count;
$taskCopyManager = new TaskManager($executiveUserId, $tasksIds);
$taskCopyManager->setTargetGroup($copiedGroupId);
$taskCopyManager->setMapIdsCopiedStages($mapIdsCopiedStages);
$taskCopyManager->setProjectTerm($projectTerm);
if (!in_array("checklists", $features))
{
$taskCopyManager->markChecklist(false);
}
if (!in_array("comments", $features))
{
$taskCopyManager->markComment(false);
}
$result = $taskCopyManager->startCopy();
if (!$result->isSuccess())
{
$queueOption["errorOffset"] += $this->getErrorOffset($taskCopyManager);
}
$mapIdsCopiedTasks = $taskCopyManager->getMapIdsCopiedTasks() + $mapIdsCopiedTasks;
$queueOption["mapIdsCopiedTasks"] = $mapIdsCopiedTasks;
$this->saveQueueOption($queueOption);
$option["steps"] = $offset;
return true;
}
else
{
$this->onAfterCopy($queueOption);
$this->deleteQueueOption();
return !$this->isQueueEmpty();
}
}
catch (Exception $exception)
{
$this->logger->collect("Error while copying a group. Reason: {$exception->getMessage()}");
$this->deleteQueueOption();
return false;
}
}