Skip to content

Commit 0a9f174

Browse files
committed
readme.MD.
1 parent 2d330c7 commit 0a9f174

File tree

3 files changed

+347
-0
lines changed

3 files changed

+347
-0
lines changed

readme.MD

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@
5050
```
5151
Действует только в сочетании с `ResetDatabaseTrait`.
5252

53+
При использовании дампов с боя обычно возникают проблемы с просроченностью лицензии. В таком случае приходится вручную
54+
заменить файл `include.php` в `vendor/sheerockoff/bitrix-ci/files/bitrix/modules/main`.
55+
5356
#### Трэйт UseMigrationsTrait
5457

5558
Указание запускать миграции перед каждым тестом.
Lines changed: 217 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,217 @@
1+
<?php
2+
3+
namespace Prokl\BitrixTestingTools\Utils\EventDataGenerator;
4+
5+
use Bitrix\Main\Loader;
6+
use Bitrix\Main\LoaderException;
7+
use CIBlock;
8+
use CIBlockElement;
9+
10+
/**
11+
* Class OnAfterIBlockElementUpdate
12+
* @package Prokl\BitrixTestingTools\Utils\EventDataGenerator
13+
*/
14+
class OnAfterIBlockElementUpdate
15+
{
16+
use PropValueTraits;
17+
18+
/**
19+
* @param integer $idElement ID элемента.
20+
*
21+
* @return array|false
22+
*
23+
* @throws LoaderException
24+
*/
25+
public function data(int $idElement)
26+
{
27+
$arFields = [];
28+
$bWorkFlow = false;
29+
30+
$db_element = CIBlockElement::GetList(
31+
array(),
32+
array('ID' => $idElement, 'SHOW_HISTORY' => 'Y'),
33+
false,
34+
false,
35+
array(
36+
'ID',
37+
'TIMESTAMP_X',
38+
'MODIFIED_BY',
39+
'DATE_CREATE',
40+
'CREATED_BY',
41+
'IBLOCK_ID',
42+
'IBLOCK_SECTION_ID',
43+
'ACTIVE',
44+
'ACTIVE_FROM',
45+
'ACTIVE_TO',
46+
'SORT',
47+
'NAME',
48+
'PREVIEW_PICTURE',
49+
'PREVIEW_TEXT',
50+
'PREVIEW_TEXT_TYPE',
51+
'DETAIL_PICTURE',
52+
'DETAIL_TEXT',
53+
'DETAIL_TEXT_TYPE',
54+
'WF_STATUS_ID',
55+
'WF_PARENT_ELEMENT_ID',
56+
'WF_NEW',
57+
'WF_COMMENTS',
58+
'IN_SECTIONS',
59+
'CODE',
60+
'TAGS',
61+
'XML_ID',
62+
'TMP_ID',
63+
)
64+
);
65+
if (!($ar_element = $db_element->Fetch())) {
66+
return false;
67+
}
68+
69+
$arIBlock = CIBlock::GetArrayByID($ar_element['IBLOCK_ID']);
70+
$bWorkFlow = $bWorkFlow && is_array($arIBlock) && ($arIBlock['WORKFLOW'] != 'N') && Loader::includeModule('workflow');
71+
72+
$ar_wf_element = $ar_element;
73+
74+
$LAST_ID = CIBlockElement::WF_GetLast($idElement);
75+
if ($LAST_ID != $idElement) {
76+
$db_element = CIBlockElement::GetByID($LAST_ID);
77+
if (!($ar_wf_element = $db_element->Fetch())) {
78+
return false;
79+
}
80+
}
81+
82+
$arFields['WF_PARENT_ELEMENT_ID'] = $idElement;
83+
84+
$arFields = $this->getPropertyValues(
85+
$arFields,
86+
$ar_element,
87+
$ar_wf_element
88+
);
89+
90+
unset(
91+
$ar_wf_element['DATE_ACTIVE_FROM'],
92+
$ar_wf_element['DATE_ACTIVE_TO'],
93+
$ar_wf_element['EXTERNAL_ID'],
94+
$ar_wf_element['TIMESTAMP_X'],
95+
$ar_wf_element['IBLOCK_SECTION_ID'],
96+
$ar_wf_element['ID']
97+
);
98+
99+
$arFields = $arFields + $ar_wf_element;
100+
101+
$arFields['WF'] = ($bWorkFlow ? 'Y' : 'N');
102+
103+
$bBizProc = is_array($arIBlock) && ($arIBlock['BIZPROC'] == 'Y') && IsModuleInstalled('bizproc');
104+
if (array_key_exists('BP_PUBLISHED', $arFields)) {
105+
if ($bBizProc) {
106+
if ($arFields['BP_PUBLISHED'] == 'Y') {
107+
$arFields['WF_STATUS_ID'] = 1;
108+
$arFields['WF_NEW'] = false;
109+
} else {
110+
$arFields['WF_STATUS_ID'] = 2;
111+
$arFields['WF_NEW'] = 'Y';
112+
$arFields['BP_PUBLISHED'] = 'N';
113+
}
114+
} else {
115+
$arFields['WF_NEW'] = false;
116+
unset($arFields['BP_PUBLISHED']);
117+
}
118+
} else {
119+
$arFields['WF_NEW'] = false;
120+
}
121+
122+
if ($this->is_set($arFields, 'ACTIVE') && $arFields['ACTIVE'] != 'Y') {
123+
$arFields['ACTIVE'] = 'N';
124+
}
125+
126+
if ($this->is_set($arFields, 'PREVIEW_TEXT_TYPE') && $arFields['PREVIEW_TEXT_TYPE'] != 'html') {
127+
$arFields['PREVIEW_TEXT_TYPE'] = 'text';
128+
}
129+
130+
if ($this->is_set($arFields, 'DETAIL_TEXT_TYPE') && $arFields['DETAIL_TEXT_TYPE'] != 'html') {
131+
$arFields['DETAIL_TEXT_TYPE'] = 'text';
132+
}
133+
134+
$ipropTemplates = new \Bitrix\Iblock\InheritedProperty\ElementTemplates(
135+
$ar_element['IBLOCK_ID'],
136+
$ar_element['ID']
137+
);
138+
139+
if (isset($arFields['PREVIEW_PICTURE']) && is_array($arFields['PREVIEW_PICTURE'])) {
140+
if ($arFields['PREVIEW_PICTURE']['name'] == ''
141+
&& $arFields['PREVIEW_PICTURE']['del'] == ''
142+
&& !$this->is_set($arFields['PREVIEW_PICTURE'], 'description')
143+
) {
144+
unset($arFields['PREVIEW_PICTURE']);
145+
} else {
146+
$arFields['PREVIEW_PICTURE']['MODULE_ID'] = 'iblock';
147+
$arFields['PREVIEW_PICTURE']['old_file'] = $ar_wf_element['PREVIEW_PICTURE'];
148+
$arFields['PREVIEW_PICTURE']['name'] = \Bitrix\Iblock\Template\Helper::makeFileName(
149+
$ipropTemplates,
150+
'ELEMENT_PREVIEW_PICTURE_FILE_NAME',
151+
array_merge($ar_element, $arFields),
152+
$arFields['PREVIEW_PICTURE']
153+
);
154+
}
155+
}
156+
157+
if (isset($arFields['DETAIL_PICTURE']) && is_array($arFields['DETAIL_PICTURE'])) {
158+
if ($arFields['DETAIL_PICTURE']['name'] == ''
159+
&& $arFields['DETAIL_PICTURE']['del'] == ''
160+
&& !$this->is_set($arFields['DETAIL_PICTURE'], 'description')
161+
) {
162+
unset($arFields['DETAIL_PICTURE']);
163+
} else {
164+
$arFields['DETAIL_PICTURE']['MODULE_ID'] = 'iblock';
165+
$arFields['DETAIL_PICTURE']['old_file'] = $ar_wf_element['DETAIL_PICTURE'];
166+
$arFields['DETAIL_PICTURE']['name'] = \Bitrix\Iblock\Template\Helper::makeFileName(
167+
$ipropTemplates,
168+
'ELEMENT_DETAIL_PICTURE_FILE_NAME',
169+
array_merge($ar_element, $arFields),
170+
$arFields['DETAIL_PICTURE']
171+
);
172+
}
173+
}
174+
175+
if ($this->is_set($arFields, 'DATE_ACTIVE_FROM')) {
176+
$arFields['ACTIVE_FROM'] = $arFields['DATE_ACTIVE_FROM'];
177+
}
178+
if ($this->is_set($arFields, 'DATE_ACTIVE_TO')) {
179+
$arFields['ACTIVE_TO'] = $arFields['DATE_ACTIVE_TO'];
180+
}
181+
if ($this->is_set($arFields, 'EXTERNAL_ID')) {
182+
$arFields['XML_ID'] = $arFields['EXTERNAL_ID'];
183+
}
184+
185+
$PREVIEW_tmp = $this->is_set($arFields, 'PREVIEW_TEXT') ? $arFields['PREVIEW_TEXT'] : $ar_wf_element['PREVIEW_TEXT'];
186+
$PREVIEW_TYPE_tmp = $this->is_set(
187+
$arFields,
188+
'PREVIEW_TEXT_TYPE'
189+
) ? $arFields['PREVIEW_TEXT_TYPE'] : $ar_wf_element['PREVIEW_TEXT_TYPE'];
190+
$DETAIL_tmp = $this->is_set($arFields, 'DETAIL_TEXT') ? $arFields['DETAIL_TEXT'] : $ar_wf_element['DETAIL_TEXT'];
191+
$DETAIL_TYPE_tmp = $this->is_set(
192+
$arFields,
193+
'DETAIL_TEXT_TYPE'
194+
) ? $arFields['DETAIL_TEXT_TYPE'] : $ar_wf_element['DETAIL_TEXT_TYPE'];
195+
196+
$arFields['SEARCHABLE_CONTENT'] = ToUpper(
197+
($this->is_set($arFields, 'NAME') ? $arFields['NAME'] : $ar_wf_element['NAME'])."\r\n".
198+
($PREVIEW_TYPE_tmp == 'html' ? HTMLToTxt($PREVIEW_tmp) : $PREVIEW_tmp)."\r\n".
199+
($DETAIL_TYPE_tmp == 'html' ? HTMLToTxt($DETAIL_tmp) : $DETAIL_tmp)
200+
);
201+
202+
if (array_key_exists('IBLOCK_SECTION_ID', $arFields)) {
203+
if (!array_key_exists('IBLOCK_SECTION', $arFields)) {
204+
$arFields['IBLOCK_SECTION'] = array($arFields['IBLOCK_SECTION_ID']);
205+
} elseif (is_array($arFields['IBLOCK_SECTION']) && !in_array(
206+
$arFields['IBLOCK_SECTION_ID'],
207+
$arFields['IBLOCK_SECTION']
208+
)) {
209+
unset($arFields['IBLOCK_SECTION_ID']);
210+
}
211+
}
212+
213+
$arFields['IBLOCK_ID'] = $ar_element['IBLOCK_ID'];
214+
215+
return $arFields;
216+
}
217+
}
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
<?php
2+
3+
namespace Prokl\BitrixTestingTools\Utils\EventDataGenerator;
4+
5+
use CFile;
6+
use CIBlockElement;
7+
8+
/**
9+
* Trait PropValueTraits
10+
* @package Prokl\BitrixTestingTools\Utils\EventDataGenerator
11+
*/
12+
trait PropValueTraits
13+
{
14+
15+
/**
16+
* @param array $arFields
17+
* @param array $ar_element
18+
* @param array $ar_wf_element
19+
*
20+
* @return array
21+
*/
22+
private function getPropertyValues(array $arFields, array $ar_element, array $ar_wf_element): array
23+
{
24+
if (!isset($arFields['PROPERTY_VALUES']) || !is_array($arFields['PROPERTY_VALUES'])) {
25+
$arFields['PROPERTY_VALUES'] = [];
26+
}
27+
28+
$bFieldProps = [];
29+
foreach ($arFields['PROPERTY_VALUES'] as $k => $v) {
30+
$bFieldProps[$k] = true;
31+
}
32+
33+
$arFieldProps = &$arFields['PROPERTY_VALUES'];
34+
$props = CIBlockElement::GetProperty($ar_element['IBLOCK_ID'], $ar_wf_element['ID']);
35+
while ($arProp = $props->Fetch()) {
36+
$pr_val_id = $arProp['PROPERTY_VALUE_ID'];
37+
if ($arProp['PROPERTY_TYPE'] === 'F' && $pr_val_id <> '') {
38+
if ($arProp['CODE'] <> '' && $this->is_set($arFieldProps, $arProp['CODE'])) {
39+
$pr_id = $arProp['CODE'];
40+
} else {
41+
$pr_id = $arProp['ID'];
42+
}
43+
44+
if (array_key_exists($pr_id, $arFieldProps)
45+
&& array_key_exists($pr_val_id, $arFieldProps[$pr_id])
46+
&& is_array($arFieldProps[$pr_id][$pr_val_id])
47+
) {
48+
$new_value = $arFieldProps[$pr_id][$pr_val_id];
49+
if ($new_value['name'] === ''
50+
&& $new_value['del'] !== 'Y'
51+
&& $new_value['VALUE']['name'] === ''
52+
&& $new_value['VALUE']['del'] !== 'Y'
53+
) {
54+
if (array_key_exists('DESCRIPTION', $new_value)
55+
&& ($new_value['DESCRIPTION'] != $arProp['DESCRIPTION'])
56+
) {
57+
$p = array('VALUE' => CFile::MakeFileArray($arProp['VALUE']));
58+
$p['DESCRIPTION'] = $new_value['DESCRIPTION'];
59+
$p['MODULE_ID'] = 'iblock';
60+
$arFieldProps[$pr_id][$pr_val_id] = $p;
61+
} elseif ($arProp['VALUE'] > 0) {
62+
$arFieldProps[$pr_id][$pr_val_id] = array(
63+
'VALUE' => $arProp['VALUE'],
64+
'DESCRIPTION' => $arProp['DESCRIPTION'],
65+
);
66+
}
67+
}
68+
} else {
69+
$arFieldProps[$pr_id][$pr_val_id] = array(
70+
'VALUE' => $arProp['VALUE'],
71+
'DESCRIPTION' => $arProp['DESCRIPTION'],
72+
);
73+
}
74+
75+
continue;
76+
}
77+
78+
if ($pr_val_id == ''
79+
|| array_key_exists($arProp['ID'], $bFieldProps)
80+
|| (
81+
$arProp['CODE'] !== ''
82+
&& array_key_exists($arProp['CODE'], $bFieldProps)
83+
)
84+
) {
85+
continue;
86+
}
87+
88+
$arFieldProps[$arProp['ID']][$pr_val_id] = array(
89+
'VALUE' => $arProp['VALUE'],
90+
'DESCRIPTION' => $arProp['DESCRIPTION'],
91+
);
92+
}
93+
94+
if ($ar_wf_element['IN_SECTIONS'] == 'Y') {
95+
$ar_wf_element['IBLOCK_SECTION'] = array();
96+
$rsSections = CIBlockElement::GetElementGroups(
97+
$ar_element['ID'],
98+
true,
99+
array('ID', 'IBLOCK_ELEMENT_ID')
100+
);
101+
while ($arSection = $rsSections->Fetch()) {
102+
$ar_wf_element['IBLOCK_SECTION'][] = $arSection['ID'];
103+
}
104+
}
105+
106+
return $arFields;
107+
}
108+
109+
/**
110+
* @param mixed $a
111+
* @param mixed $k
112+
*
113+
* @return boolean
114+
*/
115+
private function is_set(&$a, $k = false) : bool
116+
{
117+
if ($k === false) {
118+
return isset($a);
119+
}
120+
121+
if (is_array($a)) {
122+
return array_key_exists($k, $a);
123+
}
124+
125+
return false;
126+
}
127+
}

0 commit comments

Comments
 (0)