- Модуль: rpa
- Путь к файлу: ~/bitrix/modules/rpa/lib/controller/item.php
- Класс: BitrixRpaControllerItem
- Вызов: Item::prepareItemData
public function prepareItemData(BitrixRpaModelItem $item, array $params = []): array
{
$withDisplay = $params['withDisplay'] ?? false;
$withTasks = $params['withTasks'] ?? true;
$withPermissions = $params['withPermissions'] ?? true;
$withUsers = $params['withUsers'] ?? true;
$userPermissions = Driver::getInstance()->getUserPermissions();
$canModifyItemsInStage = $userPermissions->canModifyItemsInStage($item->getType(), $item->getStageId());
$canMoveFromStage = $userPermissions->canMoveFromStage($item->getType(), $item->getStageId());
$canMoveToStage = $userPermissions->canMoveToStage($item->getStage());
$data = [];
$data['id'] = $item->getId();
$data['stageId'] = $item->getStageId();
$data['previousStageId'] = $item->getPreviousStageId();
$data['name'] = $item->getName();
$data['typeId'] = $item->getType()->getId();
$data['createdBy'] = $item->getCreatedBy();
$data['updatedBy'] = $item->getUpdatedBy();
$data['movedBy'] = $item->getMovedBy();
$data['createdTime'] = $this->prepareDateTimeValue($item->getCreatedTime());
$data['updatedTime'] = $item->getUpdatedTime() ? $this->prepareDateTimeValue($item->getUpdatedTime()) : null;
$data['movedTime'] = $item->getMovedTime() ? $this->prepareDateTimeValue($item->getMovedTime()) : null;
$data['detailUrl'] = Driver::getInstance()->getUrlManager()->getItemDetailUrl(
$item->getType()->getId(),
$item->getId()
);
if($item->getStage())
{
$userFieldCollection = $item->getStage()->getUserFieldCollection();
}
else
{
$userFieldCollection = $item->getType()->getUserFieldCollection();
}
if(
$canModifyItemsInStage
|| $canMoveFromStage
|| ($canMoveToStage && $item->getMovedBy() === $userPermissions->getUserId())
)
{
foreach($userFieldCollection as $userField)
{
// if($userField->isVisible())
// {
$value = $this->prepareValue($userField, $item);
$data[$userField->getName()] = $value;
// }
}
}
if($withPermissions)
{
$hasEmptyNotEditableMandatoryFields = false;
if(!$canModifyItemsInStage)
{
foreach($userFieldCollection as $userField)
{
if(
$userField->isMandatory() &&
$item->isEmptyUserFieldValue($userField->getName()) &&
(!$userField->isVisible() || !$userField->isEditable())
)
{
$hasEmptyNotEditableMandatoryFields = true;
break;
}
}
}
$data['permissions'] = [
'draggable' => (
($canMoveFromStage && !$hasEmptyNotEditableMandatoryFields) ||
($canMoveToStage && $item->getMovedBy() === $userPermissions->getUserId())
),
'droppable' => ($canModifyItemsInStage || $canMoveFromStage || $canMoveToStage),
'canDelete' => $userPermissions->canDeleteItem($item),
];
}
if($withTasks)
{
$data['tasksCounter'] = 0;
$data['tasksFaces'] = [];
if ($item->getId())
{
$taskManager = Driver::getInstance()->getTaskManager();
if($taskManager)
{
$data['tasksCounter'] = $taskManager->getUserItemIncompleteCounter($item);
$data['tasksFaces'] = $taskManager->getItemFaces($item->getType()->getId(), $item->getId());
}
}
}
if($withDisplay)
{
$display = new Display($item->getType(), [
$item->getId() => $data,
]);
$data['display'] = $display->getValues($item->getId());
}
if($withUsers)
{
$userIds = $item->getUserIds();
if(isset($data['tasksFaces']['all']) && is_array($data['tasksFaces']['all']))
{
$userIds = array_merge($userIds, $data['tasksFaces']['all']);
}
$data['users'] = BitrixRpaComponentsBase::getUsers($userIds);
}
return $data;
}