Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- if (file_exists($_SERVER["DOCUMENT_ROOT"] . "/bitrix/php_interface/include/constants.php"))
- require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/php_interface/include/constants.php");
- if (file_exists($_SERVER["DOCUMENT_ROOT"] . "/bitrix/php_interface/include/functions.php"))
- require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/php_interface/include/functions.php");
- /*
- if(file_exists($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/include/agent.php"))
- require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/include/agent.php");
- if(file_exists($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/include/reviews.php"))
- require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/include/reviews.php");
- */
- if (file_exists($_SERVER["DOCUMENT_ROOT"] . "/bitrix/php_interface/include/event_handlers.php"))
- require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/php_interface/include/event_handlers.php");
- /*
- AddEventHandler("main", "OnPageStart", "OnBeforePrologRedirectHandler");
- function OnBeforePrologRedirectHandler() {
- global $APPLICATION;
- $curPageUrl = $APPLICATION->GetCurPageParam();
- $arUrl = CHTTP::ParseURL($curPageUrl);
- $arData = explode("/", $arUrl['path']);
- $lastSegment = array_pop($arData);
- if(
- !preg_match('/^.*\..*$/',$lastSegment)
- && substr($lastSegment, -1) != "/"
- && strlen($lastSegment) > 1
- ) {
- $path = _normalizePath($arUrl['path'] . "/" . (array_key_exists('query', $arUrl) && strlen($arUrl['query']) > 0 ? "?{$arUrl['query']}" : ''));
- LocalRedirect($path,false,301);
- }
- }
- */
- include('geo.php');
- AddEventHandler('main', 'OnProlog', array('Handlers', 'OnProlog'));
- AddEventHandler('iblock', 'OnAfterIBlockElementAdd', array('Handlers', 'OnAfterIBlockElementAdd'));
- AddEventHandler("main", "OnPageStart", "OnPageStartHandler", 50);
- function OnPageStartHandler()
- {
- global $USER, $APPLICATION;
- $newUri = preg_replace('#(/catalog/napolnye-pokrytiya/[\d]+/)#is', '/catalog/napolnye-pokrytiya/', $_SERVER['REQUEST_URI']);
- if (!CHTTP::isPathTraversalUri($newUri)) {
- $_SERVER['REQUEST_URI'] = $newUri;
- $GLOBALS['APPLICATION']->reinitPath();
- }
- if (!CModule::IncludeModule('iblock'))
- return true;
- $arUrlTemplates = array(
- "section" => "#SECTION_CODE#/"
- );
- $arVariables = array();
- if (!CComponentEngine::ParseComponentPath('/catalog/', $arUrlTemplates, $arVariables))
- return true;
- $arSection = CIBlockSection::GetList(
- array(), array("IBLOCK_ID" => 9, "CODE" => $arVariables['SECTION_CODE']), false, array("ID", "IBLOCK_ID", "LEFT_MARGIN", "RIGHT_MARGIN", "DEPTH_LEVEL", "NAME")
- )->Fetch();
- if (!$arSection) return true;
- $attn = CIBlockSection::GetList(
- array('left_margin' => 'asc'), array(
- //"ID" => $arSection['ID'],
- "IBLOCK_ID" => $arSection['IBLOCK_ID'],
- "<=LEFT_BORDER" => $arSection["LEFT_MARGIN"],
- ">=RIGHT_BORDER" => $arSection["RIGHT_MARGIN"],
- //"<DEPTH_LEVEL" => $arSection["DEPTH_LEVEL"]
- ), false, array("ID", "IBLOCK_ID", "UF_OLD_TEMPLATE", "UF_NEW2_TEMPLATE", "NAME")
- )->Fetch();
- if ($attn['ID'] == 12) {
- $attn = CIBlockSection::GetList(
- array('left_margin' => 'asc'), array(
- "IBLOCK_ID" => $arSection['IBLOCK_ID'],
- "<=LEFT_BORDER" => $arSection["LEFT_MARGIN"],
- ">=RIGHT_BORDER" => $arSection["RIGHT_MARGIN"],
- "DEPTH_LEVEL" => 2
- ), false, array("ID", "IBLOCK_ID", "UF_OLD_TEMPLATE", "UF_NEW2_TEMPLATE", "NAME")
- )->Fetch();
- }
- if (!$attn) return true;
- // $GLOBALS['IS_OLD_TEMPLATE'] = array_key_exists('UF_OLD_TEMPLATE', $attn) && !empty($attn['UF_OLD_TEMPLATE']) ? true : false;
- // $GLOBALS['IS_NEW2_TEMPLATE'] = array_key_exists('UF_NEW2_TEMPLATE', $attn) && !empty($attn['UF_NEW2_TEMPLATE']) ? true : false;
- $GLOBALS['IS_OLD_TEMPLATE'] = false;
- $GLOBALS['IS_NEW2_TEMPLATE'] = false;
- $GLOBALS['PARENT_SECTON_ID'] = $attn['NAME'];
- if (CModule::IncludeModule("subscribe")) {
- $cPosting = new CPosting;
- $cPosting->AutoSend();
- }
- return true;
- }
- AddEventHandler("main", "OnBeforeUserRegister", Array("MyClass", "OnBeforeUserRegisterHandler"));
- AddEventHandler("main", "OnBeforeUserUpdate", Array("MyClass", "OnBeforeUserUpdateHandler"));
- AddEventHandler("main", "OnBeforeEventSend", Array("MyClass", "OnBeforeEventSendHandler"));
- class MyClass
- {
- function OnBeforeEventSendHandler(&$arFields, $arTemplate)
- {
- if ($arTemplate['EVENT_NAME'] == 'NEW_USER') {
- $user = CUser::GetByID($arFields['USER_ID'])->Fetch();
- $arFields['CITY'] = $user['PERSONAL_CITY'];
- $arFields['PHONE'] = $user['PERSONAL_PHONE'];
- $arFields['NOTES'] = $user['PERSONAL_NOTES'];
- }
- }
- function OnBeforeUserRegisterHandler(&$arFields)
- {
- $arFields["ACTIVE"] = "N";
- $arFields["LOGIN"] = $arFields["EMAIL"];
- $arFields["GROUP_ID"] = array(3,4,6);
- }
- function OnBeforeUserUpdateHandler(&$arFields)
- {
- $arFields["LOGIN"] = $arFields["EMAIL"];
- $user = CUser::GetById($arFields['ID'])->Fetch();
- if ($user) {
- if ($user['ACTIVE'] != 'Y' && $arFields['ACTIVE'] == 'Y') {
- function KeyGen(){
- $key = md5(time());
- $new_key = '';
- for($i=1; $i <= 10; $i ++ ){
- $new_key .= $key[$i];
- }
- return strtoupper($new_key);
- }
- $newgenpass = KeyGen();
- $arFields["PASSWORD"] = $newgenpass;
- $arFields["CONFIRM_PASSWORD"] = $newgenpass;
- $arEventFields= array(
- "LOGIN" => $arFields["LOGIN"],
- "NAME" => $arFields["NAME"],
- "USER_PAROL" => $arFields["PASSWORD"],
- "EMAIL" => $arFields["EMAIL"],
- );
- CEvent::Send("USER_ACTIVATION", 's1', $arEventFields, "N", 58);
- }
- }
- }
- }
- /*
- // файл /bitrix/php_interface/init.php
- // регистрируем обработчик
- AddEventHandler("iblock", "OnBeforeIBlockSectionDelete", Array("MyClass5", "OnBeforeIBlockSectionDeleteHandler"));
- class MyClass5
- {
- // создаем обработчик события "OnBeforeIBlockSectionDelete"
- function OnBeforeIBlockSectionDeleteHandler($ID)
- {
- if($ID==1161)
- {
- global $APPLICATION;
- $APPLICATION->throwException("раздел с ID=1161 нельзя удалить.");
- return false;
- }
- }
- }
- AddEventHandler("iblock", "OnBeforeIBlockElementDelete", Array("MyClass66", "OnBeforeIBlockElementDeleteHandler"));
- class MyClass66
- {
- // создаем обработчик события "OnBeforeIBlockElementDelete"
- function OnBeforeIBlockElementDeleteHandler($ID)
- {
- $array = []; //Инициируешь массив
- $arSelect = Array("ID", "NAME");
- $arFilter = Array("IBLOCK_ID"=> 9,'INCLUDE_SUBSECTIONS' => 'Y' ,"SECTION_CODE" => array("dveri"));
- $res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
- while($ob = $res->GetNextElement())
- {
- $arFields = $ob->GetFields();
- $array[] = $arFields["ID"];
- }
- if (in_array($ID, $array)) {
- global $APPLICATION;
- $APPLICATION->throwException("элемент с ID=1 нельзя удалить.");
- return false;
- }
- }
- }
- */
- AddEventHandler("main", "OnAfterEpilog", "gdwOnAfterEpilog");
- function gdwOnAfterEpilog()
- {
- global $APPLICATION;
- header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
- header('Expires: ' . date('r', time() + 259200));
- $r301 = null;
- switch ($APPLICATION->GetCurPage()) {
- case '/massivnaya_doska':
- $r301 = '/catalog/massivnaya-doska/';
- break;
- case '/terrasnaya_doska':
- $r301 = '/catalog/terrasnaya-doska/';
- break;
- case '/parketnaya_doska':
- $r301 = '/catalog/parketnaya-doska/';
- break;
- case '/inzhenernaya_doska':
- $r301 = '/catalog/inzhenernaya-doska/';
- break;
- case '/modulnyy_parket':
- $r301 = '/catalog/modulnyy-parket/';
- break;
- case '/shtuchnyy_parket':
- $r301 = '/catalog/shtuchnyy-parket/';
- break;
- case '/o_parkete':
- $r301 = '/article/';
- break;
- case '/dveri_mezhkomnatnye1c':
- $r301 = '/catalog/mezhkomnatnye-dveri/';
- break;
- case '/plintus_massivnyy':
- $r301 = '/catalog/plintusy/';
- break;
- case '/plintus_shponirovannyy':
- $r301 = '/catalog/plintusy/';
- break;
- case '/contacts':
- $r301 = '/company/shops.php';
- break;
- case '/gallery':
- $r301 = '/gallery/';
- break;
- case '/catalog/parketnye-masla/':
- $r301 = '/catalog/masla-parketnye/';
- break;
- case '/catalog/parketnye-klei/':
- $r301 = '/catalog/klei-parketnye/';
- break;
- case '/catalog/-/':
- $r301 = '/catalog/sredstva-po-ukhodu-za-parketom/';
- break;
- case '/catalog/napolnye-pokrytiya':
- $r301 = '/catalog/parket/';
- break;
- }
- if ($r301)
- LocalRedirect($r301, false, '301 Moved permanently');
- }
- Class CCAffiliatesShop
- {
- var $cityShopIblockID = 7;
- var $shopIblockID = 8;
- var $cityData = array();
- var $coocieTime = false;
- var $cookiePath = "/ru/location/";
- var $APP = null;
- public function __construct()
- {
- // время на 30 дней
- $this->coocieTime = time() + 86400 * 30;
- $this->APP = &$GLOBALS['APPLICATION'];
- $this->GetStoredData();
- }
- public function GetStoredData()
- {
- $cityName = $this->GetCityData('REGION');
- if (false !== $cityName && strlen($cityName) > 0)
- $this->cityData['NAME'] = $cityName;
- $cityID = $this->GetCityData('REGION_ID');
- if (false !== $cityID && strlen($cityID) > 0)
- $this->cityData['ID'] = $cityID;
- $cityData = $this->GetCityData('REGION_DATA');
- if (
- false !== $cityData && strlen($cityData) > 0
- && CheckSerializedData($cityData, strlen($cityData))
- ) {
- $this->cityData = unserialize($cityData);
- if (!isset($_SESSION["REGION_PHONE"])) {
- global $APPLICATION;
- $page = $APPLICATION->GetCurPageParam();
- $obRes = CIBlockElement::GetList(array(), array("ACTIVE" => "Y", "IBLOCK_ID" => 23, "!PROPERTY_SEARCH_STRING" => false), false, false, array("ID", "PROPERTY_PHONE", "PROPERTY_SEARCH_STRING"));
- while ($arRes = $obRes->GetNext(true, false)) {
- if (strpos($page, $arRes["PROPERTY_SEARCH_STRING_VALUE"]) !== false) {
- $arElement['PROPERTYIES']["PHONE"]["VALUE"] = $arRes["PROPERTY_PHONE_VALUE"];
- $_SESSION["REGION_PHONE"] = $arRes["PROPERTY_PHONE_VALUE"];
- break;
- }
- }
- } else {
- $this->cityData["PROPERTYIES"]["PHONE"]["VALUE"] = $_SESSION["REGION_PHONE"];
- }
- }
- if (
- (false === $cityName || strlen($cityName) <= 0)
- || (false === $cityID || IntVal($cityID) <= 0)
- || (false === $cityData || strlen($cityData) <= 0)
- ) {
- $res = $this->GetDefaultData();
- if (false !== $res) {
- $this->SetCityData($res['NAME'], 'REGION');
- $this->SetCityData($res['ID'], 'REGION_ID');
- $this->SetCityData(serialize($res), 'REGION_DATA');
- $this->cityData = $res;
- }
- }
- }
- public function SetCityData($value = false, $name = false)
- {
- if (
- (false == $value || strlen($value) <= 0)
- || (false == $name || strlen($name) <= 0)
- ) {
- return false;
- }
- $_SESSION[$name] = $value;
- //if($this->coocieTime > 0)
- //$this->APP->set_cookie($name, $value, $this->coocieTime, $this->cookiePath);
- switch ($name) {
- case 'REGION':
- $this->cityData['NAME'] = $value;
- break;
- case 'REGION_ID':
- $this->cityData['ID'] = $value;
- break;
- default:
- $this->cityData[$name] = $value;
- }
- }
- public function GetCityData($name = false)
- {
- if (false == $name || strlen($name) <= 0)
- return false;
- if (array_key_exists($name, $this->cityData))
- return $this->cityData[$name];
- elseif (array_key_exists($name, $_SESSION))
- return $_SESSION[$name];
- else
- return $this->APP->get_cookie($name);
- return false;
- }
- public function GetCityName()
- {
- return $this->cityData['NAME'];
- }
- public function GetCityID()
- {
- return $this->cityData['ID'];
- }
- public function GetDefaultData()
- {
- if (!CModule::IncludeModule("iblock"))
- return false;
- $o = array(); // опции. необзятательно.
- $o['charset'] = 'utf-8'; // нужно указать требуемую кодировку, если она отличается от windows-1251
- $geo = new Geo($o); // запускаем класс
- $city = $geo->get_value('city', true);
- // echo '<pre>';
- // var_dump($city);
- // echo '</pre>';
- $arFilter = Array(
- "ACTIVE" => "Y",
- "IBLOCK_ID" => $this->cityShopIblockID
- );
- if ($cityID = $this->GetCityID())
- $arFilter['ID'] = $cityID;
- else if ($city) {
- $arFilter['NAME'] = $city;
- }
- $rsElement = CIBlockElement::GetList(
- Array("SORT" => "ASC"),
- $arFilter,
- false, false,
- Array("ID", "NAME", "IBLOCK_ID")
- );
- if (!is_object($rsElement) || !$objElement = $rsElement->GetNextElement())
- return false;
- else {
- $arElement = $objElement->GetFields();
- $arElement['PROPERTYIES'] = $objElement->GetProperties();
- }
- return $arElement;
- }
- public function GetCIBlockFilterByCity($filterName = '')
- {
- if (strlen($filterName) <= 0) return false;
- $cityID = $this->GetCityID();
- $arRegFilter = &${$filterName};
- global $arRegFilter;
- $arRegFilter = array(
- "PROPERTY_REGION" => $cityID !== false ? $cityID : false
- );
- }
- public function __destruct()
- {
- }
- }
- AddEventHandler("catalog", "OnCountPriceWithDiscount", array("CCitrusPriceHandler", "___OnCountPriceWithDiscount"));
- AddEventHandler("catalog", "OnGetDiscount", array("CCitrusPriceHandler", "___OnGetDiscount"));
- AddEventHandler("catalog", "OnGetOptimalPrice", array("CCitrusPriceHandler", "___OnGetOptimalPriceHandler"));
- Class CCitrusPriceHandler
- {
- public function ___OnCountPriceWithDiscount($price, $currency, $arDiscounts)
- {
- $price -= $arDiscounts['VALUE'];
- return $price;
- }
- public function ___OnGetDiscount($intProductID, $intIBlockID, $arCatalogGroups, $arUserGroups, $strRenewal, $siteID, $arDiscountCoupons, $boolSKU, $boolGetIDS)
- {
- if (!CModule::IncludeModule("iblock"))
- return true;
- $obj = CIBlockElement::GetByID($intProductID);
- if (!is_object($obj) || !$objEl = $obj->GetNextElement())
- return true;
- $arProp = $objEl->GetProperties();
- if (!$arProp || !array_key_exists('DISCOUNT_SUMM', $arProp))
- return true;
- $discountValue = IntVal(abs($arProp['DISCOUNT_SUMM']['VALUE']));
- if ($discountValue <= 0)
- return true;
- $arResult = array(
- 'VALUE_TYPE' => "F",
- 'VALUE' => $discountValue,
- 'CURRENCY' => "RUB",
- );
- return $arResult;
- }
- public function ___OnGetOptimalPriceHandler($intProductID, $quantity, $arUserGroups, $renewal, $arPrices, $siteID, $arDiscountCoupons)
- {
- $arTmpPrice = CPrice::GetBasePrice($intProductID);
- if (false === $arTmpPrice || !$arTmpPrice)
- return true;
- $obj = CIBlockElement::GetByID($intProductID);
- if (!is_object($obj) || !$objEl = $obj->GetNextElement())
- return true;
- $arProp = $objEl->GetProperties();
- if (!$arProp || !array_key_exists('DISCOUNT_SUMM', $arProp))
- return true;
- $discountValue = IntVal(abs($arProp['DISCOUNT_SUMM']['VALUE']));
- if ($discountValue <= 0)
- return true;
- $arPrice = array(
- "PRICE" => array(
- "ID" => $arTmpPrice["ID"],
- "CATALOG_GROUP_ID" => $arTmpPrice["CATALOG_GROUP_ID"],
- "PRICE" => $arTmpPrice["PRICE"],
- "CURRENCY" => $arTmpPrice["CURRENCY"],
- "ELEMENT_IBLOCK_ID" => $arTmpPrice["ELEMENT_IBLOCK_ID"],
- //"VAT_RATE" => $arCityPrice["VAT_RATE"],
- //"VAT_INCLUDED" => $arCityPrice["VAT_INCLUDED"],
- ),
- "DISCOUNT_PRICE" => $arTmpPrice["PRICE"],
- "DISCOUNT" => array(),
- "DISCOUNT_LIST" => array(
- array(
- "VALUE_TYPE" => "F",
- "CURRENCY" => "RUB",
- "VALUE" => $discountValue
- )
- ),
- );
- if ($arPrice === false)
- return true;
- else
- return $arPrice;
- }
- }
- class CSubsections
- {
- function Init()
- {
- global $APPLICATION;
- $sef_folder = (isset($_SERVER["REAL_FILE_PATH"]) && $_SERVER["REAL_FILE_PATH"] != ""
- ? str_replace("index.php", "", $_SERVER["REAL_FILE_PATH"])
- : $APPLICATION->GetCurDir(false)
- );
- $uri = $GLOBALS["BACK_REQUEST_URI"] = $APPLICATION->GetCurDir(false);
- $uri = str_replace($sef_folder, "", $uri);
- $uri = trim($uri, "/");
- $tmp_uri = "";
- if($uri && CModule::IncludeModule("iblock"))
- {
- $rs = CIBlockElement::GetList(
- array(),
- array("=CODE" => $uri),
- false,
- array("nTopCount" => 1),
- array("ID", "IBLOCK_ID", "IBLOCK_SECTION_ID", "NAME")
- );
- if($ar = $rs->Fetch())
- {
- $tmp_uri = $sef_folder.intval($ar["IBLOCK_SECTION_ID"])."/".$ar["ID"]."/";
- }
- else
- {
- $rs = CIBlockSection::GetList(
- array(),
- array("=CODE" => $uri),
- false,
- array("ID")
- );
- if($ar = $rs->Fetch())
- {
- $tmp_uri = $sef_folder.$ar["ID"]."/";
- }
- }
- }
- if($tmp_uri)
- {
- $_SERVER["REQUEST_URI"] = $REQUEST_URI = $tmp_uri;
- $APPLICATION->sDocPath2 = $tmp_uri."index.php";
- CSubsections::InitParser();
- }
- elseif($sef_folder == $APPLICATION->GetCurDir(false))
- {
- CSubsections::InitParser();
- }
- }
- function Back($arResult)
- {
- global $APPLICATION;
- $arResult["URL_TEMPLATES"]["section"] = "#SECTION_CODE#/";
- $arResult["URL_TEMPLATES"]["element"] = "#ELEMENT_CODE#/";
- $_SERVER["REQUEST_URI"] = $REQUEST_URI = $GLOBALS["BACK_REQUEST_URI"];
- $APPLICATION->sDocPath2 = $GLOBALS["BACK_REQUEST_URI"]."index.php";
- unset($GLOBALS["BACK_REQUEST_URI"]);
- }
- function Parse($html)
- {
- $html = str_ireplace("%"."2f", "/", $html);
- }
- function InitParser()
- {
- if(!defined("CSUBSECTIONS_INIT_HANDLER"))
- {
- define("CSUBSECTIONS_INIT_HANDLER", true);
- AddEventHandler("main", "OnEndBufferContent", array("CSubsections", "Parse"), 10000);
- }
- }
- function GetCode($iblock_id, $section_id, $element_name="")
- {
- $arPath = array();
- if(CModule::IncludeModule("iblock"))
- {
- if($element_name)
- {
- $element_name = CUtil::translit($element_name, LANGUAGE_ID);
- $element_name = $element_name? "/".$element_name: "";
- }
- if($rs = CIBlockSection::GetNavChain($iblock_id, $section_id))
- {
- while($ar = $rs->Fetch())
- {
- $arPath[] = CUtil::translit($ar["NAME"], LANGUAGE_ID);
- }
- }
- }
- return trim(implode("/", $arPath).$element_name, "/");
- }
- function ElementAddHandler($arFields)
- {
- //if($GLOBALS["IBLOCK_ID"] == $IBLOCK_ID)
- //{
- $oElement = new CIBlockElement();
- $oElement->Update($arFields["ID"], array("CODE" => "recalculate"));
- //}
- }
- function ElementUpdateHandler($arFields)
- {
- //if($GLOBALS["IBLOCK_ID"] == $IBLOCK_ID)
- //{
- if($rs = CIBlockElement::GetByID($arFields["ID"]))
- {
- if($ar = $rs->Fetch())
- {
- $arFields["CODE"] = CSubsections::GetCode(
- $ar["IBLOCK_ID"],
- $ar["IBLOCK_SECTION_ID"],
- $ar["NAME"]
- );
- }
- }
- //}
- }
- function SectionAddHandler($arFields)
- {
- //if($GLOBALS["IBLOCK_ID"] == $IBLOCK_ID)
- //{
- $oSection = new CIBlockSection();
- $oSection->Update($arFields["ID"], array("CODE" => "recalculate"));
- //}
- }
- function SectionUpdateHandler($arFields)
- {
- //if($GLOBALS["IBLOCK_ID"] == $IBLOCK_ID)
- //{
- $arFields["CODE"] = CSubsections::GetCode(
- $arFields["IBLOCK_ID"],
- $arFields["ID"]
- );
- //}
- }
- function Recalculate($iblock_id)
- {
- if(CModule::IncludeModule("iblock"))
- {
- $oSection = new CIBlockSection();
- if($rs = CIBlockSection::GetList(array(), array("IBLOCK_ID" => $iblock_id), false, array("ID")))
- {
- while($ar = $rs->Fetch())
- {
- $oSection->Update($ar['ID'], array("CODE" => "recalculate"));
- }
- }
- $oElement = new CIBlockElement();
- if($rs = CIBlockElement::GetList(array(), array("IBLOCK_ID" => $iblock_id), false, false, array("ID")))
- {
- while($ar = $rs->Fetch())
- {
- $oElement->Update($ar['ID'], array("CODE" => "recalculate"));
- }
- }
- }
- }
- }
- AddEventHandler("iblock", "OnAfterIBlockElementAdd", array("CSubsections", "ElementAddHandler"));
- AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", array("CSubsections", "ElementUpdateHandler"));
- AddEventHandler("iblock", "OnAfterIBlockSectionAdd", array("CSubsections", "SectionAddHandler"));
- //AddEventHandler("iblock", "OnBeforeIBlockSectionUpdate", array("CSubsections", "SectionUpdateHandler"));
- CSubsections::InitParser();
- function strpos_arr($haystack, $needle)
- {
- if (!is_array($needle)) {
- $needle = array($needle);
- }
- foreach ($needle AS $what) {
- if (($pos = strpos($haystack, $what)) !== false) {
- return $pos;
- }
- }
- return false;
- }
- AddEventHandler("sale", "OnOrderNewSendEmail", "OnOrderNewSendEmailHandler");
- define("LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"] . "/log.txt");
- function OnOrderNewSendEmailHandler($ID, &$eventName, &$arFields)
- {
- CModule::IncludeModule("sale");
- $strOrderList = "";
- $arBasketList = array();
- $dbBasketItems = CSaleBasket::GetList(
- array("ID" => "ASC"),
- array("ORDER_ID" => $arFields["ORDER_ID"]),
- false,
- false,
- array("ID", "PRODUCT_ID", "NAME", "QUANTITY", "PRICE", "CURRENCY", "TYPE", "SET_PARENT_ID")
- );
- while ($arItem = $dbBasketItems->GetNext(true, false)) {
- if (CSaleBasketHelper::isSetItem($arItem))
- continue;
- $arBasketList[] = $arItem;
- }
- $arBasketList = getMeasures($arBasketList);
- $sOrderList = "<table border='1'><tr><td>Наименование</td><td>Количество</td><td>Цена</td></tr>";
- foreach ($arBasketList as $arItem) {
- $measureText = (isset($arItem["MEASURE_TEXT"]) && strlen($arItem["MEASURE_TEXT"])) ? $arItem["MEASURE_TEXT"] : GetMessage("SOA_SHT");
- $sOrderList .= "<tr><td>" . $arItem["NAME"] . "</td><td>" . $arItem["QUANTITY"] . " " . $measureText . "</td><td>" . $arItem["PRICE"] . " руб</td></tr>";
- }
- $sOrderList .= "</table>";
- $db_props = CSaleOrderPropsValue::GetOrderProps($arFields["ORDER_ID"]);
- while ($arProps = $db_props->GetNext(true, false)) {
- if ($arProps["CODE"] == "PERS_PHONE") {
- $arFields["ORDER_PHONE"] = $arProps["VALUE"];
- break;
- }
- }
- $arFields["ORDER_LIST"] = $sOrderList;
- // $res = print_r($arFields,true);
- // AddMessage2Log($ID);
- // AddMessage2Log($res);
- }
- AddEventHandler("catalog", "OnSuccessCatalogImport1C", "DSOnSuccessCatalogImport1C");
- //Устанавливаем тип напольного покрытия, покрытие в свойство
- function DSOnSuccessCatalogImport1C()
- {
- CModule::IncludeModule("iblock");
- $el = new CIBlockElement();
- $oRes = CIBlockElement::GetList(array(), array("ACTIVE" => "Y", "IBLOCK_ID" => 9, "SECTION_ID" => 12, "INCLUDE_SUBSECTIONS" => "Y"), false, false
- , array("ID", "IBLOCK_SECTION_ID", "PROPERTY_TYPE_OF_FLOORING", "PROPERTY_DISCOUNT_SUMM"
- , "PROPERTY_EFFECT_1", "PROPERTY_CHAMFER", "PROPERTY_UKLADKA_NA_TEPLYY_POL", "PROPERTY_POPULYARNYE", "PROPERTY_NEW_TOVAR"));
- while ($aRes = $oRes->GetNext(true, false)) {
- $aFilterVal = array();
- /*тип напольного покрытия*/
- if ($aRes["IBLOCK_SECTION_ID"]) {
- $oResSect = CIBlockSection::GetByID($aRes["IBLOCK_SECTION_ID"]);
- if ($aResSect = $oResSect->GetNext(true, false)) {
- $aFilterVal["TYPE_OF_FLOORING"] = $aResSect["NAME"];
- }
- }
- /*покрытие*/
- if ($aRes["PROPERTY_EFFECT_1_VALUE"] != "Лак" && $aRes["PROPERTY_EFFECT_1_VALUE"] != "Масло") {
- $aFilterVal["EFFECT_1"] = 'Нет';
- }
- /*фаска*/
- if ($aRes["PROPERTY_CHAMFER_VALUE"] == "Фаска") {
- $aFilterVal["CHAMFER"] = "Есть";
- } elseif (trim($aRes["PROPERTY_CHAMFER_VALUE"]) == "") {
- $aFilterVal["CHAMFER"] = 'Нет';
- }
- /*Для поля Категория*/
- $aFilterVal["CATEGORY_FILTER"] = array();
- if ($aRes["PROPERTY_UKLADKA_NA_TEPLYY_POL_VALUE"] == "Да")
- $aFilterVal["CATEGORY_FILTER"][] = "Укладка на теплый пол";
- if ($aRes["PROPERTY_POPULYARNYE_VALUE"] == "Да")
- $aFilterVal["CATEGORY_FILTER"][] = "Популярные";
- if ($aRes["PROPERTY_NEW_TOVAR_VALUE"] == "Да")
- $aFilterVal["CATEGORY_FILTER"][] = "Новинки";
- if (IntVal(abs($aRes['PROPERTY_DISCOUNT_SUMM_VALUE'])))
- $aFilterVal["CATEGORY_FILTER"][] = "Скидки";
- if (count($aFilterVal) > 0)
- CIBlockElement::SetPropertyValuesEx($aRes["ID"], false, $aFilterVal);
- }
- /*Цена и ед измерения*/
- \Bitrix\Main\Loader::IncludeModule('sale');
- \Bitrix\Main\Loader::IncludeModule('catalog');
- $measures = array();
- $rsMeasures = CCatalogMeasure::getList();
- while ($measure = $rsMeasures->Fetch()) {
- $measures[$measure['SYMBOL_RUS']] = $measure;
- }
- $oRes = CIBlockElement::GetList(array(), array(
- 'ACTIVE' => 'Y',
- 'IBLOCK_ID' => 9,
- 'INCLUDE_SUBSECTIONS' => 'Y'
- ), false, false, array(
- 'ID',
- 'IBLOCK_SECTION_ID',
- 'CATALOG_GROUP_1',
- 'PROPERTY_DISCOUNT_SUMM',
- 'PROPERTY_CML2_BASE_UNIT',
- 'PROPERTY_CML2_TRAITS'
- ));
- while ($aRes = $oRes->GetNext(true, false)) {
- $aFilterVal = array();
- $discountValue = IntVal(abs($aRes['PROPERTY_DISCOUNT_SUMM_VALUE']));
- $iPrice = $aRes["CATALOG_PRICE_1"];
- if ($discountValue > 0 && $aRes["CATALOG_PRICE_1"] > 0) {
- $iPrice = $aRes["CATALOG_PRICE_1"] - $discountValue;
- }
- $aFilterVal["DISCOUNT_PRICE"] = $iPrice;
- if (count($aFilterVal) > 0) {
- CIBlockElement::SetPropertyValuesEx($aRes["ID"], false, $aFilterVal);
- }
- $aRes['PROPERTY_CML2_BASE_UNIT_VALUE'] = trim($aRes['PROPERTY_CML2_BASE_UNIT_VALUE']);
- CCatalogProduct::Update($aRes['ID'], array(
- 'MEASURE' => isset($measures[$aRes['PROPERTY_CML2_BASE_UNIT_VALUE']]) ? $measures[$aRes['PROPERTY_CML2_BASE_UNIT_VALUE']]['ID'] : $measures['шт']
- ));
- $oResOffers = CIBlockElement::GetList(array(), array(
- 'ACTIVE' => 'Y',
- 'IBLOCK_ID' => 30,
- 'PROPERTY_CML2_LINK' => $aRes['ID'],
- ), false, false, array(
- 'ID',
- ));
- while ($resOffer = $oResOffers->Fetch()) {
- CCatalogProduct::Update($resOffer['ID'], array(
- 'MEASURE' => isset($measures[$aRes['PROPERTY_CML2_BASE_UNIT_VALUE']]) ? $measures[$aRes['PROPERTY_CML2_BASE_UNIT_VALUE']]['ID'] : $measures['шт']
- ));
- }
- //ед изменерия
- CIBlockElement::SetPropertyValuesEx($aRes["ID"], false,
- array(
- 'BASE_UNIT' => $aRes['PROPERTY_CML2_BASE_UNIT_VALUE']
- )
- );
- }
- //Получаем все ранее выгруженные породы из инфоблока
- $breeds = [];
- $rsBreeds = CIBlockElement::GetList([], [
- 'IBLOCK_TYPE' => 'content',
- 'IBLOCK_CODE' => 'breed',
- ], false, false, [
- 'ID',
- 'NAME',
- ]);
- while ($breed = $rsBreeds->Fetch()) {
- $breeds[strtoupper($breed['NAME'])] = 'Y';
- }
- //Описание и другие работы с родителем
- $oRes = CIBlockElement::GetList(array(), array(
- 'ACTIVE' => 'Y',
- 'IBLOCK_ID' => 9,
- 'INCLUDE_SUBSECTIONS' => 'Y'
- ));
- while ($obRes = $oRes->GetNextElement()) {
- $arFields = $obRes->GetFields();
- $arProps = $obRes->GetProperties();
- if (sizeof($arProps['CML2_TRAITS']['VALUE'])) {
- $DETAIL_TEXT = false;
- foreach ($arProps['CML2_TRAITS']['VALUE'] as $key => $val) {
- if ($arProps['CML2_TRAITS']['DESCRIPTION'][$key] == 'ПолноеОписание') {
- $DETAIL_TEXT = trim($val);
- break;
- }
- }
- if ($DETAIL_TEXT !== false) {
- CIBlockElement::SetPropertyValuesEx($arFields['ID'], 9, array(
- 'FULL_DISCRIP' => array(
- 'VALUE' => array(
- 'TYPE' => 'TEXT',
- 'TEXT' => $DETAIL_TEXT
- )
- )
- ));
- }
- }
- if (sizeof($arProps['KARTINKIDOP']['VALUE'])) {
- $pictures = array();
- foreach ($arProps['KARTINKIDOP']['VALUE'] as $src) {
- if (trim($src) != '') {
- $src = '/upload/1c_catalog/' . $src;
- $pictures[] = array(
- 'VALUE' => CFile::MakeFileArray($src),
- 'DESCRIPTION' => ''
- );
- }
- }
- if (sizeof($pictures)) {
- CIBlockElement::SetPropertyValuesEx($arFields['ID'], 9, array(
- 'MORE_PHOTO' => $pictures
- ));
- }
- }
- //Проверяем на наличие в инфблоке Породы
- if (strlen($arProps['BREED']['VALUE']) && !isset($breeds[strtoupper(trim($arProps['BREED']['VALUE']))])) {
- $code = CUtil::translit(trim($arProps['BREED']['VALUE']), 'ru', [
- 'max_len' => '100',
- 'change_case' => 'L',
- 'replace_space' => '-',
- 'replace_other' => '-',
- 'delete_repeat_replace' => 'true',
- 'use_google' => 'true',
- ]);
- $id = $el->Add([
- 'IBLOCK_ID' => 36,
- 'NAME' => trim($arProps['BREED']['VALUE']),
- 'CODE' => $code,
- ]);
- if ($id) {
- $breeds[strtoupper(trim($arProps['BREED']['VALUE']))] = 'Y';
- }
- }
- }
- $arSizes = array();
- $res = CIBlockElement::GetList(array(), array(
- 'IBLOCK_CODE' => 'sizes'
- ), false, false, array(
- 'ID',
- 'NAME'
- ));
- while ($ar = $res->Fetch()) {
- $arSizes[$ar['NAME']] = $ar['ID'];
- }
- $res = CIBlockElement::GetList(array(), array(
- 'IBLOCK_CODE' => 'catalog-offers'
- ), false, false, array('*'));
- while ($ar = $res->GetNextElement()) {
- $arFields = $ar->GetFields();
- $arProps = $ar->GetProperties();
- if (sizeof($arProps['CML2_ATTRIBUTES']['VALUE'])) {
- $size = false;
- $discountValue = 0;
- $remainValue = '';
- $codeNom = '';
- $packaged = '';
- foreach ($arProps['CML2_ATTRIBUTES']['VALUE'] as $key => $val) {
- if ($arProps['CML2_ATTRIBUTES']['DESCRIPTION'][$key] == 'Размер') {
- $size = trim($val);
- } elseif ($arProps['CML2_ATTRIBUTES']['DESCRIPTION'][$key] == 'ЗначениеСкидки') {
- $discountValue = trim($val);
- } elseif ($arProps['CML2_ATTRIBUTES']['DESCRIPTION'][$key] == 'Остаток') {
- $remainValue = trim($val);
- } elseif ($arProps['CML2_ATTRIBUTES']['DESCRIPTION'][$key] == 'КодыНом') {
- $codeNom = trim($val);
- } elseif ($arProps['CML2_ATTRIBUTES']['DESCRIPTION'][$key] == 'ВУпаковке') {
- $packaged = trim($val);
- }
- }
- if ($size !== false) {
- if (!isset($arSizes[$size])) {
- $arSizes[$size] = $el->Add(array(
- 'IBLOCK_ID' => $arProps['SIZE_SELECTION']['LINK_IBLOCK_ID'],
- 'ACTIVE' => 'Y',
- 'NAME' => $size
- ));
- }
- CIBlockElement::SetPropertyValuesEx($arFields['ID'], false, array(
- 'SIZE_SELECTION' => $arSizes[$size]
- ));
- }
- CIBlockElement::SetPropertyValuesEx($arFields['ID'], false, array(
- 'DISCOUNT_SUMM' => $discountValue,
- 'CODE_NOM' => $codeNom,
- 'REMAIN' => $remainValue,
- 'PACKAGED' => $packaged,
- ));
- }
- }
- //Добавляем категорию фильтра В наличии
- $oRes = CIBlockElement::GetList(array(), array(
- "ACTIVE" => "Y",
- "IBLOCK_ID" => 9
- ), false, false, array(
- "ID", "IBLOCK_SECTION_ID", "PROPERTY_TYPE_OF_FLOORING", "PROPERTY_DISCOUNT_SUMM"
- , "PROPERTY_EFFECT_1", "PROPERTY_CHAMFER", "PROPERTY_UKLADKA_NA_TEPLYY_POL", "PROPERTY_POPULYARNYE", "PROPERTY_NEW_TOVAR"
- ));
- while ($aRes = $oRes->GetNext(true, false)) {
- $aFilterVal = array();
- /*Для поля Категория*/
- $aFilterVal["CATEGORY_FILTER"] = array();
- if ($aRes["PROPERTY_UKLADKA_NA_TEPLYY_POL_VALUE"] == "Да")
- $aFilterVal["CATEGORY_FILTER"][] = "Укладка на теплый пол";
- if ($aRes["PROPERTY_POPULYARNYE_VALUE"] == "Да")
- $aFilterVal["CATEGORY_FILTER"][] = "Популярные";
- if ($aRes["PROPERTY_NEW_TOVAR_VALUE"] == "Да")
- $aFilterVal["CATEGORY_FILTER"][] = "Новинки";
- if (IntVal(abs($aRes['PROPERTY_DISCOUNT_SUMM_VALUE'])))
- $aFilterVal["CATEGORY_FILTER"][] = "Скидки";
- $remain = 'В наличии';
- $rsOffers = CIBlockElement::GetList([], [
- 'IBLOCK_CODE' => 'catalog-offers',
- 'PROPERTY_CML2_LINK' => $aRes['ID'],
- ], false, false, [
- 'PROPERTY_REMAIN'
- ]);
- while ($offer = $rsOffers->Fetch()) {
- if ($offer['PROPERTY_REMAIN_VALUE'] != $remain) {
- $remain = '';
- break;
- }
- }
- if (!isset($offer)) {
- $remain = '';
- }
- if ($remain != '') {
- $aFilterVal["CATEGORY_FILTER"][] = $remain;
- }
- if (count($aFilterVal) > 0)
- CIBlockElement::SetPropertyValuesEx($aRes["ID"], false, $aFilterVal);
- }
- /*Цена и ед измерения ТП*/
- $oRes = CIBlockElement::GetList(array(), array(
- 'ACTIVE' => 'Y',
- 'IBLOCK_CODE' => 'catalog-offers'
- ), false, false, array(
- 'ID',
- 'IBLOCK_SECTION_ID',
- 'CATALOG_GROUP_1',
- 'PROPERTY_DISCOUNT_SUMM',
- 'PROPERTY_CML2_BASE_UNIT',
- 'PROPERTY_CML2_TRAITS'
- ));
- while ($aRes = $oRes->GetNext(true, false)) {
- $aFilterVal = array();
- $discountValue = IntVal(abs($aRes['PROPERTY_DISCOUNT_SUMM_VALUE']));
- $iPrice = $aRes["CATALOG_PRICE_1"];
- if ($discountValue > 0 && $aRes["CATALOG_PRICE_1"] > 0) {
- $iPrice = $aRes["CATALOG_PRICE_1"] - $discountValue;
- }
- $aFilterVal["DISCOUNT_PRICE"] = $iPrice;
- if (count($aFilterVal) > 0) {
- CIBlockElement::SetPropertyValuesEx($aRes["ID"], false, $aFilterVal);
- }
- //ед изменерия
- // CCatalogProduct::Update($aRes['ID'], array(
- // 'MEASURE' => isset($measures[$aRes['PROPERTY_CML2_BASE_UNIT_VALUE']]) ? $measures[$aRes['PROPERTY_CML2_BASE_UNIT_VALUE']]['ID'] : $measures['шт']
- // ));
- /*
- CIBlockElement::SetPropertyValuesEx($aRes["ID"], false,
- array(
- 'BASE_UNIT'=>$aRes['PROPERTY_CML2_BASE_UNIT_VALUE']
- )
- );
- */
- }
- CModule::IncludeModule("catalog");
- CCatalogExport::PreGenerateExport(5);
- }
- AddEventHandler('iblock', 'OnAfterIBlockElementUpdate', array('Handlers', 'OnAfterIBlockElementUpdate'));
- AddEventHandler('main', 'OnAdminTabControlBegin', array('Handlers', 'OnAdminTabControlBegin'));
- AddEventHandler('subscribe', 'BeforePostingSendMail', array('Handlers', 'BeforePostingSendMail'));
- AddEventHandler('main', 'OnEndBufferContent', array('Handlers', 'OnEndBufferContent'));
- class Handlers
- {
- public static function OnEndBufferContent(&$content)
- {
- global $APPLICATION;
- if (!preg_match('/\/bitrix\/admin\//is', $APPLICATION->GetCurDir())) {
- \Bitrix\Main\Loader::IncludeModule('iblock');
- $queryBanners = CIBlockElement::GetList(array(), array(
- 'IBLOCK_ID' => 39,
- 'ACTIVE' => 'Y',
- ), false, false, array(
- 'NAME',
- 'PREVIEW_PICTURE',
- 'PREVIEW_TEXT',
- 'PROPERTY_TAG',
- 'PROPERTY_WIDTH',
- 'PROPERTY_HEIGHT',
- 'PROPERTY_LINK',
- 'PROPERTY_LINK_OPEN_BLANK',
- ));
- while ($resBanner = $queryBanners->Fetch()) {
- /*$size = array();
- if (strlen($resBanner['PROPERTY_WIDTH_VALUE']) && strlen($resBanner['PROPERTY_HEIGHT_VALUE'])) {
- $size = array(
- 'width' => strlen($resBanner['PROPERTY_WIDTH_VALUE']) ? $resBanner['PROPERTY_WIDTH_VALUE'] : '',
- 'height' => strlen($resBanner['PROPERTY_HEIGHT_VALUE']) ? $resBanner['PROPERTY_HEIGHT_VALUE'] : '',
- );
- }
- $picture = CFile::ResizeImageGet($resBanner['PREVIEW_PICTURE'], $size, (sizeof($size) ? BX_RESIZE_IMAGE_EXACT : BX_RESIZE_IMAGE_PROPORTIONAL), true);
- if (strlen($resBanner['PROPERTY_LINK_VALUE'])) {
- $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>';
- } else {
- $bannerHtml = '<img src="' . $picture['src'] . '" width="' . $picture['width'] . '" height="' . $picture['height'] . '" alt="' . $resBanner['NAME'] . '">';
- }*/
- $content = str_replace($resBanner['PROPERTY_TAG_VALUE'], $resBanner['PREVIEW_TEXT'], $content);
- }
- }
- }
- public static function OnProlog()
- {
- global $APPLICATION;
- $GLOBALS['parseUrl'] = explode('/', $APPLICATION->GetCurDir());
- array_shift($GLOBALS['parseUrl']);
- array_pop($GLOBALS['parseUrl']);
- switch ($APPLICATION->GetCurDir()) {
- case '/catalog/napolnye-pokrytiya/':
- LocalRedirect('/catalog/parket/', false, '301 Moved permanently');
- break;
- }
- $GLOBALS['catalogPageType'] = 'catalog';
- if ((sizeof($GLOBALS['parseUrl']) == 3 || sizeof($GLOBALS['parseUrl']) == 4) && $GLOBALS['parseUrl'][0] == 'catalog') {
- $sectionsCodeDveri = [];
- $rsSectionsDveri = CIBlockSection::GetList([], [
- 'IBLOCK_ID' => 9,
- 'SECTION_ID' => 13,
- ], false);
- while ($sectionsDveri = $rsSectionsDveri->Fetch()) {
- $rsSectionsDveriSub = CIBlockSection::GetList(array(
- 'LEFT_MARGIN' => 'ASC',
- ), array(
- 'IBLOCK_ID' => $sectionsDveri['IBLOCK_ID'],
- '>LEFT_MARGIN' => $sectionsDveri['LEFT_MARGIN'],
- '<RIGHT_MARGIN' => $sectionsDveri['RIGHT_MARGIN'],
- ));
- while ($sectionsDveriSub = $rsSectionsDveriSub->Fetch()) {
- $sectionsCodeDveri[] = $sectionsDveriSub['CODE'];
- }
- $sectionsCodeDveri[] = $sectionsDveri['CODE'];
- }
- $rsElementCheck = CIBlockElement::GetList([], [
- 'IBLOCK_ID' => 9,
- 'CODE' => $GLOBALS['parseUrl'][2],
- ], false, [
- 'CODE'
- ])->Fetch();
- if (!$rsElementCheck) {
- if (in_array($GLOBALS['parseUrl'][1], $sectionsCodeDveri)) {
- $GLOBALS['catalogPageType'] = 'brand-dveri';
- } else {
- $rsBrand = CIBlockElement::GetList([], [
- 'IBLOCK_ID' => 1,
- 'CODE' => $GLOBALS['parseUrl'][2],
- ], false, false, [
- 'ID'
- ]);
- if ($brand = $rsBrand->Fetch()) {
- $GLOBALS['catalogPageType'] = 'brand';
- } else {
- $rsBreed = CIBlockElement::GetList([], [
- 'IBLOCK_TYPE' => 'content',
- 'IBLOCK_CODE' => 'breed',
- 'CODE' => $GLOBALS['parseUrl'][2],
- ], false, false, [
- 'ID'
- ]);
- if ($breed = $rsBreed->Fetch()) {
- $GLOBALS['catalogPageType'] = 'breed';
- }
- }
- }
- } else {
- if (in_array($GLOBALS['parseUrl'][1], $sectionsCodeDveri)) {
- $GLOBALS['catalogPageType'] = 'dveri-detail';
- }
- }
- }
- }
- public static function OnAdminTabControlBegin(&$form)
- {
- global $APPLICATION;
- if ($APPLICATION->GetCurPage() == '/bitrix/admin/iblock_element_edit.php' && $_REQUEST['IBLOCK_ID'] == 2 && $_REQUEST['type'] == 'content') {
- \Bitrix\Main\Loader::IncludeModule('subscribe');
- $rubrics = [];
- $rsRubrics = CRubric::GetList([
- 'ID' => 'DESC',
- ], [
- 'ACTIVE' => 'Y',
- ]);
- while ($rsRubric = $rsRubrics->Fetch()) {
- $rubrics[] = $rsRubric;
- }
- $content = '<tr valign="top">
- <td>Отправить рассылку?:</td>
- <td>
- <label><input type="checkbox" name="SEND_SUBSCRIBE" value="Y"> Отправить</label>
- </td>
- </tr>
- <tr valign="top">
- <td>Выберите рубрики подписчиков:</td>
- <td>
- <span>Письмо будет отправлено только подписчикам из указанных рубрик.</span>
- <br><br>';
- foreach ($rubrics as $rubric) {
- $content .= '<div style="margin-bottom: 5px;"><label><input type="checkbox" name="SEND_RUBRICS[]" value="' . $rubric['ID'] . '"> ' . $rubric['NAME'] . '</label></div>';
- }
- $content .= '
- </td>
- </tr>';
- $form->tabs[] = [
- 'DIV' => 'sendSubscribe',
- 'TAB' => 'Рассылка',
- 'ICON' => 'main_user_edit',
- 'TITLE' => 'Рассылка',
- 'CONTENT' => $content,
- ];
- }
- }
- public static function BeforePostingSendMail($arFields) {
- if (preg_match('#\#UNSUBSCRIBE_EMAIL\##is', $arFields['BODY'])) {
- \Bitrix\Main\Loader::IncludeModule('subscribe');
- $subscr = new CSubscription();
- $subscribe = $subscr->GetByEmail($arFields['EMAIL'])->Fetch();
- if ($subscribe) {
- $arFields['BODY'] = str_replace(['#UNSUBSCRIBE_EMAIL#', '#UNSUBSCRIBE_TOKEN#'], [$subscribe['EMAIL'], $subscribe['CONFIRM_CODE']], $arFields['BODY']);
- }
- }
- return $arFields;
- }
- public static function OnAfterIBlockElementUpdate(&$arFields)
- {
- if ($arFields['IBLOCK_ID'] == 2 && $arFields['ID'] > 0 && isset($_REQUEST['SEND_SUBSCRIBE'])) {
- new NewsSubscribe($arFields['IBLOCK_ID'], $arFields['ID'], $_REQUEST['SEND_RUBRICS']);
- }
- }
- public static function OnAfterIBlockElementAdd($arFields)
- {
- if ($arFields['IBLOCK_ID'] == 34 && $arFields['ID']) {
- CEvent::Send('LETTER_TO_DIRECTOR', SITE_ID, array(
- 'NAME' => $arFields['PROPERTY_VALUES'][227],
- 'PHONE' => $arFields['PROPERTY_VALUES'][226],
- 'EMAIL' => $arFields['PROPERTY_VALUES'][231],
- 'MESSAGE' => $arFields['PROPERTY_VALUES'][228]
- ));
- } elseif ($arFields['IBLOCK_ID'] == 35 && $arFields['ID']) {
- CEvent::Send('ARCHITECTS_AND_DESIGNERS', SITE_ID, array(
- 'NAME' => $arFields['PROPERTY_VALUES'][232],
- 'PHONE' => $arFields['PROPERTY_VALUES'][233],
- 'EMAIL' => $arFields['PROPERTY_VALUES'][234],
- 'MESSAGE' => $arFields['PROPERTY_VALUES'][235]
- ));
- } elseif ($arFields['IBLOCK_ID'] == 37) {
- CEvent::Send('QUESTION_ADD', SITE_ID, array(
- 'NAME' => $arFields['PROPERTY_VALUES'][245],
- 'EMAIL' => $arFields['PROPERTY_VALUES'][246],
- 'QUESTION' => $arFields['PROPERTY_VALUES'][247],
- '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',
- ));
- }
- }
- }
- class NewsSubscribe
- {
- public function __construct($iblockId, $newsId, $sendRubrics = [])
- {
- \Bitrix\Main\Loader::IncludeModule('iblock');
- if (!is_null($sendRubrics) && sizeof($sendRubrics) > 0) {
- $rsNews = CIBlockElement::GetList([], [
- 'IBLOCK_ID' => $iblockId,
- 'ID' => $newsId,
- '>PROPERTY_SEND_SUBSCRIBE' => 0
- ], false, false, [
- 'ID',
- 'IBLOCK_ID',
- 'ACTIVE',
- 'CODE',
- 'NAME',
- 'PREVIEW_PICTURE',
- 'DETAIL_PICTURE',
- 'DETAIL_TEXT',
- ]);
- if ($rsNews = $rsNews->Fetch()) {
- $this->sendSubscribe($rsNews, $sendRubrics);
- }
- }
- }
- private function sendSubscribe($rsNews, $sendRubrics = [])
- {
- \Bitrix\Main\Loader::IncludeModule('subscribe');
- CIBlockElement::SetPropertyValuesEx($rsNews['ID'], $rsNews['IBLOCK_ID'], [
- 'SEND_SUBSCRIBE' => '',
- ]);
- $picture = '';
- if ($rsNews['DETAIL_PICTURE'] > 0) {
- $picture = CFile::ResizeImageGet($rsNews['DETAIL_PICTURE'], [
- 'width' => 760,
- 'height' => 1000,
- ]);
- if (isset($picture['src'])) {
- $picture = '<center><img src="http://vparchetti.ru' . $picture['src'] . '" alt="' . htmlspecialchars($rsNews['NAME']) . '" /></center><br>';
- } else {
- $picture = '';
- }
- }
- $newsText = '
- <div style="width: 760px; margin: 10px auto; padding: 30px 50px; background: #fff; border: 1px solid #ccc; border-radius: 5px; font-size: 12px; color:#3f2424;">
- <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>
- <h2 style="text-align:center;height: 64px;">' . $rsNews['NAME'] . '</h2>' . $picture;
- $newsText .= str_replace(['src="/', 'href="/'], ['src="http://www.vparchetti.ru/', 'href="http://www.vparchetti.ru/'], $rsNews['DETAIL_TEXT']);
- if ($rsNews['ACTIVE'] == 'Y') {
- $newsText .= '<p><a href="http://' . $_SERVER['HTTP_HOST'] . '/news/' . $rsNews['CODE'] . '/" target="_blank">Перейти к новости на сайт</a></p>';
- }
- $newsText .= '
- <p style="font-size:0.9em;text-align:center;color:#afa4a4;border-top: 1px solid #ccc;margin-top: 30px;padding-top: 4px;">Письмо сгенерировано автоматически, отвечать на него не следует.</p>
- <p style="font-size:0.9em;text-align:center;color:#afa4a4;"><a href="http://' . $_SERVER['HTTP_HOST'] .'/">Villa di Parchetti - Дом паркета и дверей</a></p>
- <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>
- </div>
- ';
- $posting = new CPosting();
- $postingId = $posting->Add([
- 'FROM_FIELD' => '' . 'Villa di Parchetti <order@vparchetti.ru>',
- 'SUBJECT' => 'Villa di Parchetti: ' . $rsNews['NAME'],
- 'BODY_TYPE' => 'html',
- 'BODY' => $newsText,
- 'DIRECT_SEND' => 'Y',
- 'CHARSET' => 'UTF-8',
- 'SUBSCR_FORMAT' => 'html',
- 'RUB_ID' => $sendRubrics,
- 'GROUP_ID' => [],
- ]);
- if ($postingId > 0) {
- $posting->ChangeStatus($postingId, 'P');
- // $posting->SendMessage($postingId);
- // $posting->AutoSend($postingId, true);
- CAgent::AddAgent("CPosting::AutoSend(" . $postingId . ", true);", "subscribe", "N", 0, '', "Y", '');
- }
- }
- }
- class singleClass
- {
- public static $brands = array();
- public static $brandsData = array();
- public static $breedsData = array();
- public static function getBrandUrlFromName($name)
- {
- $name = strtoupper(trim($name));
- if (!sizeof(self::$brands)) {
- \Bitrix\Main\Loader::IncludeModule('iblock');
- $rs = CIBlockElement::GetList(array(), array(
- 'IBLOCK_ID' => 1
- ), false, false, array(
- 'NAME',
- 'CODE'
- ));
- while ($ar = $rs->Fetch()) {
- self::$brands[strtoupper(trim($ar['NAME']))] = '/brands/' . $ar['CODE'] . '/';
- }
- }
- return isset(self::$brands[$name]) ? self::$brands[$name] : '/brands/';
- }
- public static function getCatalogBrandUrlFromName($name)
- {
- $name = strtoupper(trim($name));
- if (!sizeof(self::$brandsData)) {
- \Bitrix\Main\Loader::IncludeModule('iblock');
- $rs = CIBlockElement::GetList(array(), array(
- 'IBLOCK_ID' => 1
- ), false, false, array(
- 'NAME',
- 'CODE'
- ));
- while ($ar = $rs->Fetch()) {
- self::$brandsData[strtoupper(trim($ar['NAME']))] = $ar;
- }
- }
- return isset(self::$brandsData[$name]) ? '/catalog/' . $GLOBALS['parseUrl'][1] . '/' . self::$brandsData[$name]['CODE'] . '/' : '';
- }
- public static function getCatalogBreedUrlFromName($name)
- {
- $name = strtoupper(trim($name));
- if (!sizeof(self::$breedsData)) {
- \Bitrix\Main\Loader::IncludeModule('iblock');
- $rs = CIBlockElement::GetList(array(), array(
- 'IBLOCK_TYPE' => 'content',
- 'IBLOCK_CODE' => 'breed',
- ), false, false, array(
- 'NAME',
- 'CODE'
- ));
- while ($ar = $rs->Fetch()) {
- self::$breedsData[strtoupper(trim($ar['NAME']))] = $ar;
- }
- }
- return isset(self::$breedsData[$name]) ? '/catalog/' . $GLOBALS['parseUrl'][1] . '/' . self::$breedsData[$name]['CODE'] . '/' : '';
- }
- }
- function pr($data)
- {
- echo '<pre>';
- print_r($data);
- echo '</pre>';
- }
- date_default_timezone_set("Etc/GMT-4");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement