function show_header() { $current_money = CStatistic::GetCurrentMoney(); ?> <div id="header"> <div id="banner"> <img src="image/banner.png" alt="logo"/> </div> <div id="topbar"> <div id="menu"> <ul> <li><a id="detail_link" href="detail.php">Detail</a></li><!-- --><li><a id="category_link" href="category.php">Category Manager</a></li><!-- --><li><a id="setting_link" href="setting.php">Setting</a></li><!-- --><li><span id="blank_button"> </span></li> </ul> </div> <div id="info"> <p>Your wallet: <span id="remain_money"><?php echo $current_money; ?> VND</span> - Available: <span id="available_money">23.000 VND</span></p> </div> </div> </div> <!-- End of header --> <?php }
function list_detail() { $category_ids = isset($_SESSION['filters']['categories']) ? $_SESSION['filters']['categories'] : null; $detail = isset($_SESSION['filters']['detail']) ? $_SESSION['filters']['detail'] : null; $from_date = isset($_SESSION['filters']['from_date']) ? $_SESSION['filters']['from_date'] : null; $to_date = isset($_SESSION['filters']['to_date']) ? $_SESSION['filters']['to_date'] : null; $from_amount = isset($_SESSION['filters']['from_amount']) ? $_SESSION['filters']['from_amount'] : null; $to_amount = isset($_SESSION['filters']['to_amount']) ? $_SESSION['filters']['to_amount'] : null; $description = isset($_SESSION['filters']['description']) ? $_SESSION['filters']['description'] : null; $filter = new CFilter(0, $category_ids, $detail, $from_date, $to_date, $from_amount, $to_amount, $description); CRecordManager::SetFilter($filter); $records = CRecordManager::GetRecords(); if ($records) { $num = CRecordManager::GetNumberOfRecord(); if ($num < 2) { echo "<p>There is {$num} record</p>"; } else { echo "<p>There are {$num} records</p>"; } $filter = CRecordManager::GetFilter(); if ($filter->IsFiltering()) { $total_money = CStatistic::GetTotalMoney($filter); echo "<p>Total: {$total_money}</p>"; } echo "<table border='1' cellspacing='0'>"; echo "<tr>"; echo "\t<th>ID</th>"; echo "\t<th>Category</th>"; echo "\t<th>Detail</th>"; echo "\t<th>Time</th>"; echo "\t<th>Amount</th>"; echo "\t<th>Description</th>"; echo "\t<th colspan='2'>Action</th>"; echo "</tr>"; foreach ($records as $record) { echo "<tr>"; echo "\t<td>" . $record->GetId() . "</td>"; echo "\t<td>" . $record->GetCategory()->GetName() . "</td>"; echo "\t<td>" . $record->GetDetail() . " </td>"; echo "\t<td>" . date("Y-m-d H:i", $record->GetTime()) . "</td>"; echo "\t<td>" . $record->GetAmount() . "</td>"; echo "\t<td>" . $record->GetDescription() . " </td>"; echo "\t<td><a href='detail.php?action_type=edit&id=" . $record->GetId() . "'>Edit</a></td>"; echo "\t<td><a href='detail.php?action_type=delete&id=" . $record->GetId() . "'>Delete</a></td>"; echo "<tr/>"; } echo "</table>"; } else { echo "There is no any record"; } }
$bSend = false; } } if ($bSend) { $event = new CEvent(); $event->Send($eventName, SITE_ID, $arFields, "N"); } /*end mail*/ CSaleMobileOrderPush::send("ORDER_CREATED", array("ORDER_ID" => $arFields["ORDER_ID"])); if (Loader::includeModule("statistic")) { $event1 = "eStore"; $event2 = "order_confirm"; $event3 = $arResult["ORDER_ID"]; $e = $event1 . "/" . $event2 . "/" . $event3; if (!is_array($_SESSION["ORDER_EVENTS"]) || is_array($_SESSION["ORDER_EVENTS"]) && !in_array($e, $_SESSION["ORDER_EVENTS"])) { CStatistic::Set_Event($event1, $event2, $event3); $_SESSION["ORDER_EVENTS"][] = $e; } } $urlError = ""; if ($PAYSYSTEM_ID == "account") { if (!CSaleUserAccount::DoPayOrderFromAccount($currentUserId, $arBasketItems["CURRENCY"], $ORDER_ID, $arBasketItems["PRICE"], array(), $arErrors)) { $urlError = "&erraccount=y"; } } CSaleOrderUserProps::DoSaveUserProfile($currentUserId, $PROFILE_ID, $profileName, $PERSON_TYPE, $arPropValues, $arErrors); LocalRedirect($APPLICATION->GetCurPageParam("ORDER_ID=" . $ORDER_ID . $urlError, array("ORDER_ID", "action", "id"))); } elseif (!empty($arErrors)) { foreach ($arErrors as $val) { $errorMessage .= $val . "<br>"; }
function AddComment_News($arFields) { if (!CModule::IncludeModule("forum")) { return false; } if (!CModule::IncludeModule("iblock")) { return false; } if (!CModule::IncludeModule("socialnetwork")) { return false; } $dbResult = CSocNetLog::GetList(array("ID" => "DESC"), array("TMP_ID" => $arFields["LOG_ID"]), false, false, array("ID", "SOURCE_ID", "PARAMS")); $bFound = false; if ($arLog = $dbResult->Fetch()) { if (intval($arLog["SOURCE_ID"]) > 0) { $arFilter = array("ID" => $arLog["SOURCE_ID"]); $arSelectedFields = array("IBLOCK_ID", "ID", "CREATED_BY", "NAME", "PROPERTY_FORUM_TOPIC_ID", "PROPERTY_FORUM_MESSAGE_CNT"); $db_res = CIBlockElement::GetList(array(), $arFilter, false, false, $arSelectedFields); if ($db_res && ($res = $db_res->GetNext())) { $arElement = $res; $val = COption::GetOptionString("intranet", "sonet_log_news_iblock_forum"); if (strlen($val) > 0) { $arIBlockForum = unserialize($val); } else { $arIBlockForum = array(); } if (array_key_exists($arElement["IBLOCK_ID"], $arIBlockForum)) { $FORUM_ID = $arIBlockForum[$arElement["IBLOCK_ID"]]; } if (intval($FORUM_ID) > 0) { CSocNetLogTools::AddComment_Review_CheckIBlock($arElement); $dbMessage = CForumMessage::GetList(array(), array("PARAM2" => $arElement["ID"])); if (!($arMessage = $dbMessage->Fetch())) { // Add Topic $TOPIC_ID = CSocNetLogTools::AddComment_Review_CreateRoot($arElement, $FORUM_ID); $bNewTopic = true; } else { $TOPIC_ID = $arMessage["TOPIC_ID"]; } if (intval($TOPIC_ID) > 0) { // Add comment $messageID = false; $bError = false; if (CForumMessage::CanUserAddMessage($TOPIC_ID, $GLOBALS["USER"]->GetUserGroupArray(), $GLOBALS["USER"]->GetID(), false)) { $bSHOW_NAME = true; $res = CForumUser::GetByUSER_ID($GLOBALS["USER"]->GetID()); if ($res) { $bSHOW_NAME = $res["SHOW_NAME"] == "Y"; } if ($bSHOW_NAME) { $AUTHOR_NAME = $GLOBALS["USER"]->GetFullName(); } if (strlen(Trim($AUTHOR_NAME)) <= 0) { $AUTHOR_NAME = $GLOBALS["USER"]->GetLogin(); } if (strlen($AUTHOR_NAME) <= 0) { $bError = true; } } if (!$bError) { $arFieldsMessage = array("POST_MESSAGE" => $arFields["TEXT_MESSAGE"], "USE_SMILES" => "Y", "APPROVED" => "Y", "PARAM2" => $arElement["ID"], "AUTHOR_NAME" => $AUTHOR_NAME, "AUTHOR_ID" => IntVal($GLOBALS["USER"]->GetParam("USER_ID")), "FORUM_ID" => $FORUM_ID, "TOPIC_ID" => $TOPIC_ID, "NEW_TOPIC" => "N", "GUEST_ID" => $_SESSION["SESS_GUEST_ID"], "ADD_TO_LOG" => "N"); $AUTHOR_IP = ForumGetRealIP(); $AUTHOR_IP_tmp = $AUTHOR_IP; $AUTHOR_REAL_IP = $_SERVER['REMOTE_ADDR']; if (COption::GetOptionString("forum", "FORUM_GETHOSTBYADDR", "N") == "Y") { $AUTHOR_IP = @gethostbyaddr($AUTHOR_IP); if ($AUTHOR_IP_tmp == $AUTHOR_REAL_IP) { $AUTHOR_REAL_IP = $AUTHOR_IP; } else { $AUTHOR_REAL_IP = @gethostbyaddr($AUTHOR_REAL_IP); } } $arFieldsMessage["AUTHOR_IP"] = $AUTHOR_IP !== False ? $AUTHOR_IP : "<no address>"; $arFieldsMessage["AUTHOR_REAL_IP"] = $AUTHOR_REAL_IP !== False ? $AUTHOR_REAL_IP : "<no address>"; $messageID = CForumMessage::Add($arFieldsMessage, false); if (intVal($messageID) <= 0) { $bError = true; } else { if (CModule::IncludeModule("statistic")) { $arForum = CForumNew::GetByID($FORUM_ID); $F_EVENT1 = $arForum["EVENT1"]; $F_EVENT2 = $arForum["EVENT2"]; $F_EVENT3 = $arForum["EVENT3"]; if (strlen($F_EVENT3) <= 0) { $arForumSite_tmp = CForumNew::GetSites($FORUM_ID); $F_EVENT3 = CForumNew::PreparePath2Message($arForumSite_tmp[SITE_ID], array("FORUM_ID" => $FORUM_ID, "TOPIC_ID" => $TOPIC_ID, "MESSAGE_ID" => $messageID)); } CStatistic::Set_Event($F_EVENT1, $F_EVENT2, $F_EVENT3); } CForumMessage::SendMailMessage($messageID, array(), false, "NEW_FORUM_MESSAGE"); CSocNetLogTools::AddComment_Review_UpdateElement($arElement, $TOPIC_ID, $bNewTopic); } } } } } } } if (intval($messageID) <= 0) { $strError = GetMessage("SONET_ADD_COMMENT_SOURCE_ERROR"); } return array("SOURCE_ID" => $messageID, "RATING_TYPE_ID" => "FORUM_POST", "RATING_ENTITY_ID" => $messageID, "ERROR" => $strError, "NOTES" => ""); }
$price = $arResult["PAY_ACCOUNT_AMOUNT"][$productID]["AMOUNT"]; $currency = $arResult["PAY_ACCOUNT_AMOUNT"][$productID]["CURRENCY"]; $tmpPrice = $price; $tmpCurrency = $currency; if ($currency != $arParams["SELL_CURRENCY"] && strlen($arParams["SELL_CURRENCY"]) > 0) { $tmpPrice = CCurrencyRates::ConvertCurrency($price, $currency, $arParams["SELL_CURRENCY"]); $tmpCurrency = $arParams["SELL_CURRENCY"]; } elseif ($currency != $baseCurrency) { $tmpPrice = CCurrencyRates::ConvertCurrency($price, $currency, $baseCurrency); $tmpCurrency = $baseCurrency; } $arFields = array("PRODUCT_ID" => $productID, "PRICE" => $tmpPrice, "CURRENCY" => $tmpCurrency, "QUANTITY" => 1, "LID" => SITE_ID, "DELAY" => "N", "CAN_BUY" => "Y", "NAME" => str_replace("#SUM#", SaleFormatCurrency($price, $currency), GetMessage("SAP_BASKET_NAME")), "MODULE" => "sale", "PAY_CALLBACK_FUNC" => $arParams["CALLBACK_NAME"]); $basketID = CSaleBasket::Add($arFields); if ($basketID) { if (CModule::IncludeModule("statistic")) { CStatistic::Set_Event("sale2basket", "sale", $productID); } if ($arParams["REDIRECT_TO_CURRENT_PAGE"] == "Y") { LocalRedirect($arResult["CURRENT_PAGE"]); } elseif ($arParams["REDIRECT_TO_CURRENT_PAGE"] != "Y") { LocalRedirect($arParams["PATH_TO_BASKET"]); } } else { $arResult["errorMessage"] = GetMessage("SAP_ERROR_ADD_BASKET") . "<br>"; if ($ex = $GLOBALS["APPLICATION"]->GetException()) { $arResult["errorMessage"] .= $ex->GetString(); } } } else { $arResult["errorMessage"] = GetMessage("SAP_WRONG_ID"); }
/** * @param int $intProductID * @param array $arRewriteFields * @param array $arProductParams * @return bool|int */ function SubscribeProduct($intProductID, $arRewriteFields = array(), $arProductParams = array()) { global $USER, $APPLICATION; if (!CCatalog::IsUserExists()) { return false; } if (!$USER->IsAuthorized()) { return false; } $intUserID = (int) $USER->GetID(); $intProductID = (int) $intProductID; if ($intProductID <= 0) { $APPLICATION->ThrowException(Loc::getMessage('CATALOG_ERR_EMPTY_PRODUCT_ID'), "EMPTY_PRODUCT_ID"); return false; } if (!Loader::includeModule("sale")) { $APPLICATION->ThrowException(Loc::getMessage('CATALOG_ERR_NO_SALE_MODULE'), "NO_SALE_MODULE"); return false; } if (Loader::includeModule("statistic") && isset($_SESSION['SESS_SEARCHER_ID']) && (int) $_SESSION["SESS_SEARCHER_ID"] > 0) { $APPLICATION->ThrowException(Loc::getMessage('CATALOG_ERR_SESS_SEARCHER'), "SESS_SEARCHER"); return false; } $rsProducts = CCatalogProduct::GetList(array(), array('ID' => $intProductID), false, false, array('ID', 'WEIGHT', 'WIDTH', 'HEIGHT', 'LENGTH', 'TYPE', 'MEASURE', 'SUBSCRIBE')); if (!($arCatalogProduct = $rsProducts->Fetch())) { $APPLICATION->ThrowException(Loc::getMessage('CATALOG_ERR_NO_PRODUCT'), "NO_PRODUCT"); return false; } if ($arCatalogProduct['SUBSCRIBE'] == 'N') { $APPLICATION->ThrowException(Loc::getMessage('CATALOG_ERR_NO_SUBSCRIBE'), 'SUBSCRIBE'); return false; } $arCatalogProduct['MEASURE'] = (int) $arCatalogProduct['MEASURE']; $arCatalogProduct['MEASURE_NAME'] = ''; $arCatalogProduct['MEASURE_CODE'] = 0; if ($arCatalogProduct['MEASURE'] <= 0) { $arMeasure = CCatalogMeasure::getDefaultMeasure(true, true); $arCatalogProduct['MEASURE_NAME'] = $arMeasure['~SYMBOL_RUS']; $arCatalogProduct['MEASURE_CODE'] = $arMeasure['CODE']; } else { $rsMeasures = CCatalogMeasure::getList(array(), array('ID' => $arCatalogProduct['MEASURE']), false, false, array('ID', 'SYMBOL_RUS', 'CODE')); if ($arMeasure = $rsMeasures->GetNext()) { $arCatalogProduct['MEASURE_NAME'] = $arMeasure['~SYMBOL_RUS']; $arCatalogProduct['MEASURE_CODE'] = $arMeasure['CODE']; } } $rsItems = CIBlockElement::GetList(array(), array("ID" => $intProductID, "ACTIVE" => "Y", "ACTIVE_DATE" => "Y", "CHECK_PERMISSIONS" => "Y", "MIN_PERMISSION" => "R"), false, false, array('ID', 'IBLOCK_ID', 'NAME', 'XML_ID', 'DETAIL_PAGE_URL')); if (!($arProduct = $rsItems->GetNext())) { return false; } $arParentSku = CCatalogSku::GetProductInfo($intProductID, $arProduct['IBLOCK_ID']); if (!empty($arParentSku)) { if (strpos($arProduct["~XML_ID"], '#') === false) { $parentIterator = Iblock\ElementTable::getList(array('select' => array('ID', 'XML_ID'), 'filter' => array('ID' => $arParentSku['ID']))); if ($parent = $parentIterator->fetch()) { $arProduct["~XML_ID"] = $parent['XML_ID'] . '#' . $arProduct["~XML_ID"]; } unset($parent, $parentIterator); } } $arPrice = array('PRICE' => 0.0, 'CURRENCY' => CSaleLang::GetLangCurrency(SITE_ID), 'VAT_RATE' => 0, 'PRODUCT_PRICE_ID' => 0, 'CATALOG_GROUP_NAME' => ''); $arBuyerGroups = $USER->GetUserGroupArray(); $arSubscrPrice = CCatalogProduct::GetOptimalPrice($intProductID, 1, $arBuyerGroups, "N", array(), SITE_ID, array()); if (!empty($arSubscrPrice) && is_array($arSubscrPrice)) { $arPrice['PRICE'] = $arSubscrPrice['DISCOUNT_PRICE']; $arPrice['CURRENCY'] = CCurrency::GetBaseCurrency(); $arPrice['VAT_RATE'] = $arSubscrPrice['PRICE']['VAT_RATE']; $arPrice['PRODUCT_PRICE_ID'] = $arSubscrPrice["PRICE"]["ID"]; $arPrice['CATALOG_GROUP_NAME'] = $arSubscrPrice["PRICE"]["CATALOG_GROUP_NAME"]; } $arProps = array(); $strIBlockXmlID = (string) CIBlock::GetArrayByID($arProduct['IBLOCK_ID'], 'XML_ID'); if ($strIBlockXmlID !== '') { $arProps[] = array("NAME" => "Catalog XML_ID", "CODE" => "CATALOG.XML_ID", "VALUE" => $strIBlockXmlID); } if (!empty($arProductParams) && is_array($arProductParams)) { foreach ($arProductParams as &$arOneProductParams) { $arProps[] = array("NAME" => $arOneProductParams["NAME"], "CODE" => $arOneProductParams["CODE"], "VALUE" => $arOneProductParams["VALUE"], "SORT" => $arOneProductParams["SORT"]); } unset($arOneProductParams); } $arProps[] = array("NAME" => "Product XML_ID", "CODE" => "PRODUCT.XML_ID", "VALUE" => $arProduct["XML_ID"]); $arFields = array("PRODUCT_ID" => $intProductID, "PRODUCT_PRICE_ID" => $arPrice['PRODUCT_PRICE_ID'], "PRICE" => $arPrice['PRICE'], "CURRENCY" => $arPrice['CURRENCY'], "WEIGHT" => $arCatalogProduct["WEIGHT"], "DIMENSIONS" => serialize(array("WIDTH" => $arCatalogProduct["WIDTH"], "HEIGHT" => $arCatalogProduct["HEIGHT"], "LENGTH" => $arCatalogProduct["LENGTH"])), "QUANTITY" => 1, "LID" => SITE_ID, "DELAY" => "N", "CAN_BUY" => "N", "SUBSCRIBE" => "Y", "NAME" => $arProduct["~NAME"], "MODULE" => "catalog", "PRODUCT_PROVIDER_CLASS" => "CCatalogProductProvider", "NOTES" => $arPrice["CATALOG_GROUP_NAME"], "DETAIL_PAGE_URL" => $arProduct["~DETAIL_PAGE_URL"], "CATALOG_XML_ID" => $strIBlockXmlID, "PRODUCT_XML_ID" => $arProduct["~XML_ID"], "PROPS" => $arProps, "TYPE" => $arCatalogProduct["TYPE"] == CCatalogProduct::TYPE_SET ? CCatalogProductSet::TYPE_SET : NULL, "MEASURE_NAME" => $arCatalogProduct['MEASURE_NAME'], "MEASURE_CODE" => $arCatalogProduct['MEASURE_CODE'], 'IGNORE_CALLBACK_FUNC' => 'Y'); if (!empty($arRewriteFields) && is_array($arRewriteFields)) { if (array_key_exists('SUBSCRIBE', $arRewriteFields)) { unset($arRewriteFields['SUBSCRIBE']); } if (array_key_exists('CAN_BUY', $arRewriteFields)) { unset($arRewriteFields['CAN_BUY']); } if (array_key_exists('DELAY', $arRewriteFields)) { unset($arRewriteFields['DELAY']); } if (!empty($arRewriteFields)) { $arFields = array_merge($arFields, $arRewriteFields); } } $mxBasketID = CSaleBasket::Add($arFields); if ($mxBasketID) { if (!isset($_SESSION['NOTIFY_PRODUCT'])) { $_SESSION['NOTIFY_PRODUCT'] = array($intUserID = array()); } elseif (!isset($_SESSION['NOTIFY_PRODUCT'][$intUserID])) { $_SESSION['NOTIFY_PRODUCT'][$intUserID] = array(); } $_SESSION["NOTIFY_PRODUCT"][$intUserID][$intProductID] = $intProductID; if (Loader::includeModule("statistic")) { CStatistic::Set_Event("sale2basket", "subscribe", $intProductID); } } return $mxBasketID; }
/** * <p>Метод осуществляет продление подписки с кодом ID.</p> <p><b>Примечание</b>. Метод использует внутреннюю транзакцию. Если у вас используется <b>MySQL</b> и <b>InnoDB</b>, и ранее была открыта транзакция, то ее необходимо закрыть до подключения метода.</p> * * * * * @param int $ID Код записи с информацией о продлении. * * * * @return bool <p>Метод возвращает <i>true</i> в случае успешного продления или <i>false</i> * в случае ошибки.</p><br><br> * * @static * @link http://dev.1c-bitrix.ru/api_help/sale/classes/csalerecurring/csalerecurring.nextpayment.php * @author Bitrix */ public static function NextPayment($ID) { global $DB; global $USER; $ID = IntVal($ID); if ($ID <= 0) { $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGR_NO_RECID"), "NO_RECORD_ID"); return False; } $arRecur = CSaleRecurring::GetByID($ID); if (!$arRecur) { $GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $ID, GetMessage("SKGR_NO_RECID1")), "NO_RECORD"); return False; } $arOrder = CSaleOrder::GetByID($arRecur["ORDER_ID"]); if (!$arOrder) { $GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $arRecur["ORDER_ID"], GetMessage("SKGR_NO_ORDER1")), "NO_ORDER"); return False; } $bSuccess = True; $newOrderID = IntVal($arRecur["ORDER_ID"]); /** @var $productProvider IBXSaleProductProvider */ if ($productProvider = CSaleBasket::GetProductProvider($arRecur)) { $arProduct = $productProvider::RecurringOrderProduct(array( "PRODUCT_ID" => $arRecur["PRODUCT_ID"], "USER_ID" => $arOrder["USER_ID"] )); } else { $arProduct = CSaleRecurring::ExecuteCallbackFunction( $arRecur["CALLBACK_FUNC"], $arRecur["MODULE"], $arRecur["PRODUCT_ID"], $arOrder["USER_ID"] ); } if (!$arProduct || !is_array($arProduct) || count($arProduct) <= 0) { CSaleRecurring::CancelRecurring($arRecur["ID"], "Y", "Product is not found"); /* $arFields = array( "CANCELED" => "Y", "DATE_CANCELED" => Date(CDatabase::DateFormatToPHP(CLang::GetDateFormat("FULL", LANG))), "CANCELED_REASON" => "Product is not found" ); CSaleRecurring::Update($arRecur["ID"], $arFields); */ //CSaleRecurring::Delete($arRecur["ID"]); return True; } if ($arProduct["WITHOUT_ORDER"] == "Y" || $arRecur["SUCCESS_PAYMENT"] == "Y") { $baseSiteCurrency = CSaleLang::GetLangCurrency($arOrder["LID"]); $productPrice = roundEx(CCurrencyRates::ConvertCurrency($arProduct["PRICE"], $arProduct["CURRENCY"], $baseSiteCurrency), SALE_VALUE_PRECISION); // Delivery $deliveryPrice = 0; $deliveryID = 0; $arOrder["DELIVERY_ID"] = IntVal($arOrder["DELIVERY_ID"]); if ($arOrder["DELIVERY_ID"] > 0) { $deliveryLocation = 0; $dbOrderPropValues = CSaleOrderPropsValue::GetList( array(), array( "ORDER_ID" => $arRecur["ORDER_ID"], "PROP_IS_LOCATION" => "Y" ), false, false, array("VALUE") ); if ($arOrderPropValues = $dbOrderPropValues->Fetch()) $deliveryLocation = IntVal($arOrderPropValues["VALUE"]); $dbDelivery = CSaleDelivery::GetList( array("SORT" => "ASC", "NAME" => "ASC"), array( "LID" => $arOrder["LID"], "WEIGHT" => DoubleVal($arProduct["WEIGHT"]) * DoubleVal($arProduct["QUANTITY"]), // Changed by Sigurd, 2007-08-16 "ORDER_PRICE" => $productPrice * DoubleVal($arProduct["QUANTITY"]), "ACTIVE" => "Y", "LOCATION" => $deliveryLocation ) ); while ($arDelivery = $dbDelivery->Fetch()) { $deliveryPriceTmp = roundEx(CCurrencyRates::ConvertCurrency($arDelivery["PRICE"], $arDelivery["CURRENCY"], $baseSiteCurrency), SALE_VALUE_PRECISION); if (IntVal($arDelivery["ID"]) == $arOrder["DELIVERY_ID"]) { $deliveryID = IntVal($arDelivery["ID"]); $deliveryPrice = $deliveryPriceTmp; break; } if ($deliveryPriceTmp < $deliveryPrice || $deliveryID <= 0) { $deliveryID = IntVal($arDelivery["ID"]); $deliveryPrice = $deliveryPriceTmp; } } if ($deliveryID <= 0) { $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGR_NO_DELIVERY"), "NO_DELIVERY"); return False; } } // Sale discounts $discount = 0; $discountPrice = $productPrice; $discountProduct = 0; $dbDiscount = CSaleDiscount::GetList( array("SORT" => "ASC"), array( "LID" => $arOrder["LID"], "ACTIVE" => "Y", "!>ACTIVE_FROM" => Date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL"))), "!<ACTIVE_TO" => Date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL"))), "<=PRICE_FROM" => $productPrice, ">=PRICE_TO" => $productPrice, "USER_GROUPS" => $USER->GetUserGroup($arOrder['USER_ID']), ) ); if ($arDiscount = $dbDiscount->Fetch()) { if ($arDiscount["DISCOUNT_TYPE"] == "P") { $discountProduct = roundEx($productPrice * $arDiscount["DISCOUNT_VALUE"] / 100, SALE_VALUE_PRECISION); $discount = roundEx($discountProduct * DoubleVal($arProduct["QUANTITY"]), SALE_VALUE_PRECISION); // Changed by Sigurd, 2007-08-16 $discountPrice = $productPrice - $discountProduct; } else { $discountValue = CCurrencyRates::ConvertCurrency($arDiscount["DISCOUNT_VALUE"], $arDiscount["CURRENCY"], $baseSiteCurrency); $discountValue = roundEx($discountValue, SALE_VALUE_PRECISION); $discountProduct = roundEx(1.0 * $discountValue / DoubleVal($arProduct["QUANTITY"]), SALE_VALUE_PRECISION);// Changed by Sigurd, 2007-08-16 $discount = roundEx($curDiscount * DoubleVal($arProduct["QUANTITY"]), SALE_VALUE_PRECISION); $discountPrice = $productPrice - $discountProduct; } } $bUseVat = false; $vatRate = 0; if(DoubleVal($arProduct["VAT_RATE"]) > 0) { $bUseVat = true; $vatRate = $arProduct["VAT_RATE"]; } // Tax $arTaxExempt = array(); $dbUserGroups = CUser::GetUserGroupEx($arOrder["USER_ID"]); while ($arUserGroups = $dbUserGroups->Fetch()) { $dbTaxExemptTmp = CSaleTax::GetExemptList(array("GROUP_ID" => $arUserGroups["GROUP_ID"])); while ($arTaxExemptTmp = $dbTaxExemptTmp->Fetch()) { $arTaxExemptTmp["TAX_ID"] = IntVal($arTaxExemptTmp["TAX_ID"]); if (!in_array($arTaxExemptTmp["TAX_ID"], $arTaxExempt)) $arTaxExempt[] = $arTaxExemptTmp["TAX_ID"]; } } $taxPrice = 0; $taxVatPrice = 0; if(!$bUseVat) { $taxLocation = 0; $dbOrderPropValues = CSaleOrderPropsValue::GetList( array(), array( "ORDER_ID" => $arRecur["ORDER_ID"], "PROP_IS_LOCATION4TAX" => "Y" ), false, false, array("VALUE") ); if ($arOrderPropValues = $dbOrderPropValues->Fetch()) $taxLocation = IntVal($arOrderPropValues["VALUE"]); $arTaxList = array(); $dbTaxRateTmp = CSaleTaxRate::GetList( array("APPLY_ORDER" => "ASC"), array( "LID" => $arOrder["LID"], "PERSON_TYPE_ID" => $arOrder["PERSON_TYPE_ID"], "ACTIVE" => "Y", "LOCATION" => $taxLocation ) ); while ($arTaxRateTmp = $dbTaxRateTmp->Fetch()) { if (!in_array(IntVal($arTaxRateTmp["TAX_ID"]), $arTaxExempt)) { $arTaxList[] = $arTaxRateTmp; } } } else { $arTaxList[] = Array( "ID" => 0, "TAX_NAME" => GetMessage("SKGR_VAT"), "IS_PERCENT" => "Y", "VALUE" => $vatRate*100, "VALUE_MONEY" => 0, "APPLY_ORDER" => 100, "IS_IN_PRICE" => "Y", "CODE" => "VAT" ); } $arTaxSums = array(); if (!empty($arTaxList)) { if(!$bUseVat) { $taxPriceTmp = CSaleOrderTax::CountTaxes( $discountPrice * DoubleVal($arProduct["QUANTITY"]), $arTaxList, $baseSiteCurrency ); for ($di = 0, $intCount = count($arTaxList); $di < $intCount; $di++) { $arTaxList[$di]["VALUE_MONEY"] += $arTaxList[$di]["TAX_VAL"]; } for ($di = 0, $intCount = count($arTaxList); $di < $intCount; $di++) { $arTaxSums[$arTaxList[$di]["TAX_ID"]]["VALUE"] = $arTaxList[$di]["VALUE_MONEY"]; $arTaxSums[$arTaxList[$di]["TAX_ID"]]["NAME"] = $arTaxList[$di]["NAME"]; if ($arTaxList[$di]["IS_IN_PRICE"] != "Y") { $taxPrice += $arTaxList[$di]["VALUE_MONEY"]; } } } else { $arTaxList[0]["VALUE_MONEY"] = (($discountPrice / ($vatRate +1)) * $vatRate) * DoubleVal($arProduct["QUANTITY"]); $taxVatPrice = $arTaxList[0]["VALUE_MONEY"]; } } // Changed by Sigurd, 2007-08-16 $totalOrderPrice = $discountPrice * DoubleVal($arProduct["QUANTITY"]) + $deliveryPrice + $taxPrice; $arProduct["WITHOUT_ORDER"] = (($arProduct["WITHOUT_ORDER"]=="Y") ? "Y" : "N"); if ($arProduct["WITHOUT_ORDER"] == "N") { $DB->StartTransaction(); // Saving $arSaleUser = CSaleUser::GetList(Array(), Array("USER_ID" => $arOrder["USER_ID"])); if(!empty($arSaleUser)) { $currentFUser = $arSaleUser["ID"]; } else { $currentFUser = CSaleUser::_Add( array( "=DATE_INSERT" => $DB->GetNowFunction(), "=DATE_UPDATE" => $DB->GetNowFunction(), "USER_ID" => $arOrder["USER_ID"] ) ); } $arFields = array( "FUSER_ID" => $currentFUser, "PRODUCT_ID" => $arProduct["PRODUCT_ID"], "PRODUCT_NAME" => $arProduct["PRODUCT_NAME"], "PRODUCT_URL" => $arProduct["PRODUCT_URL"], "PRODUCT_PRICE_ID" => $arProduct["PRODUCT_PRICE_ID"], "PRICE" => $arProduct["PRICE"], "CURRENCY" => $arProduct["CURRENCY"], "WEIGHT" => $arProduct["WEIGHT"], "QUANTITY" => $arProduct["QUANTITY"], "LID" => $arOrder["LID"], "DELAY" => "N", "CAN_BUY" => "Y", "NAME" => $arProduct["NAME"], "CALLBACK_FUNC" => $arProduct["CALLBACK_FUNC"], "ORDER_CALLBACK_FUNC" => $arProduct["ORDER_CALLBACK_FUNC"], "CANCEL_CALLBACK_FUNC" => $arProduct["CANCEL_CALLBACK_FUNC"], "PAY_CALLBACK_FUNC" => $arProduct["PAY_CALLBACK_FUNC"], "PRODUCT_PROVIDER_CLASS" => $arProduct["PRODUCT_PROVIDER_CLASS"], "MODULE" => $arRecur["MODULE"], "NOTES" => $arProduct["CATALOG_GROUP_NAME"], "DETAIL_PAGE_URL" => $arProduct["DETAIL_PAGE_URL"], "VATE_RATE" => $arProduct["VATE_RATE"], "PRODUCT_XML_ID" => $arProduct["PRODUCT_XML_ID"], "RENEWAL" => "Y" ); $basketID = CSaleBasket::Add($arFields); $basketID = IntVal($basketID); if ($basketID <= 0) $bSuccess = False; if ($bSuccess) { if (CModule::IncludeModule("statistic")) CStatistic::Set_Event("eStore", "add2basket", $arFields["PRODUCT_ID"]); $arFields = array( "LID" => $arOrder["LID"], "PERSON_TYPE_ID" => $arOrder["PERSON_TYPE_ID"], "PAYED" => "N", "CANCELED" => "N", "STATUS_ID" => "N", "PRICE_DELIVERY" => $deliveryPrice, "ALLOW_DELIVERY" => "N", "PRICE" => $totalOrderPrice, "CURRENCY" => $baseSiteCurrency, "DISCOUNT_VALUE" => $discount, "USER_ID" => $arOrder["USER_ID"], "PAY_SYSTEM_ID" => $arOrder["PAY_SYSTEM_ID"], "DELIVERY_ID" => $deliveryID, "USER_DESCRIPTION" => $arOrder["USER_DESCRIPTION"], "TAX_VALUE" => (($bUseVat)? $taxVatPrice : $taxPrice), "STAT_GID" => $arOrder["STAT_GID"], "RECURRING_ID" => $arRecur["ID"] ); $newOrderID = CSaleOrder::Add($arFields); $newOrderID = IntVal($newOrderID); if ($newOrderID <= 0) $bSuccess = False; } if ($bSuccess) { $arDiscounts = array(); $arDiscounts[$basketID] = $discountProduct; CSaleBasket::OrderBasket($newOrderID, $currentFUser, $arOrder["LID"], $arDiscounts); } if ($bSuccess) { for ($it = 0, $intCount = count($arTaxList); $it < $intCount; $it++) { $arFields = array( "ORDER_ID" => $newOrderID, "TAX_NAME" => $arTaxList[$it]["TAX_NAME"], "IS_PERCENT" => $arTaxList[$it]["IS_PERCENT"], "VALUE" => ($arTaxList[$it]["IS_PERCENT"]=="Y") ? $arTaxList[$it]["VALUE"] : RoundEx(CCurrencyRates::ConvertCurrency($arTaxList[$it]["VALUE"], $arTaxList[$it]["CURRENCY"], $baseSiteCurrency), 2), "VALUE_MONEY" => $arTaxList[$it]["VALUE_MONEY"], "APPLY_ORDER" => $arTaxList[$it]["APPLY_ORDER"], "IS_IN_PRICE" => $arTaxList[$it]["IS_IN_PRICE"], "CODE" => $arTaxList[$it]["CODE"] ); CSaleOrderTax::Add($arFields); } $dbOrderPropValues = CSaleOrderPropsValue::GetList( array(), array("ORDER_ID" => $arRecur["ORDER_ID"]), false, false, array("ORDER_PROPS_ID", "NAME", "CODE", "VALUE", "PROP_IS_PAYER", "PROP_IS_EMAIL") ); while ($arOrderPropValues = $dbOrderPropValues->Fetch()) { $arFields = array( "ORDER_ID" => $newOrderID, "ORDER_PROPS_ID" => $arOrderPropValues["ORDER_PROPS_ID"], "NAME" => $arOrderPropValues["NAME"], "CODE" => $arOrderPropValues["CODE"], "VALUE" => $arOrderPropValues["VALUE"] ); CSaleOrderPropsValue::Add($arFields); if ($arOrderPropValues["PROP_IS_PAYER"] == "Y") $payerName = $arOrderPropValues["VALUE"]; if ($arOrderPropValues["PROP_IS_EMAIL"] == "Y") $payerEMail = $arOrderPropValues["VALUE"]; } } if ($bSuccess) { if (CModule::IncludeModule("statistic")) CStatistic::Set_Event("eStore", "order_create", $newOrderID); } if ($bSuccess) { $strOrderList = ""; $dbBasketTmp = CSaleBasket::GetList( array("NAME" => "ASC"), array("ORDER_ID" => $newOrderID) ); while ($arBasketTmp = $dbBasketTmp->Fetch()) { $strOrderList .= $arBasketTmp["NAME"]." - ".$arBasketTmp["QUANTITY"]." ".GetMessage("SALE_QUANTITY_UNIT"); $strOrderList .= "\n"; } if (strlen($payerName) <= 0 || strlen($payerEMail) <= 0) { $dbUser = CUser::GetByID($arOrder["USER_ID"]); if ($arUser = $dbUser->Fetch()) { if (strlen($payerName) <= 0) $payerName = $arUser["NAME"].((strlen($arUser["NAME"])<=0 || strlen($arUser["LAST_NAME"])<=0) ? "" : " ").$arUser["LAST_NAME"]; if (strlen($payerEMail) <= 0) $payerEMail = $arUser["EMAIL"]; } } $arFields = Array( "ORDER_ID" => $newOrderID, "ORDER_DATE" => Date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT", $arOrder["LID"]))), "ORDER_USER" => $payerName, "PRICE" => SaleFormatCurrency($totalOrderPrice, $baseSiteCurrency), "BCC" => COption::GetOptionString("sale", "order_email", "order@".$SERVER_NAME), "EMAIL" => $payerEMail, "ORDER_LIST" => $strOrderList, "SALE_EMAIL" => COption::GetOptionString("sale", "order_email", "order@".$SERVER_NAME) ); $eventName = "SALE_NEW_ORDER_RECURRING"; $bSend = true; foreach(GetModuleEvents("sale", "OnOrderRecurringSendEmail", true) as $arEvent) { if (ExecuteModuleEventEx($arEvent, Array($newOrderID, &$eventName, &$arFields))===false) $bSend = false; } if($bSend) { $event = new CEvent; $event->Send($eventName, $arOrder["LID"], $arFields, "N"); } } if ($bSuccess) $DB->Commit(); else $DB->Rollback(); } } else { $totalOrderPrice = $arOrder["PRICE"]; $baseSiteCurrency = $arOrder["CURRENCY"]; } $res = False; if ($bSuccess) { $res = CSaleUserAccount::Pay($arOrder["USER_ID"], $totalOrderPrice, $baseSiteCurrency, $newOrderID, True); if ($res) { if ($arProduct["WITHOUT_ORDER"] == "N") { CSaleOrder::PayOrder($newOrderID, "Y", False, False, $arRecur["ID"]); CSaleOrder::DeliverOrder($newOrderID, "Y", $arRecur["ID"]); CSaleOrder::DeductOrder($newOrderID, "Y", "", true, array(), $arRecur["ID"]); } else { /** @var $productProvider IBXSaleProductProvider */ if ($productProvider = CSaleBasket::GetProductProvider($arProduct)) { $r = $productProvider::DeliverProduct(array( "PRODUCT_ID" => $arProduct["PRODUCT_ID"], "USER_ID" => $arOrder["USER_ID"], "PAID" => true )); } else { $r = CSaleBasket::ExecuteCallbackFunction( $arProduct["PAY_CALLBACK_FUNC"], $arRecur["MODULE"], $arProduct["PRODUCT_ID"], $arOrder["USER_ID"], true ); } } $arFields = array( "ORDER_ID" => $newOrderID, "PRODUCT_NAME" => $arProduct["PRODUCT_NAME"], "PRODUCT_URL" => $arProduct["PRODUCT_URL"], "PRICE_TYPE" => $arProduct["PRICE_TYPE"], "RECUR_SCHEME_TYPE" => $arProduct["RECUR_SCHEME_TYPE"], "RECUR_SCHEME_LENGTH" => $arProduct["RECUR_SCHEME_LENGTH"], "WITHOUT_ORDER" => $arProduct["WITHOUT_ORDER"], "PRIOR_DATE" => Date($GLOBALS["DB"]->DateFormatToPHP(CLang::GetDateFormat("FULL", SITE_ID))), "NEXT_DATE" => $arProduct["NEXT_DATE"], "REMAINING_ATTEMPTS" => (Defined("SALE_PROC_REC_ATTEMPTS") ? SALE_PROC_REC_ATTEMPTS : 3), "SUCCESS_PAYMENT" => "Y" ); CSaleRecurring::Update($arRecur["ID"], $arFields); } else { $arFields = array( "ORDER_ID" => $newOrderID, "PRODUCT_NAME" => $arProduct["PRODUCT_NAME"], "PRODUCT_URL" => $arProduct["PRODUCT_URL"], "PRICE_TYPE" => $arProduct["PRICE_TYPE"], "RECUR_SCHEME_LENGTH" => $arProduct["RECUR_SCHEME_LENGTH"], "RECUR_SCHEME_TYPE" => $arProduct["RECUR_SCHEME_TYPE"], "WITHOUT_ORDER" => $arProduct["WITHOUT_ORDER"], "NEXT_DATE" => Date($GLOBALS["DB"]->DateFormatToPHP(CLang::GetDateFormat("FULL", SITE_ID)), time() + SALE_PROC_REC_TIME + CTimeZone::GetOffset()), "REMAINING_ATTEMPTS" => (IntVal($arRecur["REMAINING_ATTEMPTS"]) - 1), "SUCCESS_PAYMENT" => "N" ); CSaleRecurring::Update($arRecur["ID"], $arFields); if ((IntVal($arRecur["REMAINING_ATTEMPTS"]) - 1) <= 0) { CSaleRecurring::CancelRecurring($arRecur["ID"], "Y", "Can't pay order"); /* $arFields["CANCELED"] = "Y"; $arFields["DATE_CANCELED"] = Date(CDatabase::DateFormatToPHP(CLang::GetDateFormat("FULL", LANG))); $arFields["CANCELED_REASON"] = "Can't pay order"; */ } } } return $res; }
function Add2BasketByProductID($PRODUCT_ID, $QUANTITY = 1, $arRewriteFields = array(), $arProductParams = false) { global $APPLICATION; /* for old use */ if (false === $arProductParams) { $arProductParams = $arRewriteFields; $arRewriteFields = array(); } $PRODUCT_ID = IntVal($PRODUCT_ID); if ($PRODUCT_ID <= 0) { $APPLICATION->ThrowException(GetMessage('CATALOG_ERR_EMPTY_PRODUCT_ID'), "EMPTY_PRODUCT_ID"); return false; } $QUANTITY = DoubleVal($QUANTITY); if ($QUANTITY <= 0) { $QUANTITY = 1; } if (!CModule::IncludeModule("sale")) { $APPLICATION->ThrowException(GetMessage('CATALOG_ERR_NO_SALE_MODULE'), "NO_SALE_MODULE"); return false; } if (CModule::IncludeModule("statistic") && IntVal($_SESSION["SESS_SEARCHER_ID"]) > 0) { $APPLICATION->ThrowException(GetMessage('CATALOG_ERR_SESS_SEARCHER'), "SESS_SEARCHER"); return false; } $arProduct = CCatalogProduct::GetByID($PRODUCT_ID); if ($arProduct === false) { $APPLICATION->ThrowException(GetMessage('CATALOG_ERR_NO_PRODUCT'), "NO_PRODUCT"); return false; } $CALLBACK_FUNC = "CatalogBasketCallback"; $productProviderClass = "CCatalogProductProvider"; //ADD PRODUCT TO SUBSCRIBE if (isset($arRewriteFields["SUBSCRIBE"]) && $arRewriteFields["SUBSCRIBE"] == "Y") { global $USER; if ($USER->IsAuthorized() && !isset($_SESSION["NOTIFY_PRODUCT"][$USER->GetID()])) { $_SESSION["NOTIFY_PRODUCT"][$USER->GetID()] = array(); } $arBuyerGroups = CUser::GetUserGroup($USER->GetID()); $arPrice = CCatalogProduct::GetOptimalPrice($PRODUCT_ID, 1, $arBuyerGroups, "N", array(), SITE_ID, array()); $arCallbackPrice = array("PRICE" => $arPrice["DISCOUNT_PRICE"], "VAT_RATE" => 0, "CURRENCY" => CSaleLang::GetLangCurrency(SITE_ID), "QUANTITY" => 1); } else { $arRewriteFields["SUBSCRIBE"] = "N"; if ($arProduct["CAN_BUY_ZERO"] != 'Y' && $arProduct["QUANTITY_TRACE"] == "Y" && DoubleVal($arProduct["QUANTITY"]) <= 0) { $APPLICATION->ThrowException(GetMessage('CATALOG_ERR_PRODUCT_RUN_OUT'), "PRODUCT_RUN_OUT"); return false; } $arCallbackPrice = CSaleBasket::ReReadPrice($CALLBACK_FUNC, "catalog", $PRODUCT_ID, $QUANTITY, "N", $productProviderClass); if (!is_array($arCallbackPrice) || empty($arCallbackPrice)) { $APPLICATION->ThrowException(GetMessage('CATALOG_PRODUCT_PRICE_NOT_FOUND'), "NO_PRODUCT_PRICE"); return false; } } $dbIBlockElement = CIBlockElement::GetList(array(), array("ID" => $PRODUCT_ID, "ACTIVE" => "Y", "ACTIVE_DATE" => "Y", "CHECK_PERMISSIONS" => "Y", "MIN_PERMISSION" => "R"), false, false, array("ID", "IBLOCK_ID", "XML_ID", "NAME", "DETAIL_PAGE_URL")); $arIBlockElement = $dbIBlockElement->GetNext(); if ($arIBlockElement == false) { $APPLICATION->ThrowException(GetMessage('CATALOG_ERR_NO_IBLOCK_ELEMENT'), "NO_IBLOCK_ELEMENT"); return false; } $arProps = array(); $dbIBlock = CIBlock::GetList(array(), array("ID" => $arIBlockElement["IBLOCK_ID"])); if ($arIBlock = $dbIBlock->Fetch()) { $arProps[] = array("NAME" => "Catalog XML_ID", "CODE" => "CATALOG.XML_ID", "VALUE" => $arIBlock["XML_ID"]); } $arProps[] = array("NAME" => "Product XML_ID", "CODE" => "PRODUCT.XML_ID", "VALUE" => $arIBlockElement["XML_ID"]); $arPrice = CPrice::GetByID($arCallbackPrice["PRODUCT_PRICE_ID"]); $arFields = array("PRODUCT_ID" => $PRODUCT_ID, "PRODUCT_PRICE_ID" => $arCallbackPrice["PRODUCT_PRICE_ID"], "PRICE" => $arCallbackPrice["PRICE"], "CURRENCY" => $arCallbackPrice["CURRENCY"], "WEIGHT" => $arProduct["WEIGHT"], "QUANTITY" => $QUANTITY, "LID" => SITE_ID, "DELAY" => "N", "CAN_BUY" => "Y", "NAME" => $arIBlockElement["~NAME"], "MODULE" => "catalog", "PRODUCT_PROVIDER_CLASS" => "CCatalogProductProvider", "NOTES" => $arPrice["CATALOG_GROUP_NAME"], "DETAIL_PAGE_URL" => $arIBlockElement["DETAIL_PAGE_URL"], "CATALOG_XML_ID" => $arIBlock["XML_ID"], "PRODUCT_XML_ID" => $arIBlockElement["XML_ID"], "VAT_RATE" => $arCallbackPrice['VAT_RATE'], "SUBSCRIBE" => $arRewriteFields["SUBSCRIBE"]); if ($arProduct["CAN_BUY_ZERO"] != "Y" && $arProduct["QUANTITY_TRACE"] == "Y") { if (IntVal($arProduct["QUANTITY"]) - $QUANTITY < 0) { $arFields["QUANTITY"] = DoubleVal($arProduct["QUANTITY"]); } } if (is_array($arProductParams) && !empty($arProductParams)) { foreach ($arProductParams as &$arOneProductParams) { $arProps[] = array("NAME" => $arOneProductParams["NAME"], "CODE" => $arOneProductParams["CODE"], "VALUE" => $arOneProductParams["VALUE"], "SORT" => $arOneProductParams["SORT"]); } if (isset($arOneProductParams)) { unset($arOneProductParams); } } $arFields["PROPS"] = $arProps; if (is_array($arRewriteFields) && !empty($arRewriteFields)) { while (list($key, $value) = each($arRewriteFields)) { $arFields[$key] = $value; } } $addres = CSaleBasket::Add($arFields); if ($addres) { if (isset($arRewriteFields["SUBSCRIBE"]) && $arRewriteFields["SUBSCRIBE"] == "Y") { $_SESSION["NOTIFY_PRODUCT"][$USER->GetID()][$PRODUCT_ID] = $PRODUCT_ID; } if (CModule::IncludeModule("statistic")) { CStatistic::Set_Event("sale2basket", "catalog", $arFields["DETAIL_PAGE_URL"]); } } return $addres; }
function ForumAddMessage( $MESSAGE_TYPE, $FID, $TID, $MID, $arFieldsG, &$strErrorMessage, &$strOKMessage, $iFileSize = false, $captcha_word = "", $captcha_sid = 0, $captcha_code = "") { global $USER, $DB, $APPLICATION; $APPLICATION->ResetException(); $aMsg = array(); $bUpdateTopic = False; $bAddEditNote = ($MESSAGE_TYPE == "EDIT"); $arParams = array( "PERMISSION" => false); $arUserGroups = $USER->GetUserGroupArray(); // ************ External Permission ********************************* if (!empty($arFieldsG["PERMISSION_EXTERNAL"])) { $arParams["PERMISSION"] = CForumNew::GetUserPermission($FID, $arUserGroups); $arParams["PERMISSION"] = ($arParams["PERMISSION"] < "Q" ? $arFieldsG["PERMISSION_EXTERNAL"] : $arParams["PERMISSION"]); unset($arFieldsG["PERMISSION_EXTERNAL"]); } elseif (!empty($arFieldsG["SONET_PERMS"])) { $arParams["PERMISSION"] = CForumNew::GetUserPermission($FID, $arUserGroups); if ($arParams["PERMISSION"] < "Q") { if ($arFieldsG["SONET_PERMS"]["bCanFull"] === true) $arParams["PERMISSION"] = "Y"; elseif ($arFieldsG["SONET_PERMS"]["bCanNew"] === true) $arParams["PERMISSION"] = "M"; elseif ($arFieldsG["SONET_PERMS"]["bCanWrite"] === true) $arParams["PERMISSION"] = "I"; else $arParams["PERMISSION"] = "A"; } unset($arFieldsG["SONET_PERMS"]); } $DB->StartTransaction(); if (!in_array($MESSAGE_TYPE, array("NEW", "EDIT", "REPLY"))) $aMsg[] = array("id" => "MESSAGE_TYPE", "text" => GetMessage("ADDMES_NO_TYPE")."."); $MID = intval($MID); $TID = intval($TID); $FID = intval($FID); $arFieldsG["EDIT_ADD_REASON"] = ($arFieldsG["EDIT_ADD_REASON"] == "Y" ? "Y" : "N"); if ($MID>0) { $arMessage = CForumMessage::GetByID($MID, array("FILTER" => "N")); if ($arMessage) { $TID = IntVal($arMessage["TOPIC_ID"]); $FID = IntVal($arMessage["FORUM_ID"]); } } $arTopic = array(); if ($TID>0) { $arTopic = CForumTopic::GetByID($TID); if ($arTopic) { $FID = IntVal($arTopic["FORUM_ID"]); } } $arForum = CForumNew::GetByID($FID); //************************* Input params ************************************************************************** if ($MESSAGE_TYPE=="NEW" && !CForumTopic::CanUserAddTopic($FID, $arUserGroups, $USER->GetID(), $arForum, $arParams["PERMISSION"])) $aMsg[] = array("id" => "PERMISSION", "text" => GetMessage("ADDMESS_NO_PERMS2NEW")."."); elseif ($MESSAGE_TYPE=="EDIT" && !CForumMessage::CanUserUpdateMessage($MID, $arUserGroups, $USER->GetID(), $arParams["PERMISSION"])) $aMsg[] = array("id" => "PERMISSION", "text" => GetMessage("ADDMESS_NO_PERMS2EDIT")."."); elseif ($MESSAGE_TYPE=="REPLY" && !CForumMessage::CanUserAddMessage($TID, $arUserGroups, $USER->GetID(), $arParams["PERMISSION"])) $aMsg[] = array("id" => "PERMISSION", "text" => GetMessage("ADDMESS_NO_PERMS2REPLY")."."); if ($MESSAGE_TYPE == "NEW" || ($MESSAGE_TYPE == "EDIT" && array_intersect_key($arFieldsG, array("TITLE"=>"", "DESCRIPTION"=>"", "ICON_ID"=>"", "TAGS"=>"", "OWNER_ID"=>"", "SOCNET_GROUP_ID"=>"")) && CForumTopic::CanUserUpdateTopic($TID, $arUserGroups, $USER->GetID(), $arParams["PERMISSION"]))) { $bUpdateTopic = True; } ?><? if ($MESSAGE_TYPE =="EDIT" && (ForumCurrUserPermissions($FID) > "Q" && $arFieldsG["EDIT_ADD_REASON"] == "N")) $bAddEditNote = false; //*************************!CAPTCHA******************************************************************************** if (!$USER->IsAuthorized() && $arForum["USE_CAPTCHA"]=="Y") { include_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/captcha.php"); $cpt = new CCaptcha(); if (strlen($captcha_code) > 0) { $captchaPass = COption::GetOptionString("main", "captcha_password", ""); if (!$cpt->CheckCodeCrypt($captcha_word, $captcha_code, $captchaPass)) $aMsg[] = array("id" => "CAPTCHA", "text" => GetMessage("FORUM_POSTM_CAPTCHA")."."); } else { if (!$cpt->CheckCode($captcha_word, $captcha_sid)) $aMsg[] = array("id" => "CAPTCHA", "text" => GetMessage("FORUM_POSTM_CAPTCHA")."."); } } //*************************!CAPTCHA******************************************************************************** $arFieldsG["POST_MESSAGE"] = trim($arFieldsG["POST_MESSAGE"]); if (empty($arFieldsG["POST_MESSAGE"])) $aMsg[] = array("id" => "POST_MESSAGE", "text" => GetMessage("ADDMESS_INPUT_MESSAGE")."."); if ($bUpdateTopic && is_set($arFieldsG, "TITLE")) { $arFieldsG["TITLE"] = trim($arFieldsG["TITLE"]); if (empty($arFieldsG["TITLE"])) $aMsg[] = array("id" => "TITLE", "text" => GetMessage("ADDMESS_INPUT_TITLE")."."); } //*************************!QUOTA********************************************************************************** /* if (empty($aMsg)) { $quota = new CDiskQuota(); if ($MESSAGE_TYPE=="EDIT") { if (!$quota->checkDiskQuota(strLen($arFieldsG["POST_MESSAGE"]) - strLen($arMessage["POST_MESSAGE"]))) { if (!$quota->LAST_ERROR) $aMsg[] = array("id" => "QUOTA", "text" => GetMessage("MAIN_QUOTA_BAD")."( ".COption::GetOptionInt("main", "disk_space")." )."); else $aMsg[] = array("id" => "QUOTA", "text" => $quota->LAST_ERROR); } } elseif (!$quota->checkDiskQuota($arFieldsG["POST_MESSAGE"])) { if (!$quota->LAST_ERROR) $aMsg[] = array("id" => "QUOTA", "text" => GetMessage("MAIN_QUOTA_BAD")."( ".COption::GetOptionInt("main", "disk_space")." )."); else $aMsg[] = array("id" => "QUOTA", "text" => $quota->LAST_ERROR); } }*/ //*************************!QUOTA********************************************************************************** if (empty($aMsg)) { // *************************!ATTACH_IMG***************************************************************************** if (is_set($arFieldsG, "ATTACH_IMG") && empty($arFieldsG["ATTACH_IMG"]["name"]) && empty($arFieldsG["ATTACH_IMG"]["del"])) unset($arFieldsG["ATTACH_IMG"]); if (is_set($arFieldsG, "ATTACH_IMG")) { $arFieldsG["ATTACH_IMG"]["FILE_ID"] = $arMessage["ATTACH_IMG"]; $arFieldsG["FILES"] = array($arFieldsG["ATTACH_IMG"]); } unset($arFieldsG["ATTACH_IMG"]); if (!empty($arFieldsG["FILES"]) && is_array($arFieldsG["FILES"])) { foreach ($arFieldsG["FILES"] as $key => $val): if (intVal($val["FILE_ID"]) > 0): $arFieldsG["FILES"][$key]["del"] = ($val["del"] == "Y" ? "Y" : ""); endif; endforeach; $res = array("FORUM_ID" => $arForum["ID"], "TOPIC_ID" => 0, "MESSAGE_ID" => 0, "USER_ID" => $USER->GetID()); if (!in_array($arForum["ALLOW_UPLOAD"], array("Y", "F", "A"))) unset($arFieldsG["FILES"]); elseif (!CForumFiles::CheckFields($arFieldsG["FILES"], $res, "NOT_CHECK_DB")) { if ($ex = $APPLICATION->GetException()) $aMsg[] = array("id" => "FILE", "text" => $ex->GetString()); else $aMsg[] = array("id" => "FILE", "text" => "File upload error."); } } } //*************************/ATTACH_IMG***************************************************************************** if (empty($aMsg) && ($MESSAGE_TYPE=="NEW" || $MESSAGE_TYPE=="REPLY")) { $AUTHOR_ID = IntVal($USER->GetParam("USER_ID")); if ($USER->IsAuthorized()) { $res = CForumUser::GetByUSER_ID($USER->GetID()); $bSHOW_NAME = (!empty($res) ? $res["SHOW_NAME"] == "Y" : true); $arFieldsG["AUTHOR_NAME"] = ($bSHOW_NAME ? trim($USER->GetFullName()) : ""); $arFieldsG["AUTHOR_NAME"] = (!empty($arFieldsG["AUTHOR_NAME"]) ? $arFieldsG["AUTHOR_NAME"] : $USER->GetLogin()); } if (empty($arFieldsG["AUTHOR_NAME"])) $aMsg[] = array("id" => "AUTHOR_NAME", "text" => GetMessage("ADDMESS_INPUT_AUTHOR")."."); } elseif (empty($aMsg) && $MESSAGE_TYPE=="EDIT") { $AUTHOR_ID = IntVal($arMessage["AUTHOR_ID"]); if (is_set($arFieldsG, "AUTHOR_NAME") && empty($arFieldsG["AUTHOR_NAME"])) { if ($AUTHOR_ID <= 0) $aMsg[] = array("id" => "AUTHOR_NAME", "text" => GetMessage("ADDMESS_INPUT_AUTHOR")."."); else { $res = CForumUser::GetByUSER_ID($AUTHOR_ID); $bSHOW_NAME = (!empty($res) ? $res["SHOW_NAME"] == "Y" : true); if ($USER->GetID() == $AUTHOR_ID) { $arFieldsG["AUTHOR_NAME"] = ($bSHOW_NAME ? trim($USER->GetFullName()) : ""); $arFieldsG["AUTHOR_NAME"] = (!empty($arFieldsG["AUTHOR_NAME"]) ? $arFieldsG["AUTHOR_NAME"] : $USER->GetLogin()); } else { $res = CForumUser::GetByUSER_IDEx($AUTHOR_ID); if ($res) { $arFieldsG["AUTHOR_NAME"] = trim($bSHOW_NAME ? $res["NAME"]." ".$res["LAST_NAME"] : ""); $arFieldsG["AUTHOR_NAME"] = (!empty($arFieldsG["AUTHOR_NAME"]) ? $arFieldsG["AUTHOR_NAME"] : $res["LOGIN"]); } else { unset($arFieldsG["AUTHOR_NAME"]); } } } } if ($USER->IsAuthorized()) { $res = CForumUser::GetByUSER_ID($USER->GetID()); $bSHOW_NAME = (!empty($res) ? $res["SHOW_NAME"] == "Y" : true); $arFieldsG["EDITOR_NAME"] = ($bSHOW_NAME ? trim($USER->GetFullName()) : ""); $arFieldsG["EDITOR_NAME"] = (!empty($arFieldsG["EDITOR_NAME"]) ? $arFieldsG["EDITOR_NAME"] : $USER->GetLogin()); } if ($bAddEditNote && empty($arFieldsG["EDITOR_NAME"])) $aMsg[] = array("id" => "EDITOR_NAME", "text" => GetMessage("ADDMESS_INPUT_EDITOR")."."); } //*************************/Input params *************************************************************************** //************************* Actions ******************************************************************************** //************************* Add/edit topic ************************************************************************* if (empty($aMsg)) { // The longest step by time. Actualization of topic, user and forum statistic info (~0.7-0.8 sec) if ($MESSAGE_TYPE == "EDIT" && ($arMessage["APPROVED"] == "Y" || $arMessage["APPROVED"] == "N")) { $arFieldsG["APPROVED"] = $arMessage["APPROVED"]; } elseif (!empty($arTopic) && $arTopic["APPROVED"] != "Y") { $arFieldsG["APPROVED"] = "N"; } else { $arFieldsG["APPROVED"] = ($arForum["MODERATION"]=="Y") ? "N" : "Y"; if (ForumCurrUserPermissions($FID)>="Q") $arFieldsG["APPROVED"] = "Y"; } if ($bUpdateTopic) { $arFields = array(); foreach (array("TITLE", "DESCRIPTION", "ICON_ID", "TAGS") as $key) if (is_set($arFieldsG, $key)) $arFields[$key] = $arFieldsG[$key]; if ($MESSAGE_TYPE=="NEW") { $arFields["FORUM_ID"] = $FID; $arFields["USER_START_ID"] = $AUTHOR_ID; $arFields["USER_START_NAME"] = $arFieldsG["AUTHOR_NAME"]; $arFields["LAST_POSTER_NAME"] = $arFieldsG["AUTHOR_NAME"]; $arFields["APPROVED"] = $arFieldsG["APPROVED"]; $arFields["OWNER_ID"] = $arFieldsG["OWNER_ID"]; $arFields["SOCNET_GROUP_ID"] = $arFieldsG["SOCNET_GROUP_ID"]; $TID = CForumTopic::Add($arFields); if (IntVal($TID)<=0) $aMsg[] = array("id" => "TOPIC_ID", "text" => GetMessage("ADDMESS_ERROR_ADD_TOPIC")."."); } else { if (is_set($arFieldsG, "AUTHOR_NAME")): if ($arTopic["LAST_MESSAGE_ID"] == $MID && $arMessage["LAST_POSTER_NAME"] != $arFieldsG["AUTHOR_NAME"]): $arFields["LAST_POSTER_NAME"] = $arFieldsG["AUTHOR_NAME"]; endif; if ($arTopic["ABS_LAST_MESSAGE_ID"] == $MID && $arMessage["ABS_LAST_POSTER_NAME"] != $arFieldsG["AUTHOR_NAME"]): $arFields["ABS_LAST_POSTER_NAME"] = $arFieldsG["AUTHOR_NAME"]; endif; if ($arTopic["USER_START_NAME"] == $arMessage["USER_START_NAME"] && $arTopic["USER_START_NAME"] != $arFieldsG["AUTHOR_NAME"]): $arFields["USER_START_NAME"] = $arFieldsG["AUTHOR_NAME"]; endif; endif; if (!empty($arFields)) { $TID1 = CForumTopic::Update($TID, $arFields); if (intval($TID1) <= 0): $aMsg[] = array("id" => "TOPIC_ID", "text" => GetMessage("ADDMESS_ERROR_EDIT_TOPIC")."."); else: foreach ($arFields as $key => $val): if ($arFields[$key] != $arTopic[$key]): $res_log[$key] = $arFields[$key]; $res_log["before".$key] = $arTopic[$key]; endif; endforeach; if (!empty($res_log)): $arTopic = CForumTopic::GetByID($TID); $res_log['FORUM_ID'] = $arTopic['FORUM_ID']; CForumEventLog::Log("topic", "edit", $TID, serialize($res_log)); endif; endif; if (is_set($arFieldsG, "AUTHOR_NAME") && $arForum["LAST_MESSAGE_ID"] == $MID && $arForum["LAST_POSTER_NAME"] != $arFieldsG["AUTHOR_NAME"]): $arFieldsForum = array("LAST_POSTER_NAME" => $arFieldsG["AUTHOR_NAME"]); if ($arForum["ABS_LAST_MESSAGE_ID"] == $MID): $arFieldsForum["LAST_POSTER_NAME"] = $arFieldsG["AUTHOR_NAME"]; endif; CForumNew::Update($arForum["ID"], $arFieldsForum); endif; } } } } //*************************/Add/edit topic ************************************************************************* //************************* Add/edit message *********************************************************************** if (empty($aMsg)) { $arFields = Array( "POST_MESSAGE" => $arFieldsG["POST_MESSAGE"], "USE_SMILES" => ($arFieldsG["USE_SMILES"]=="Y") ? "Y" : "N", "APPROVED" => $arFieldsG["APPROVED"] ); if (is_set($arFieldsG, "ATTACH_IMG")) $arFields["ATTACH_IMG"] = $arFieldsG["ATTACH_IMG"]; elseif (is_set($arFieldsG, "FILES")) $arFields["FILES"] = $arFieldsG["FILES"]; if (is_set($arFieldsG, "PARAM1")) $arFields["PARAM1"] = $arFieldsG["PARAM1"]; if (is_set($arFieldsG, "PARAM2")) $arFields["PARAM2"] = $arFieldsG["PARAM2"]; /* elseif ($MESSAGE_TYPE != "NEW") { $db_res = CForumMessage::GetList(array(), array("TOPIC_ID" => $TID, "NEW_TOPIC" => "Y")); if ($db_res && $res = $db_res->Fetch()) $res["PARAM2"] = $res["PARAM2"]; }*/ if ($MESSAGE_TYPE=="NEW" || $MESSAGE_TYPE=="REPLY") { $arFields["AUTHOR_NAME"] = $arFieldsG["AUTHOR_NAME"]; $arFields["AUTHOR_EMAIL"] = $arFieldsG["AUTHOR_EMAIL"]; $arFields["AUTHOR_ID"] = $AUTHOR_ID; $arFields["FORUM_ID"] = $FID; $arFields["TOPIC_ID"] = $TID; $AUTHOR_IP = ForumGetRealIP(); $AUTHOR_IP_tmp = $AUTHOR_IP; $AUTHOR_REAL_IP = $_SERVER['REMOTE_ADDR']; if (COption::GetOptionString("forum", "FORUM_GETHOSTBYADDR", "N") == "Y") { $AUTHOR_IP = @gethostbyaddr($AUTHOR_IP); $AUTHOR_REAL_IP = ($AUTHOR_IP_tmp==$AUTHOR_REAL_IP ? $AUTHOR_IP : @gethostbyaddr($AUTHOR_REAL_IP)); } $arFields["AUTHOR_IP"] = ($AUTHOR_IP!==False) ? $AUTHOR_IP : "<no address>"; $arFields["AUTHOR_REAL_IP"] = ($AUTHOR_REAL_IP!==False) ? $AUTHOR_REAL_IP : "<no address>"; $arFields["NEW_TOPIC"] = ($MESSAGE_TYPE=="NEW") ? "Y" : "N"; $arFields["GUEST_ID"] = $_SESSION["SESS_GUEST_ID"]; $MID = CForumMessage::Add($arFields, false); if (intVal($MID)<=0) { $str = $APPLICATION->GetException(); if ($str && $str->GetString()) $aMsg[] = array("id" => "MESSAGE_ID", "text" => $str->GetString()); else $aMsg[] = array("id" => "MESSAGE_ID", "text" => GetMessage("ADDMESS_ERROR_ADD_MESSAGE")."."); if ($MESSAGE_TYPE=="NEW") { CForumTopic::Delete($TID); $TID = 0; } } } else { if (empty($AUTHOR_ID)) { if (is_set($arFieldsG, "AUTHOR_NAME")) $arFields["AUTHOR_NAME"] = $arFieldsG["AUTHOR_NAME"]; if (is_set($arFieldsG, "AUTHOR_EMAIL")) $arFields["AUTHOR_EMAIL"] = $arFieldsG["AUTHOR_EMAIL"]; } if ($bAddEditNote) { $arFields["EDITOR_NAME"] = $arFieldsG["EDITOR_NAME"]; $arFields["EDITOR_EMAIL"] = $arFieldsG["EDITOR_EMAIL"]; $arFields["EDIT_REASON"] = $arFieldsG["EDIT_REASON"]; $arFields["EDIT_DATE"] = ""; if ($GLOBALS["USER"]->IsAuthorized()) $arFields["EDITOR_ID"] = $GLOBALS["USER"]->GetID(); } $MID1 = CForumMessage::Update($MID, $arFields); if (IntVal($MID1)<=0) { $ex = $GLOBALS['APPLICATION']->GetException(); if ($ex) $aMsg[] = array("id" => "MESSAGE_ID", "text" => $ex->GetString()); else $aMsg[] = array("id" => "MESSAGE_ID", "text" => GetMessage("ADDMESS_ERROR_EDIT_MESSAGE")."."); } elseif ($AUTHOR_ID == $GLOBALS["USER"]->GetId() && COption::GetOptionString("forum", "LOGS", "Q") < "U") {} else { $res_log = array(); foreach ($arFields as $key => $val): if ($arFields[$key] != $arMessage[$key]): if ($key == "FILES" || $key == "ATTACH_IMG"): $res_log[$key] = GetMessage("F_ATTACH_IS_MODIFIED"); continue; endif; $res_log["BeforeMessage"] = $arMessage[$key]; $res_log["AfterMessage"] = $arFields[$key]; endif; endforeach; if (!empty($res_log)): $arMessage = CForumMessage::GetByID($MID); $TID = $arMessage['TOPIC_ID']; $res_log['FORUM_ID'] = $arMessage['FORUM_ID']; $arTopic = CForumTopic::GetByID($TID); $res_log['TITLE'] = $arTopic['TITLE']; $res_log['TOPIC_ID'] = $TID; $res_log = serialize($res_log); CForumEventLog::Log("message", "edit", $MID, $res_log); endif; } } } //*************************/Add/edit message *********************************************************************** if (empty($aMsg)) { $DB->Commit(); } else { $DB->Rollback(); } if (empty($aMsg) && CModule::IncludeModule("statistic")) { $F_EVENT1 = $arForum["EVENT1"]; $F_EVENT2 = $arForum["EVENT2"]; $F_EVENT3 = $arForum["EVENT3"]; if (empty($F_EVENT3)) { $arForumSite_tmp = CForumNew::GetSites($FID); if (defined("ADMIN_SECTION") && ADMIN_SECTION===true) { $arForumSiteCode_tmp = array_keys($arForumSite_tmp); $F_EVENT3 = CForumNew::PreparePath2Message($arForumSite_tmp[$arForumSiteCode_tmp[0]], array("FORUM_ID"=>$FID, "TOPIC_ID"=>$TID, "MESSAGE_ID"=>$MID)); } else { $F_EVENT3 = CForumNew::PreparePath2Message($arForumSite_tmp[SITE_ID], array("FORUM_ID"=>$FID, "TOPIC_ID"=>$TID, "MESSAGE_ID"=>$MID)); } } CStatistic::Set_Event($F_EVENT1, $F_EVENT2, $F_EVENT3); } if (empty($aMsg)) { $arNote = array(); if ($MESSAGE_TYPE=="NEW" || $MESSAGE_TYPE=="REPLY") { CForumMessage::SendMailMessage($MID, array(), false, "NEW_FORUM_MESSAGE"); $arNote = array("id" => $MESSAGE_TYPE, "text" => GetMessage("ADDMESS_SUCCESS_ADD").". \n"); } else { CForumMessage::SendMailMessage($MID, array(), false, "EDIT_FORUM_MESSAGE"); $arNote = array("id" => "EDIT", "text" => GetMessage("ADDMESS_SUCCESS_EDIT").". \n"); } if ($arFieldsG["APPROVED"]!="Y") { $arNote["id"] .= "_NOT_APPROVED"; $arNote["text"] .= GetMessage("ADDMESS_AFTER_MODERATE").". \n"; } if (is_array($strOKMessage)) $strOKMessage[] = $arNote; else $strOKMessage .= $arNote["text"]; return $MID; } $e = new CAdminException($aMsg); $strErrorMessage = $e->GetString(); return false; }
function SubscribeProduct($intProductID, $arRewriteFields = array(), $arProductParams = array()) { global $USER; if (!CCatalog::IsUserExists()) return false; if (!$USER->IsAuthorized()) return false; $intUserID = intval($USER->GetID()); $intProductID = intval($intProductID); if (0 >= $intProductID) { $APPLICATION->ThrowException(GetMessage('CATALOG_ERR_EMPTY_PRODUCT_ID'), "EMPTY_PRODUCT_ID"); return false; } if (!CModule::IncludeModule("sale")) { $APPLICATION->ThrowException(GetMessage('CATALOG_ERR_NO_SALE_MODULE'), "NO_SALE_MODULE"); return false; } if (CModule::IncludeModule("statistic") && array_key_exists('SESS_SEARCHER_ID', $_SESSION) && 0 < intval($_SESSION["SESS_SEARCHER_ID"])) { $APPLICATION->ThrowException(GetMessage('CATALOG_ERR_SESS_SEARCHER'), "SESS_SEARCHER"); return false; } $rsProducts = CCatalogProduct::GetList( array(), array('ID' => $intProductID), false, false, array( 'ID', 'WEIGHT', ) ); if (!($arCatalogProduct = $rsProducts->Fetch())) { $APPLICATION->ThrowException(GetMessage('CATALOG_ERR_NO_PRODUCT'), "NO_PRODUCT"); return false; } $rsItems = CIBlockElement::GetList( array(), array( "ID" => $intProductID, "ACTIVE" => "Y", "ACTIVE_DATE" => "Y", "CHECK_PERMISSIONS" => "Y", "MIN_PERMISSION" => "R" ), false, false, array( 'ID', 'IBLOCK_ID', 'NAME', 'XML_ID', 'DETAIL_PAGE_URL' ) ); if (!($arProduct = $rsItems->Fetch())) return false; $arPrice = array( 'PRICE' => 0.0, 'CURRENCY' => CSaleLang::GetLangCurrency(SITE_ID), 'VAT_RATE' => 0, 'PRODUCT_PRICE_ID' => 0, 'CATALOG_GROUP_NAME' => '', ); $arBuyerGroups = $USER->GetUserGroupArray(); $arSubscrPrice = CCatalogProduct::GetOptimalPrice($intProductID, 1, $arBuyerGroups, "N", array(), SITE_ID, array()); if (!empty($arSubscrPrice) && is_array($arSubscrPrice)) { $arPrice['PRICE'] = $arSubscrPrice['DISCOUNT_PRICE']; $arPrice['CURRENCY'] = CCurrency::GetBaseCurrency(); $arPrice['VAT_RATE'] = $arSubscrPrice['PRICE']['VAT_RATE']; $arPrice['PRODUCT_PRICE_ID'] = $arSubscrPrice["PRICE"]["ID"]; $arPrice['CATALOG_GROUP_NAME'] = $arSubscrPrice["PRICE"]["CATALOG_GROUP_NAME"]; } $arProps = array(); $strIBlockXmlID = strval(CIBlock::GetArrayByID($arProduct['IBLOCK_ID'], 'XML_ID')); if ('' != $strIBlockXmlID) { $arProps[] = array( "NAME" => "Catalog XML_ID", "CODE" => "CATALOG.XML_ID", "VALUE" => $strIBlockXmlID ); } $arProps[] = array( "NAME" => "Product XML_ID", "CODE" => "PRODUCT.XML_ID", "VALUE" => $arProduct["XML_ID"] ); if (!empty($arProductParams) && is_array($arProductParams)) { foreach ($arProductParams as &$arOneProductParams) { $arProps[] = array( "NAME" => $arOneProductParams["NAME"], "CODE" => $arOneProductParams["CODE"], "VALUE" => $arOneProductParams["VALUE"], "SORT" => $arOneProductParams["SORT"], ); } if (isset($arOneProductParams)) unset($arOneProductParams); } $arFields = array( "PRODUCT_ID" => $intProductID, "PRODUCT_PRICE_ID" => $arPrice['PRODUCT_PRICE_ID'], "PRICE" => $arPrice['PRICE'], "CURRENCY" => $arPrice['CURRENCY'], "WEIGHT" => $arCatalogProduct["WEIGHT"], "QUANTITY" => 1, "LID" => SITE_ID, "DELAY" => "N", "CAN_BUY" => "N", "SUBSCRIBE" => "Y", "NAME" => $arProduct["NAME"], "MODULE" => "catalog", "PRODUCT_PROVIDER_CLASS" => "CCatalogProductProvider", "NOTES" => $arPrice["CATALOG_GROUP_NAME"], "DETAIL_PAGE_URL" => $arProduct["DETAIL_PAGE_URL"], "CATALOG_XML_ID" => $strIBlockXmlID, "PRODUCT_XML_ID" => $arProduct["XML_ID"], "PROPS" => $arProps, ); if (!empty($arRewriteFields) && is_array($arRewriteFields)) { if (array_key_exists('SUBSCRIBE', $arRewriteFields)) unset($arRewriteFields['SUBSCRIBE']); if (array_key_exists('CAN_BUY', $arRewriteFields)) unset($arRewriteFields['CAN_BUY']); if (array_key_exists('DELAY', $arRewriteFields)) unset($arRewriteFields['DELAY']); if (!empty($arRewriteFields)) $arFields = array_merge($arFields, $arRewriteFields); } $mxBasketID = CSaleBasket::Add($arFields); if ($mxBasketID) { if (!array_key_exists('NOTIFY_PRODUCT', $_SESSION)) { $_SESSION['NOTIFY_PRODUCT'] = array( $intUserID = array(), ); } elseif (!array_key_exists($intUserID, $_SESSION['NOTIFY_PRODUCT'])) { $_SESSION['NOTIFY_PRODUCT'][$intUserID] = array(); } $_SESSION["NOTIFY_PRODUCT"][$intUserID][$intProductID] = $intProductID; if (CModule::IncludeModule("statistic")) CStatistic::Set_Event("sale2basket", "subscribe", $intProductID); } return $mxBasketID; }