...Человеческий поиск в разработке...
- Модуль: 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; } }