• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/rest/controllers/scrum/sprint.php
  • Класс: BitrixTasksRestControllersScrumSprint
  • Вызов: Sprint::addAction
public function addAction(array $fields)
{
	$groupId = array_key_exists('groupId', $fields) ? (int) $fields['groupId'] : 0;
	if (!$groupId)
	{
		$this->errorCollection->add([new Error('Group id not found')]);

		return null;
	}

	if (!$this->checkAccess($groupId))
	{
		$this->errorCollection->add([new Error('Access denied')]);

		return null;
	}

	$name = array_key_exists('name', $fields) ? (string) $fields['name'] : '';
	$sort = array_key_exists('sort', $fields) ? (int) $fields['sort'] : 0;

	$createdBy = 0;
	if (array_key_exists('createdBy', $fields) && is_numeric($fields['createdBy']))
	{
		$createdBy = (int) $fields['createdBy'];
		if (!$this->existsUser($createdBy))
		{
			$this->errorCollection->add([new Error('createdBy user not found')]);

			return null;
		}
	}
	$createdBy = $createdBy ?? $this->getUserId();

	$modifiedBy = 0;
	if (array_key_exists('modifiedBy', $fields) && is_numeric($fields['modifiedBy']))
	{
		$modifiedBy = (int) $fields['modifiedBy'];
		if (!$this->existsUser($modifiedBy))
		{
			$this->errorCollection->add([new Error('modifiedBy user not found')]);

			return null;
		}
	}
	$modifiedBy = $modifiedBy ?? $this->getUserId();

	$dateStart = array_key_exists('dateStart', $fields) ? $this->formatDateField($fields['dateStart']) : false;
	if ($dateStart === false)
	{
		$this->errorCollection->add([new Error('Incorrect dateStart format')]);

		return null;
	}

	$dateEnd = array_key_exists('dateEnd', $fields) ? $this->formatDateField($fields['dateEnd']) : false;
	if ($dateEnd === false)
	{
		$this->errorCollection->add([new Error('Incorrect dateEnd format')]);

		return null;
	}

	$status = array_key_exists('status', $fields) ? (string) $fields['status'] : '';

	$availableStatuses = [
		EntityForm::SPRINT_ACTIVE,
		EntityForm::SPRINT_PLANNED,
		EntityForm::SPRINT_COMPLETED,
	];
	if (!in_array($status, $availableStatuses, true))
	{
		$this->errorCollection->add([new Error('Incorrect sprint status')]);

		return null;
	}

	$sprint = new EntityForm();

	$sprint->setGroupId($groupId);
	$sprint->setName($name);
	$sprint->setSort($sort);
	$sprint->setCreatedBy($createdBy);
	$sprint->setModifiedBy($modifiedBy);
	$sprint->setDateStart(DateTime::createFromTimestamp($dateStart));
	$sprint->setDateEnd(DateTime::createFromTimestamp($dateEnd));
	$sprint->setStatus($status);

	$sprintService = new SprintService();

	$activeSprint = $sprintService->getActiveSprintByGroupId($groupId);
	if (!$activeSprint->isEmpty() && $sprint->isActiveSprint())
	{
		$this->errorCollection->add([new Error('Unable to add two active sprint')]);

		return null;
	}

	$sprint = $sprintService->createSprint($sprint);

	$sprint = $sprintService->getSprintById($sprint->getId());

	if (!empty($sprintService->getErrors()))
	{
		$this->errorCollection->add([new Error('Unable to add sprint')]);

		return null;
	}

	return $sprint->toArray();
}