• Модуль: 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;
	}
}