Fields::getFieldItems

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. Fields
  4. getFieldItems
  • Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/webform/options/fields.php
  • Класс: Bitrix\Crm\WebForm\Options\Fields
  • Вызов: Fields::getFieldItems
protected function getFieldItems(array $field, array $data)
{
	$items = is_array($field['ITEMS']) ? $field['ITEMS'] : [];
	switch ($field['TYPE'])
	{
		case 'product':
			$items = array_map(
				function ($item) use ($field)
				{
					$data = [
						'label' => $item['VALUE'],
						'value' => $item['ID'],
						'selected' => ($item['SELECTED'] ?? 'N') === 'Y',
						'price' => $item['PRICE'] ?: 0,
						'discount' => $item['DISCOUNT'] ?: 0,
						'pics' => [],
						'quantity' => [],
						'changeablePrice' => isset($item['CUSTOM_PRICE'])
							&& $item['CUSTOM_PRICE'] === 'Y'
							&& WebForm\Manager::isOrdersAvailable(),
						//quantity: {min: 2, max: 50, step: 2, unit: 'unt.'},
						//'discount' => isset($item['discount']) ? $item['discount'] : 0,
					];

					if ($field['SETTINGS_DATA']['QUANTITY_MIN'])
					{
						$data['quantity']['min'] = $field['SETTINGS_DATA']['QUANTITY_MIN'];
					}
					if ($field['SETTINGS_DATA']['QUANTITY_MAX'])
					{
						$data['quantity']['max'] = $field['SETTINGS_DATA']['QUANTITY_MAX'];
					}
					if ($field['SETTINGS_DATA']['QUANTITY_STEP'])
					{
						$data['quantity']['step'] = $field['SETTINGS_DATA']['QUANTITY_STEP'];
					}
					if (!empty($item['QUANTITY']) && is_array($item['QUANTITY']))
					{
						$data['quantity']['min'] = $item['QUANTITY']['min'] ?? 1;
						$data['quantity']['max'] = $item['QUANTITY']['max'] ?? null;
						$data['quantity']['step'] = $item['QUANTITY']['step'] ?? 1;
						$data['quantity']['unit'] = $item['QUANTITY']['unit'] ?? null;
					}

					if (!$item['ID'] || (is_string($item['ID']) && !is_numeric($item['ID'])))
					{
						return $data;
					}

					$product = \CCrmProduct::getByID($item['ID']);
					if ($product)
					{
						if (!empty($product['MEASURE']))
						{
							static $measures;
							if (!is_array($measures))
							{
								$measures = Crm\Measure::getMeasures();
								$measures = array_combine(
									array_column($measures, 'ID'),
									array_column($measures, 'SYMBOL')
								);
							}
							if (isset($measures[$product['MEASURE']]))
							{
								$data['quantity']['unit'] = $measures[$product['MEASURE']];
							}
						}
					}

					$pics = [];
					if (Main\Loader::includeModule('catalog'))
					{
						$repositoryFacade = Catalog\v2\IoC\ServiceContainer::getRepositoryFacade();
						if ($repositoryFacade)
						{
							$variation = $repositoryFacade->loadVariation($item['ID']);
							if ($variation)
							{
								foreach ($variation->getImageCollection()->toArray() as $file)
								{
									if (empty($file['SRC']))
									{
										continue;
									}

									$uri = $file['SRC'];
									if (!preg_match('/^http(s?):/i', $uri))
									{
										$uri = Main\Web\WebPacker\Builder::getDefaultSiteUri() . $uri;
									}

									$pics[] = $uri;
								}
							}
						}
					}

					if (!$pics)
					{
						$fileId = null;
						$useBigPic = ($field['SETTINGS_DATA']['BIG_PIC'] ?? 'N') === 'Y';
						if ($product['DETAIL_PICTURE'] && $useBigPic)
						{
							$fileId = $product['DETAIL_PICTURE'];
						}
						elseif (!$product['PREVIEW_PICTURE'] && $product['DETAIL_PICTURE'])
						{
							$fileId = $product['DETAIL_PICTURE'];
						}
						elseif ($product['PREVIEW_PICTURE'])
						{
							$fileId = $product['PREVIEW_PICTURE'];
						}

						if ($fileId)
						{
							$file = \CFile::getByID($fileId)->fetch();
							if ($file)
							{
								$uri = $file['~src'];
								if (empty($uri))
								{
									$uri = \CFile::GetFileSRC($file);
									if (!preg_match('/^http(s?):/i', $uri))
									{
										$uri = Main\Web\WebPacker\Builder::getDefaultSiteUri() . $uri;
									}
								}
								$pics[] = $uri;
							}
						}
					}

					$data['pics'] = $pics;

					return $data;
				},
				$items
			);
			if ($field['required'] && count($items) === 1)
			{
				$items[0]['selected'] = true;
			}
			return $items;

		default:
			$isListableType = isset(WebForm\Helper::getFieldListableTypes()[$field['TYPE']]);
			if (!$isListableType && (!isset($data['ITEMS']) || !is_array($data['ITEMS'])))
			{
				return [];
			}

			$result = array_map(
				function ($item) use ($field)
				{
					$result = [
						'label' => $item['VALUE'],
						'value' => $item['ID'],
						'selected' => ($item['SELECTED'] ?? 'N') === 'Y' || $field['VALUE'] === $item['ID'],
						//'discount' => isset($item['discount']) ? $item['discount'] : 0,
						//'pics' => [],
						//quantity: {min: 2, max: 50, step: 2, unit: 'unt.'},
					];

					$disabled = ($item['DISABLED'] ?? 'N') === 'Y';
					if ($disabled)
					{
						$result['disabled'] = $disabled;
					}

					return $result;
				},
				$items
			);

			if (!$this->editMode)
			{
				$result = array_values(array_filter(
					$result,
					function ($item)
					{
						return empty($item['disabled']);
					}
				));
			}

			return $result;
	}
}

Добавить комментарий