Your IP : 3.146.255.211
<?php
/**
* Created by PhpStorm.
* User: Yumster
* Date: 26.12.2014
* Time: 19:59
*/
//
use Bitrix\Highloadblock as HL;
use Bitrix\Main\Entity;
require_once($_SERVER['DOCUMENT_ROOT'].'/local/vendor/autoload.php');
require_once('constants.php');
require_once('include/feeds.php');
//-- Добавление обработчика события
AddEventHandler("main", "OnBeforeProlog", array('\Epages\Event\Main\OnBeforeProlog', 'processRedirectRules'));
AddEventHandler("sale", "OnOrderNewSendEmail", "bxModifySaleMails");
if (isset($_SERVER['HTTP_HOST']) && strlen($_SERVER['HTTP_HOST']) > 0) {
$httpHost = $_SERVER['HTTP_HOST'];
} else {
$httpHost = COption::GetOptionString('main', 'server_name', '');
}
if (!defined(MAIN_SITE_URL)) {
define('MAIN_SITE_URL', 'http://klimatlend.ua');
}
if (!defined(MAIN_SITE_EMAIL)) {
define('MAIN_SITE_EMAIL', 'shop@klimatlend.ua');
}
$eventManager = Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler('catalog', 'OnGetOptimalPrice', function(
$productId,
$quantity = 1,
$arUserGroups = [],
$renewal = "N",
$arPrices = [],
$siteID = false,
$arDiscountCoupons = false){
AddMessage2Log('P1:'.CPrice::GetBasePrice($productId)["PRICE"].' P2: ');
// $arPrice = CCatalogProduct::GetOptimalPrice($productId, $quantity, $arUserGroups, $renewal);
// AddMessage2Log('AAR:'.print_r($arPrice));
if($_SESSION["PRIVATBANK_PAYTYPE"]=="pp") {
$month = $_SESSION["PRIVATBANK_PAY_PERIOD"];
$price = round(getKreditPrice($productId,$month,$_SESSION["PRIVATBANK_KREDIT3"]));
$_SESSION["PRIVATBANK_PAY_PRICE"] = $price;
// Bitrix\Main\Diag\Debug::dumpToFile("P:".$price, $varName = "$productId", $fileName = "/log.txt");
return [
'PRICE' => [
"ID" => $productId,
'PRICE' => $price,
'CURRENCY' => \Bitrix\Currency\CurrencyManager::getBaseCurrency(),
'ELEMENT_IBLOCK_ID' => $productId,
'VAT_INCLUDED' => "Y",
],
];
}else{
$dbPrice = CPrice::GetList(
array("QUANTITY_FROM" => "ASC", "QUANTITY_TO" => "ASC", "SORT" => "ASC"),
array("PRODUCT_ID" => $productId),
false,
false,
array("ID", "CATALOG_GROUP_ID", "PRICE", "CURRENCY", "QUANTITY_FROM", "QUANTITY_TO")
);
while ($arPrice = $dbPrice->Fetch()) {
$arDiscounts = CCatalogDiscount::GetDiscountByPrice(
$arPrice["ID"],
$arUserGroups,
"N",
$siteID
);
$discountPrice = CCatalogProduct::CountPriceWithDiscount(
$arPrice["PRICE"],
$arPrice["CURRENCY"],
$arDiscounts
);
$arPrice["DISCOUNT_PRICE"] = $discountPrice;
// AddMessage2Log('AAR: <pre>'.print_r($arPrice)."</pre>");
}
return true;
}
});
//-- Не знаю зачем эта штука, думаю она здесь лишняя
//-- define('IBLOCK_ID', 'http://'.str_replace(':80', '', $httpHost));
//-- Собственно обработчик события
function bxModifySaleMails(
$orderID, &$eventName, &$arFields)
{
$arOrder = CSaleOrder::GetByID($orderID);
//-- получаем телефоны и адрес
$order_props = CSaleOrderPropsValue::GetOrderProps($orderID);
$phone="";
$index = "";
$country_name = "";
$city_name = "";
$address = "";
while ($arProps = $order_props->Fetch())
{
if ($arProps["CODE"] == "PHONE")
{
$phone = htmlspecialchars($arProps["VALUE"]);
}
if ($arProps["CODE"] == "LOCATION")
{
$arLocs = CSaleLocation::GetByID($arProps["VALUE"]);
$country_name = $arLocs["COUNTRY_NAME_ORIG"];
$city_name = $arLocs["CITY_NAME_ORIG"];
}
if ($arProps["CODE"] == "INDEX")
{
$index = $arProps["VALUE"];
}
if ($arProps["CODE"] == "ADDRESS")
{
$address = $arProps["VALUE"];
}
}
$full_address = $index.", ".$country_name."-".$city_name.", ".$address;
//-- получаем название службы доставки
$arDeliv = CSaleDelivery::GetByID($arOrder["DELIVERY_ID"]);
$delivery_name = "";
if ($arDeliv)
{
$delivery_name = $arDeliv["NAME"];
}
//-- получаем название платежной системы
$arPaySystem = CSalePaySystem::GetByID($arOrder["PAY_SYSTEM_ID"]);
$pay_system_name = "";
if ($arPaySystem)
{
$pay_system_name = $arPaySystem["NAME"];
}
//-- добавляем новые поля в массив результатов
$arFields["ORDER_DESCRIPTION"] = $arOrder["USER_DESCRIPTION"];
$arFields["PHONE"] = $phone;
$arFields["DELIVERY_NAME"] = $delivery_name;
$arFields["PAY_SYSTEM_NAME"] = $pay_system_name;
$arFields["FULL_ADDRESS"] = $full_address;
}
AddEventHandler("main", "OnBeforeProlog", "OnBeforePrologHandler", 50);
function OnBeforePrologHandler()
{
global $APPLICATION;
if ($_REQUEST["city"]) {
$canonical = $APPLICATION->GetCurPageParam("", array("city"));
$APPLICATION->SetPageProperty('canonical', $canonical);
}
}
if (file_exists($_SERVER["DOCUMENT_ROOT"] . "/bitrix/php_interface/include/functions.php")) {
require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/php_interface/include/functions.php");
}
AddEventHandler("main", "OnAfterUserAdd", 'SetUserDiscountGroup');
function SetUserDiscountGroup(&$arFields)
{
if ($arFields["ID"] > 0) {
$cUser = new CUser;
$sort_by = "ID";
$sort_ord = "ASC";
$arFilter = array(
"ID" => $arFields['ID'],
);
$dbUsers = $cUser->GetList($sort_by, $sort_ord, $arFilter, array('SELECT' => array('ID', 'NAME', 'UF_DISCOUNT_COUPON', 'GROUP_ID')));
if ($arUser = $dbUsers->Fetch()) {
if (strlen($arUser['UF_DISCOUNT_COUPON']) > 0) {
try {
$couponUsed = Epages\DiscountCoupons::getCouponStatus($arUser['UF_DISCOUNT_COUPON']);
if ($couponUsed == 'N') {
$group = new CGroup();
$user = new CUser;
$arGroups = array(3, 4, 7);
//add new group for use
$rsGroups = $group->GetList($by = "c_sort", $order = "asc", array("STRING_ID" => 'discount-coupons'));
$groupData = $rsGroups->Fetch();
if (count($groupData) > 0) {
$arGroups[] = $groupData['ID'];
}
//update user groups
$fields = array(
"GROUP_ID" => $arGroups,
);
$user->Update($arFields['ID'], $fields);
//set coupon as used
Epages\DiscountCoupons::setCouponAsUsed($arUser['UF_DISCOUNT_COUPON']);
}
} catch (Exception $e) {
AddMessage2Log($e->getMessage());
}
}
}
}
}
/**
* Returns Iblock ID by it's code
*
* @param $iblockCode
* @return bool
*/
function getIblockIdByCode($iblockCode)
{
$cache = new CPHPCache;
$cache_time = 3600;
$cache_id = 'get_id_'.$iblockCode;
if ($cache->InitCache($cache_time, $cache_id, '/'.SITE_ID.'/iblock/helper/')) {
$arVars = $cache->GetVars();
return $arVars['DATA']['ID'];
} else {
$cache->StartDataCache($cache_time, $cache_id);
$arIblock = \Bitrix\Iblock\IblockTable::getList([
'filter' => ['CODE' => $iblockCode],
'select' => ['ID']
])->fetch();
if ($arIblock) {
$cache->EndDataCache(['DATA' => $arIblock]);
return $arIblock['ID'];
} else {
return false;
}
}
}
function isCategoryChildForProm($id){
$nav = CIBlockSection::GetNavChain(false,$id);
while($arSectionPath = $nav->GetNext()){
if ( $arSectionPath["ID"] == 228 ){
return true;
}
}
return false;
}
function isCategoryChildFromDiscounts($id){
$nav = CIBlockSection::GetNavChain(false,$id);
while($arSectionPath = $nav->GetNext()){
if ( $arSectionPath["ID"] == 798 ){
return true;
}
}
return false;
}
function pre1($arr){
echo "<pre>";
print_r($arr);
echo "</pre>";
}
AddEventHandler(
'iblock',
'OnAfterIBlockElementAdd',
array('\Epages\Event\IBlock\UpdatePrice', 'updateDiscountPriceType')
);
AddEventHandler(
'iblock',
'OnAfterIBlockElementUpdate',
array('\Epages\Event\IBlock\UpdatePrice', 'updateDiscountPriceType')
);
AddEventHandler(
'iblock',
'OnBeforeIBlockElementUpdate',
array('\Epages\Event\IBlock\Handlers', 'OnBeforeIBlockElementUpdateHandler')
);
AddEventHandler(
'iblock',
'OnStartIBlockElementAdd',
array('\Epages\Event\IBlock\Handlers', 'OnBeforeIBlockElementAddHandler')
);
AddEventHandler(
'iblock',
'OnBeforeIBlockElementDelete',
array('\Epages\Event\IBlock\Handlers', 'OnBeforeIBlockElementDeleteHandler')
);
AddEventHandler(
'main',
'OnBuildGlobalMenu',
array('\Epages\Event\Menu\OnBuildGlobalMenu', 'OnBuildGlobalMenuHandler')
);
AddEventHandler(
'iblock',
'OnBeforeIBlockElementUpdate',
array('\Epages\Event\IBlock\Handlers', 'doNotDeactivatedSection')
);
AddEventHandler(
'iblock',
'OnAfterIBlockElementAdd',
array('\Epages\Event\IBlock\Handlers', 'doNotDeactivatedSection')
);
AddEventHandler(
'catalog',
'OnProductAdd',
array('Epages\OnProductAddUpdate', 'setMinPrice')
);
AddEventHandler(
'catalog',
'OnProductUpdate',
array('Epages\OnProductAddUpdate', 'setMinPrice')
);
function getKreditPrice($productID, $month,$kredit3)
{
$partsK = array(
1 => 1,
2 => 1.016,
3 => 1.026,
4 => 1.049,
5 => 1.078,
6 => 1.102,
7 => 1.134,
8 => 1.161,
9 => 1.190,
10 => 1.205,
11 => 1.212,
12 => 1.220,
13 => 1.243,
14 => 1.268,
15 => 1.293,
16 => 1.319,
17 => 1.337,
18 => 1.366,
19 => 1.385,
20 => 1.415,
21 => 1.436,
22 => 1.469,
23 => 1.492,
24 => 1.515,
25 => 1.551
);
CModule::IncludeModule('sale');
$productPrice = CPrice::GetBasePrice($productID)["PRICE"];
if($kredit3=="Y" && ( $month==3 || $month==2 )){
$specialPrice = $productPrice ;
}else{
$specialPrice = $productPrice * $partsK[$month];
}
return $specialPrice;
}
function refreshPrices(){
if(CModule::IncludeModule("iblock"))
{
$iblock = 22; // меняем под себя
$arSelect = Array("ID");
$arFilter = Array("IBLOCK_ID"=>$iblock, "ACTIVE"=>"Y");
$resElem = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
while($obElem = $resElem->Fetch())
{
$arPrice = CCatalogProduct::GetOptimalPrice($obElem["ID"]);
CIBlockElement::SetPropertyValues($obElem["ID"], $iblock, $arPrice["DISCOUNT_PRICE"], "MIN_PRICE_WITH_DISCOUNT");
}
}
return "refreshPrices();";
}
//$arGResult = BUtils::getHighLoadBlockByName("Characteristicsgroups",array(
//"select" => array("*"),
//"order" => array("UF_SORT" => "ASC"),
//"filter" => array('UF_SECTIONS' => $arResult["IBLOCK_SECTION_ID"])
//));
function getHighLoadBlockByName($hlbl, $queryData = array())
{
CModule::IncludeModule("iblock");
CModule::IncludeModule("sale");
CModule::IncludeModule("catalog");
CModule::IncludeModule('highloadblock');
$hlblock = HL\HighloadBlockTable::getList(
array("filter" => array('TABLE_NAME' => $hlbl))
)->fetch();
if (empty($hlblock))
{
return false;
}
$entity = HL\HighloadBlockTable::compileEntity($hlblock);
$entity_data_class = $entity->getDataClass();
$rsData = $entity_data_class::getList($queryData);
while($arData = $rsData->Fetch())
{
$arRes[] = $arData;
}
return $arRes;
}
// ORDER_PROP_2 - свойство заказа "телефон"
// ORDER_PROP_3 - свойство заказа "email"
global $APPLICATION;
if ('/personal/order/make/' == $APPLICATION->GetCurDir()) // урл страницы оформления заказа
{
$sOrderPropPhone = '';
if (isset($_POST['ORDER_PROP_3'])) // эту секцию if можно вообще удалить, если у вас телефон не обязательное поле
{
$sOrderPropPhone = filter_var($_POST['ORDER_PROP_3'], FILTER_SANITIZE_NUMBER_INT); // аналог preg_replace("/[^0-9,+,-]/","",$string);
}
// если и телефон не заполнен, тогда вместо него в мыле будет значение unix времени
// это нужно только для того чтобы не выводить ошибку "имейл не заполнен", т.к. телефон у нас все-равно обязательное поле
if (0 == strlen($sOrderPropPhone))
{
$sOrderPropPhone = time();
}
if ((!isset($_POST['ORDER_PROP_2']) || empty($_POST['ORDER_PROP_2'])))
{
$_POST['ORDER_PROP_2'] = $sOrderPropPhone."@noemail.klimatlend.ua";
}
$_POST['ORDER_PROP_14'] =$_COOKIE["S_UTM_CAMPAIGN"];
}
//$utms = get_utm();
//$f = fopen($_SERVER["DOCUMENT_ROOT"] . "/" ."log_vi_rwh7xк3ц.txt", "a");
//fwrite($f, $utms);
//fclose($f);
function get_utm(){
$utm = "";
if (!isset($_COOKIE['referer'])) {
setcookie('referer', $_SERVER['HTTP_REFERER'], time() + 30);
$utm_referer = $_SERVER['HTTP_REFERER'];
} else {
$utm_referer = $_COOKIE['referer'];
}
if (isset($_GET['utm_source']) && !isset($_COOKIE['utm_source'])) {
foreach ($_GET as $key => $val) {
if (0 === strpos($key, 'utm')) {
setcookie($key, $val, time() + 30);
$utm .= "$key: $val\n";
}
}
} else {
// Выводим все массивы в переменную $utm_result, если есть куки
foreach ($_COOKIE as $key_utm => $val_utm) {
if (0 === strpos($key_utm, 'utm')) {
$utm .= "$key_utm: $val_utm\n";
}
}
}
if ($_SERVER['HTTP_REFERER'] != ''){
$utm .= "utm_referer: $utm_referer\n";
setcookie("utm_referer", $val, time() + 30);
}
$utm_result = htmlspecialchars($utm, ENT_QUOTES, 'UTF-8');
return $utm_result;
}
function AddOrderProperty($prop_id, $value, $order) {
if (!strlen($prop_id)) {
return false;
}
if (CModule::IncludeModule('sale')) {
if ($arOrderProps = CSaleOrderProps::GetByID($prop_id)) {
$db_vals = CSaleOrderPropsValue::GetList(array(), array('ORDER_ID' => $order, 'ORDER_PROPS_ID' => $arOrderProps['ID']));
if ($arVals = $db_vals->Fetch()) {
return CSaleOrderPropsValue::Update($arVals['ID'], array(
'NAME' => $arVals['NAME'],
'CODE' => $arVals['CODE'],
'ORDER_PROPS_ID' => $arVals['ORDER_PROPS_ID'],
'ORDER_ID' => $arVals['ORDER_ID'],
'VALUE' => $value,
));
} else {
return CSaleOrderPropsValue::Add(array(
'NAME' => $arOrderProps['NAME'],
'CODE' => $arOrderProps['CODE'],
'ORDER_PROPS_ID' => $arOrderProps['ID'],
'ORDER_ID' => $order,
'VALUE' => $value,
));
}
}
}
}