Your IP : 3.143.4.99
<?
use Bitrix\Highloadblock as HL;
use Bitrix\Main\Entity;
include_once(__DIR__.'/include/feeds.php');
define('SERVICES_IBLOCK_ID', 88); //Инфоблок с сервисными центрами
define('ATTRIBUTES_IBLOCK_ID', 67); //Инфоблок с техническими характеристиками@
define('ATTRIBUTES_GROUP_IBLOCK_ID', 68); //Инфоблок с группами технических характеристик!
define('CATALOG_IBLOCK_ID', 66); //Инфоблок каталога
define('DELIVERY_CITIES_IBLOCK_ID', 91); //Инфоблок с городами дсотавки
define('DEALERS_IBLOCK_ID', 87); //Инфоблок с дилерами
define('MANAGERS_IBLOCK_ID', 84); //Инфоблок с менеджерами
define('UNITS_IBLOCK_ID', 71); //Инфоблок с единицами измерения
define('DEALER_CAT_IBLOCK_ID', 85); //Инфоблок с товарными категориями
/* Перелинковка разделов внутренней системы и битриксового каталога.
Используется при импорте сервисных центров, дилеров и выводе кнопки покупки у партнеров */
global $catsLinker;
$catsLinker = array(
1 => array(3372), //Увл.
2 => array(3391), //Конв.
3 => array(3369), //Водонагр. Газ.
4 => array(3389, 3390), //Водонагр. Эл.
5 => array(3399), //Газ. пушки
8 => array(3401, 3402), //Эл. Пуш. и Зав.
9 => array(3403), //Водяные завесы
12 => array(3368), //Конд Ballu.
14 => array(3395), //Прит.
15 => array(3398), //Диз. пушки
);
function getGatewayImage($filename, $dir) {
return '/upload/gateway_cache/' . $dir . $filename;
}
AddEventHandler("sale", "OnOrderNewSendEmail", "modifyNewOrderMail");
AddEventHandler("sale", "OnSaleBasketItemRefreshData", "setSetupToBasketItem");
function modifyNewOrderMail($orderID, &$eventName, &$arFields)
{
$arOrder = CSaleOrder::GetByID($orderID);
$orderPropToMail = CSaleOrderPropsValue::GetOrderProps($arFields["ORDER_ID"]);
while ($oneOrderProp = $orderPropToMail->Fetch()) {
$arFields[$oneOrderProp['CODE']] = htmlspecialchars($oneOrderProp["VALUE"]);
}
//-- получаем название службы доставки
$arDeliv = CSaleDelivery::GetByID($arOrder["DELIVERY_ID"]);
$deliveryName = "";
if ($arDeliv) {
$deliveryName = $arDeliv["NAME"];
}
//-- получаем название платежной системы
$arPaySystem = CSalePaySystem::GetByID($arOrder["PAY_SYSTEM_ID"]);
$paySystemName = "";
if ($arPaySystem) {
$paySystemName = $arPaySystem["NAME"];
}
//-- добавляем новые поля в массив результатов
$arFields["DELIVERY_NAME"] = $deliveryName;
$arFields["PAY_SYSTEM_NAME"] = $paySystemName;
$arFields["ORDER_DESCRIPTION"] = $arOrder["USER_DESCRIPTION"];
//-- ищем менеджеров для города доставки, чтобы им отправить письма
$arSelect = Array("ID", "PROPERTY_managers");
$arFilter = Array("IBLOCK_ID"=>DELIVERY_CITIES_IBLOCK_ID, "NAME" => $arFields["CITY"]);
$res = CIBlockElement::GetList(array("NAME" => "ASC"), $arFilter, false, false, $arSelect);
while ($ar = $res->GetNext()) {
if ($ar['PROPERTY_MANAGERS_VALUE']) {
$res1 = CIBlockElement::GetList(array("NAME" => "ASC"), array("IBLOCK_ID"=>MANAGERS_IBLOCK_ID, "ID" => $ar['PROPERTY_MANAGERS_VALUE']), false, false, array('NAME'));
while ($arFields1 = $res1->GetNext()) {
$arFields["MANAGER_EMAILS"][] = $arFields1['NAME'];
}
}
}
if (isset($arFields["MANAGER_EMAILS"]) && count($arFields["MANAGER_EMAILS"])) {
$arFields["MANAGER_EMAILS"] = implode(',', $arFields["MANAGER_EMAILS"]);
}
}
function setSetupToBasketItem(Bitrix\Sale\BasketItem $basketItem)
{
$propertyCollection = $basketItem->getPropertyCollection();
$properties = $propertyCollection->getPropertyValues();
if (!isset($properties["SETUP"])) {
$propertyCollection->setProperty(array(array(
"CODE" => "SETUP",
"NAME" => "Требуется установка",
"VALUE" => "Нет"
)));
}
}
// Кастомизация пользовательского свойства для серии, выбор характеристик для моделей
class UserSectionProductPropsr extends CUserTypeEnum
{
// инициализация пользовательского свойства для главного модуля
function GetUserTypeDescription()
{
return array(
"PROPERTY_TYPE" => "L",
"USER_TYPE_ID" => "productsProps",
"CLASS_NAME" => __CLASS__,
"DESCRIPTION" => "Характеристики моделей",
);
}
public function GetEditFormHtmlMulty($arUserField, $arHtmlControl)
{
$arElementsProps = array();
$arElementsPropsID = array();
$attributes = array();
$aCodes = array();
$aXMLs = array();
$html = '';
/* Сначала вычленим из PROPERTIES все свойста начинающиеся с prop и тип свойства файл */
$rsProperty = CIBlockProperty::GetList(Array("NAME"=>"ASC"),Array("IBLOCK_ID"=>18, "CODE"=>"prop_%"));
while($elementprop = $rsProperty->Fetch())
{
if ($elementprop["PROPERTY_TYPE"] != "F")
$aCodes[] = $elementprop["CODE"];
$arElementsPropsID[$elementprop["CODE"]] = $elementprop["ID"];
}
/* По CODE узнаем какие из отобранных характеристик заведены в специнфоблоке (другими словами какие можно отобразить) */
$arSelect = Array("ID", "XML_ID", "IBLOCK_ID", "NAME", "CODE", "SORT");
$arFilter = Array("IBLOCK_ID"=>ATTRIBUTES_IBLOCK_ID, "ACTIVE"=>"Y", "CODE" => $aCodes);
$res = CIBlockElement::GetList(array("NAME" => "ASC"), $arFilter, false, false, $arSelect);
while ($arFields = $res->GetNext()) {
$aXMLs[$arFields["XML_ID"]] = $arFields["CODE"];
$attributes[$arFields["CODE"]]["TITLE"] = $arFields["NAME"];
$attributes[$arFields["CODE"]]["ID"] = $arElementsPropsID[$arFields["CODE"]];
}
/* Для найденных характеристик подтянем группы и сформируем итоговый массив */
$arSelect = Array("ID", "IBLOCK_ID", "NAME", "SORT", "PROPERTY_PROPS");
$arFilter = Array("IBLOCK_ID" => ATTRIBUTES_GROUP_IBLOCK_ID, "ACTIVE"=>"Y", "PROPERTY_PROPS" => array_keys($aXMLs));
$res = CIBlockElement::GetList(array("NAME" => "ASC"), $arFilter, false, false, $arSelect);
while ($af = $res->GetNext()) {
$arElementsProps[$af["ID"]] = array(
"GROUP_NAME" => $af["NAME"],
"ITEMS" => array()
);
foreach ($af["PROPERTY_PROPS_VALUE"] as $xmlId) {
if (isset($aXMLs[$xmlId])) {
$arElementsProps[$af["ID"]]["ITEMS"][] = $attributes[$aXMLs[$xmlId]];
}
}
}
if (!empty($arElementsProps)) {
$html .= '<select name="'.$arHtmlControl["NAME"].'" '.(($arUserField["MULTIPLE"] == "Y")? 'multiple' : '').' size="'.$arUserField["SETTINGS"]["LIST_HEIGHT"].'">';
$html .= '<option>нет</option>';
foreach ($arElementsProps as $group) {
$html .= '<option disabled style="background: #e1e8ea;">'.$group["GROUP_NAME"].'</option>';
foreach ($group["ITEMS"] as $prop) {
$propSelected = '';
if (in_array($prop["ID"],$arHtmlControl["VALUE"]))
$propSelected = "selected";
$html .= '<option '.$propSelected.' value="'.$prop["ID"].'">'.$prop["TITLE"].'</option>';
}
}
$html .= '</select>';
}
return $html;
}
}
AddEventHandler("main", "OnUserTypeBuildList", array("UserSectionProductPropsr", "GetUserTypeDescription"));
// !Кастомизация пользовательского свойства для серии, выбор характеристик для моделей
//Агент. Деактивирует разделы в которых нет товаров, только товары с нулевой ценой или только неактивные.
function deactivateEmptySectionsAgent()
{
global $DB;
$lastRunTime = COption::GetOptionString('cron.deactivateSections', 'time', '');
CModule::IncludeModule('iblock');
$arFilter = Array(
"IBLOCK_ID" => CATALOG_IBLOCK_ID,
">TIMESTAMP_X" => $lastRunTime
);
$res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nTopCount"=>1), Array("ID", "TIMESTAMP_X"));
$resSec = CIBlockSection::GetList(Array(), $arFilter, false, Array("ID", "TIMESTAMP_X"), Array("nTopCount"=>1));
if(($test = $res->GetNext()) || ($testSec = $resSec->GetNext())) {
COption::SetOptionString('cron.deactivateSections', 'time', date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")), time()));
$pointers = array();
$parents = array();
$sections = array();
$arFilter = array('IBLOCK_ID' => CATALOG_IBLOCK_ID);
$rsSect = CIBlockSection::GetList(array('LEFT_MARGIN' => 'ASC'), $arFilter, false, array("ID", "IBLOCK_SECTION_ID", "DEPTH_LEVEL"));
while ($arSect = $rsSect->GetNext()) {
$id = (int) $arSect["ID"];
if (!$arSect["IBLOCK_SECTION_ID"]) {
$parentId = 0;
} else {
$parentId = (int) $arSect["IBLOCK_SECTION_ID"];
}
if (!$parentId) {
$sections[$id] = $arSect;
$pointers[$id] = &$sections[$id];
} else {
if (isset($pointers[$parentId])) {
$pointers[$parentId]["CHILD"][$id] = $arSect;
$pointers[$id] = &$pointers[$parentId]["CHILD"][$id];
}
}
}
deactivateEmptySectionsRecursive($sections);
}
return "deactivateEmptySectionsAgent();";
}
function deactivateEmptySectionsRecursive($sections) {
$parentStatus = "N";
$sectionClass = new CIBlockSection;
foreach ($sections as $section) {
$sectionStatus = "N";
if (isset($section["CHILD"])) {
$sectionStatus = deactivateEmptySectionsRecursive($section["CHILD"]);
} else {
$arFilter = Array(
"IBLOCK_ID" => CATALOG_IBLOCK_ID,
"ACTIVE" => "Y",
"SECTION_ID" => $section["ID"],
"CATALOG_AVAILABLE" => "Y",
//">CATALOG_PRICE_SCALE_1" => 0
);
$res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nTopCount"=>1), Array("ID"));
if($ob = $res->GetNext()) {
$sectionStatus = "Y";
}
}
// Раздел "Ручная обработка профильным экспертом"
if ($section["ID"] == 3366) {
$sectionStatus = "N";
}
//раздел ZZZ
if($section["ID"] == 3448){
$sectionStatus = "N";
}
$sectionClass->Update(
$section["ID"],
array("ACTIVE" => $sectionStatus)
);
if ($sectionStatus == "Y") {
$parentStatus = "Y";
}
}
return $parentStatus;
}
function sortByName($a, $b) {
if (trim($a['NAME']) == trim($b['NAME'])) {
return 0;
}
return (trim($a['NAME']) < trim($b['NAME'])) ? -1 : 1;
}
if(!function_exists('pre'))
{
function pre($var, $die = false)
{
echo '<pre>';
print_r($var);
echo '</pre>';
if($die)
die();
}
}
//$arGResult = BUtils::getHighLoadBlockByName("Characteristicsgroups",array(
//"select" => array("*"),
//"order" => array("UF_SORT" => "ASC"),
//"filter" => array('UF_SECTIONS' => $arResult["IBLOCK_SECTION_ID"])
//));
function getHighLoadBlockByName($hlbl, $queryData = array())
{
CModule::IncludeModule("iblock");
CModule::IncludeModule("sale");
CModule::IncludeModule("catalog");
CModule::IncludeModule('highloadblock');
$hlblock = HL\HighloadBlockTable::getList(
array("filter" => array('TABLE_NAME' => $hlbl))
)->fetch();
if (empty($hlblock))
{
return false;
}
$entity = HL\HighloadBlockTable::compileEntity($hlblock);
$entity_data_class = $entity->getDataClass();
$rsData = $entity_data_class::getList($queryData);
while($arData = $rsData->Fetch())
{
$arRes[] = $arData;
}
return $arRes;
}