102 public const SELECT = self::SECTION_CHOOSER_SELECT;
103 public const DROPDOWNS = self::SECTION_CHOOSER_DROPDOWNS;
104 public const PATH = self::SECTION_CHOOSER_PATH;
105 public const SIMPLE = self::RIGHTS_SIMPLE;
109 public const INVALID = self::PROPERTY_INDEX_INVALID;
127 return Iblock::class;
139 'data_type' =>
'integer',
141 'autocomplete' =>
true,
142 'title' => Loc::getMessage(
'IBLOCK_ENTITY_ID_FIELD'),
145 'data_type' =>
'datetime',
146 'default_value' =>
function()
151 'title' => Loc::getMessage(
'IBLOCK_ENTITY_TIMESTAMP_X_FIELD'),
153 'IBLOCK_TYPE_ID' => [
154 'data_type' =>
'string',
156 'title' => Loc::getMessage(
'IBLOCK_ENTITY_IBLOCK_TYPE_ID_FIELD'),
157 'validation' =>
function()
165 'data_type' =>
'string',
166 'validation' =>
function()
174 'data_type' =>
'string',
175 'title' => Loc::getMessage(
'IBLOCK_ENTITY_CODE_FIELD'),
176 'validation' =>
function()
186 ->configureValues(
'N',
'Y')
187 ->configureDefaultValue(
'N'),
189 'data_type' =>
'string',
191 'title' => Loc::getMessage(
'IBLOCK_ENTITY_NAME_FIELD'),
192 'validation' =>
function()
200 'data_type' =>
'boolean',
201 'values' => [
'N',
'Y'],
202 'title' => Loc::getMessage(
'IBLOCK_ENTITY_ACTIVE_FIELD'),
205 'data_type' =>
'integer',
206 'title' => Loc::getMessage(
'IBLOCK_ENTITY_SORT_FIELD'),
209 'data_type' =>
'string',
210 'title' => Loc::getMessage(
'IBLOCK_ENTITY_LIST_PAGE_URL_FIELD'),
211 'validation' =>
function()
218 'DETAIL_PAGE_URL' => [
219 'data_type' =>
'string',
220 'title' => Loc::getMessage(
'IBLOCK_ENTITY_DETAIL_PAGE_URL_FIELD'),
221 'validation' =>
function()
228 'SECTION_PAGE_URL' => [
229 'data_type' =>
'string',
230 'title' => Loc::getMessage(
'IBLOCK_ENTITY_SECTION_PAGE_URL_FIELD'),
231 'validation' =>
function()
238 'CANONICAL_PAGE_URL' => [
239 'data_type' =>
'string',
240 'title' => Loc::getMessage(
'IBLOCK_ENTITY_CANONICAL_PAGE_URL_FIELD'),
241 'validation' =>
function()
249 'data_type' =>
'integer',
250 'title' => Loc::getMessage(
'IBLOCK_ENTITY_PICTURE_FIELD'),
253 'data_type' =>
'string',
254 'title' => Loc::getMessage(
'IBLOCK_ENTITY_DESCRIPTION_FIELD'),
256 'DESCRIPTION_TYPE' => [
257 'data_type' =>
'enum',
262 'default_value' => self::TYPE_TEXT,
263 'title' => Loc::getMessage(
'IBLOCK_ENTITY_DESCRIPTION_TYPE_FIELD'),
266 'data_type' =>
'string',
267 'title' => Loc::getMessage(
'IBLOCK_ENTITY_XML_ID_FIELD'),
268 'validation' =>
function()
276 'data_type' =>
'string',
277 'title' => Loc::getMessage(
'IBLOCK_ENTITY_TMP_ID_FIELD'),
278 'validation' =>
function()
286 'data_type' =>
'boolean',
287 'values' => [
'N',
'Y'],
288 'title' => Loc::getMessage(
'IBLOCK_ENTITY_INDEX_ELEMENT_FIELD'),
291 'data_type' =>
'boolean',
292 'values' => [
'N',
'Y'],
293 'title' => Loc::getMessage(
'IBLOCK_ENTITY_INDEX_SECTION_FIELD'),
296 'data_type' =>
'boolean',
297 'values' => [
'N',
'Y'],
298 'title' => Loc::getMessage(
'IBLOCK_ENTITY_WORKFLOW_FIELD'),
301 'data_type' =>
'boolean',
302 'values' => [
'N',
'Y'],
303 'title' => Loc::getMessage(
'IBLOCK_ENTITY_BIZPROC_FIELD'),
305 'SECTION_CHOOSER' => [
306 'data_type' =>
'enum',
308 self::SECTION_CHOOSER_SELECT,
309 self::SECTION_CHOOSER_DROPDOWNS,
310 self::SECTION_CHOOSER_PATH
312 'default_value' => self::SECTION_CHOOSER_SELECT,
313 'title' => Loc::getMessage(
'IBLOCK_ENTITY_SECTION_CHOOSER_FIELD'),
316 'data_type' =>
'enum',
317 'values' => [self::LIST_MODE_COMBINED, self::LIST_MODE_SEPARATE],
318 'default_value' => self::LIST_MODE_COMBINED,
319 'title' => Loc::getMessage(
'IBLOCK_ENTITY_LIST_MODE_FIELD'),
322 'data_type' =>
'enum',
323 'values' => [self::RIGHTS_SIMPLE, self::RIGHTS_EXTENDED],
324 'default_value' => self::RIGHTS_SIMPLE,
325 'title' => Loc::getMessage(
'IBLOCK_ENTITY_RIGHTS_MODE_FIELD'),
327 'SECTION_PROPERTY' => [
328 'data_type' =>
'boolean',
329 'values' => [
'N',
'Y'],
330 'title' => Loc::getMessage(
'IBLOCK_ENTITY_SECTION_PROPERTY_FIELD'),
332 'PROPERTY_INDEX' => [
333 'data_type' =>
'enum',
334 'values' => [self::PROPERTY_INDEX_DISABLE, self::PROPERTY_INDEX_ENABLE, self::PROPERTY_INDEX_INVALID],
335 'default' => self::PROPERTY_INDEX_DISABLE,
336 'title' => Loc::getMessage(
'IBLOCK_ENTITY_PROPERTY_INDEX_FIELD'),
339 'data_type' =>
'enum',
340 'values' => [self::PROPERTY_STORAGE_COMMON, self::PROPERTY_STORAGE_SEPARATE],
341 'default_value' => self::PROPERTY_STORAGE_COMMON,
342 'title' => Loc::getMessage(
'IBLOCK_ENTITY_VERSION_FIELD'),
344 'LAST_CONV_ELEMENT' => [
345 'data_type' =>
'integer',
346 'title' => Loc::getMessage(
'IBLOCK_ENTITY_LAST_CONV_ELEMENT_FIELD'),
348 'SOCNET_GROUP_ID' => [
349 'data_type' =>
'integer',
350 'title' => Loc::getMessage(
'IBLOCK_ENTITY_SOCNET_GROUP_ID_FIELD'),
352 'EDIT_FILE_BEFORE' => [
353 'data_type' =>
'string',
354 'title' => Loc::getMessage(
'IBLOCK_ENTITY_EDIT_FILE_BEFORE_FIELD'),
355 'validation' =>
function()
362 'EDIT_FILE_AFTER' => [
363 'data_type' =>
'string',
364 'title' => Loc::getMessage(
'IBLOCK_ENTITY_EDIT_FILE_AFTER_FIELD'),
365 'validation' =>
function()
373 'data_type' =>
'Bitrix\Iblock\Type',
374 'reference' => [
'=this.IBLOCK_TYPE_ID' =>
'ref.ID'],
377 'FULLTEXT_INDEX' => [
378 'data_type' =>
'boolean',
379 'values' => [
'N',
'Y'],
381 'title' => Loc::getMessage(
'IBLOCK_ENTITY_FULLTEXT_INDEX'),
384 new OneToMany(
'PROPERTIES', PropertyTable::class,
'IBLOCK')
396 public static function compileEntity($iblockApiCode)
399 if ($iblockApiCode instanceof
Iblock)
407 'select' => [
'ID',
'API_CODE'],
408 'filter' => Query::filter()->where(
'API_CODE', $iblockApiCode)
418 $iblockNamespace = static::DATA_CLASS_NAMESPACE;
419 $iblockDataClassName =
$iblock->getEntityDataClassName();
421 if ($iblockDataClassName ==
'')
427 $iblockDataClass =
$iblock->getEntityDataClass();
429 if (class_exists($iblockDataClass,
false))
431 return $iblockDataClass::getEntity();
435 $iblock->fill([
'VERSION',
'PROPERTIES']);
438 $parentDataClass =
$iblock->getVersion() == 1
439 ? ElementV1Table::class
440 : ElementV2Table::class;
443 $elementEntity = \Bitrix\Main\ORM\Entity::compileEntity(
444 $iblockDataClassName,
447 'namespace' => $iblockNamespace,
448 'parent' => $parentDataClass,
453 $elementEntity->setIblock(
$iblock);
456 SectionElementTable::getEntity()->addField(
457 (
new Reference(
'REGULAR_ELEMENT_'.
$iblock->getId(), $elementEntity,
458 Join::on(
'this.IBLOCK_ELEMENT_ID',
'ref.ID')->whereNull(
'this.ADDITIONAL_PROPERTY_ID')))
461 $elementEntity->addField((
new ManyToMany(
'SECTIONS', SectionTable::class))
462 ->configureMediatorEntity(SectionElementTable::class)
463 ->configureLocalReference(
'REGULAR_ELEMENT_'.
$iblock->getId())
464 ->configureRemoteReference(
'IBLOCK_SECTION')
471 foreach (
$iblock->getProperties() as $property)
473 if (empty($property->getCode()))
479 $propertyValueEntity = $property->getValueEntity($elementEntity);
482 if (!empty($property->getUserType()) && !empty($userTypeList[$property->getUserType()][
'GetORMFields']))
484 call_user_func($userTypeList[$property->getUserType()][
'GetORMFields'], $propertyValueEntity, $property);
488 $niceColumnName = $property->getCode();
490 if ($property->getMultiple())
493 $elementRefName =
'SRC_ELEMENT';
496 $propertyValueEntity->addField(
500 Join::on(
'this.IBLOCK_ELEMENT_ID',
'ref.ID')
501 ->where(
'this.IBLOCK_PROPERTY_ID', $property->getId())
503 ->configureJoinType(Join::TYPE_INNER)
508 $elementEntity->addField(
509 (
new PropertyOneToMany($niceColumnName, $propertyValueEntity, $elementRefName))
510 ->configureJoinType(Join::TYPE_LEFT)
512 ->configureCascadeDeletePolicy(
520 $joinType = Join::TYPE_INNER;
521 $joinFilter = Join::on(
'this.ID',
'ref.IBLOCK_ELEMENT_ID');
523 if (
$iblock->getVersion() == 1)
526 $joinType = Join::TYPE_LEFT;
527 $joinFilter->where(
'ref.IBLOCK_PROPERTY_ID', $property->getId());
531 $elementEntity->addField(
532 (
new PropertyReference($niceColumnName, $propertyValueEntity, $joinFilter))
533 ->configureJoinType($joinType)
535 ->configureCascadeDeletePolicy(
542 return $elementEntity;
552 foreach (static::getList([
'select' => [
'ID',
'API_CODE']])->fetchCollection() as
$iblock)
554 static::compileEntity(
$iblock);
566 $primary =
$event->getParameter(
'primary');
567 \CIBlock::CleanCache($primary[
'ID']);
580 if (!isset(
$fields[
'TIMESTAMP_X']))
600 if (!isset(
$fields[
'TIMESTAMP_X']))
618 $primary =
$event->getParameter(
'primary');
619 \CIBlock::CleanCache($primary[
'ID']);
630 $primary =
$event->getParameter(
'primary');
631 \CIBlock::CleanCache($primary[
'ID']);
648 $row = static::getRow([
673 $row = IblockSiteTable::getRow([
static getList(array $parameters=array())