Skip to content

Commit c61ba80

Browse files
committed
fixes
1 parent 0a9f174 commit c61ba80

File tree

4 files changed

+225
-356
lines changed

4 files changed

+225
-356
lines changed

src/Mockers/MockerBitrixBlocks.php

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public function __construct(string $srcClass)
4545
* Синтаксический сахар в виде статического конструктора. Мок GetNext.
4646
*
4747
* @param string $srcClass Исходный класс.
48-
* @param array $fixture Фикстура.
48+
* @param array $fixture Фикстура.
4949
*
5050
* @return mixed
5151
*/
@@ -62,7 +62,7 @@ public static function getNext(string $srcClass, array $fixture = [])
6262
* Синтаксический сахар в виде статического конструктора. Мок Fetch.
6363
*
6464
* @param string $srcClass Исходный класс.
65-
* @param array $fixture Фикстура.
65+
* @param array $fixture Фикстура.
6666
*
6767
* @return mixed
6868
*/
@@ -79,7 +79,7 @@ public static function fetch(string $srcClass, array $fixture = [])
7979
* Синтаксический сахар в виде статического конструктора. Мок GetNextElement.
8080
*
8181
* @param string $srcClass Исходный класс.
82-
* @param array $fixture Фикстура.
82+
* @param array $fixture Фикстура.
8383
*
8484
* @return mixed
8585
*/
@@ -143,9 +143,9 @@ public function mockSection()
143143
/**
144144
* Мок CIBlockElement.
145145
*
146-
* @param string $method
147-
* @param string $methodRetrieveData
148-
* @param array $fixture
146+
* @param array $fixture Фикстура.
147+
* @param string $method Битриксовый метод получения данных (GetList).
148+
* @param string $methodRetrieveData Битриксовый метод извлечения результата (GetNext, Fetch).
149149
*
150150
* @return mixed
151151
*/
@@ -169,9 +169,9 @@ private function getMockCIblockElement(
169169
/**
170170
* Мок CIBlockSection.
171171
*
172-
* @param string $method
173-
* @param string $methodRetrieveData
174-
* @param array $fixture
172+
* @param array $fixture Фикстура.
173+
* @param string $method Битриксовый метод получения данных (GetList).
174+
* @param string $methodRetrieveData Битриксовый метод извлечения результата (GetNext, Fetch).
175175
*
176176
* @return mixed
177177
*/
@@ -195,8 +195,8 @@ private function getMockCIblockSection(
195195
/**
196196
* Мок CIBlockResult. Ответ CIBlockElement -> GetList.
197197
*
198-
* @param string $method
199-
* @param array $fixture
198+
* @param string $method Метод.
199+
* @param array $fixture Фикстура.
200200
*
201201
* @return mixed
202202
*/
@@ -238,7 +238,7 @@ private function getMockCIBlockResult(
238238
/**
239239
* Мок ответа CIBlockResult - GetNextElement (GetFields).
240240
*
241-
* @param array $fixture
241+
* @param array $fixture Фикстура.
242242
*
243243
* @return mixed
244244
*/
Lines changed: 213 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,213 @@
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

Comments
 (0)