%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/components/bitrix/sale.basket.basket/templates/.default/ |
| Current File : /home/bitrix/www/bitrix/components/bitrix/sale.basket.basket/templates/.default/mutator.php |
<? if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();
use Bitrix\Main\Localization\Loc;
use Bitrix\Sale\PriceMaths;
/**
*
* This file modifies result for every request (including AJAX).
* Use it to edit output result for "{{ mustache }}" templates.
*
* @var array $result
*/
$mobileColumns = isset($this->arParams['COLUMNS_LIST_MOBILE'])
? $this->arParams['COLUMNS_LIST_MOBILE']
: $this->arParams['COLUMNS_LIST'];
$mobileColumns = array_fill_keys($mobileColumns, true);
$result['BASKET_ITEM_RENDER_DATA'] = array();
foreach ($this->basketItems as $row)
{
$rowData = array(
'ID' => $row['ID'],
'PRODUCT_ID' => $row['PRODUCT_ID'],
'NAME' => isset($row['~NAME']) ? $row['~NAME'] : $row['NAME'],
'QUANTITY' => $row['QUANTITY'],
'PROPS' => $row['PROPS'],
'PROPS_ALL' => $row['PROPS_ALL'],
'HASH' => $row['HASH'],
'SORT' => $row['SORT'],
'DETAIL_PAGE_URL' => $row['DETAIL_PAGE_URL'],
'CURRENCY' => $row['CURRENCY'],
'DISCOUNT_PRICE_PERCENT' => $row['DISCOUNT_PRICE_PERCENT'],
'DISCOUNT_PRICE_PERCENT_FORMATED' => $row['DISCOUNT_PRICE_PERCENT_FORMATED'],
'SHOW_DISCOUNT_PRICE' => (float)$row['DISCOUNT_PRICE'] > 0,
'PRICE' => $row['PRICE'],
'PRICE_FORMATED' => $row['PRICE_FORMATED'],
'FULL_PRICE' => $row['FULL_PRICE'],
'FULL_PRICE_FORMATED' => $row['FULL_PRICE_FORMATED'],
'DISCOUNT_PRICE' => $row['DISCOUNT_PRICE'],
'DISCOUNT_PRICE_FORMATED' => $row['DISCOUNT_PRICE_FORMATED'],
'SUM_PRICE' => $row['SUM_VALUE'],
'SUM_PRICE_FORMATED' => $row['SUM'],
'SUM_FULL_PRICE' => $row['SUM_FULL_PRICE'],
'SUM_FULL_PRICE_FORMATED' => $row['SUM_FULL_PRICE_FORMATED'],
'SUM_DISCOUNT_PRICE' => $row['SUM_DISCOUNT_PRICE'],
'SUM_DISCOUNT_PRICE_FORMATED' => $row['SUM_DISCOUNT_PRICE_FORMATED'],
'MEASURE_RATIO' => isset($row['MEASURE_RATIO']) ? $row['MEASURE_RATIO'] : 1,
'MEASURE_TEXT' => $row['MEASURE_TEXT'],
'AVAILABLE_QUANTITY' => $row['AVAILABLE_QUANTITY'],
'CHECK_MAX_QUANTITY' => $row['CHECK_MAX_QUANTITY'],
'MODULE' => $row['MODULE'],
'PRODUCT_PROVIDER_CLASS' => $row['PRODUCT_PROVIDER_CLASS'],
'NOT_AVAILABLE' => $row['NOT_AVAILABLE'] === true,
'DELAYED' => $row['DELAY'] === 'Y',
'SKU_BLOCK_LIST' => array(),
'COLUMN_LIST' => array(),
'SHOW_LABEL' => false,
'LABEL_VALUES' => array(),
'BRAND' => isset($row[$this->arParams['BRAND_PROPERTY'].'_VALUE'])
? $row[$this->arParams['BRAND_PROPERTY'].'_VALUE']
: '',
);
// show price including ratio
if ($rowData['MEASURE_RATIO'] != 1)
{
$price = PriceMaths::roundPrecision($rowData['PRICE'] * $rowData['MEASURE_RATIO']);
if ($price != $rowData['PRICE'])
{
$rowData['PRICE'] = $price;
$rowData['PRICE_FORMATED'] = CCurrencyLang::CurrencyFormat($price, $rowData['CURRENCY'], true);
}
$fullPrice = PriceMaths::roundPrecision($rowData['FULL_PRICE'] * $rowData['MEASURE_RATIO']);
if ($fullPrice != $rowData['FULL_PRICE'])
{
$rowData['FULL_PRICE'] = $fullPrice;
$rowData['FULL_PRICE_FORMATED'] = CCurrencyLang::CurrencyFormat($fullPrice, $rowData['CURRENCY'], true);
}
$discountPrice = PriceMaths::roundPrecision($rowData['DISCOUNT_PRICE'] * $rowData['MEASURE_RATIO']);
if ($discountPrice != $rowData['DISCOUNT_PRICE'])
{
$rowData['DISCOUNT_PRICE'] = $discountPrice;
$rowData['DISCOUNT_PRICE_FORMATED'] = CCurrencyLang::CurrencyFormat($discountPrice, $rowData['CURRENCY'], true);
}
}
$rowData['SHOW_PRICE_FOR'] = (float)$rowData['QUANTITY'] !== (float)$rowData['MEASURE_RATIO'];
$hideDetailPicture = false;
if (!empty($row['PREVIEW_PICTURE_SRC']))
{
$rowData['IMAGE_URL'] = $row['PREVIEW_PICTURE_SRC'];
}
elseif (!empty($row['DETAIL_PICTURE_SRC']))
{
$hideDetailPicture = true;
$rowData['IMAGE_URL'] = $row['DETAIL_PICTURE_SRC'];
}
if (!empty($row['SKU_DATA']))
{
$propMap = array();
foreach($row['PROPS'] as $prop)
{
$propMap[$prop['CODE']] = !empty($prop['~VALUE']) ? $prop['~VALUE'] : $prop['VALUE'];
}
$notSelectable = true;
foreach ($row['SKU_DATA'] as $skuBlock)
{
$skuBlockData = array(
'ID' => $skuBlock['ID'],
'CODE' => $skuBlock['CODE'],
'NAME' => $skuBlock['NAME']
);
$isSkuSelected = false;
$isImageProperty = false;
if (count($skuBlock['VALUES']) > 1)
{
$notSelectable = false;
}
foreach ($skuBlock['VALUES'] as $skuItem)
{
$skuValue = array(
'ID' => $skuItem['ID'],
'NAME' => $skuItem['NAME'],
'SORT' => $skuItem['SORT'],
'PICT' => !empty($skuItem['PICT']) ? $skuItem['PICT']['SRC'] : false,
'XML_ID' => !empty($skuItem['XML_ID']) ? $skuItem['XML_ID'] : false,
'VALUE_ID' => (
$skuBlock['TYPE'] === 'S' && $skuBlock['USER_TYPE'] === 'directory'
? $skuItem['XML_ID']
: $skuItem['NAME']
),
'PROP_ID' => $skuBlock['ID'],
'PROP_CODE' => $skuBlock['CODE']
);
if (
!empty($propMap[$skuBlockData['CODE']])
&& ($propMap[$skuBlockData['CODE']] == $skuItem['NAME'] || $propMap[$skuBlockData['CODE']] == $skuItem['XML_ID'])
)
{
$skuValue['SELECTED'] = true;
$isSkuSelected = true;
}
$skuBlockData['SKU_VALUES_LIST'][] = $skuValue;
$isImageProperty = $isImageProperty || !empty($skuItem['PICT']);
}
if (!$isSkuSelected && !empty($skuBlockData['SKU_VALUES_LIST'][0]))
{
$skuBlockData['SKU_VALUES_LIST'][0]['SELECTED'] = true;
}
$skuBlockData['IS_IMAGE'] = $isImageProperty;
$rowData['SKU_BLOCK_LIST'][] = $skuBlockData;
}
}
if ($row['NOT_AVAILABLE'])
{
foreach ($rowData['SKU_BLOCK_LIST'] as $blockKey => $skuBlock)
{
if (!empty($skuBlock['SKU_VALUES_LIST']))
{
if ($notSelectable)
{
foreach ($skuBlock['SKU_VALUES_LIST'] as $valueKey => $skuValue)
{
$rowData['SKU_BLOCK_LIST'][$blockKey]['SKU_VALUES_LIST'][0]['NOT_AVAILABLE_OFFER'] = true;
}
}
elseif (!isset($rowData['SKU_BLOCK_LIST'][$blockKey + 1]))
{
foreach ($skuBlock['SKU_VALUES_LIST'] as $valueKey => $skuValue)
{
if ($skuValue['SELECTED'])
{
$rowData['SKU_BLOCK_LIST'][$blockKey]['SKU_VALUES_LIST'][$valueKey]['NOT_AVAILABLE_OFFER'] = true;
}
}
}
}
}
}
if (!empty($result['GRID']['HEADERS']) && is_array($result['GRID']['HEADERS']))
{
foreach ($result['GRID']['HEADERS'] as &$value)
{
if (
$value['id'] === 'NAME' || $value['id'] === 'QUANTITY' || $value['id'] === 'PRICE'
|| $value['id'] === 'PREVIEW_PICTURE' || ($value['id'] === 'DETAIL_PICTURE' & $hideDetailPicture)
|| $value['id'] === 'SUM' || $value['id'] === 'PROPS' || $value['id'] === 'DELETE'
|| $value['id'] === 'DELAY'
)
{
continue;
}
if ($value['id'] === 'DETAIL_PICTURE')
{
$value['name'] = Loc::getMessage('SBB_DETAIL_PICTURE_NAME');
if (!empty($row['DETAIL_PICTURE_SRC']))
{
$rowData['COLUMN_LIST'][] = array(
'CODE' => $value['id'],
'NAME' => $value['name'],
'VALUE' => array(
array(
'IMAGE_SRC' => $row['DETAIL_PICTURE_SRC'],
'IMAGE_SRC_2X' => $row['DETAIL_PICTURE_SRC_2X'],
'IMAGE_SRC_ORIGINAL' => $row['DETAIL_PICTURE_SRC_ORIGINAL'],
'INDEX' => 0
)
),
'IS_IMAGE' => true,
'HIDE_MOBILE' => !isset($mobileColumns[$value['id']])
);
}
}
elseif ($value['id'] === 'PREVIEW_TEXT')
{
$value['name'] = Loc::getMessage('SBB_PREVIEW_TEXT_NAME');
if ($row['PREVIEW_TEXT_TYPE'] === 'text' && !empty($row['PREVIEW_TEXT']))
{
$rowData['COLUMN_LIST'][] = array(
'CODE' => $value['id'],
'NAME' => $value['name'],
'VALUE' => $row['PREVIEW_TEXT'],
'IS_TEXT' => true,
'HIDE_MOBILE' => !isset($mobileColumns[$value['id']])
);
}
}
elseif ($value['id'] === 'TYPE')
{
$value['name'] = Loc::getMessage('SBB_PRICE_TYPE_NAME');
if (!empty($row['NOTES']))
{
$rowData['COLUMN_LIST'][] = array(
'CODE' => $value['id'],
'NAME' => $value['name'],
'VALUE' => isset($row['~NOTES']) ? $row['~NOTES'] : $row['NOTES'],
'IS_TEXT' => true,
'HIDE_MOBILE' => !isset($mobileColumns[$value['id']])
);
}
}
elseif ($value['id'] === 'DISCOUNT')
{
$value['name'] = Loc::getMessage('SBB_DISCOUNT_NAME');
if ($row['DISCOUNT_PRICE_PERCENT'] > 0 && !empty($row['DISCOUNT_PRICE_PERCENT_FORMATED']))
{
$rowData['COLUMN_LIST'][] = array(
'CODE' => $value['id'],
'NAME' => $value['name'],
'VALUE' => $row['DISCOUNT_PRICE_PERCENT_FORMATED'],
'IS_TEXT' => true,
'HIDE_MOBILE' => !isset($mobileColumns[$value['id']])
);
}
}
elseif ($value['id'] === 'WEIGHT')
{
$value['name'] = Loc::getMessage('SBB_WEIGHT_NAME');
if (!empty($row['WEIGHT_FORMATED']))
{
$rowData['COLUMN_LIST'][] = array(
'CODE' => $value['id'],
'NAME' => $value['name'],
'VALUE' => $row['WEIGHT_FORMATED'],
'IS_TEXT' => true,
'HIDE_MOBILE' => !isset($mobileColumns[$value['id']])
);
}
}
elseif (!empty($row[$value['id'].'_SRC']))
{
$i = 0;
foreach ($row[$value['id'].'_SRC'] as &$image)
{
$image['INDEX'] = $i++;
}
$rowData['COLUMN_LIST'][] = array(
'CODE' => $value['id'],
'NAME' => $value['name'],
'VALUE' => $row[$value['id'].'_SRC'],
'IS_IMAGE' => true,
'HIDE_MOBILE' => !isset($mobileColumns[$value['id']])
);
}
elseif (!empty($row[$value['id'].'_DISPLAY']))
{
$rowData['COLUMN_LIST'][] = array(
'CODE' => $value['id'],
'NAME' => $value['name'],
'VALUE' => $row[$value['id'].'_DISPLAY'],
'IS_TEXT' => true,
'HIDE_MOBILE' => !isset($mobileColumns[$value['id']])
);
}
elseif (!empty($row[$value['id'].'_LINK']))
{
$linkValues = array();
foreach ($row[$value['id'].'_LINK'] as $index => $link)
{
$linkValues[] = array(
'LINK' => $link,
'IS_LAST' => !isset($row[$value['id'].'_LINK'][$index + 1])
);
}
$rowData['COLUMN_LIST'][] = array(
'CODE' => $value['id'],
'NAME' => $value['name'],
'VALUE' => $linkValues,
'IS_LINK' => true,
'HIDE_MOBILE' => !isset($mobileColumns[$value['id']])
);
}
elseif (!empty($row[$value['id']]))
{
$rawValue = isset($row['~'.$value['id']]) ? $row['~'.$value['id']] : $row[$value['id']];
$isHtml = !empty($row[$value['id'].'_HTML']);
$rowData['COLUMN_LIST'][] = array(
'CODE' => $value['id'],
'NAME' => $value['name'],
'VALUE' => $rawValue,
'IS_TEXT' => !$isHtml,
'IS_HTML' => $isHtml,
'HIDE_MOBILE' => !isset($mobileColumns[$value['id']])
);
}
}
}
if (!empty($row['LABEL_ARRAY_VALUE']))
{
$labels = array();
foreach ($row['LABEL_ARRAY_VALUE'] as $code => $value)
{
$labels[] = array(
'NAME' => $value,
'HIDE_MOBILE' => !isset($this->arParams['LABEL_PROP_MOBILE'][$code])
);
}
$rowData['SHOW_LABEL'] = true;
$rowData['LABEL_VALUES'] = $labels;
}
$result['BASKET_ITEM_RENDER_DATA'][] = $rowData;
}
$totalData = array(
'DISABLE_CHECKOUT' => (int)$result['ORDERABLE_BASKET_ITEMS_COUNT'] === 0,
'PRICE' => $result['allSum'],
'PRICE_FORMATED' => $result['allSum_FORMATED'],
'PRICE_WITHOUT_DISCOUNT_FORMATED' => $result['PRICE_WITHOUT_DISCOUNT'],
'CURRENCY' => $result['CURRENCY']
);
if ($result['DISCOUNT_PRICE_ALL'] > 0)
{
$totalData['DISCOUNT_PRICE_FORMATED'] = $result['DISCOUNT_PRICE_FORMATED'];
}
if ($result['allWeight'] > 0)
{
$totalData['WEIGHT_FORMATED'] = $result['allWeight_FORMATED'];
}
if ($this->priceVatShowValue === 'Y')
{
$totalData['SHOW_VAT'] = true;
$totalData['VAT_SUM_FORMATED'] = $result['allVATSum_FORMATED'];
$totalData['SUM_WITHOUT_VAT_FORMATED'] = $result['allSum_wVAT_FORMATED'];
}
if ($this->hideCoupon !== 'Y' && !empty($result['COUPON_LIST']))
{
$totalData['COUPON_LIST'] = $result['COUPON_LIST'];
foreach ($totalData['COUPON_LIST'] as &$coupon)
{
if ($coupon['JS_STATUS'] === 'ENTERED')
{
$coupon['CLASS'] = 'danger';
}
elseif ($coupon['JS_STATUS'] === 'APPLYED')
{
$coupon['CLASS'] = 'muted';
}
else
{
$coupon['CLASS'] = 'danger';
}
}
}
$result['TOTAL_RENDER_DATA'] = $totalData;