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