Your IP : 216.73.216.86


Current Path : /var/www/homesaver/www/bitrix/modules/main/lib/grid/row/assembler/field/
Upload File :
Current File : /var/www/homesaver/www/bitrix/modules/main/lib/grid/row/assembler/field/uffieldassembler.php

<?php

namespace Bitrix\Main\Grid\Row\Assembler\Field;

use Bitrix\Main\Grid\Row\FieldAssembler;

class UfFieldAssembler extends FieldAssembler
{
	private string $entityId;
	private array $fields;

	public function __construct(string $entityId)
	{
		$this->entityId = $entityId;

		parent::__construct(
			array_keys(
				$this->getFields()
			)
		);
	}

	private function getFields(): array
	{
		global $USER_FIELD_MANAGER;

		/**
		 * @var \CUserTypeManager $USER_FIELD_MANAGER
		 */

		if (!isset($this->fields))
		{
			$this->fields = [];

			$fields = $USER_FIELD_MANAGER->GetUserFields($this->entityId);
			foreach ($fields as $field)
			{
				if ($field['SHOW_IN_LIST'] !== 'Y')
				{
					continue;
				}

				$this->fields[$field['FIELD_NAME']] = $field;
			}
		}

		return $this->fields;
	}

	protected function prepareRow(array $row): array
	{
		if (empty($this->getColumnIds()))
		{
			return $row;
		}

		$row['columns'] ??= [];

		foreach ($this->getColumnIds() as $columnId)
		{
			$row['columns'][$columnId] = $this->prepareUf($row['data'][$columnId] ?? null, $columnId);
		}

		return $row;
	}

	private function prepareUf(mixed $value, string $columnId)
	{
		$field = $this->getFields()[$columnId] ?? null;
		if (empty($field))
		{
			return $value;
		}

		$callback = $field['USER_TYPE']['VIEW_CALLBACK'] ?? null;
		if (is_callable($callback))
		{
			$field['VALUE'] = $value;

			return call_user_func($callback, $field);
		}

		return $value;
	}
}