- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/helpers/admin/businessvalue.php
- Класс: BitrixSaleHelpersAdminBusinessValueControl
- Вызов: BusinessValueControl::setMapFromPost
public function setMapFromPost()
{
if ($this->consumerCodePersonMapping)
throw new SystemException('Map is already set from post!');
if (isset($_POST[$this->name]['MAP']) && is_array($_POST[$this->name]['MAP']))
{
$_POST = InputFile::getPostWithFiles($_POST, $_FILES);
$consumerCodePersonMapping = $_POST[$this->name]['MAP'];
unset($_POST[$this->name]['MAP']);
$errors = array();
$consumers = BusinessValue::getConsumers();
foreach ($consumerCodePersonMapping as $consumerKey => &$codePersonMapping)
{
if ($consumerKey === BusinessValueTable::COMMON_CONSUMER_KEY)
{
$consumerKey = null;
$consumerCodePersonMapping[null] = &$codePersonMapping;
unset($consumerCodePersonMapping[BusinessValueTable::COMMON_CONSUMER_KEY]);
}
if (! (($consumer = $consumers[$consumerKey]) && is_array($consumer) && is_array($codePersonMapping)))
{
unset($consumerCodePersonMapping[$consumerKey]);
continue;
}
if (! (($codes = $consumer['CODES']) && is_array($codes)))
$codes = array();
$skipNewCodeSanitation = $consumer['SKIP_NEW_CODE_SANITATION'] ?? false;
$sanitizeMapping = $consumer['SANITIZE_MAPPING'] ?? null;
if (!is_callable($sanitizeMapping))
{
$sanitizeMapping = null;
}
$renderColumns = $consumer['RENDER_COLUMNS'] ?? null;
if (
(! $codes && ! $skipNewCodeSanitation)
|| ($skipNewCodeSanitation && ! $sanitizeMapping)
|| (is_callable($renderColumns) && ! $sanitizeMapping)
)
{
unset($consumerCodePersonMapping[$consumerKey]);
continue;
}
foreach ($codePersonMapping as $codeKey => &$personMapping)
{
$code = $codes[$codeKey];
if (! (is_array($personMapping) && (is_array($code) || $skipNewCodeSanitation)))
{
unset($codePersonMapping[$codeKey]);
continue;
}
foreach ($personMapping as $personTypeId => &$mapping)
{
if ($personTypeId === BusinessValueTable::COMMON_PERSON_TYPE_ID) // must be === coz 0 & null
{
$personTypeId = null;
$personMapping[null] = &$mapping;
unset($personMapping[BusinessValueTable::COMMON_PERSON_TYPE_ID]);
}
$codeDomains = $code['DOMAINS'] ?? null;
$personType = self::$personTypes[$personTypeId] ?? null;
if (! is_array($code) && $skipNewCodeSanitation)
{
//$skipNewCodeSanitation
}
elseif (! (is_array($code)
&& (! isset($code['PERSON_TYPE_ID']) || $code['PERSON_TYPE_ID'] == $personTypeId)
&& (! is_array($codeDomains) || in_array($personType['DOMAIN'], $codeDomains, true))
&& is_array($mapping)))
{
unset($personMapping[$personTypeId]);
continue;
}
// delete record
if (
!empty($mapping['DELETE'])
|| empty($mapping['PROVIDER_KEY'])
|| empty($mapping['PROVIDER_VALUE'])
)
{
continue;
}
if ($sanitizeMapping)
{
if ($e = call_user_func_array($sanitizeMapping, array($codeKey, $personTypeId, &$mapping)))
$errors[$consumerKey][$codeKey][$personTypeId] = $e;
}
elseif (isset($code['INPUT']) && is_array($code['INPUT']))
{
$mapping['PROVIDER_KEY'] = 'INPUT';
if ($e = InputManager::getError($code['INPUT'], $mapping['PROVIDER_VALUE'] ?? []))
$errors[$consumerKey][$codeKey][$personTypeId]['PROVIDER_VALUE'] = $e;
}
else
{
if ($e = self::sanitizeMapping($personTypeId, $mapping, $code['PROVIDERS'] ?? $consumer['PROVIDERS'] ?? []))
$errors[$consumerKey][$codeKey][$personTypeId] = $e;
}
if (! $mapping)
{
unset($personMapping[$personTypeId]); // remove from post
}
}
}
}
$this->consumerCodePersonMapping = $consumerCodePersonMapping;
$this->errors = $errors;
}
return ! $this->errors;
}