1+ <?php
2+
3+ namespace Prokl \BitrixTestingTools \Utils \EventDataGenerator ;
4+
5+ use Bitrix \Iblock \InheritedProperty \ElementTemplates ;
6+ use Bitrix \Main \Loader ;
7+ use CIBlock ;
8+ use CIBlockElement ;
9+
10+ /**
11+ * Class Generator
12+ * @package Prokl\BitrixTestingTools\Utils\EventDataGenerator
13+ */
14+ class Generator
15+ {
16+ /**
17+ * Сгенерировать массив $arFields для тестов событий типа OnAfterIBlockElementAdd.
18+ *
19+ * @internal Для OnBeforeIBlockElementAdd достаточно удалить ID из результата.
20+ * Покоцанный код из ядра Битрикса.
21+ *
22+ * @param integer $iblockId ID инфоблока.
23+ * @param integer $idElement ID элемента.
24+ *
25+ * @return array | false
26+ */
27+ public function generateFieldsOnAfterIBlockElementAdd (int $ iblockId , int $ idElement )
28+ {
29+ global $ USER , $ DB ;
30+
31+ $ arFields = [
32+ 'IBLOCK_ID ' => $ iblockId ,
33+ 'ID ' => $ idElement ,
34+ ];
35+
36+ $ db_element = CIBlockElement::GetList (
37+ [],
38+ ['ID ' => $ idElement , 'SHOW_HISTORY ' => 'Y ' ],
39+ false ,
40+ false ,
41+ [
42+ 'ID ' ,
43+ 'TIMESTAMP_X ' ,
44+ 'MODIFIED_BY ' ,
45+ 'DATE_CREATE ' ,
46+ 'CREATED_BY ' ,
47+ 'IBLOCK_ID ' ,
48+ 'IBLOCK_SECTION_ID ' ,
49+ 'ACTIVE ' ,
50+ 'ACTIVE_FROM ' ,
51+ 'ACTIVE_TO ' ,
52+ 'SORT ' ,
53+ 'NAME ' ,
54+ 'PREVIEW_PICTURE ' ,
55+ 'PREVIEW_TEXT ' ,
56+ 'PREVIEW_TEXT_TYPE ' ,
57+ 'DETAIL_PICTURE ' ,
58+ 'DETAIL_TEXT ' ,
59+ 'DETAIL_TEXT_TYPE ' ,
60+ 'WF_STATUS_ID ' ,
61+ 'WF_PARENT_ELEMENT_ID ' ,
62+ 'WF_NEW ' ,
63+ 'WF_COMMENTS ' ,
64+ 'IN_SECTIONS ' ,
65+ 'CODE ' ,
66+ 'TAGS ' ,
67+ 'XML_ID ' ,
68+ 'TMP_ID ' ,
69+ ]
70+ );
71+
72+ if (!($ arResult = $ db_element ->Fetch ())) {
73+ return false ;
74+ }
75+
76+ $ arFields ['WF_PARENT_ELEMENT_ID ' ] = $ idElement ;
77+
78+ if (array_key_exists ("IBLOCK_SECTION_ID " , $ arResult )) {
79+ if (!array_key_exists ("IBLOCK_SECTION " , $ arResult )) {
80+ $ arFields ["IBLOCK_SECTION " ] = [$ arResult ["IBLOCK_SECTION_ID " ]];
81+ } elseif (is_array ($ arResult ["IBLOCK_SECTION " ]) &&
82+ !in_array ($ arResult ["IBLOCK_SECTION_ID " ], $ arResult ["IBLOCK_SECTION " ])) {
83+ unset($ arFields ["IBLOCK_SECTION_ID " ]);
84+ }
85+ }
86+
87+ $ arFields ['NAME ' ] = $ arResult ['NAME ' ];
88+
89+ $ ipropTemplates = new ElementTemplates ($ arFields ["IBLOCK_ID " ], 0 );
90+ if (is_set ($ arResult , "PREVIEW_PICTURE " )) {
91+ if (is_array ($ arResult ["PREVIEW_PICTURE " ])) {
92+ $ arFields ["PREVIEW_PICTURE " ]["MODULE_ID " ] = "iblock " ;
93+ $ arFields ["PREVIEW_PICTURE " ]["name " ] = \Bitrix \Iblock \Template \Helper::makeFileName (
94+ $ ipropTemplates ,
95+ "ELEMENT_PREVIEW_PICTURE_FILE_NAME " ,
96+ $ arResult ,
97+ $ arResult ["PREVIEW_PICTURE " ]
98+ );
99+ }
100+ }
101+
102+ if (is_set ($ arResult , "DETAIL_PICTURE " )) {
103+ if (is_array ($ arResult ["DETAIL_PICTURE " ])) {
104+ $ arFields ["DETAIL_PICTURE " ]["MODULE_ID " ] = "iblock " ;
105+ $ arFields ["DETAIL_PICTURE " ]["name " ] = \Bitrix \Iblock \Template \Helper::makeFileName (
106+ $ ipropTemplates ,
107+ "ELEMENT_DETAIL_PICTURE_FILE_NAME " ,
108+ $ arResult ,
109+ $ arResult ["DETAIL_PICTURE " ]
110+ );
111+ }
112+ }
113+
114+ $ arFields ["ACTIVE " ] = $ arResult ['ACTIVE ' ];
115+ if (is_set ($ arResult , "ACTIVE " ) && $ arResult ["ACTIVE " ] != "Y " ) {
116+ $ arFields ["ACTIVE " ] = "N " ;
117+ }
118+
119+ $ arFields ["PREVIEW_TEXT_TYPE " ] = $ arResult ['PREVIEW_TEXT_TYPE ' ];
120+ if (is_set ($ arResult , "PREVIEW_TEXT_TYPE " ) && $ arResult ["PREVIEW_TEXT_TYPE " ] != "html " ) {
121+ $ arFields ["PREVIEW_TEXT_TYPE " ] = "text " ;
122+ }
123+
124+ $ arFields ["DETAIL_TEXT_TYPE " ] = $ arResult ['DETAIL_TEXT_TYPE ' ];
125+ if (is_set ($ arResult , "DETAIL_TEXT_TYPE " ) && $ arResult ["DETAIL_TEXT_TYPE " ] != "html " ) {
126+ $ arFields ["DETAIL_TEXT_TYPE " ] = "text " ;
127+ }
128+
129+ if (is_set ($ arResult , "DATE_ACTIVE_FROM " )) {
130+ $ arFields ["ACTIVE_FROM " ] = $ arResult ["DATE_ACTIVE_FROM " ];
131+ }
132+
133+ if (is_set ($ arResult , "DATE_ACTIVE_FROM " )) {
134+ $ arFields ["ACTIVE_FROM " ] = $ arResult ["DATE_ACTIVE_FROM " ];
135+ }
136+
137+ if (is_set ($ arResult , "ACTIVE_TO " )) {
138+ $ arFields ["ACTIVE_TO " ] = $ arResult ["ACTIVE_TO " ];
139+ }
140+
141+ if (is_set ($ arResult , "EXTERNAL_ID " )) {
142+ $ arFields ["XML_ID " ] = $ arFields ["EXTERNAL_ID " ];
143+ }
144+
145+ $ arFields ["SEARCHABLE_CONTENT " ] = $ arResult ["NAME " ];
146+
147+ if (isset ($ arResult ["PREVIEW_TEXT " ])) {
148+ if (isset ($ arResult ["PREVIEW_TEXT_TYPE " ]) && $ arResult ["PREVIEW_TEXT_TYPE " ] === "html " ) {
149+ $ arFields ["SEARCHABLE_CONTENT " ] .= "\r\n" .HTMLToTxt ($ arResult ["PREVIEW_TEXT " ]);
150+ } else {
151+ $ arFields ["SEARCHABLE_CONTENT " ] .= "\r\n" .$ arResult ["PREVIEW_TEXT " ];
152+ }
153+ }
154+ if (isset ($ arResult ["DETAIL_TEXT " ])) {
155+ if (isset ($ arResult ["DETAIL_TEXT_TYPE " ]) && $ arFields ["$ arResult " ] === "html " ) {
156+ $ arFields ["SEARCHABLE_CONTENT " ] .= "\r\n" .HTMLToTxt ($ arResult ["DETAIL_TEXT " ]);
157+ } else {
158+ $ arFields ["SEARCHABLE_CONTENT " ] .= "\r\n" .$ arResult ["DETAIL_TEXT " ];
159+ }
160+ }
161+
162+ $ arFields ["SEARCHABLE_CONTENT " ] = mb_strtoupper ($ arFields ["SEARCHABLE_CONTENT " ]);
163+
164+ $ arFields ["CREATED_BY " ] = $ arResult ["CREATED_BY " ];
165+ $ arFields ["MODIFIED_BY " ] = $ arResult ["MODIFIED_BY " ];
166+
167+ if (is_object ($ USER )) {
168+ if (!isset ($ arResult ["CREATED_BY " ]) || intval ($ arResult ["CREATED_BY " ]) <= 0 ) {
169+ $ arFields ["CREATED_BY " ] = (int )$ USER ->GetID ();
170+ }
171+ if (!isset ($ arResult ["MODIFIED_BY " ]) || intval ($ arResult ["MODIFIED_BY " ]) <= 0 ) {
172+ $ arFields ["MODIFIED_BY " ] = (int )$ USER ->GetID ();
173+ }
174+ }
175+
176+ $ arFields ["~TIMESTAMP_X " ] = $ arFields ["~DATE_CREATE " ] = $ DB ->CurrentTimeFunction ();
177+
178+ if (array_key_exists ("PREVIEW_PICTURE " , $ arResult )) {
179+ $ arFields ["PREVIEW_PICTURE_ID " ] = $ arResult ["PREVIEW_PICTURE " ];
180+ $ arFields ["PREVIEW_PICTURE " ] = $ arResult ['PREVIEW_PICTURE ' ];
181+ }
182+
183+ if (array_key_exists ("DETAIL_PICTURE " , $ arResult )) {
184+ $ arFields ["DETAIL_PICTURE_ID " ] = $ arResult ["DETAIL_PICTURE " ];
185+ $ arFields ["DETAIL_PICTURE " ] = $ arResult ['DETAIL_PICTURE ' ];
186+ }
187+
188+ $ arElement ["PROPERTY_VALUES " ] = [];
189+
190+ $ obElement = new CIBlockElement ;
191+ $ n = 1 ;
192+ $ rsProperties = $ obElement ->GetProperty ($ arFields ["IBLOCK_ID " ], $ arFields ["ID " ]);
193+ while ($ arProperty = $ rsProperties ->Fetch ()) {
194+ if (!array_key_exists ($ arProperty ["ID " ], $ arElement ["PROPERTY_VALUES " ])) {
195+ $ arElement ["PROPERTY_VALUES " ][$ arProperty ["ID " ]] = [];
196+ }
197+ if ($ arProperty ["PROPERTY_TYPE " ] === "F " ) {
198+ $ arElement ["PROPERTY_VALUES " ][$ arProperty ["ID " ]]["n " .$ n ] = [
199+ "VALUE " => $ arProperty ["VALUE " ],
200+ "DESCRIPTION " => $ arProperty ["DESCRIPTION " ],
201+ ];
202+ $ n ++;
203+ } else {
204+ $ arElement ["PROPERTY_VALUES " ][$ arProperty ["ID " ]][$ arProperty ["PROPERTY_VALUE_ID " ]] = [
205+ "VALUE " => $ arProperty ["VALUE " ],
206+ "DESCRIPTION " => $ arProperty ["DESCRIPTION " ],
207+ ];
208+ }
209+ }
210+
211+ return array_merge ($ arFields , $ arElement );
212+ }
213+ }
0 commit comments