- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/rest/controllers/scrum/sprint.php
- Класс: BitrixTasksRestControllersScrumSprint
- Вызов: Sprint::updateAction
public function updateAction(int $id, array $fields)
{
$id = (int) $id;
if (!$id)
{
$this->errorCollection->add([new Error('Sprint id not found')]);
return null;
}
$entityService = new EntityService();
$sprint = $entityService->getEntityById($id);
if (!$sprint->getId())
{
$this->errorCollection->add([new Error('Sprint not found')]);
return null;
}
if ($sprint->getEntityType() !== EntityForm::SPRINT_TYPE)
{
$this->errorCollection->add([new Error('Sprint not found')]);
return null;
}
if (!$this->checkAccess($sprint->getGroupId()))
{
$this->errorCollection->add([new Error('Access denied')]);
return null;
}
if (array_key_exists('groupId', $fields) && is_numeric($fields['groupId']))
{
$groupId = (int) $fields['groupId'];
$itemService = new ItemService();
$isGroupUpdatingAction = ($sprint->getGroupId() !== $groupId);
$hasSprintItems = (!empty($itemService->getItemIdsByEntityId($sprint->getId())));
if ($isGroupUpdatingAction && $hasSprintItems)
{
$this->errorCollection->add([new Error('It is forbidden move a sprint with items')]);
return null;
}
$sprint->setGroupId($groupId);
}
if (array_key_exists('name', $fields) && is_string($fields['name']))
{
$sprint->setName($fields['name']);
}
if (array_key_exists('sort', $fields) && is_numeric($fields['sort']))
{
$sprint->setSort((int) $fields['sort']);
}
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;
}
$sprint->setCreatedBy($createdBy);
}
$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;
}
}
$sprint->setModifiedBy($modifiedBy ?? $this->getUserId());
if (array_key_exists('dateStart', $fields))
{
$dateStart = $this->formatDateField($fields['dateStart']);
if ($dateStart === false)
{
$this->errorCollection->add([new Error('Incorrect dateStart format')]);
return null;
}
$sprint->setDateStart(DateTime::createFromTimestamp($dateStart));
}
if (array_key_exists('dateEnd', $fields))
{
$dateEnd = $this->formatDateField($fields['dateEnd']);
if ($dateEnd === false)
{
$this->errorCollection->add([new Error('Incorrect dateEnd format')]);
return null;
}
$sprint->setDateEnd(DateTime::createFromTimestamp($dateEnd));
}
$sprintService = new SprintService();
if (array_key_exists('status', $fields) && is_string($fields['status']))
{
$availableStatuses = [
EntityForm::SPRINT_ACTIVE,
EntityForm::SPRINT_PLANNED,
EntityForm::SPRINT_COMPLETED,
];
if (!in_array($fields['status'], $availableStatuses, true))
{
$this->errorCollection->add([new Error('Incorrect sprint status')]);
return null;
}
$sprint->setStatus($fields['status']);
$activeSprint = $sprintService->getActiveSprintByGroupId($sprint->getGroupId());
if (!$activeSprint->isEmpty() && $sprint->isActiveSprint())
{
$this->errorCollection->add([new Error('Unable to add two active sprint')]);
return null;
}
}
if (!$sprintService->changeSprint($sprint))
{
$this->errorCollection->add([new Error('Sprint not updated')]);
return null;
}
$sprint = $sprintService->getSprintById($sprint->getId());
return $sprint->toArray();
}