Your IP : 3.143.4.99


Current Path : /home/bitrix/ext_www/ballu.in.ua/local/php_interface/
Upload File :
Current File : /home/bitrix/ext_www/ballu.in.ua/local/php_interface/init.php

<?
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;
}