3namespace Bitrix\Iblock\Controller\Property\Action;
5use Bitrix\Iblock\Integration\UI\EntityEditor\FriendlyPropertyProvider;
6use Bitrix\Iblock\Model\PropertyFeature;
7use Bitrix\Iblock\PropertyFeatureTable;
8use Bitrix\Iblock\PropertyTable;
9use Bitrix\Iblock\SectionPropertyTable;
10use Bitrix\Main\Engine\Action;
12use Bitrix\Main\Localization\Loc;
32 if (!$this->checkWritePermissions(
$iblockId))
34 $this->errorCollection->setError(
35 new Error(Loc::getMessage(
'IBLOCK_CONTROLLER_PROPERTY_ACTION_SAVE_ERROR_ACCESS_DENIED'))
44 $this->errorCollection->setError(
45 new Error(Loc::getMessage(
'IBLOCK_CONTROLLER_PROPERTY_ACTION_SAVE_ERROR_EMPTY_REQUEST'))
54 $oldFields = $this->getPropertyFields($propertyId,
$iblockId);
57 $this->errorCollection->setError(
58 new Error(Loc::getMessage(
'IBLOCK_CONTROLLER_PROPERTY_ACTION_SAVE_ERROR_NOT_FOUND'))
66 $fields = $this->processUserTypeSettingsFields(
$fields, $oldFields);
70 if (\CIBlock::GetArrayByID(
$iblockId,
'SECTION_PROPERTY') !==
'Y')
72 if ((
$fields[
'SMART_FILTER'] ??
'N') ===
'Y')
80 $entity =
new CIBlockProperty();
98 $this->errorCollection->setError(
118 private function checkWritePermissions(
int $iblockId): bool
137 $features =
$fields[
'FEATURES'] ?? [];
138 if (!is_array($features))
144 'MODULE_ID' =>
'iblock',
148 'MODULE_ID' =>
'iblock',
156 $fields[
'FEATURES'] = $features;
173 $features =
$fields[
'FEATURES'] ??
null;
174 if (!isset($features) || !is_array($features))
181 $currentFeatures = [];
182 if (isset($oldFields[
'FEATURES']))
184 foreach ($oldFields[
'FEATURES'] as $index => $isEnabled)
186 $currentFeatures[$index] = $isEnabled;
190 foreach ($features as $index => $isEnabled)
192 if (isset($currentFeatures[$index]))
194 unset($currentFeatures[$index]);
200 $feature[
'IS_ENABLED'] = $isEnabled ===
'Y' ?
'Y' :
'N';
205 foreach ($currentFeatures as $index => $isEnabled)
210 $feature[
'IS_ENABLED'] = $isEnabled ===
'Y' ?
'Y' :
'N';
232 if (!isset(
$fields[
'PROPERTY_TYPE']) && isset($oldFields))
234 $fields[
'USER_TYPE'] = $oldFields[
'USER_TYPE'];
235 $fields[
'PROPERTY_TYPE'] = $oldFields[
'PROPERTY_TYPE'];
238 if (empty(
$fields[
'USER_TYPE']))
240 $fields[
'USER_TYPE_SETTINGS'] =
false;
244 isset(
$fields[
'USER_TYPE_SETTINGS'], $oldFields[
'USER_TYPE_SETTINGS'])
245 && is_array(
$fields[
'USER_TYPE_SETTINGS'])
248 $fields[
'USER_TYPE_SETTINGS'] += $oldFields[
'USER_TYPE_SETTINGS'];
271 foreach (
$fields[
'VALUES'] as &$item)
273 if (isset($item[
'DEF']) && $item[
'DEF'] ===
'Y')
300 if (isset(
$fields[
'PROPERTY_TYPE']))
302 $parts = explode(
':',
$fields[
'PROPERTY_TYPE']);
303 if (
count($parts) === 2)
305 $fields[
'PROPERTY_TYPE'] = $parts[0];
306 $fields[
'USER_TYPE'] = $parts[1];
326 $availableFields = array_fill_keys([
353 'USER_TYPE_SETTINGS',
357 return array_intersect_key(
$fields, $availableFields);
368 private function getPropertyFields(
int $propertyId,
int $iblockId): ?
array
372 '=ID' => $propertyId,
382 $fields[
'USER_TYPE_SETTINGS'] =
$fields[
'USER_TYPE_SETTINGS_LIST'];
383 unset(
$fields[
'USER_TYPE_SETTINGS_LIST']);
386 $sectionProperty = SectionPropertyTable::getRow([
395 '=PROPERTY_ID' => $propertyId,
398 if (is_array($sectionProperty))
413 '=PROPERTY_ID' => $propertyId,
416 foreach (
$rows as $row)
419 $fields[
"FEATURES"][$index] = $row[
'IS_ENABLED'];
run(int $propertyId, int $iblockId, array $fields)
const FEATURE_PUBLIC_PROPERTY
static getIndex(array $feature)
const FEATURE_ID_DETAIL_PAGE_SHOW
const FEATURE_ID_LIST_PAGE_SHOW
static parseIndex(string $index)
static getRow(array $parameters)
static getList(array $parameters=array())
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if(! $catalogEdit->isSuccess()) $iblock
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"