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