IncludeModuleLangFile(__FILE__);
class CSaleHelper
{
public static function IsAssociativeArray($ar)
{
if (count($ar) <= 0)
return false;
$fl = false;
$arKeys = array_keys($ar);
$ind = -1;
foreach ($arKeys as $key)
{
$ind++;
if ($key."!" !== $ind."!" && "".$key !== "n".$ind)
{
$fl = true;
break;
}
}
return $fl;
}
/**
* Writes to /bitrix/modules/sale.log
*
* @param string $text message to write
* @param array $arVars array (varname => value) to print out variables
* @param string $code log record tag
*/
public static function WriteToLog($text, $arVars = array(), $code = "")
{
$filename = $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/sale.log";
if ($f = fopen($filename, "a"))
{
fwrite($f, date("Y-m-d H:i:s")." - ".$code." - ".$text."\n");
if (is_array($arVars))
{
foreach ($arVars as $varName => $varData)
{
fwrite($f, $varName.": ");
fwrite($f, print_r($varData, true));
fwrite($f, "\n");
}
}
fwrite($f, "\n");
fclose($f);
}
}
/**
* @param $fieldId
* @param $arField
* @param $fieldName
* @param $formName
* @return string
* @deprecated
*/
public static function getAdminHtml($fieldId, $arField, $fieldName, $formName)
{
$arField["VALUE"] = CSaleDeliveryHelper::getConfValue($arField);
$resultHtml = '';
$name = htmlspecialcharsbx($fieldName.($fieldId <> '' ? '['.$fieldId.']' : ''));
if(isset($arField['PRE_TEXT']))
$resultHtml = $arField['PRE_TEXT'].' ';
if(isset($arField['BLOCK_HIDEABLE']))
$resultHtml .= '';
switch ($arField["TYPE"])
{
case "TEXT_RO": //read only text
$resultHtml .= htmlspecialcharsbx($arField["VALUE"]);
break;
case "CHECKBOX":
$resultHtml .= '';
}
break;
case "RADIO":
foreach ($arField["VALUES"] as $value => $title)
{
$resultHtml .= ''.
'
';
}
break;
case "PASSWORD":
$resultHtml .= '';
break;
case "DROPDOWN":
$resultHtml .= '';
break;
case "MULTISELECT":
$resultHtml .= '';
break;
case "SECTION":
case "TEXT_CENTERED":
case "MULTI_CONTROL_STRING":
$resultHtml .= htmlspecialcharsbx($arField["TITLE"]);
break;
case "CUSTOM":
$resultHtml .= $arField["VALUE"];
break;
default:
$resultHtml .= '';
}
if(isset($arField['BLOCK_HIDEABLE']))
$resultHtml .= '';
if(isset($arField['POST_TEXT'])):
$resultHtml .= ' '.$arField['POST_TEXT'];
endif;
return $resultHtml;
}
public static function getAdminMultilineControl($arMultiControlQuery)
{
$resultHtml = '';
if(is_array($arMultiControlQuery))
{
reset($arMultiControlQuery);
$key = key($arMultiControlQuery);
if(isset($arMultiControlQuery[$key]['ITEMS']) && isset($arMultiControlQuery[$key]['CONFIG']))
{
$multiHtml = implode(' ', $arMultiControlQuery[$key]['ITEMS']);
$resultHtml = self::wrapAdminHtml($multiHtml, $arMultiControlQuery[$key]['CONFIG']);
}
}
return $resultHtml;
}
public static function wrapAdminHtml($controlHtml, &$arConfig)
{
$wrapHtml = '';
$tdStyle = isset($arConfig["TOP_LINE"]) && $arConfig["TOP_LINE"] == "Y" ? ' border-top: 1px solid #DDDDDD;' : '';
switch ($arConfig["TYPE"])
{
case "SECTION":
$wrapHtml .= '
'.$controlHtml.' |
';
break;
case "TEXT_CENTERED":
$wrapHtml .= ''.$controlHtml;
if(isset($arConfig["BLOCK_DELETABLE"]))
$wrapHtml .= ' '.GetMessage("SALE_HELPER_DELETE").'';
$wrapHtml .= '
';
break;
default:
$wrapHtml .= ''.
''.htmlspecialcharsbx($arConfig["TITLE"]).': | '.
''.
$controlHtml.
' | '.
'
';
}
return $wrapHtml;
}
public static function getOptionOrImportValues($optName, $importFuncName = false, $arFuncParams = array(), $siteId = "")
{
$arResult = array();
if(trim($optName) !== '')
{
$optValue = COption::GetOptionString('sale', $optName, '', $siteId);
$arOptValue = unserialize($optValue, ['allowed_classes' => false]);
if(empty($arOptValue))
{
if($importFuncName !== false && is_callable($importFuncName))
{
$arResult = call_user_func_array($importFuncName, $arFuncParams);
COption::SetOptionString('sale', $optName, serialize($arResult), false, $siteId);
}
}
else
{
$arResult = $arOptValue;
}
}
return $arResult;
}
private static function getShopLocationParams($siteId = false): array
{
$loc_diff = COption::GetOptionString('sale', 'ADDRESS_different_set', 'N');
if ($loc_diff == "Y" && ($siteId !== false || defined(SITE_ID)))
{
if($siteId === false)
$siteId = SITE_ID;
$locId = COption::GetOptionString('sale', 'location', '', $siteId);
$locZip = COption::GetOptionString('sale', 'location_zip', '', $siteId);
}
else
{
$locId = COption::GetOptionString('sale', 'location', '');
$locZip = COption::GetOptionString('sale', 'location_zip', '');
if($locId == '')
{
static $defSite = null;
if (!isset($defSite))
$defSite = CSite::GetDefSite();
if($defSite)
{
$locId = COption::GetOptionString('sale', 'location', '', $defSite);
$locZip = COption::GetOptionString('sale', 'location_zip', '', $defSite);
}
}
}
if((string)$locId !== '')
{
$location = self::getLocationByIdHitCached($locId);
if (is_array($location) && (int)$location['ID'])
{
$locId = $location['ID'];
}
}
return [
'ID' => $locId,
'ZIP' => $locZip,
];
}
public static function getShopLocationId($siteId)
{
static $shopLocationId = array();
if(!isset($shopLocationId[$siteId]))
{
$locParams = self::getShopLocationParams($siteId);
if(isset($locParams['ID']) && $locParams['ID'] <> '')
$shopLocationId[$siteId] = $locParams['ID'];
}
return $shopLocationId[$siteId] ?? '';
}
public static function getShopLocationZIP()
{
static $shopLocationZip = '';
if($shopLocationZip == '')
{
$locParams = self::getShopLocationParams();
if(isset($locParams['ZIP']) && $locParams['ZIP'] <> '')
$shopLocationZip = strval($locParams['ZIP']);
}
return $shopLocationZip;
}
public static function getShopLocation($siteId = false)
{
static $shopLocation = array();
if(empty($shopLocation))
{
$shopLocationId = self::getShopLocationId($siteId);
if(intval($shopLocationId) > 0)
$shopLocation = CSaleLocation::GetByID($shopLocationId);
}
return $shopLocation;
}
public static function getCsvObject($filePath)
{
$csvFile = new CCSVData();
$csvFile->LoadFile($filePath);
$csvFile->SetFieldsType("R");
$csvFile->SetFirstHeader(false);
$csvFile->SetDelimiter(",");
return $csvFile;
}
/**
* Returns HTML code to show file (image or download link)
* Similar to CFile::ShowFile but shows name of the file in the download link
*
* @param int $fileId - file id
* @param array $arSize - width and height for image thumbnail
* @return string
*/
public static function getFileInfo($fileId, $arSize = array("WIDTH" => 90, "HEIGHT" => 90))
{
$resultHTML = "";
$arFile = CFile::GetFileArray($fileId);
if ($arFile)
{
$is_image = CFile::IsImage($arFile["FILE_NAME"], $arFile["CONTENT_TYPE"]);
if ($is_image)
$resultHTML = CFile::ShowImage($arFile["ID"], $arSize["WIDTH"], $arSize["HEIGHT"], "border=0", $arFile["SRC"], true);
else
$resultHTML = ''.$arFile["ORIGINAL_NAME"].'';
}
return $resultHTML;
}
public static function getIblockPropInfo($value, $propData, $arSize = array("WIDTH" => 90, "HEIGHT" => 90))
{
$res = "";
if ($propData["MULTIPLE"] == "Y")
{
$arVal = array();
if (!is_array($value))
{
if (mb_strpos($value, ",") !== false)
$arVal = explode(",", $value);
else
$arVal[] = $value;
}
else
$arVal = $value;
if (count($arVal) > 0)
{
foreach ($arVal as $key => $val)
{
if ($propData["PROPERTY_TYPE"] == "F")
{
if ($res <> '')
$res .= "
".CSaleHelper::getFileInfo(trim($val), $arSize);
else
$res = CSaleHelper::getFileInfo(trim($val), $arSize);
}
else
{
if ($res <> '')
$res .= ", ".$val;
else
$res = $val;
}
}
}
}
else
{
if ($propData["PROPERTY_TYPE"] == "F")
$res = CSaleHelper::getFileInfo($value, $arSize);
else
$res = $value;
}
return $res;
}
public static function getLocationByIdHitCached($id)
{
static $result = array();
if(!isset($result[$id]))
$result[$id] = CSaleLocation::GetByIDForLegacyDelivery($id);
return $result[$id];
}
}