1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
folder.php
См. документацию.
1<?php
2namespace Bitrix\Landing\Internals;
3
4use Bitrix\Landing\Manager;
5use Bitrix\Main\Localization\Loc;
6use Bitrix\Main\Entity;
7
8Loc::loadMessages(__FILE__);
9
26class FolderTable extends Entity\DataManager
27{
31 const ACTION_TYPE_ADD = 'add';
32
36 const ACTION_TYPE_UPDATE = 'update';
37
42 public static function getTableName()
43 {
44 return 'b_landing_folder';
45 }
46
51 public static function getMap()
52 {
53 return array(
54 'ID' => new Entity\IntegerField('ID', array(
55 'primary' => true,
56 'autocomplete' => true,
57 'title' => 'ID'
58 )),
59 'PARENT_ID' => new Entity\IntegerField('PARENT_ID', array(
60 'title' => Loc::getMessage('LANDING_TABLE_FIELD_FOLDER_PARENT_ID')
61 )),
62 'SITE_ID' => new Entity\IntegerField('SITE_ID', array(
63 'title' => Loc::getMessage('LANDING_TABLE_FIELD_FOLDER_SITE_ID'),
64 'required' => true
65 )),
66 'INDEX_ID' => new Entity\IntegerField('INDEX_ID', array(
67 'title' => Loc::getMessage('LANDING_TABLE_FIELD_FOLDER_INDEX_ID')
68 )),
69 'ACTIVE' => new Entity\StringField('ACTIVE', array(
70 'title' => Loc::getMessage('LANDING_TABLE_FIELD_FOLDER_ACTIVE'),
71 'default_value' => 'N'
72 )),
73 'DELETED' => new Entity\StringField('DELETED', array(
74 'title' => Loc::getMessage('LANDING_TABLE_FIELD_FOLDER_DELETED'),
75 'default_value' => 'N'
76 )),
77 'TITLE' => new Entity\StringField('TITLE', array(
78 'title' => Loc::getMessage('LANDING_TABLE_FIELD_FOLDER_TITLE'),
79 'required' => true
80 )),
81 'CODE' => new Entity\StringField('CODE', array(
82 'title' => Loc::getMessage('LANDING_TABLE_FIELD_FOLDER_CODE'),
83 'required' => true
84 )),
85 'CREATED_BY_ID' => new Entity\IntegerField('CREATED_BY_ID', array(
86 'title' => Loc::getMessage('LANDING_TABLE_FIELD_CREATED_BY_ID'),
87 'required' => true
88 )),
89 'MODIFIED_BY_ID' => new Entity\IntegerField('MODIFIED_BY_ID', array(
90 'title' => Loc::getMessage('LANDING_TABLE_FIELD_MODIFIED_BY_ID'),
91 'required' => true
92 )),
93 'DATE_CREATE' => new Entity\DatetimeField('DATE_CREATE', array(
94 'title' => Loc::getMessage('LANDING_TABLE_FIELD_DATE_CREATE'),
95 'required' => true
96 )),
97 'DATE_MODIFY' => new Entity\DatetimeField('DATE_MODIFY', array(
98 'title' => Loc::getMessage('LANDING_TABLE_FIELD_DATE_MODIFY'),
99 'required' => true
100 ))
101 );
102 }
103
110 protected static function prepareChange(Entity\Event $event, string $actionType): Entity\EventResult
111 {
112 $result = new Entity\EventResult();
113 $primary = $event->getParameter('primary');
114 $fields = $event->getParameter('fields');
115 $modifyFields = [];
116
117 // check that index landing is exists in folder's site
118 /*if ($fields['INDEX_ID'] ?? 0)
119 {
120 if (!array_key_exists('SITE_ID', $fields))
121 {
122 $fields['SITE_ID'] = self::getList([
123 'select' => [
124 'SITE_ID'
125 ],
126 'filter' => [
127 'ID' => $primary['ID'] ?? 0
128 ]
129 ])->fetch()['SITE_ID'] ?? 0;
130 }
131 $res = LandingTable::getList([
132 'select' => [
133 'ID'
134 ],
135 'filter' => [
136 'SITE_ID' => $fields['SITE_ID'],
137 'ID' => $fields['INDEX_ID'],
138 'FOLDER_ID' => $primary['ID'] ?? 0
139 ]
140 ]);
141 if (!$res->fetch())
142 {
143 $result->setErrors([
144 new Entity\EntityError(
145 Loc::getMessage('LANDING_TABLE_ERROR_FOLDER_INDEX_OUT_OF_SITE'),
146 'FOLDER_INDEX_OUT_OF_SITE'
147 )
148 ]);
149 return $result;
150 }
151 }*/
152
153 // translit the code from title
154 if (
155 $actionType == self::ACTION_TYPE_ADD && array_key_exists('TITLE', $fields) &&
156 (!array_key_exists('CODE', $fields) || trim($fields['CODE']) == '')
157 )
158 {
159 $fields['CODE'] = \CUtil::translit(
160 trim($fields['TITLE']),
161 LANGUAGE_ID,
162 [
163 'replace_space' => '',
164 'replace_other' => ''
165 ]
166 );
167 if (!$fields['CODE'])
168 {
169 $fields['CODE'] = Manager::getRandomString(12);
170 }
171 $modifyFields['CODE'] = $fields['CODE'];
172 }
173
174 // for update always we need the code
175 if (isset($primary['ID']) && !array_key_exists('CODE', $fields))
176 {
177 $res = self::getList([
178 'select' => [
179 'CODE'
180 ],
181 'filter' => [
182 'ID' => $primary['ID']
183 ]
184 ]);
185 if ($row = $res->fetch())
186 {
187 $fields['CODE'] = $row['CODE'];
188 }
189 }
190
191 // check unique folder
192 if (
193 array_key_exists('CODE', $fields) &&
194 array_key_exists('SITE_ID', $fields) &&
195 \Bitrix\Landing\Landing::isCheckUniqueAddress()
196 )
197 {
198 $filter = [
199 '=CODE' => $fields['CODE'],
200 'SITE_ID' => $fields['SITE_ID'],
201 'PARENT_ID' => $fields['PARENT_ID'] ?? null
202 ];
203 if (isset($primary['ID']))
204 {
205 $filter['!ID'] = $primary['ID'];
206 }
207 $res = self::getList([
208 'select' => [
209 'ID'
210 ],
211 'filter' => $filter
212 ]);
213 if ($res->fetch())
214 {
215 $result->setErrors([
217 Loc::getMessage('LANDING_TABLE_ERROR_FOLDER_IS_NOT_UNIQUE'),
218 'FOLDER_IS_NOT_UNIQUE'
219 )
220 ]);
221 return $result;
222 }
223 }
224
225 // check correct folder path
226 if (array_key_exists('CODE', $fields))
227 {
228 if (mb_strpos($fields['CODE'], '/') !== false)
229 {
230 $result->setErrors([
232 Loc::getMessage('LANDING_TABLE_ERROR_FOLDER_SLASH_IS_NOT_ALLOWED'),
233 'SLASH_IS_NOT_ALLOWED'
234 )
235 ]);
236 return $result;
237 }
238 }
239
240 $result->modifyFields($modifyFields);
241
242 return $result;
243 }
244
251 {
252 return self::prepareChange($event, self::ACTION_TYPE_ADD);
253 }
254
261 {
262 return self::prepareChange($event, self::ACTION_TYPE_UPDATE);
263 }
264}
static onBeforeUpdate(Entity\Event $event)
Определения folder.php:260
static getMap()
Определения folder.php:51
static prepareChange(Entity\Event $event, string $actionType)
Определения folder.php:110
const ACTION_TYPE_UPDATE
Определения folder.php:36
static onBeforeAdd(Entity\Event $event)
Определения folder.php:250
const ACTION_TYPE_ADD
Определения folder.php:31
static getTableName()
Определения folder.php:42
static getRandomString(int $length)
Определения manager.php:556
Определения event.php:5
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$res
Определения filter_act.php:7
$result
Определения get_property_values.php:14
$filter
Определения iblock_catalog_list.php:54
Определения agent.php:3
Определения ufield.php:9
$event
Определения prolog_after.php:141
$fields
Определения yandex_run.php:501