22 if (
'' == self::$strSessID)
23 self::$strSessID =
'DC'.time();
24 if (array_key_exists(self::$strSessID, $_SESSION) && is_array($_SESSION[self::$strSessID]))
26 if (isset($_SESSION[self::$strSessID][
'ERRORS_COUNT']) && 0 < intval($_SESSION[self::$strSessID][
'ERRORS_COUNT']))
27 self::$intErrors = intval($_SESSION[self::$strSessID][
'ERRORS_COUNT']);
28 if (isset($_SESSION[self::$strSessID][
'ERRORS']) && is_array($_SESSION[self::$strSessID][
'ERRORS']))
29 self::$arErrors = $_SESSION[self::$strSessID][
'ERRORS'];
35 if (
'' == self::$strSessID)
36 self::$strSessID =
'DC'.time();
37 if (!array_key_exists(self::$strSessID, $_SESSION) || !is_array($_SESSION[self::$strSessID]))
38 $_SESSION[self::$strSessID] =
array();
39 if (0 < self::$intErrors)
41 $_SESSION[self::$strSessID][
'ERRORS_COUNT'] = self::$intErrors;
43 if (!empty(self::$arErrors))
45 $_SESSION[self::$strSessID][
'ERRORS'] = self::$arErrors;
89 $intStep = intval($intStep);
92 $startConvertTime = microtime(
true);
96 $strTableName =
'b_catalog_discount';
103 $strStatus = (1 < $intCount ?
'N' :
'Y');
105 $arBaseCurrencies =
array();
106 $rsSites = CSite::GetList(
"id",
"asc");
111 CTimeZone::Disable();
114 array(
'ID' =>
'ASC'),
119 array(
'nTopCount' => $intStep),
121 'ID',
'SITE_ID',
'MODIFIED_BY',
'TIMESTAMP_X',
122 'PRICE_FROM',
'PRICE_TO',
'CURRENCY',
123 'DISCOUNT_VALUE',
'DISCOUNT_TYPE'
126 while ($arDiscount = $rsDiscounts->Fetch())
129 $arFields[
'MODIFIED_BY'] = $arDiscount[
'MODIFIED_BY'];
131 $arConditions =
array(
132 'CLASS_ID' =>
'CondGroup',
137 'CHILDREN' =>
array(),
140 'CLASS_ID' =>
'CondGroup',
145 'CHILDREN' =>
array(),
148 $boolCurrency = ($arDiscount[
'CURRENCY'] == $arBaseCurrencies[$arDiscount[
'SITE_ID']]);
153 $arDiscount[
'PRICE_FROM'] = doubleval($arDiscount[
'PRICE_FROM']);
154 $arDiscount[
'PRICE_TO'] = doubleval($arDiscount[
'PRICE_TO']);
155 $arDiscount[
'DISCOUNT_VALUE'] = doubleval($arDiscount[
'DISCOUNT_VALUE']);
156 if (0 < $arDiscount[
'PRICE_FROM'])
159 $arConditions[
'CHILDREN'][] =
array(
160 'CLASS_ID' =>
'CondBsktAmtGroup',
163 'Value' => (
string)$dblValue,
173 $strFrom = str_replace(
'#VALUE#', $dblValue.
' '.$arBaseCurrencies[$arDiscount[
'SITE_ID']],
GetMessage(
'BT_MOD_SALE_DSC_FORMAT_NAME_FROM'));
175 if (0 < $arDiscount[
'PRICE_TO'])
178 $arConditions[
'CHILDREN'][] =
array(
179 'CLASS_ID' =>
'CondBsktAmtGroup',
182 'Value' => (
string)$dblValue,
192 $strTo = str_replace(
'#VALUE#', $dblValue.
' '.$arBaseCurrencies[$arDiscount[
'SITE_ID']],
GetMessage(
'BT_MOD_SALE_DSC_FORMAT_NAME_TO'));
196 $arActions[
'CHILDREN'][] =
array(
197 'CLASS_ID' =>
'ActSaleBsktGrp',
199 'Type' =>
'Discount',
207 $strValue = $arDiscount[
'DISCOUNT_VALUE'].
' %';
212 $arActions[
'CHILDREN'][] =
array(
213 'CLASS_ID' =>
'ActSaleBsktGrp',
215 'Type' =>
'Discount',
216 'Value' => (
string)$dblValue,
227 $strValue = $dblValue.
' '.$arBaseCurrencies[$arDiscount[
'SITE_ID']];
230 if (
'' != $strFrom ||
'' != $strTo)
232 $strName = str_replace(
array(
'#VALUE#',
'#FROM#',
'#TO#'),
array($strValue, $strFrom, $strTo),
GetMessage(
'BT_MOD_SALE_DSC_FORMAT_NAME'));
236 $strName = str_replace(
'#VALUE#', $strValue,
GetMessage(
'BT_MOD_SALE_DSC_FORMAT_SHORT_NAME'));
244 $arFields[
'CURRENCY'] = $arBaseCurrencies[$arDiscount[
'SITE_ID']];
247 if (
'N' == $strStatus)
252 $mxRes = $obDiscount->Update($arDiscount[
'ID'],
$arFields);
263 self::$arErrors[] =
array(
264 'ID' => $arDiscount[
'ID'],
271 $arTimeFields =
array(
'~TIMESTAMP_X' =>
$DB->CharToDateFunction($arDiscount[
'TIMESTAMP_X'],
"FULL"));
272 $strUpdate =
$DB->PrepareUpdate($strTableName, $arTimeFields);
273 if (!empty($strUpdate))
275 $strQuery =
"UPDATE ".$strTableName.
" SET ".$strUpdate.
" WHERE ID = ".$arDiscount[
'ID'];
276 $DB->Query($strQuery);
279 self::$intConverted++;
280 self::$intConvertPerStep++;
283 if ($intMaxExecutionTime > 0 && (microtime(
true) - $startConvertTime > $intMaxExecutionTime))
289 if ($intMaxExecutionTime > (2*(microtime(
true) - $startConvertTime)))
290 self::$intNextConvertPerStep = $intStep*2;
292 self::$intNextConvertPerStep = $intStep;