Advertisement
Guest User

Untitled

a guest
Nov 28th, 2018
304
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 52.53 KB | None | 0 0
  1. <?php
  2. if (file_exists($_SERVER["DOCUMENT_ROOT"] . "/bitrix/php_interface/include/constants.php"))
  3.     require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/php_interface/include/constants.php");
  4.  
  5. if (file_exists($_SERVER["DOCUMENT_ROOT"] . "/bitrix/php_interface/include/functions.php"))
  6.     require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/php_interface/include/functions.php");
  7.  
  8. /*
  9. if(file_exists($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/include/agent.php"))
  10.     require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/include/agent.php");
  11.    
  12. if(file_exists($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/include/reviews.php"))
  13.     require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/include/reviews.php");
  14. */
  15. if (file_exists($_SERVER["DOCUMENT_ROOT"] . "/bitrix/php_interface/include/event_handlers.php"))
  16.     require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/php_interface/include/event_handlers.php");
  17.  
  18. /*
  19. AddEventHandler("main", "OnPageStart", "OnBeforePrologRedirectHandler");
  20. function OnBeforePrologRedirectHandler() {
  21.     global $APPLICATION;
  22.     $curPageUrl = $APPLICATION->GetCurPageParam();
  23.    
  24.     $arUrl = CHTTP::ParseURL($curPageUrl);
  25.     $arData = explode("/", $arUrl['path']);
  26.     $lastSegment = array_pop($arData);
  27.     if(
  28.         !preg_match('/^.*\..*$/',$lastSegment)
  29.         && substr($lastSegment, -1) != "/"
  30.         && strlen($lastSegment) > 1
  31.     ) {
  32.         $path = _normalizePath($arUrl['path'] . "/" . (array_key_exists('query', $arUrl) && strlen($arUrl['query']) > 0 ? "?{$arUrl['query']}" : ''));
  33.         LocalRedirect($path,false,301);
  34.     }
  35. }
  36. */
  37. include('geo.php');
  38. AddEventHandler('main', 'OnProlog', array('Handlers', 'OnProlog'));
  39. AddEventHandler('iblock', 'OnAfterIBlockElementAdd', array('Handlers', 'OnAfterIBlockElementAdd'));
  40. AddEventHandler("main", "OnPageStart", "OnPageStartHandler", 50);
  41. function OnPageStartHandler()
  42. {
  43.     global $USER, $APPLICATION;
  44.  
  45.     $newUri = preg_replace('#(/catalog/napolnye-pokrytiya/[\d]+/)#is', '/catalog/napolnye-pokrytiya/', $_SERVER['REQUEST_URI']);
  46.     if (!CHTTP::isPathTraversalUri($newUri)) {
  47.         $_SERVER['REQUEST_URI'] = $newUri;
  48.         $GLOBALS['APPLICATION']->reinitPath();
  49.     }
  50.  
  51.     if (!CModule::IncludeModule('iblock'))
  52.         return true;
  53.  
  54.     $arUrlTemplates = array(
  55.         "section" => "#SECTION_CODE#/"
  56.     );
  57.     $arVariables = array();
  58.     if (!CComponentEngine::ParseComponentPath('/catalog/', $arUrlTemplates, $arVariables))
  59.         return true;
  60.  
  61.     $arSection = CIBlockSection::GetList(
  62.         array(), array("IBLOCK_ID" => 9, "CODE" => $arVariables['SECTION_CODE']), false, array("ID", "IBLOCK_ID", "LEFT_MARGIN", "RIGHT_MARGIN", "DEPTH_LEVEL", "NAME")
  63.     )->Fetch();
  64.  
  65.     if (!$arSection) return true;
  66.  
  67.     $attn = CIBlockSection::GetList(
  68.         array('left_margin' => 'asc'), array(
  69.         //"ID" => $arSection['ID'],
  70.         "IBLOCK_ID" => $arSection['IBLOCK_ID'],
  71.         "<=LEFT_BORDER" => $arSection["LEFT_MARGIN"],
  72.         ">=RIGHT_BORDER" => $arSection["RIGHT_MARGIN"],
  73.         //"<DEPTH_LEVEL" => $arSection["DEPTH_LEVEL"]
  74.     ), false, array("ID", "IBLOCK_ID", "UF_OLD_TEMPLATE", "UF_NEW2_TEMPLATE", "NAME")
  75.     )->Fetch();
  76.  
  77.     if ($attn['ID'] == 12) {
  78.         $attn = CIBlockSection::GetList(
  79.             array('left_margin' => 'asc'), array(
  80.             "IBLOCK_ID" => $arSection['IBLOCK_ID'],
  81.             "<=LEFT_BORDER" => $arSection["LEFT_MARGIN"],
  82.             ">=RIGHT_BORDER" => $arSection["RIGHT_MARGIN"],
  83.             "DEPTH_LEVEL" => 2
  84.         ), false, array("ID", "IBLOCK_ID", "UF_OLD_TEMPLATE", "UF_NEW2_TEMPLATE", "NAME")
  85.         )->Fetch();
  86.     }
  87.  
  88.     if (!$attn) return true;
  89. //  $GLOBALS['IS_OLD_TEMPLATE'] = array_key_exists('UF_OLD_TEMPLATE', $attn) && !empty($attn['UF_OLD_TEMPLATE']) ? true : false;
  90. //  $GLOBALS['IS_NEW2_TEMPLATE'] = array_key_exists('UF_NEW2_TEMPLATE', $attn) && !empty($attn['UF_NEW2_TEMPLATE']) ? true : false;
  91.     $GLOBALS['IS_OLD_TEMPLATE'] = false;
  92.     $GLOBALS['IS_NEW2_TEMPLATE'] = false;
  93.     $GLOBALS['PARENT_SECTON_ID'] = $attn['NAME'];
  94.  
  95.     if (CModule::IncludeModule("subscribe")) {
  96.         $cPosting = new CPosting;
  97.         $cPosting->AutoSend();
  98.     }
  99.  
  100.     return true;
  101. }
  102.  
  103. AddEventHandler("main", "OnBeforeUserRegister", Array("MyClass", "OnBeforeUserRegisterHandler"));
  104. AddEventHandler("main", "OnBeforeUserUpdate", Array("MyClass", "OnBeforeUserUpdateHandler"));
  105. AddEventHandler("main", "OnBeforeEventSend", Array("MyClass", "OnBeforeEventSendHandler"));
  106.  
  107. class MyClass
  108. {
  109.     function OnBeforeEventSendHandler(&$arFields, $arTemplate)
  110.     {
  111.         if ($arTemplate['EVENT_NAME'] == 'NEW_USER') {
  112.             $user = CUser::GetByID($arFields['USER_ID'])->Fetch();
  113.  
  114.             $arFields['CITY'] = $user['PERSONAL_CITY'];
  115.             $arFields['PHONE'] = $user['PERSONAL_PHONE'];
  116.             $arFields['NOTES'] = $user['PERSONAL_NOTES'];
  117.         }
  118.     }
  119.  
  120.     function OnBeforeUserRegisterHandler(&$arFields)
  121.     {
  122.         $arFields["ACTIVE"] = "N";
  123.         $arFields["LOGIN"] = $arFields["EMAIL"];
  124.         $arFields["GROUP_ID"] = array(3,4,6);
  125.     }
  126.  
  127.    function OnBeforeUserUpdateHandler(&$arFields)
  128.       {
  129.           $arFields["LOGIN"] = $arFields["EMAIL"];
  130.  
  131.         $user = CUser::GetById($arFields['ID'])->Fetch();
  132.  
  133.         if ($user) {
  134.             if ($user['ACTIVE'] != 'Y' && $arFields['ACTIVE'] == 'Y') {
  135.                 function KeyGen(){
  136.                     $key = md5(time());
  137.                     $new_key = '';
  138.                     for($i=1; $i <= 10; $i ++ ){
  139.                         $new_key .= $key[$i];
  140.  
  141.                     }
  142.                     return strtoupper($new_key);
  143.                 }
  144.                 $newgenpass = KeyGen();
  145.  
  146.                 $arFields["PASSWORD"] = $newgenpass;
  147.                 $arFields["CONFIRM_PASSWORD"] = $newgenpass;
  148.  
  149.                 $arEventFields= array(
  150.                     "LOGIN" => $arFields["LOGIN"],
  151.                     "NAME" => $arFields["NAME"],
  152.                     "USER_PAROL" => $arFields["PASSWORD"],
  153.                     "EMAIL" => $arFields["EMAIL"],
  154.                 );
  155.                 CEvent::Send("USER_ACTIVATION", 's1', $arEventFields, "N", 58);
  156.  
  157.             }
  158.         }
  159.  
  160.  
  161.     }
  162. }
  163.  
  164. AddEventHandler("main", "OnAfterEpilog", "gdwOnAfterEpilog");
  165. function gdwOnAfterEpilog()
  166. {
  167.     global $APPLICATION;
  168.  
  169.     header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
  170.     header('Expires: ' . date('r', time() + 259200));
  171.  
  172.     $r301 = null;
  173.     switch ($APPLICATION->GetCurPage()) {
  174.         case '/massivnaya_doska':
  175.             $r301 = '/catalog/massivnaya-doska/';
  176.             break;
  177.         case '/terrasnaya_doska':
  178.             $r301 = '/catalog/terrasnaya-doska/';
  179.             break;
  180.         case '/parketnaya_doska':
  181.             $r301 = '/catalog/parketnaya-doska/';
  182.             break;
  183.         case '/inzhenernaya_doska':
  184.             $r301 = '/catalog/inzhenernaya-doska/';
  185.             break;
  186.         case '/modulnyy_parket':
  187.             $r301 = '/catalog/modulnyy-parket/';
  188.             break;
  189.         case '/shtuchnyy_parket':
  190.             $r301 = '/catalog/shtuchnyy-parket/';
  191.             break;
  192.         case '/o_parkete':
  193.             $r301 = '/article/';
  194.             break;
  195.         case '/dveri_mezhkomnatnye1c':
  196.             $r301 = '/catalog/mezhkomnatnye-dveri1c/';
  197.             break;
  198.         case '/plintus_massivnyy':
  199.             $r301 = '/catalog/plintusy/';
  200.             break;
  201.         case '/plintus_shponirovannyy':
  202.             $r301 = '/catalog/plintusy/';
  203.             break;
  204.         case '/contacts':
  205.             $r301 = '/company/shops.php';
  206.             break;
  207.         case '/gallery':
  208.             $r301 = '/gallery/';
  209.             break;
  210.  
  211.         case '/catalog/parketnye-masla/':
  212.             $r301 = '/catalog/masla-parketnye/';
  213.             break;
  214.         case '/catalog/parketnye-klei/':
  215.             $r301 = '/catalog/klei-parketnye/';
  216.             break;
  217.         case '/catalog/-/':
  218.             $r301 = '/catalog/sredstva-po-ukhodu-za-parketom/';
  219.             break;
  220.         case '/catalog/napolnye-pokrytiya':
  221.             $r301 = '/catalog/parket/';
  222.             break;
  223.  
  224.     }
  225.     if ($r301)
  226.         LocalRedirect($r301, false, '301 Moved permanently');
  227. }
  228.  
  229. Class CCAffiliatesShop
  230. {
  231.     var $cityShopIblockID = 7;
  232.     var $shopIblockID = 8;
  233.     var $cityData = array();
  234.  
  235.     var $coocieTime = false;
  236.     var $cookiePath = "/ru/location/";
  237.     var $APP = null;
  238.  
  239.     public function __construct()
  240.     {
  241.         // время на 30 дней
  242.         $this->coocieTime = time() + 86400 * 30;
  243.         $this->APP = &$GLOBALS['APPLICATION'];
  244.  
  245.         $this->GetStoredData();
  246.     }
  247.  
  248.     public function GetStoredData()
  249.     {
  250.         $cityName = $this->GetCityData('REGION');
  251.         if (false !== $cityName && strlen($cityName) > 0)
  252.             $this->cityData['NAME'] = $cityName;
  253.  
  254.         $cityID = $this->GetCityData('REGION_ID');
  255.         if (false !== $cityID && strlen($cityID) > 0)
  256.             $this->cityData['ID'] = $cityID;
  257.  
  258.         $cityData = $this->GetCityData('REGION_DATA');
  259.         if (
  260.             false !== $cityData && strlen($cityData) > 0
  261.             && CheckSerializedData($cityData, strlen($cityData))
  262.         ) {
  263.             $this->cityData = unserialize($cityData);
  264.             if (!isset($_SESSION["REGION_PHONE"])) {
  265.                 global $APPLICATION;
  266.                 $page = $APPLICATION->GetCurPageParam();
  267.                 $obRes = CIBlockElement::GetList(array(), array("ACTIVE" => "Y", "IBLOCK_ID" => 23, "!PROPERTY_SEARCH_STRING" => false), false, false, array("ID", "PROPERTY_PHONE", "PROPERTY_SEARCH_STRING"));
  268.  
  269.                 while ($arRes = $obRes->GetNext(true, false)) {
  270.                     if (strpos($page, $arRes["PROPERTY_SEARCH_STRING_VALUE"]) !== false) {
  271.                         $arElement['PROPERTYIES']["PHONE"]["VALUE"] = $arRes["PROPERTY_PHONE_VALUE"];
  272.                         $_SESSION["REGION_PHONE"] = $arRes["PROPERTY_PHONE_VALUE"];
  273.                         break;
  274.                     }
  275.                 }
  276.             } else {
  277.                 $this->cityData["PROPERTYIES"]["PHONE"]["VALUE"] = $_SESSION["REGION_PHONE"];
  278.             }
  279.         }
  280.  
  281.         if (
  282.             (false === $cityName || strlen($cityName) <= 0)
  283.             || (false === $cityID || IntVal($cityID) <= 0)
  284.             || (false === $cityData || strlen($cityData) <= 0)
  285.         ) {
  286.             $res = $this->GetDefaultData();
  287.             if (false !== $res) {
  288.                 $this->SetCityData($res['NAME'], 'REGION');
  289.                 $this->SetCityData($res['ID'], 'REGION_ID');
  290.                 $this->SetCityData(serialize($res), 'REGION_DATA');
  291.  
  292.                 $this->cityData = $res;
  293.             }
  294.         }
  295.     }
  296.  
  297.     public function SetCityData($value = false, $name = false)
  298.     {
  299.         if (
  300.             (false == $value || strlen($value) <= 0)
  301.             || (false == $name || strlen($name) <= 0)
  302.         ) {
  303.             return false;
  304.         }
  305.  
  306.         $_SESSION[$name] = $value;
  307.         //if($this->coocieTime > 0)
  308.         //$this->APP->set_cookie($name, $value, $this->coocieTime, $this->cookiePath);
  309.  
  310.         switch ($name) {
  311.             case 'REGION':
  312.                 $this->cityData['NAME'] = $value;
  313.                 break;
  314.  
  315.             case 'REGION_ID':
  316.                 $this->cityData['ID'] = $value;
  317.                 break;
  318.  
  319.             default:
  320.                 $this->cityData[$name] = $value;
  321.         }
  322.     }
  323.  
  324.     public function GetCityData($name = false)
  325.     {
  326.         if (false == $name || strlen($name) <= 0)
  327.             return false;
  328.  
  329.         if (array_key_exists($name, $this->cityData))
  330.             return $this->cityData[$name];
  331.         elseif (array_key_exists($name, $_SESSION))
  332.             return $_SESSION[$name];
  333.         else
  334.             return $this->APP->get_cookie($name);
  335.  
  336.         return false;
  337.     }
  338.  
  339.     public function GetCityName()
  340.     {
  341.         return $this->cityData['NAME'];
  342.     }
  343.  
  344.     public function GetCityID()
  345.     {
  346.         return $this->cityData['ID'];
  347.     }
  348.  
  349.     public function GetDefaultData()
  350.     {
  351.         if (!CModule::IncludeModule("iblock"))
  352.             return false;
  353.  
  354.         $o = array(); // опции. необзятательно.
  355.         $o['charset'] = 'utf-8'; // нужно указать требуемую кодировку, если она отличается от windows-1251
  356.  
  357.         $geo = new Geo($o); // запускаем класс
  358.  
  359.  
  360.         $city = $geo->get_value('city', true);
  361. //        echo '<pre>';
  362. //        var_dump($city);
  363. //        echo '</pre>';
  364.         $arFilter = Array(
  365.             "ACTIVE" => "Y",
  366.             "IBLOCK_ID" => $this->cityShopIblockID
  367.         );
  368.  
  369.         if ($cityID = $this->GetCityID())
  370.             $arFilter['ID'] = $cityID;
  371.         else if ($city) {
  372.             $arFilter['NAME'] = $city;
  373.         }
  374.         $rsElement = CIBlockElement::GetList(
  375.             Array("SORT" => "ASC"),
  376.             $arFilter,
  377.             false, false,
  378.             Array("ID", "NAME", "IBLOCK_ID")
  379.         );
  380.  
  381.         if (!is_object($rsElement) || !$objElement = $rsElement->GetNextElement())
  382.             return false;
  383.         else {
  384.             $arElement = $objElement->GetFields();
  385.             $arElement['PROPERTYIES'] = $objElement->GetProperties();
  386.         }
  387.  
  388.         return $arElement;
  389.     }
  390.  
  391.     public function GetCIBlockFilterByCity($filterName = '')
  392.     {
  393.         if (strlen($filterName) <= 0) return false;
  394.  
  395.         $cityID = $this->GetCityID();
  396.  
  397.         $arRegFilter = &${$filterName};
  398.         global $arRegFilter;
  399.         $arRegFilter = array(
  400.             "PROPERTY_REGION" => $cityID !== false ? $cityID : false
  401.         );
  402.     }
  403.  
  404.  
  405.     public function __destruct()
  406.     {
  407.     }
  408. }
  409.  
  410.  
  411. AddEventHandler("catalog", "OnCountPriceWithDiscount", array("CCitrusPriceHandler", "___OnCountPriceWithDiscount"));
  412. AddEventHandler("catalog", "OnGetDiscount", array("CCitrusPriceHandler", "___OnGetDiscount"));
  413. AddEventHandler("catalog", "OnGetOptimalPrice", array("CCitrusPriceHandler", "___OnGetOptimalPriceHandler"));
  414.  
  415. Class CCitrusPriceHandler
  416. {
  417.  
  418.     public function ___OnCountPriceWithDiscount($price, $currency, $arDiscounts)
  419.     {
  420.         $price -= $arDiscounts['VALUE'];
  421.  
  422.         return $price;
  423.     }
  424.  
  425.     public function ___OnGetDiscount($intProductID, $intIBlockID, $arCatalogGroups, $arUserGroups, $strRenewal, $siteID, $arDiscountCoupons, $boolSKU, $boolGetIDS)
  426.     {
  427.         if (!CModule::IncludeModule("iblock"))
  428.             return true;
  429.  
  430.         $obj = CIBlockElement::GetByID($intProductID);
  431.         if (!is_object($obj) || !$objEl = $obj->GetNextElement())
  432.             return true;
  433.  
  434.         $arProp = $objEl->GetProperties();
  435.         if (!$arProp || !array_key_exists('DISCOUNT_SUMM', $arProp))
  436.             return true;
  437.  
  438.         $discountValue = IntVal(abs($arProp['DISCOUNT_SUMM']['VALUE']));
  439.         if ($discountValue <= 0)
  440.             return true;
  441.  
  442.         $arResult = array(
  443.             'VALUE_TYPE' => "F",
  444.             'VALUE' => $discountValue,
  445.             'CURRENCY' => "RUB",
  446.         );
  447.  
  448.         return $arResult;
  449.     }
  450.  
  451.     public function ___OnGetOptimalPriceHandler($intProductID, $quantity, $arUserGroups, $renewal, $arPrices, $siteID, $arDiscountCoupons)
  452.     {
  453.         $arTmpPrice = CPrice::GetBasePrice($intProductID);
  454.         if (false === $arTmpPrice || !$arTmpPrice)
  455.             return true;
  456.  
  457.         $obj = CIBlockElement::GetByID($intProductID);
  458.         if (!is_object($obj) || !$objEl = $obj->GetNextElement())
  459.             return true;
  460.  
  461.         $arProp = $objEl->GetProperties();
  462.         if (!$arProp || !array_key_exists('DISCOUNT_SUMM', $arProp))
  463.             return true;
  464.  
  465.         $discountValue = IntVal(abs($arProp['DISCOUNT_SUMM']['VALUE']));
  466.  
  467.         if ($discountValue <= 0)
  468.             return true;
  469.  
  470.         $arPrice = array(
  471.             "PRICE" => array(
  472.                 "ID" => $arTmpPrice["ID"],
  473.                 "CATALOG_GROUP_ID" => $arTmpPrice["CATALOG_GROUP_ID"],
  474.                 "PRICE" => $arTmpPrice["PRICE"],
  475.                 "CURRENCY" => $arTmpPrice["CURRENCY"],
  476.                 "ELEMENT_IBLOCK_ID" => $arTmpPrice["ELEMENT_IBLOCK_ID"],
  477.                 //"VAT_RATE" => $arCityPrice["VAT_RATE"],
  478.                 //"VAT_INCLUDED" => $arCityPrice["VAT_INCLUDED"],
  479.             ),
  480.             "DISCOUNT_PRICE" => $arTmpPrice["PRICE"],
  481.             "DISCOUNT" => array(),
  482.             "DISCOUNT_LIST" => array(
  483.                 array(
  484.                     "VALUE_TYPE" => "F",
  485.                     "CURRENCY" => "RUB",
  486.                     "VALUE" => $discountValue
  487.                 )
  488.             ),
  489.         );
  490.  
  491.         if ($arPrice === false)
  492.             return true;
  493.         else
  494.             return $arPrice;
  495.     }
  496. }
  497.  
  498.  
  499.  
  500. class CSubsections
  501. {
  502.    function Init()
  503.    {
  504.       global $APPLICATION;
  505.      
  506.       $sef_folder = (isset($_SERVER["REAL_FILE_PATH"])  &&  $_SERVER["REAL_FILE_PATH"] != ""
  507.          ?  str_replace("index.php", "", $_SERVER["REAL_FILE_PATH"])
  508.          :  $APPLICATION->GetCurDir(false)
  509.       );
  510.       $uri = $GLOBALS["BACK_REQUEST_URI"] = $APPLICATION->GetCurDir(false);
  511.       $uri = str_replace($sef_folder, "", $uri);
  512.       $uri = trim($uri, "/");
  513.       $tmp_uri = "";
  514.  
  515.       if($uri  &&  CModule::IncludeModule("iblock"))
  516.       {
  517.          $rs = CIBlockElement::GetList(
  518.             array(),
  519.             array("=CODE" => $uri),
  520.             false,
  521.             array("nTopCount" => 1),
  522.             array("ID", "IBLOCK_ID", "IBLOCK_SECTION_ID", "NAME")
  523.          );
  524.          if($ar = $rs->Fetch())
  525.          {
  526.             $tmp_uri = $sef_folder.intval($ar["IBLOCK_SECTION_ID"])."/".$ar["ID"]."/";
  527.          }
  528.          else
  529.          {
  530.             $rs = CIBlockSection::GetList(
  531.                array(),
  532.                array("=CODE" => $uri),
  533.                false,
  534.                array("ID")
  535.             );
  536.             if($ar = $rs->Fetch())
  537.             {
  538.                $tmp_uri = $sef_folder.$ar["ID"]."/";
  539.             }
  540.          }
  541.       }
  542.      
  543.       if($tmp_uri)
  544.       {
  545.          $_SERVER["REQUEST_URI"] = $REQUEST_URI = $tmp_uri;
  546.          $APPLICATION->sDocPath2 = $tmp_uri."index.php";
  547.          CSubsections::InitParser();
  548.       }
  549.       elseif($sef_folder == $APPLICATION->GetCurDir(false))
  550.       {
  551.          CSubsections::InitParser();
  552.       }
  553.    }
  554.    
  555.    function Back($arResult)
  556.    {
  557.       global $APPLICATION;
  558.      
  559.       $arResult["URL_TEMPLATES"]["section"] = "#SECTION_CODE#/";
  560.       $arResult["URL_TEMPLATES"]["element"] = "#ELEMENT_CODE#/";
  561.       $_SERVER["REQUEST_URI"] = $REQUEST_URI = $GLOBALS["BACK_REQUEST_URI"];
  562.       $APPLICATION->sDocPath2 = $GLOBALS["BACK_REQUEST_URI"]."index.php";
  563.       unset($GLOBALS["BACK_REQUEST_URI"]);
  564.    }
  565.    
  566.    function Parse($html)
  567.    {
  568.       $html = str_ireplace("%"."2f", "/", $html);
  569.    }
  570.    
  571.    function InitParser()
  572.    {
  573.       if(!defined("CSUBSECTIONS_INIT_HANDLER"))
  574.       {
  575.          define("CSUBSECTIONS_INIT_HANDLER", true);
  576.          AddEventHandler("main", "OnEndBufferContent", array("CSubsections", "Parse"), 10000);
  577.       }
  578.    }
  579.    
  580.    function GetCode($iblock_id, $section_id, $element_name="")
  581.    {
  582.       $arPath = array();
  583.      
  584.       if(CModule::IncludeModule("iblock"))
  585.       {
  586.          if($element_name)
  587.          {
  588.             $element_name = CUtil::translit($element_name, LANGUAGE_ID);
  589.             $element_name = $element_name"/".$element_name:  "";
  590.          }
  591.      
  592.          if($rs = CIBlockSection::GetNavChain($iblock_id, $section_id))
  593.          {
  594.             while($ar = $rs->Fetch())
  595.             {
  596.                $arPath[] = CUtil::translit($ar["NAME"], LANGUAGE_ID);
  597.             }
  598.          }
  599.       }
  600.      
  601.       return trim(implode("/", $arPath).$element_name, "/");
  602.    }
  603.    
  604.    function ElementAddHandler($arFields)
  605.    {
  606.       //if($GLOBALS["IBLOCK_ID"] == $IBLOCK_ID)
  607.       //{
  608.          $oElement = new CIBlockElement();
  609.          $oElement->Update($arFields["ID"], array("CODE" => "recalculate"));
  610.       //}
  611.    }
  612.    
  613.    function ElementUpdateHandler($arFields)
  614.    {
  615.       //if($GLOBALS["IBLOCK_ID"] == $IBLOCK_ID)
  616.       //{
  617.          if($rs = CIBlockElement::GetByID($arFields["ID"]))
  618.          {
  619.             if($ar = $rs->Fetch())
  620.             {
  621.                $arFields["CODE"] = CSubsections::GetCode(
  622.                   $ar["IBLOCK_ID"],
  623.                   $ar["IBLOCK_SECTION_ID"],
  624.                   $ar["NAME"]
  625.                );
  626.             }
  627.          }
  628.       //}
  629.    }
  630.    
  631.    function SectionAddHandler($arFields)
  632.    {
  633.       //if($GLOBALS["IBLOCK_ID"] == $IBLOCK_ID)
  634.       //{
  635.          $oSection = new CIBlockSection();
  636.          $oSection->Update($arFields["ID"], array("CODE" => "recalculate"));
  637.       //}
  638.    }
  639.    
  640.    function SectionUpdateHandler($arFields)
  641.    {
  642.       //if($GLOBALS["IBLOCK_ID"] == $IBLOCK_ID)
  643.       //{
  644.          $arFields["CODE"] = CSubsections::GetCode(
  645.             $arFields["IBLOCK_ID"],
  646.             $arFields["ID"]
  647.          );
  648.       //}
  649.    }
  650.    
  651.    function Recalculate($iblock_id)
  652.    {
  653.       if(CModule::IncludeModule("iblock"))
  654.       {
  655.          $oSection = new CIBlockSection();
  656.          if($rs = CIBlockSection::GetList(array(), array("IBLOCK_ID" => $iblock_id), false, array("ID")))
  657.          {
  658.             while($ar = $rs->Fetch())
  659.             {
  660.                $oSection->Update($ar['ID'], array("CODE" => "recalculate"));
  661.             }
  662.          }         
  663.          
  664.          $oElement = new CIBlockElement();
  665.          if($rs = CIBlockElement::GetList(array(), array("IBLOCK_ID" => $iblock_id), false, false, array("ID")))
  666.          {
  667.             while($ar = $rs->Fetch())
  668.             {
  669.                $oElement->Update($ar['ID'], array("CODE" => "recalculate"));
  670.             }
  671.          }
  672.       }
  673.    }
  674. }
  675.  
  676. AddEventHandler("iblock", "OnAfterIBlockElementAdd", array("CSubsections", "ElementAddHandler"));
  677. AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", array("CSubsections", "ElementUpdateHandler"));
  678. AddEventHandler("iblock", "OnAfterIBlockSectionAdd", array("CSubsections", "SectionAddHandler"));
  679. //AddEventHandler("iblock", "OnBeforeIBlockSectionUpdate", array("CSubsections", "SectionUpdateHandler"));
  680.  
  681. CSubsections::InitParser();
  682.  
  683. function strpos_arr($haystack, $needle)
  684. {
  685.     if (!is_array($needle)) {
  686.         $needle = array($needle);
  687.     }
  688.     foreach ($needle AS $what) {
  689.         if (($pos = strpos($haystack, $what)) !== false) {
  690.             return $pos;
  691.         }
  692.     }
  693.     return false;
  694. }
  695.  
  696. AddEventHandler("sale", "OnOrderNewSendEmail", "OnOrderNewSendEmailHandler");
  697. define("LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"] . "/log.txt");
  698.  
  699. function OnOrderNewSendEmailHandler($ID, &$eventName, &$arFields)
  700. {
  701.  
  702.     CModule::IncludeModule("sale");
  703.  
  704.     $strOrderList = "";
  705.     $arBasketList = array();
  706.     $dbBasketItems = CSaleBasket::GetList(
  707.         array("ID" => "ASC"),
  708.         array("ORDER_ID" => $arFields["ORDER_ID"]),
  709.         false,
  710.         false,
  711.         array("ID", "PRODUCT_ID", "NAME", "QUANTITY", "PRICE", "CURRENCY", "TYPE", "SET_PARENT_ID")
  712.     );
  713.     while ($arItem = $dbBasketItems->GetNext(true, false)) {
  714.         if (CSaleBasketHelper::isSetItem($arItem))
  715.             continue;
  716.  
  717.         $arBasketList[] = $arItem;
  718.     }
  719.  
  720.     $arBasketList = getMeasures($arBasketList);
  721.     $sOrderList = "<table border='1'><tr><td>Наименование</td><td>Количество</td><td>Цена</td></tr>";
  722.     foreach ($arBasketList as $arItem) {
  723.         $measureText = (isset($arItem["MEASURE_TEXT"]) && strlen($arItem["MEASURE_TEXT"])) ? $arItem["MEASURE_TEXT"] : GetMessage("SOA_SHT");
  724.         $sOrderList .= "<tr><td>" . $arItem["NAME"] . "</td><td>" . $arItem["QUANTITY"] . " " . $measureText . "</td><td>" . $arItem["PRICE"] . " руб</td></tr>";
  725.     }
  726.     $sOrderList .= "</table>";
  727.  
  728.     $db_props = CSaleOrderPropsValue::GetOrderProps($arFields["ORDER_ID"]);
  729.     while ($arProps = $db_props->GetNext(true, false)) {
  730.         if ($arProps["CODE"] == "PERS_PHONE") {
  731.             $arFields["ORDER_PHONE"] = $arProps["VALUE"];
  732.             break;
  733.         }
  734.     }
  735.  
  736.     $arFields["ORDER_LIST"] = $sOrderList;
  737. //  $res = print_r($arFields,true);
  738. //  AddMessage2Log($ID);
  739. //  AddMessage2Log($res);
  740.  
  741. }
  742.  
  743. AddEventHandler("catalog", "OnSuccessCatalogImport1C", "DSOnSuccessCatalogImport1C");
  744.  
  745. //Устанавливаем тип напольного покрытия, покрытие в свойство
  746. function DSOnSuccessCatalogImport1C()
  747. {
  748.     CModule::IncludeModule("iblock");
  749.     $el = new CIBlockElement();
  750.  
  751.     $oRes = CIBlockElement::GetList(array(), array("ACTIVE" => "Y", "IBLOCK_ID" => 9, "SECTION_ID" => 12, "INCLUDE_SUBSECTIONS" => "Y"), false, false
  752.         , array("ID", "IBLOCK_SECTION_ID", "PROPERTY_TYPE_OF_FLOORING", "PROPERTY_DISCOUNT_SUMM"
  753.         , "PROPERTY_EFFECT_1", "PROPERTY_CHAMFER", "PROPERTY_UKLADKA_NA_TEPLYY_POL", "PROPERTY_POPULYARNYE", "PROPERTY_NEW_TOVAR"));
  754.     while ($aRes = $oRes->GetNext(true, false)) {
  755.         $aFilterVal = array();
  756.         /*тип напольного покрытия*/
  757.         if ($aRes["IBLOCK_SECTION_ID"]) {
  758.             $oResSect = CIBlockSection::GetByID($aRes["IBLOCK_SECTION_ID"]);
  759.             if ($aResSect = $oResSect->GetNext(true, false)) {
  760.                 $aFilterVal["TYPE_OF_FLOORING"] = $aResSect["NAME"];
  761.             }
  762.         }
  763.         /*покрытие*/
  764.         if ($aRes["PROPERTY_EFFECT_1_VALUE"] != "Лак" && $aRes["PROPERTY_EFFECT_1_VALUE"] != "Масло") {
  765.             $aFilterVal["EFFECT_1"] = 'Нет';
  766.         }
  767.  
  768.         /*фаска*/
  769.         if ($aRes["PROPERTY_CHAMFER_VALUE"] == "Фаска") {
  770.             $aFilterVal["CHAMFER"] = "Есть";
  771.         } elseif (trim($aRes["PROPERTY_CHAMFER_VALUE"]) == "") {
  772.             $aFilterVal["CHAMFER"] = 'Нет';
  773.         }
  774.  
  775.         /*Для поля Категория*/
  776.         $aFilterVal["CATEGORY_FILTER"] = array();
  777.         if ($aRes["PROPERTY_UKLADKA_NA_TEPLYY_POL_VALUE"] == "Да")
  778.             $aFilterVal["CATEGORY_FILTER"][] = "Укладка на теплый пол";
  779.  
  780.         if ($aRes["PROPERTY_POPULYARNYE_VALUE"] == "Да")
  781.             $aFilterVal["CATEGORY_FILTER"][] = "Популярные";
  782.  
  783.         if ($aRes["PROPERTY_NEW_TOVAR_VALUE"] == "Да")
  784.             $aFilterVal["CATEGORY_FILTER"][] = "Новинки";
  785.  
  786.         if (IntVal(abs($aRes['PROPERTY_DISCOUNT_SUMM_VALUE'])))
  787.             $aFilterVal["CATEGORY_FILTER"][] = "Скидки";
  788.  
  789.         if (count($aFilterVal) > 0)
  790.             CIBlockElement::SetPropertyValuesEx($aRes["ID"], false, $aFilterVal);
  791.  
  792.     }
  793.  
  794.     /*Цена и ед измерения*/
  795.     \Bitrix\Main\Loader::IncludeModule('sale');
  796.     \Bitrix\Main\Loader::IncludeModule('catalog');
  797.  
  798.     $measures = array();
  799.     $rsMeasures = CCatalogMeasure::getList();
  800.  
  801.     while ($measure = $rsMeasures->Fetch()) {
  802.         $measures[$measure['SYMBOL_RUS']] = $measure;
  803.     }
  804.  
  805.     $oRes = CIBlockElement::GetList(array(), array(
  806.         'ACTIVE' => 'Y',
  807.         'IBLOCK_ID' => 9,
  808.         'INCLUDE_SUBSECTIONS' => 'Y'
  809.     ), false, false, array(
  810.         'ID',
  811.         'IBLOCK_SECTION_ID',
  812.         'CATALOG_GROUP_1',
  813.         'PROPERTY_DISCOUNT_SUMM',
  814.         'PROPERTY_CML2_BASE_UNIT',
  815.         'PROPERTY_CML2_TRAITS'
  816.     ));
  817.  
  818.     while ($aRes = $oRes->GetNext(true, false)) {
  819.         $aFilterVal = array();
  820.  
  821.         $discountValue = IntVal(abs($aRes['PROPERTY_DISCOUNT_SUMM_VALUE']));
  822.         $iPrice = $aRes["CATALOG_PRICE_1"];
  823.         if ($discountValue > 0 && $aRes["CATALOG_PRICE_1"] > 0) {
  824.             $iPrice = $aRes["CATALOG_PRICE_1"] - $discountValue;
  825.         }
  826.         $aFilterVal["DISCOUNT_PRICE"] = $iPrice;
  827.  
  828.         if (count($aFilterVal) > 0) {
  829.             CIBlockElement::SetPropertyValuesEx($aRes["ID"], false, $aFilterVal);
  830.         }
  831.  
  832.         $aRes['PROPERTY_CML2_BASE_UNIT_VALUE'] = trim($aRes['PROPERTY_CML2_BASE_UNIT_VALUE']);
  833.  
  834.         CCatalogProduct::Update($aRes['ID'], array(
  835.             'MEASURE' => isset($measures[$aRes['PROPERTY_CML2_BASE_UNIT_VALUE']]) ? $measures[$aRes['PROPERTY_CML2_BASE_UNIT_VALUE']]['ID'] : $measures['шт']
  836.         ));
  837.  
  838.         $oResOffers = CIBlockElement::GetList(array(), array(
  839.             'ACTIVE' => 'Y',
  840.             'IBLOCK_ID' => 30,
  841.             'PROPERTY_CML2_LINK' => $aRes['ID'],
  842.         ), false, false, array(
  843.             'ID',
  844.         ));
  845.  
  846.         while ($resOffer = $oResOffers->Fetch()) {
  847.             CCatalogProduct::Update($resOffer['ID'], array(
  848.                 'MEASURE' => isset($measures[$aRes['PROPERTY_CML2_BASE_UNIT_VALUE']]) ? $measures[$aRes['PROPERTY_CML2_BASE_UNIT_VALUE']]['ID'] : $measures['шт']
  849.             ));
  850.         }
  851.  
  852.         //ед изменерия
  853.         CIBlockElement::SetPropertyValuesEx($aRes["ID"], false,
  854.             array(
  855.                 'BASE_UNIT' => $aRes['PROPERTY_CML2_BASE_UNIT_VALUE']
  856.             )
  857.         );
  858.  
  859.     }
  860.  
  861.     //Получаем все ранее выгруженные породы из инфоблока
  862.     $breeds = [];
  863.     $rsBreeds = CIBlockElement::GetList([], [
  864.         'IBLOCK_TYPE' => 'content',
  865.         'IBLOCK_CODE' => 'breed',
  866.     ], false, false, [
  867.         'ID',
  868.         'NAME',
  869.     ]);
  870.  
  871.     while ($breed = $rsBreeds->Fetch()) {
  872.         $breeds[strtoupper($breed['NAME'])] = 'Y';
  873.     }
  874.  
  875.     //Описание и другие работы с родителем
  876.     $oRes = CIBlockElement::GetList(array(), array(
  877.         'ACTIVE' => 'Y',
  878.         'IBLOCK_ID' => 9,
  879.         'INCLUDE_SUBSECTIONS' => 'Y'
  880.     ));
  881.  
  882.     while ($obRes = $oRes->GetNextElement()) {
  883.         $arFields = $obRes->GetFields();
  884.         $arProps = $obRes->GetProperties();
  885.  
  886.         if (sizeof($arProps['CML2_TRAITS']['VALUE'])) {
  887.             $DETAIL_TEXT = false;
  888.  
  889.             foreach ($arProps['CML2_TRAITS']['VALUE'] as $key => $val) {
  890.                 if ($arProps['CML2_TRAITS']['DESCRIPTION'][$key] == 'ПолноеОписание') {
  891.                     $DETAIL_TEXT = trim($val);
  892.                     break;
  893.                 }
  894.             }
  895.  
  896.             if ($DETAIL_TEXT !== false) {
  897.                 CIBlockElement::SetPropertyValuesEx($arFields['ID'], 9, array(
  898.                     'FULL_DISCRIP' => array(
  899.                         'VALUE' => array(
  900.                             'TYPE' => 'TEXT',
  901.                             'TEXT' => $DETAIL_TEXT
  902.                         )
  903.                     )
  904.                 ));
  905.             }
  906.         }
  907.  
  908.         if (sizeof($arProps['KARTINKIDOP']['VALUE'])) {
  909.             $pictures = array();
  910.  
  911.             foreach ($arProps['KARTINKIDOP']['VALUE'] as $src) {
  912.                 if (trim($src) != '') {
  913.                     $src = '/upload/1c_catalog/' . $src;
  914.  
  915.                     $pictures[] = array(
  916.                         'VALUE' => CFile::MakeFileArray($src),
  917.                         'DESCRIPTION' => ''
  918.                     );
  919.                 }
  920.             }
  921.  
  922.             if (sizeof($pictures)) {
  923.                 CIBlockElement::SetPropertyValuesEx($arFields['ID'], 9, array(
  924.                     'MORE_PHOTO' => $pictures
  925.                 ));
  926.             }
  927.         }
  928.  
  929.         //Проверяем на наличие в инфблоке Породы
  930.         if (strlen($arProps['BREED']['VALUE']) && !isset($breeds[strtoupper(trim($arProps['BREED']['VALUE']))])) {
  931.             $code = CUtil::translit(trim($arProps['BREED']['VALUE']), 'ru', [
  932.                 'max_len' => '100',
  933.                 'change_case' => 'L',
  934.                 'replace_space' => '-',
  935.                 'replace_other' => '-',
  936.                 'delete_repeat_replace' => 'true',
  937.                 'use_google' => 'true',
  938.             ]);
  939.            
  940.             $id = $el->Add([
  941.                 'IBLOCK_ID' => 36,
  942.                 'NAME' => trim($arProps['BREED']['VALUE']),
  943.                 'CODE' => $code,
  944.             ]);
  945.  
  946.             if ($id) {
  947.                 $breeds[strtoupper(trim($arProps['BREED']['VALUE']))] = 'Y';
  948.             }
  949.         }
  950.     }
  951.  
  952.     $arSizes = array();
  953.  
  954.     $res = CIBlockElement::GetList(array(), array(
  955.         'IBLOCK_CODE' => 'sizes'
  956.     ), false, false, array(
  957.         'ID',
  958.         'NAME'
  959.     ));
  960.  
  961.     while ($ar = $res->Fetch()) {
  962.         $arSizes[$ar['NAME']] = $ar['ID'];
  963.     }
  964.  
  965.     $res = CIBlockElement::GetList(array(), array(
  966.         'IBLOCK_CODE' => 'catalog-offers'
  967.     ), false, false, array('*'));
  968.  
  969.     while ($ar = $res->GetNextElement()) {
  970.         $arFields = $ar->GetFields();
  971.         $arProps = $ar->GetProperties();
  972.  
  973.         if (sizeof($arProps['CML2_ATTRIBUTES']['VALUE'])) {
  974.             $size = false;
  975.             $discountValue = 0;
  976.             $remainValue = '';
  977.             $codeNom = '';
  978.             $packaged = '';
  979.  
  980.             foreach ($arProps['CML2_ATTRIBUTES']['VALUE'] as $key => $val) {
  981.                 if ($arProps['CML2_ATTRIBUTES']['DESCRIPTION'][$key] == 'Размер') {
  982.                     $size = trim($val);
  983.                 } elseif ($arProps['CML2_ATTRIBUTES']['DESCRIPTION'][$key] == 'ЗначениеСкидки') {
  984.                     $discountValue = trim($val);
  985.                 } elseif ($arProps['CML2_ATTRIBUTES']['DESCRIPTION'][$key] == 'Остаток') {
  986.                     $remainValue = trim($val);
  987.                 } elseif ($arProps['CML2_ATTRIBUTES']['DESCRIPTION'][$key] == 'КодыНом') {
  988.                     $codeNom = trim($val);
  989.                 } elseif ($arProps['CML2_ATTRIBUTES']['DESCRIPTION'][$key] == 'ВУпаковке') {
  990.                     $packaged = trim($val);
  991.                 }
  992.             }
  993.  
  994.             if ($size !== false) {
  995.                 if (!isset($arSizes[$size])) {
  996.                     $arSizes[$size] = $el->Add(array(
  997.                         'IBLOCK_ID' => $arProps['SIZE_SELECTION']['LINK_IBLOCK_ID'],
  998.                         'ACTIVE' => 'Y',
  999.                         'NAME' => $size
  1000.                     ));
  1001.                 }
  1002.  
  1003.                 CIBlockElement::SetPropertyValuesEx($arFields['ID'], false, array(
  1004.                     'SIZE_SELECTION' => $arSizes[$size]
  1005.                 ));
  1006.             }
  1007.  
  1008.             CIBlockElement::SetPropertyValuesEx($arFields['ID'], false, array(
  1009.                 'DISCOUNT_SUMM' => $discountValue,
  1010.                 'CODE_NOM' => $codeNom,
  1011.                 'REMAIN' => $remainValue,
  1012.                 'PACKAGED' => $packaged,
  1013.             ));
  1014.         }
  1015.     }
  1016.  
  1017.     //Добавляем категорию фильтра В наличии
  1018.     $oRes = CIBlockElement::GetList(array(), array(
  1019.         "ACTIVE" => "Y",
  1020.         "IBLOCK_ID" => 9
  1021.     ), false, false, array(
  1022.         "ID", "IBLOCK_SECTION_ID", "PROPERTY_TYPE_OF_FLOORING", "PROPERTY_DISCOUNT_SUMM"
  1023.     , "PROPERTY_EFFECT_1", "PROPERTY_CHAMFER", "PROPERTY_UKLADKA_NA_TEPLYY_POL", "PROPERTY_POPULYARNYE", "PROPERTY_NEW_TOVAR"
  1024.     ));
  1025.  
  1026.     while ($aRes = $oRes->GetNext(true, false)) {
  1027.         $aFilterVal = array();
  1028.  
  1029.         /*Для поля Категория*/
  1030.         $aFilterVal["CATEGORY_FILTER"] = array();
  1031.         if ($aRes["PROPERTY_UKLADKA_NA_TEPLYY_POL_VALUE"] == "Да")
  1032.             $aFilterVal["CATEGORY_FILTER"][] = "Укладка на теплый пол";
  1033.  
  1034.         if ($aRes["PROPERTY_POPULYARNYE_VALUE"] == "Да")
  1035.             $aFilterVal["CATEGORY_FILTER"][] = "Популярные";
  1036.  
  1037.         if ($aRes["PROPERTY_NEW_TOVAR_VALUE"] == "Да")
  1038.             $aFilterVal["CATEGORY_FILTER"][] = "Новинки";
  1039.  
  1040.         if (IntVal(abs($aRes['PROPERTY_DISCOUNT_SUMM_VALUE'])))
  1041.             $aFilterVal["CATEGORY_FILTER"][] = "Скидки";
  1042.  
  1043.         $remain = 'В наличии';
  1044.         $rsOffers = CIBlockElement::GetList([], [
  1045.             'IBLOCK_CODE' => 'catalog-offers',
  1046.             'PROPERTY_CML2_LINK' => $aRes['ID'],
  1047.         ], false, false, [
  1048.             'PROPERTY_REMAIN'
  1049.         ]);
  1050.  
  1051.         while ($offer = $rsOffers->Fetch()) {
  1052.             if ($offer['PROPERTY_REMAIN_VALUE'] != $remain) {
  1053.                 $remain = '';
  1054.                 break;
  1055.             }
  1056.         }
  1057.  
  1058.         if (!isset($offer)) {
  1059.             $remain = '';
  1060.         }
  1061.  
  1062.         if ($remain != '') {
  1063.             $aFilterVal["CATEGORY_FILTER"][] = $remain;
  1064.         }
  1065.  
  1066.         if (count($aFilterVal) > 0)
  1067.             CIBlockElement::SetPropertyValuesEx($aRes["ID"], false, $aFilterVal);
  1068.  
  1069.     }
  1070.  
  1071.     /*Цена и ед измерения ТП*/
  1072.     $oRes = CIBlockElement::GetList(array(), array(
  1073.         'ACTIVE' => 'Y',
  1074.         'IBLOCK_CODE' => 'catalog-offers'
  1075.     ), false, false, array(
  1076.         'ID',
  1077.         'IBLOCK_SECTION_ID',
  1078.         'CATALOG_GROUP_1',
  1079.         'PROPERTY_DISCOUNT_SUMM',
  1080.         'PROPERTY_CML2_BASE_UNIT',
  1081.         'PROPERTY_CML2_TRAITS'
  1082.     ));
  1083.  
  1084.     while ($aRes = $oRes->GetNext(true, false)) {
  1085.         $aFilterVal = array();
  1086.  
  1087.         $discountValue = IntVal(abs($aRes['PROPERTY_DISCOUNT_SUMM_VALUE']));
  1088.         $iPrice = $aRes["CATALOG_PRICE_1"];
  1089.         if ($discountValue > 0 && $aRes["CATALOG_PRICE_1"] > 0) {
  1090.             $iPrice = $aRes["CATALOG_PRICE_1"] - $discountValue;
  1091.         }
  1092.         $aFilterVal["DISCOUNT_PRICE"] = $iPrice;
  1093.  
  1094.         if (count($aFilterVal) > 0) {
  1095.             CIBlockElement::SetPropertyValuesEx($aRes["ID"], false, $aFilterVal);
  1096.         }
  1097.  
  1098.         //ед изменерия
  1099. //        CCatalogProduct::Update($aRes['ID'], array(
  1100. //            'MEASURE' => isset($measures[$aRes['PROPERTY_CML2_BASE_UNIT_VALUE']]) ? $measures[$aRes['PROPERTY_CML2_BASE_UNIT_VALUE']]['ID'] : $measures['шт']
  1101. //        ));
  1102.         /*
  1103.                 CIBlockElement::SetPropertyValuesEx($aRes["ID"], false,
  1104.                     array(
  1105.                         'BASE_UNIT'=>$aRes['PROPERTY_CML2_BASE_UNIT_VALUE']
  1106.                     )
  1107.                 );
  1108.         */
  1109.  
  1110.     }
  1111.  
  1112.     CModule::IncludeModule("catalog");
  1113.     CCatalogExport::PreGenerateExport(5);
  1114. }
  1115.  
  1116. AddEventHandler('iblock', 'OnAfterIBlockElementUpdate', array('Handlers', 'OnAfterIBlockElementUpdate'));
  1117. AddEventHandler('main', 'OnAdminTabControlBegin', array('Handlers', 'OnAdminTabControlBegin'));
  1118. AddEventHandler('subscribe', 'BeforePostingSendMail', array('Handlers', 'BeforePostingSendMail'));
  1119. AddEventHandler('main', 'OnEndBufferContent', array('Handlers', 'OnEndBufferContent'));
  1120.  
  1121. class Handlers
  1122. {
  1123.     public static function OnEndBufferContent(&$content)
  1124.     {
  1125.         global $APPLICATION;
  1126.  
  1127.         if (!preg_match('/\/bitrix\/admin\//is', $APPLICATION->GetCurDir())) {
  1128.             \Bitrix\Main\Loader::IncludeModule('iblock');
  1129.             $queryBanners = CIBlockElement::GetList(array(), array(
  1130.                 'IBLOCK_ID' => 39,
  1131.                 'ACTIVE' => 'Y',
  1132.             ), false, false, array(
  1133.                 'NAME',
  1134.                 'PREVIEW_PICTURE',
  1135.                 'PREVIEW_TEXT',
  1136.                 'PROPERTY_TAG',
  1137.                 'PROPERTY_WIDTH',
  1138.                 'PROPERTY_HEIGHT',
  1139.                 'PROPERTY_LINK',
  1140.                 'PROPERTY_LINK_OPEN_BLANK',
  1141.             ));
  1142.  
  1143.             while ($resBanner = $queryBanners->Fetch()) {
  1144.                 /*$size = array();
  1145.  
  1146.                 if (strlen($resBanner['PROPERTY_WIDTH_VALUE']) && strlen($resBanner['PROPERTY_HEIGHT_VALUE'])) {
  1147.                     $size = array(
  1148.                         'width' => strlen($resBanner['PROPERTY_WIDTH_VALUE']) ? $resBanner['PROPERTY_WIDTH_VALUE'] : '',
  1149.                         'height' => strlen($resBanner['PROPERTY_HEIGHT_VALUE']) ? $resBanner['PROPERTY_HEIGHT_VALUE'] : '',
  1150.                     );
  1151.                 }
  1152.  
  1153.                 $picture = CFile::ResizeImageGet($resBanner['PREVIEW_PICTURE'], $size, (sizeof($size) ? BX_RESIZE_IMAGE_EXACT : BX_RESIZE_IMAGE_PROPORTIONAL), true);
  1154.  
  1155.                 if (strlen($resBanner['PROPERTY_LINK_VALUE'])) {
  1156.                     $bannerHtml = '<a href="' . $resBanner['PROPERTY_LINK_VALUE'] . '"' . ($resBanner['PROPERTY_LINK_OPEN_BLANK_VALUE'] == 'Да' ? ' target="_blank"' : '') . '><img src="' . $picture['src'] . '" width="' . $picture['width'] . '" height="' . $picture['height'] . '" alt="' . $resBanner['NAME'] . '"></a>';
  1157.                 } else {
  1158.                     $bannerHtml = '<img src="' . $picture['src'] . '" width="' . $picture['width'] . '" height="' . $picture['height'] . '" alt="' . $resBanner['NAME'] . '">';
  1159.                 }*/
  1160.  
  1161.                 $content = str_replace($resBanner['PROPERTY_TAG_VALUE'], $resBanner['PREVIEW_TEXT'], $content);
  1162.             }
  1163.         }
  1164.     }
  1165.  
  1166.     public static function OnProlog()
  1167.     {
  1168.         global $APPLICATION;
  1169.  
  1170.         $GLOBALS['parseUrl'] = explode('/', $APPLICATION->GetCurDir());
  1171.         array_shift($GLOBALS['parseUrl']);
  1172.         array_pop($GLOBALS['parseUrl']);
  1173.  
  1174.         switch ($APPLICATION->GetCurDir()) {
  1175.             case '/catalog/napolnye-pokrytiya/':
  1176.                 LocalRedirect('/catalog/parket/', false, '301 Moved permanently');
  1177.                 break;
  1178.         }
  1179.  
  1180.         $GLOBALS['catalogPageType'] = 'catalog';
  1181.  
  1182.         if ((sizeof($GLOBALS['parseUrl']) == 3 || sizeof($GLOBALS['parseUrl']) == 4) && $GLOBALS['parseUrl'][0] == 'catalog') {
  1183.             $sectionsCodeDveri = [];
  1184.             $rsSectionsDveri = CIBlockSection::GetList([], [
  1185.                 'IBLOCK_ID' => 9,
  1186.                 'SECTION_ID' => 13,
  1187.             ], false);
  1188.  
  1189.             while ($sectionsDveri = $rsSectionsDveri->Fetch()) {
  1190.                 $rsSectionsDveriSub = CIBlockSection::GetList(array(
  1191.                     'LEFT_MARGIN' => 'ASC',
  1192.                 ), array(
  1193.                     'IBLOCK_ID' => $sectionsDveri['IBLOCK_ID'],
  1194.                     '>LEFT_MARGIN' => $sectionsDveri['LEFT_MARGIN'],
  1195.                     '<RIGHT_MARGIN' => $sectionsDveri['RIGHT_MARGIN'],
  1196.                 ));
  1197.  
  1198.                 while ($sectionsDveriSub = $rsSectionsDveriSub->Fetch()) {
  1199.                     $sectionsCodeDveri[] = $sectionsDveriSub['CODE'];
  1200.                 }
  1201.  
  1202.                 $sectionsCodeDveri[] = $sectionsDveri['CODE'];
  1203.             }
  1204.  
  1205.             $rsElementCheck = CIBlockElement::GetList([], [
  1206.                 'IBLOCK_ID' => 9,
  1207.                 'CODE' => $GLOBALS['parseUrl'][2],
  1208.             ], false, [
  1209.                 'CODE'
  1210.             ])->Fetch();
  1211.  
  1212.             if (!$rsElementCheck) {
  1213.                 if (in_array($GLOBALS['parseUrl'][1], $sectionsCodeDveri)) {
  1214.                     $GLOBALS['catalogPageType'] = 'brand-dveri';
  1215.                 } else {
  1216.                     $rsBrand = CIBlockElement::GetList([], [
  1217.                         'IBLOCK_ID' => 1,
  1218.                         'CODE' => $GLOBALS['parseUrl'][2],
  1219.                     ], false, false, [
  1220.                         'ID'
  1221.                     ]);
  1222.  
  1223.                     if ($brand = $rsBrand->Fetch()) {
  1224.                         $GLOBALS['catalogPageType'] = 'brand';
  1225.                     } else {
  1226.                         $rsBreed = CIBlockElement::GetList([], [
  1227.                             'IBLOCK_TYPE' => 'content',
  1228.                             'IBLOCK_CODE' => 'breed',
  1229.                             'CODE' => $GLOBALS['parseUrl'][2],
  1230.                         ], false, false, [
  1231.                             'ID'
  1232.                         ]);
  1233.  
  1234.                         if ($breed = $rsBreed->Fetch()) {
  1235.                             $GLOBALS['catalogPageType'] = 'breed';
  1236.                         }
  1237.                     }
  1238.                 }
  1239.             } else {
  1240.                 if (in_array($GLOBALS['parseUrl'][1], $sectionsCodeDveri)) {
  1241.                     $GLOBALS['catalogPageType'] = 'dveri-detail';
  1242.                 }
  1243.             }
  1244.         }
  1245.     }
  1246.  
  1247.     public static function OnAdminTabControlBegin(&$form)
  1248.     {
  1249.         global $APPLICATION;
  1250.  
  1251.         if ($APPLICATION->GetCurPage() == '/bitrix/admin/iblock_element_edit.php' && $_REQUEST['IBLOCK_ID'] == 2 && $_REQUEST['type'] == 'content') {
  1252.             \Bitrix\Main\Loader::IncludeModule('subscribe');
  1253.             $rubrics = [];
  1254.             $rsRubrics = CRubric::GetList([
  1255.                 'ID' => 'DESC',
  1256.             ], [
  1257.                 'ACTIVE' => 'Y',
  1258.             ]);
  1259.  
  1260.             while ($rsRubric = $rsRubrics->Fetch()) {
  1261.                 $rubrics[] = $rsRubric;
  1262.             }
  1263.  
  1264.             $content = '<tr valign="top">
  1265.                <td>Отправить рассылку?:</td>
  1266.                <td>
  1267.                    <label><input type="checkbox" name="SEND_SUBSCRIBE" value="Y"> Отправить</label>
  1268.                </td>
  1269.            </tr>
  1270.            <tr valign="top">
  1271.                <td>Выберите рубрики подписчиков:</td>
  1272.                <td>
  1273.                    <span>Письмо будет отправлено только подписчикам из указанных рубрик.</span>
  1274.                    <br><br>';
  1275.  
  1276.             foreach ($rubrics as $rubric) {
  1277.                 $content .= '<div style="margin-bottom: 5px;"><label><input type="checkbox" name="SEND_RUBRICS[]" value="' . $rubric['ID'] . '"> ' . $rubric['NAME'] . '</label></div>';
  1278.             }
  1279.  
  1280.             $content .= '
  1281.                </td>
  1282.            </tr>';
  1283.  
  1284.             $form->tabs[] = [
  1285.                 'DIV' => 'sendSubscribe',
  1286.                 'TAB' => 'Рассылка',
  1287.                 'ICON' => 'main_user_edit',
  1288.                 'TITLE' => 'Рассылка',
  1289.                 'CONTENT' => $content,
  1290.             ];
  1291.         }
  1292.     }
  1293.  
  1294.     public static function BeforePostingSendMail($arFields) {
  1295.         if (preg_match('#\#UNSUBSCRIBE_EMAIL\##is', $arFields['BODY'])) {
  1296.             \Bitrix\Main\Loader::IncludeModule('subscribe');
  1297.             $subscr = new CSubscription();
  1298.  
  1299.             $subscribe = $subscr->GetByEmail($arFields['EMAIL'])->Fetch();
  1300.  
  1301.             if ($subscribe) {
  1302.                 $arFields['BODY'] = str_replace(['#UNSUBSCRIBE_EMAIL#', '#UNSUBSCRIBE_TOKEN#'], [$subscribe['EMAIL'], $subscribe['CONFIRM_CODE']], $arFields['BODY']);
  1303.             }
  1304.         }
  1305.  
  1306.         return $arFields;
  1307.     }
  1308.  
  1309.     public static function OnAfterIBlockElementUpdate(&$arFields)
  1310.     {
  1311.         if ($arFields['IBLOCK_ID'] == 2 && $arFields['ID'] > 0 && isset($_REQUEST['SEND_SUBSCRIBE'])) {
  1312.             new NewsSubscribe($arFields['IBLOCK_ID'], $arFields['ID'], $_REQUEST['SEND_RUBRICS']);
  1313.         }
  1314.     }
  1315.  
  1316.     public static function OnAfterIBlockElementAdd($arFields)
  1317.     {
  1318.         if ($arFields['IBLOCK_ID'] == 34 && $arFields['ID']) {
  1319.             CEvent::Send('LETTER_TO_DIRECTOR', SITE_ID, array(
  1320.                 'NAME' => $arFields['PROPERTY_VALUES'][227],
  1321.                 'PHONE' => $arFields['PROPERTY_VALUES'][226],
  1322.                 'EMAIL' => $arFields['PROPERTY_VALUES'][231],
  1323.                 'MESSAGE' => $arFields['PROPERTY_VALUES'][228]
  1324.             ));
  1325.         } elseif ($arFields['IBLOCK_ID'] == 35 && $arFields['ID']) {
  1326.             CEvent::Send('ARCHITECTS_AND_DESIGNERS', SITE_ID, array(
  1327.                 'NAME' => $arFields['PROPERTY_VALUES'][232],
  1328.                 'PHONE' => $arFields['PROPERTY_VALUES'][233],
  1329.                 'EMAIL' => $arFields['PROPERTY_VALUES'][234],
  1330.                 'MESSAGE' => $arFields['PROPERTY_VALUES'][235]
  1331.             ));
  1332.         } elseif ($arFields['IBLOCK_ID'] == 37) {
  1333.             CEvent::Send('QUESTION_ADD', SITE_ID, array(
  1334.                 'NAME' => $arFields['PROPERTY_VALUES'][245],
  1335.                 'EMAIL' => $arFields['PROPERTY_VALUES'][246],
  1336.                 'QUESTION' => $arFields['PROPERTY_VALUES'][247],
  1337.                 'LINK' => 'http://' . $_SERVER['HTTP_HOST'] . '/bitrix/admin/iblock_element_edit.php?IBLOCK_ID=37&type=questions&ID=' . $arFields['ID'] . '&lang=ru&find_section_section=0&WF=Y',
  1338.             ));
  1339.         }
  1340.     }
  1341. }
  1342.  
  1343. class NewsSubscribe
  1344. {
  1345.     public function __construct($iblockId, $newsId, $sendRubrics = [])
  1346.     {
  1347.         \Bitrix\Main\Loader::IncludeModule('iblock');
  1348.  
  1349.         if (!is_null($sendRubrics) && sizeof($sendRubrics) > 0) {
  1350.             $rsNews = CIBlockElement::GetList([], [
  1351.                 'IBLOCK_ID' => $iblockId,
  1352.                 'ID' => $newsId,
  1353.                 '>PROPERTY_SEND_SUBSCRIBE' => 0
  1354.             ], false, false, [
  1355.                 'ID',
  1356.                 'IBLOCK_ID',
  1357.                 'ACTIVE',
  1358.                 'CODE',
  1359.                 'NAME',
  1360.                 'PREVIEW_PICTURE',
  1361.                 'DETAIL_PICTURE',
  1362.                 'DETAIL_TEXT',
  1363.             ]);
  1364.  
  1365.             if ($rsNews = $rsNews->Fetch()) {
  1366.                 $this->sendSubscribe($rsNews, $sendRubrics);
  1367.             }
  1368.         }
  1369.     }
  1370.  
  1371.     private function sendSubscribe($rsNews, $sendRubrics = [])
  1372.     {
  1373.         \Bitrix\Main\Loader::IncludeModule('subscribe');
  1374.  
  1375.         CIBlockElement::SetPropertyValuesEx($rsNews['ID'], $rsNews['IBLOCK_ID'], [
  1376.             'SEND_SUBSCRIBE' => '',
  1377.         ]);
  1378.  
  1379.         $picture = '';
  1380.  
  1381.         if ($rsNews['DETAIL_PICTURE'] > 0) {
  1382.             $picture = CFile::ResizeImageGet($rsNews['DETAIL_PICTURE'], [
  1383.                 'width' => 760,
  1384.                 'height' => 1000,
  1385.             ]);
  1386.  
  1387.             if (isset($picture['src'])) {
  1388.                 $picture = '<center><img src="http://vparchetti.ru' . $picture['src'] . '" alt="' . htmlspecialchars($rsNews['NAME']) . '" /></center><br>';
  1389.             } else {
  1390.                 $picture = '';
  1391.             }
  1392.         }
  1393.  
  1394.         $newsText = '
  1395.        <div style="width: 760px; margin: 10px auto; padding: 30px 50px; background: #fff; border: 1px solid #ccc; border-radius: 5px; font-size: 12px; color:#3f2424;">
  1396.            <div style="background: url(http://www.vparchetti.ru/bitrix/templates/vdp/img/logo-vdp.png) 0 0 no-repeat transparent; width: 277px; height: 64px; float: left;"></div>
  1397.            <h2 style="text-align:center;height: 64px;">' . $rsNews['NAME'] . '</h2>' . $picture;
  1398.         $newsText .= str_replace(['src="/', 'href="/'], ['src="http://www.vparchetti.ru/', 'href="http://www.vparchetti.ru/'], $rsNews['DETAIL_TEXT']);
  1399.  
  1400.         if ($rsNews['ACTIVE'] == 'Y') {
  1401.             $newsText .= '<p><a href="http://' . $_SERVER['HTTP_HOST'] . '/news/' . $rsNews['CODE'] . '/" target="_blank">Перейти к новости на сайт</a></p>';
  1402.         }
  1403.  
  1404.         $newsText .= '
  1405.            <p style="font-size:0.9em;text-align:center;color:#afa4a4;border-top: 1px solid #ccc;margin-top: 30px;padding-top: 4px;">Письмо сгенерировано автоматически, отвечать на него не следует.</p>
  1406.            <p style="font-size:0.9em;text-align:center;color:#afa4a4;"><a href="http://' . $_SERVER['HTTP_HOST'] .'/">Villa di Parchetti - Дом паркета и дверей</a></p>
  1407.            <p style="font-size:0.9em;text-align:center;color:#afa4a4;"><a href="http://' . $_SERVER['HTTP_HOST'] . '/unsubscribe/?email=#UNSUBSCRIBE_EMAIL#&token=#UNSUBSCRIBE_TOKEN#">Отписаться от рассылки</a></p>
  1408.        </div>
  1409.        ';
  1410.         $posting = new CPosting();
  1411.  
  1412.         $postingId = $posting->Add([
  1413.             'FROM_FIELD' => '' . 'Villa di Parchetti <order@vparchetti.ru>',
  1414.             'SUBJECT' => 'Villa di Parchetti: ' . $rsNews['NAME'],
  1415.             'BODY_TYPE' => 'html',
  1416.             'BODY' => $newsText,
  1417.             'DIRECT_SEND' => 'Y',
  1418.             'CHARSET' => 'UTF-8',
  1419.             'SUBSCR_FORMAT' => 'html',
  1420.             'RUB_ID' => $sendRubrics,
  1421.             'GROUP_ID' => [],
  1422.         ]);
  1423.  
  1424.         if ($postingId > 0) {
  1425.             $posting->ChangeStatus($postingId, 'P');
  1426. //            $posting->SendMessage($postingId);
  1427. //            $posting->AutoSend($postingId, true);
  1428.             CAgent::AddAgent("CPosting::AutoSend(" . $postingId . ", true);", "subscribe", "N", 0, '', "Y", '');
  1429.         }
  1430.     }
  1431. }
  1432.  
  1433. class singleClass
  1434. {
  1435.     public static $brands = array();
  1436.     public static $brandsData = array();
  1437.     public static $breedsData = array();
  1438.  
  1439.     public static function getBrandUrlFromName($name)
  1440.     {
  1441.         $name = strtoupper(trim($name));
  1442.  
  1443.         if (!sizeof(self::$brands)) {
  1444.             \Bitrix\Main\Loader::IncludeModule('iblock');
  1445.  
  1446.             $rs = CIBlockElement::GetList(array(), array(
  1447.                 'IBLOCK_ID' => 1
  1448.             ), false, false, array(
  1449.                 'NAME',
  1450.                 'CODE'
  1451.             ));
  1452.  
  1453.             while ($ar = $rs->Fetch()) {
  1454.                 self::$brands[strtoupper(trim($ar['NAME']))] = '/brands/' . $ar['CODE'] . '/';
  1455.             }
  1456.         }
  1457.  
  1458.         return isset(self::$brands[$name]) ? self::$brands[$name] : '/brands/';
  1459.     }
  1460.  
  1461.     public static function getCatalogBrandUrlFromName($name)
  1462.     {
  1463.         $name = strtoupper(trim($name));
  1464.  
  1465.         if (!sizeof(self::$brandsData)) {
  1466.             \Bitrix\Main\Loader::IncludeModule('iblock');
  1467.  
  1468.             $rs = CIBlockElement::GetList(array(), array(
  1469.                 'IBLOCK_ID' => 1
  1470.             ), false, false, array(
  1471.                 'NAME',
  1472.                 'CODE'
  1473.             ));
  1474.  
  1475.             while ($ar = $rs->Fetch()) {
  1476.                 self::$brandsData[strtoupper(trim($ar['NAME']))] = $ar;
  1477.             }
  1478.         }
  1479.  
  1480.         return isset(self::$brandsData[$name]) ? '/catalog/' . $GLOBALS['parseUrl'][1] . '/' . self::$brandsData[$name]['CODE'] . '/' : '';
  1481.     }
  1482.  
  1483.     public static function getCatalogBreedUrlFromName($name)
  1484.     {
  1485.         $name = strtoupper(trim($name));
  1486.  
  1487.         if (!sizeof(self::$breedsData)) {
  1488.             \Bitrix\Main\Loader::IncludeModule('iblock');
  1489.  
  1490.             $rs = CIBlockElement::GetList(array(), array(
  1491.                 'IBLOCK_TYPE' => 'content',
  1492.                 'IBLOCK_CODE' => 'breed',
  1493.             ), false, false, array(
  1494.                 'NAME',
  1495.                 'CODE'
  1496.             ));
  1497.  
  1498.             while ($ar = $rs->Fetch()) {
  1499.                 self::$breedsData[strtoupper(trim($ar['NAME']))] = $ar;
  1500.             }
  1501.         }
  1502.  
  1503.         return isset(self::$breedsData[$name]) ? '/catalog/' . $GLOBALS['parseUrl'][1] . '/' . self::$breedsData[$name]['CODE'] . '/' : '';
  1504.     }
  1505. }
  1506.  
  1507. function pr($data)
  1508. {
  1509.     echo '<pre>';
  1510.     print_r($data);
  1511.     echo '</pre>';
  1512. }
  1513.  
  1514. date_default_timezone_set("Etc/GMT-4");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement