1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
ImageRepository.php
См. документацию.
1<?php
2
3namespace Bitrix\Catalog\v2\Image;
4
5use Bitrix\Catalog\v2\BaseEntity;
6use Bitrix\Catalog\v2\BaseIblockElementEntity;
7use Bitrix\Main\FileTable;
8use Bitrix\Main\Result;
9
19{
21 protected $factory;
22 protected array $loadedFiles = [];
23
25 {
26 $this->factory = $factory;
27 }
28
29 public function getEntityById(int $id, string $type = null): ?BaseEntity
30 {
31 if ($id <= 0)
32 {
33 throw new \OutOfRangeException($id);
34 }
35
36 $entities = $this->getEntitiesBy([
37 'filter' => [
38 '=ID' => $id,
39 ],
40 'limit' => 1,
41 ], $type);
42
43 return reset($entities) ?: null;
44 }
45
46 public function getEntitiesBy($params, string $type = null): array
47 {
48 $entities = [];
49
50 foreach ($this->getList((array)$params) as $item)
51 {
52 $entities[] = $this->createEntity($item, $type);
53 }
54
55 return $entities;
56 }
57
58 public function save(BaseEntity ...$entities): Result
59 {
60 return new Result();
61 }
62
63 public function delete(BaseEntity ...$entities): Result
64 {
65 foreach ($entities as $entity)
66 {
67 \CFile::Delete($entity->getId());
68 }
69
70 return new Result();
71 }
72
74 {
75 $collection = $this->factory->createCollection();
76 if ($element->isNew())
77 {
78 return $collection;
79 }
80
81 $items = [];
82
83 $previewValue = (int)$element->getField(PreviewImage::CODE);
84 if ($previewValue > 0)
85 {
86 $previewEntity = $this->getEntityById($previewValue, ImageFactory::PREVIEW_IMAGE);
87 if ($previewEntity)
88 {
89 $items[] = $previewEntity;
90 }
91 }
92
93 $detailValue = (int)$element->getField(DetailImage::CODE);
94 if ($detailValue > 0)
95 {
96 $detailEntity = $this->getEntityById($detailValue, ImageFactory::DETAIL_IMAGE);
97 if ($detailEntity)
98 {
99 $items[] = $detailEntity;
100 }
101 }
102
103 foreach ($this->getMorePhotoEntities($element) as $item)
104 {
105 $items[] = $item;
106 }
107
108 if (!empty($items))
109 {
110 $collection->add(...$items);
111 }
112
113 return $collection;
114 }
115
116 private function getMorePhotoEntities(BaseIblockElementEntity $element): array
117 {
118 $morePhotos = [];
119 $property = $element->getPropertyCollection()->findByCodeLazy(MorePhotoImage::CODE);
120 if (!$property)
121 {
122 return [];
123 }
124
125 $morePhotoValueCollection = $property->getPropertyValueCollection();
126 $morePhotoIds = $morePhotoValueCollection->getValues();
127 if (empty($morePhotoIds))
128 {
129 return [];
130 }
131 $fields = $this->getList([
132 'filter' => [
133 '=ID' => $morePhotoIds,
134 ],
135 ]);
136 if (empty($fields))
137 {
138 return [];
139 }
140
141
142 $fields = array_combine(array_column($fields, 'ID'), $fields);
144 foreach ($morePhotoValueCollection as $value)
145 {
146 $fileId = (int)$value->getValue();
147 if ($fileId > 0 && isset($fields[$fileId]))
148 {
149 $fileFields = $fields[$fileId];
150 if (empty($fileFields))
151 {
152 continue;
153 }
154 $fileFields['PROPERTY_VALUE_ID'] = $value->getId();
155 $morePhotos[] = $this->createEntity($fileFields);
156 }
157 }
158
159 return $morePhotos;
160 }
161
162 protected function getList(array $params): array
163 {
164 $idsFromFilter = $params['filter']['=ID'] ?? null;
165 $files = [];
166 if ($this->loadedFiles && $idsFromFilter)
167 {
168 if (!is_array($idsFromFilter))
169 {
170 $idsFromFilter = [$idsFromFilter];
171 }
172 foreach ($idsFromFilter as $idFromFilterKey => $idFromFilter)
173 {
174 if (isset($this->loadedFiles[$idFromFilter]))
175 {
176 $files[] = $this->loadedFiles[$idFromFilter];
177 unset($idsFromFilter[$idFromFilterKey]);
178 }
179 }
180 if (empty($idsFromFilter))
181 {
182 return $files;
183 }
184 $params['filter']['=ID'] = $idsFromFilter;
185 }
186 unset($idsFromFilter);
187
188 $filesRaw = FileTable::getList($params);
189 while ($file = $filesRaw->fetch())
190 {
191 $file['SRC'] = \CFile::getFileSRC($file);
192 $file['FILE_STRUCTURE'] = $file;
193 $files[] = $file;
194 $this->loadedFiles[$file['ID']] = $file;
195 }
196
197 return $files;
198 }
199
200 protected function createEntity(array $fields = [], string $type = null): BaseImage
201 {
202 $entity = $this->factory->createEntity($type);
203
204 $entity->initFields($fields);
205
206 return $entity;
207 }
208}
$type
Определения options.php:106
getField(string $name)
Определения BaseEntity.php:119
createEntity(array $fields=[], string $type=null)
Определения ImageRepository.php:200
getEntityById(int $id, string $type=null)
Определения ImageRepository.php:29
save(BaseEntity ... $entities)
Определения ImageRepository.php:58
getCollectionByParent(BaseIblockElementEntity $element)
Определения ImageRepository.php:73
__construct(ImageFactory $factory)
Определения ImageRepository.php:24
getEntitiesBy($params, string $type=null)
Определения ImageRepository.php:46
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$entity
$files
Определения mysql_to_pgsql.php:30
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799
$items
Определения template.php:224
$fields
Определения yandex_run.php:501