<div class="field"><p><?=$field;?>:</p>
            <?
            if(in_array($code, array('PREVIEW_TEXT', 'DETAIL_TEXT'))) { ?>  
                <textarea name="<?=$code;?>"></textarea>
                <br>Тип:
                <input type="radio" name="<?=$code?>_TYPE" value="text">text 
                <input type="radio" name="<?=$code?>_TYPE" value="html" checked>html 
            <? } else { ?>   
                <input type="text" name="<?=$code;?>"> 
            <? } ?>
            </div>     
        <? } ?>  
    </td>
    <?
    if (CModule::IncludeModule('catalog')) {
        $conf = CCatalog::GetByID($IBLOCK_ID);
        if ($conf) {
            ?>
            <td valign="top">   
                <p class="name">Базовая цена</p>  
                x <input type="text" style="width: 50px;" value="1.0" name="base_price_multiplier">
                <br> 
                &plusmn; <input type="text" style="width: 50px;" value="0" name="base_price_add">
            </td>
    <? }
}
?></tr></table> 
</div>
<?
$props = ob_get_clean(); 
$arGroupActions["properties"] = GetMessage("IBEL_SET_PROPS"); 
Example #2
0
function CatalogRecurringCallback($productID, $userID)
{
    global $APPLICATION;
    global $DB;
    $productID = intval($productID);
    if ($productID <= 0) {
        return false;
    }
    $userID = intval($userID);
    if ($userID <= 0) {
        return false;
    }
    $arProduct = CCatalogProduct::GetByID($productID);
    if (!$arProduct) {
        $APPLICATION->ThrowException(str_replace("#ID#", $productID, Loc::getMessage("I_NO_PRODUCT")), "NO_PRODUCT");
        return false;
    }
    if ($arProduct["PRICE_TYPE"] == "T") {
        $arProduct = CCatalogProduct::GetByID($arProduct["TRIAL_PRICE_ID"]);
        if (!$arProduct) {
            $APPLICATION->ThrowException(str_replace("#TRIAL_ID#", $productID, str_replace("#ID#", $arProduct["TRIAL_PRICE_ID"], Loc::getMessage("I_NO_TRIAL_PRODUCT"))), "NO_PRODUCT_TRIAL");
            return false;
        }
    }
    $productID = intval($arProduct["ID"]);
    if ($arProduct["PRICE_TYPE"] != "R") {
        $APPLICATION->ThrowException(str_replace("#ID#", $productID, Loc::getMessage("I_PRODUCT_NOT_SUBSCR")), "NO_IBLOCK_SUBSCR");
        return false;
    }
    $dbIBlockElement = CIBlockElement::GetList(array(), array("ID" => $productID, "ACTIVE" => "Y", "ACTIVE_DATE" => "Y", "CHECK_PERMISSIONS" => "N"), false, false, array('ID', 'IBLOCK_ID', 'NAME', 'DETAIL_PAGE_URL'));
    if (!($arIBlockElement = $dbIBlockElement->GetNext())) {
        $APPLICATION->ThrowException(str_replace("#ID#", $productID, Loc::getMessage("I_NO_IBLOCK_ELEM")), "NO_IBLOCK_ELEMENT");
        return false;
    }
    if ('E' == CIBlock::GetArrayByID($arIBlockElement['IBLOCK_ID'], "RIGHTS_MODE")) {
        $arUserRights = CIBlockElementRights::GetUserOperations($productID, $userID);
        if (empty($arUserRights)) {
            $APPLICATION->ThrowException(str_replace("#ID#", $productID, Loc::getMessage("I_NO_IBLOCK_ELEM")), "NO_IBLOCK_ELEMENT");
            return false;
        } elseif (!is_array($arUserRights) || !array_key_exists('element_read', $arUserRights)) {
            $APPLICATION->ThrowException(str_replace("#ID#", $productID, Loc::getMessage("I_NO_IBLOCK_ELEM")), "NO_IBLOCK_ELEMENT");
            return false;
        }
    } else {
        if ('R' > CIBlock::GetPermission($arIBlockElement['IBLOCK_ID'], $userID)) {
            $APPLICATION->ThrowException(str_replace("#ID#", $productID, Loc::getMessage("I_NO_IBLOCK_ELEM")), "NO_IBLOCK_ELEMENT");
            return false;
        }
    }
    $arCatalog = CCatalog::GetByID($arIBlockElement["IBLOCK_ID"]);
    if ($arCatalog["SUBSCRIPTION"] != "Y") {
        $APPLICATION->ThrowException(str_replace("#ID#", $arIBlockElement["IBLOCK_ID"], Loc::getMessage("I_CATALOG_NOT_SUBSCR")), "NOT_SUBSCRIPTION");
        return false;
    }
    if ($arProduct["CAN_BUY_ZERO"] != "Y" && ($arProduct["QUANTITY_TRACE"] == "Y" && doubleval($arProduct["QUANTITY"]) <= 0)) {
        $APPLICATION->ThrowException(str_replace("#ID#", $productID, Loc::getMessage("I_PRODUCT_SOLD")), "PRODUCT_END");
        return false;
    }
    $arUserGroups = CUser::GetUserGroup($userID);
    $arUserGroups = array_values(array_unique($arUserGroups));
    CCatalogDiscountSave::Disable();
    $arPrice = CCatalogProduct::GetOptimalPrice($productID, 1, $arUserGroups, "Y");
    if (empty($arPrice)) {
        if ($nearestQuantity = CCatalogProduct::GetNearestQuantityPrice($productID, 1, $arUserGroups)) {
            $quantity = $nearestQuantity;
            $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, $arUserGroups, "Y");
        }
    }
    CCatalogDiscountSave::Enable();
    if (empty($arPrice)) {
        return false;
    }
    $currentPrice = $arPrice["PRICE"]["PRICE"];
    $currentDiscount = 0.0;
    //SIGURD: logic change. see mantiss 5036.
    // discount applied to a final price with VAT already included.
    if (doubleval($arPrice['PRICE']['VAT_RATE']) > 0) {
        $currentPrice *= 1 + $arPrice['PRICE']['VAT_RATE'];
    }
    $arDiscountList = array();
    if (!empty($arPrice["DISCOUNT_LIST"])) {
        $dblStartPrice = $currentPrice;
        foreach ($arPrice["DISCOUNT_LIST"] as &$arOneDiscount) {
            switch ($arOneDiscount['VALUE_TYPE']) {
                case CCatalogDiscount::TYPE_FIX:
                    if ($arOneDiscount['CURRENCY'] == $arPrice["PRICE"]["CURRENCY"]) {
                        $currentDiscount = $arOneDiscount['VALUE'];
                    } else {
                        $currentDiscount = CCurrencyRates::ConvertCurrency($arOneDiscount["VALUE"], $arOneDiscount["CURRENCY"], $arPrice["PRICE"]["CURRENCY"]);
                    }
                    $currentPrice = $currentPrice - $currentDiscount;
                    break;
                case CCatalogDiscount::TYPE_PERCENT:
                    $currentDiscount = $currentPrice * $arOneDiscount["VALUE"] / 100.0;
                    if (0 < $arOneDiscount['MAX_DISCOUNT']) {
                        if ($arOneDiscount['CURRENCY'] == $arPrice["PRICE"]["CURRENCY"]) {
                            $dblMaxDiscount = $arOneDiscount['MAX_DISCOUNT'];
                        } else {
                            $dblMaxDiscount = CCurrencyRates::ConvertCurrency($arOneDiscount['MAX_DISCOUNT'], $arOneDiscount["CURRENCY"], $arPrice["PRICE"]["CURRENCY"]);
                        }
                        if ($currentDiscount > $dblMaxDiscount) {
                            $currentDiscount = $dblMaxDiscount;
                        }
                    }
                    $currentPrice = $currentPrice - $currentDiscount;
                    break;
                case CCatalogDiscount::TYPE_SALE:
                    if ($arOneDiscount['CURRENCY'] == $arPrice["PRICE"]["CURRENCY"]) {
                        $currentPrice = $arOneDiscount['VALUE'];
                    } else {
                        $currentPrice = CCurrencyRates::ConvertCurrency($arOneDiscount['VALUE'], $arOneDiscount["CURRENCY"], $arPrice["PRICE"]["CURRENCY"]);
                    }
                    break;
            }
            $arOneList = array('ID' => $arOneDiscount['ID'], 'NAME' => $arOneDiscount['NAME'], 'COUPON' => '', 'MODULE_ID' => 'catalog');
            if ($arOneDiscount['COUPON']) {
                $arOneList['COUPON'] = $arOneDiscount['COUPON'];
            }
            $arDiscountList[] = $arOneList;
        }
        if (isset($arOneDiscount)) {
            unset($arOneDiscount);
        }
        $currentDiscount = $dblStartPrice - $currentPrice;
    }
    $recurType = $arProduct["RECUR_SCHEME_TYPE"];
    $recurLength = intval($arProduct["RECUR_SCHEME_LENGTH"]);
    $recurSchemeVal = 0;
    if ($recurType == CCatalogProduct::TIME_PERIOD_HOUR) {
        $recurSchemeVal = mktime(date("H") + $recurLength, date("i"), date("s"), date("m"), date("d"), date("Y"));
    } elseif ($recurType == CCatalogProduct::TIME_PERIOD_DAY) {
        $recurSchemeVal = mktime(date("H"), date("i"), date("s"), date("m"), date("d") + $recurLength, date("Y"));
    } elseif ($recurType == CCatalogProduct::TIME_PERIOD_WEEK) {
        $recurSchemeVal = mktime(date("H"), date("i"), date("s"), date("m"), date("d") + 7 * $recurLength, date("Y"));
    } elseif ($recurType == CCatalogProduct::TIME_PERIOD_MONTH) {
        $recurSchemeVal = mktime(date("H"), date("i"), date("s"), date("m") + $recurLength, date("d"), date("Y"));
    } elseif ($recurType == CCatalogProduct::TIME_PERIOD_QUART) {
        $recurSchemeVal = mktime(date("H"), date("i"), date("s"), date("m") + 3 * $recurLength, date("d"), date("Y"));
    } elseif ($recurType == CCatalogProduct::TIME_PERIOD_SEMIYEAR) {
        $recurSchemeVal = mktime(date("H"), date("i"), date("s"), date("m") + 6 * $recurLength, date("d"), date("Y"));
    } elseif ($recurType == CCatalogProduct::TIME_PERIOD_YEAR) {
        $recurSchemeVal = mktime(date("H"), date("i"), date("s"), date("m"), date("d"), date("Y") + $recurLength);
    } elseif ($recurType == CCatalogProduct::TIME_PERIOD_DOUBLE_YEAR) {
        $recurSchemeVal = mktime(date("H"), date("i"), date("s"), date("m"), date("d"), date("Y") + 2 * $recurLength);
    }
    $arResult = array("WEIGHT" => floatval($arProduct["WEIGHT"]), "DIMENSIONS" => serialize(array("WIDTH" => $arProduct["WIDTH"], "HEIGHT" => $arProduct["HEIGHT"], "LENGTH" => $arProduct["LENGTH"])), "VAT_RATE" => $arPrice["PRICE"]["VAT_RATE"], "QUANTITY" => 1, "PRICE" => $currentPrice, "WITHOUT_ORDER" => $arProduct["WITHOUT_ORDER"], "PRODUCT_ID" => $productID, "PRODUCT_NAME" => $arIBlockElement["~NAME"], "PRODUCT_URL" => $arIBlockElement["~DETAIL_PAGE_URL"], "PRODUCT_PRICE_ID" => $arPrice["PRICE"]["ID"], "CURRENCY" => $arPrice["PRICE"]["CURRENCY"], "NAME" => $arIBlockElement["NAME"], "MODULE" => "catalog", "PRODUCT_PROVIDER_CLASS" => "CCatalogProductProvider", "CATALOG_GROUP_NAME" => $arPrice["PRICE"]["CATALOG_GROUP_NAME"], "DETAIL_PAGE_URL" => $arIBlockElement["~DETAIL_PAGE_URL"], "PRICE_TYPE" => $arProduct["PRICE_TYPE"], "RECUR_SCHEME_TYPE" => $arProduct["RECUR_SCHEME_TYPE"], "RECUR_SCHEME_LENGTH" => $arProduct["RECUR_SCHEME_LENGTH"], "PRODUCT_XML_ID" => $arIBlockElement["~XML_ID"], "TYPE" => $arProduct["TYPE"] == CCatalogProduct::TYPE_SET ? CCatalogProductSet::TYPE_SET : NULL, "NEXT_DATE" => Date($DB->DateFormatToPHP(CLang::GetDateFormat("FULL", SITE_ID)), $recurSchemeVal));
    if (!empty($arPrice["DISCOUNT_LIST"])) {
        $arResult['DISCOUNT_LIST'] = $arDiscountList;
    }
    return $arResult;
}
}
$IBLOCK_ID = intval($IBLOCK_ID);
if ($IBLOCK_ID <= 0) {
    $strImportErrorMessage .= GetMessage("CATI_NO_IBLOCK") . "<br>";
} else {
    $arIBlock = CIBlock::GetArrayByID($IBLOCK_ID);
    if (false === $arIBlock) {
        $strImportErrorMessage .= GetMessage("CATI_NO_IBLOCK") . "<br>";
    }
}
if (strlen($strImportErrorMessage) <= 0) {
    $bWorkflow = CModule::IncludeModule("workflow") && $arIBlock["WORKFLOW"] != "N";
}
if (strlen($strImportErrorMessage) <= 0) {
    $bIBlockIsCatalog = false;
    if (CCatalog::GetByID($IBLOCK_ID)) {
        $bIBlockIsCatalog = true;
    }
    $csvFile = new CCSVData();
    $csvFile->LoadFile($_SERVER["DOCUMENT_ROOT"] . $DATA_FILE_NAME);
    if ($fields_type != "F" && $fields_type != "R") {
        $strImportErrorMessage .= GetMessage("CATI_NO_FILE_FORMAT") . "<br>";
    }
}
if (strlen($strImportErrorMessage) <= 0) {
    $arDataFileFields = array();
    $fields_type = $fields_type == "F" ? "F" : "R";
    $csvFile->SetFieldsType($fields_type);
    if ($fields_type == "R") {
        $first_names_r = $first_names_r == "Y" ? "Y" : "N";
        $csvFile->SetFirstHeader($first_names_r == "Y" ? true : false);
Example #4
0
 function GetByIDExt($ID)
 {
     $arResult = false;
     $ID = intval($ID);
     if (0 >= $ID) {
         return false;
     }
     $mxPRResult = CCatalog::GetByID($ID);
     if (false != $mxPRResult) {
         $arResult = $mxPRResult;
         if (0 < $mxPRResult['PRODUCT_IBLOCK_ID']) {
             $arResult['CATALOG_TYPE'] = 'O';
             $arResult['OFFERS_IBLOCK_ID'] = 0;
             $arResult['OFFERS_PROPERTY_ID'] = 0;
         } else {
             $mxSKU = CCatalogSKU::GetInfoByProductIBlock($ID);
             if (false == $mxSKU) {
                 $arResult['CATALOG_TYPE'] = 'D';
                 $arResult['OFFERS_IBLOCK_ID'] = 0;
                 $arResult['OFFERS_PROPERTY_ID'] = 0;
             } else {
                 $arResult['CATALOG_TYPE'] = 'X';
                 $arResult['OFFERS_IBLOCK_ID'] = $mxSKU['IBLOCK_ID'];
                 $arResult['OFFERS_PROPERTY_ID'] = $mxSKU['SKU_PROPERTY_ID'];
             }
         }
         $arResult['CATALOG'] = 'Y';
     } else {
         $mxSKU = CCatalogSKU::GetInfoByProductIBlock($ID);
         if (false != $mxSKU) {
             $arResult['CATALOG'] = 'N';
             $arResult['CATALOG_TYPE'] = 'P';
             $arResult['OFFERS_IBLOCK_ID'] = $mxSKU['IBLOCK_ID'];
             $arResult['OFFERS_PROPERTY_ID'] = $mxSKU['SKU_PROPERTY_ID'];
         }
     }
     return $arResult;
 }
 }
 if ($obCache->InitCache($arParams["CACHE_TIME"], $cache_id, "/")) {
     $vars = $obCache->GetVars();
     $pathResizeImage = $vars["PRODUCT_PICTURE_SRC"];
     $section = $vars["SECTION"];
 } else {
     if ($arItem['ITEM_ID'][0] == "S") {
         $section = array();
         $section_id = intval(substr($arItem['ITEM_ID'], 1));
         $arIBlockSection = GetIBlockSection2($section_id);
         $image = CFile::GetFileArray($arIBlockSection["PICTURE"]);
         $image = $image["SRC"];
         if (!$image) {
             $section["NOT_IMAGE"] = true;
         }
         if (CCatalog::GetByID($arItem['PARAM2'])) {
             $section["CATALOG"] = true;
         }
     } else {
         $arElement = wfIBSearchElementsByProp(false, array("ID" => $arItem['ITEM_ID']), array("PROPERTY_BRAND_REF", "PROPERTY_MANUFACTURER", "DETAIL_PICTURE"));
         $image = $arElement[0]["DETAIL_PICTURE"];
         $producer = $arElement[0]["BRAND_REF"];
         $brandCountry = $arElement[0]["MANUFACTURER"];
     }
     $ResizeParams = array('width' => $arParams['WIDTH'], 'height' => $arParams['HEIGHT']);
     $ResizeImage = CFile::ResizeImageGet($image, $ResizeParams, BX_RESIZE_IMAGE_PROPORTIONAL, true);
     $pathResizeImage = $ResizeImage['src'];
 }
 if ($obCache->StartDataCache()) {
     $obCache->EndDataCache(array("SECTION" => $section, "PRODUCT_PICTURE_SRC" => $pathResizeImage, "PRODUCT_BRAND" => $producer, "PRODUCT_COUNTRY" => $brandCountry));
 }
Example #6
0
/** @var string $strWarning */
/** @var int $IBLOCK_ID */
/** @var int $ID */
if ($USER->CanDoOperation('catalog_price')) {
    $IBLOCK_ID = (int) $IBLOCK_ID;
    $ID = (int) $ID;
    $userId = (int) $USER->GetID();
    if (0 < $IBLOCK_ID && 0 < $ID) {
        $PRODUCT_ID = CIBlockElement::GetRealElement($ID);
        $bUseStoreControl = COption::GetOptionString('catalog', 'default_use_store_control', 'N') == "Y";
        $bEnableReservation = 'N' != COption::GetOptionString('catalog', 'enable_reservation');
        if (CIBlockElementRights::UserHasRightTo($IBLOCK_ID, $PRODUCT_ID, "element_edit_price")) {
            IncludeModuleLangFile($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/catalog/templates/product_edit_action.php');
            if ('' == $strWarning) {
                $bUseExtForm = isset($_POST['price_useextform']) && 'Y' == $_POST['price_useextform'];
                $arCatalog = CCatalog::GetByID($IBLOCK_ID);
                $arCatalogPrice_tmp = array();
                $intBasePriceCount = count($arCatalogBasePrices);
                $dbCatGroups = CCatalogGroup::GetList(array(), array("!BASE" => "Y"));
                while ($arCatGroups = $dbCatGroups->Fetch()) {
                    unset($arCatalogPrice_tmp);
                    $arCatalogPrice_tmp = array();
                    for ($i = 0; $i < $intBasePriceCount; $i++) {
                        ${"CAT_PRICE_" . $arCatGroups["ID"] . "_" . $arCatalogBasePrices[$i]["IND"]} = str_replace(",", ".", ${"CAT_PRICE_" . $arCatGroups["ID"] . "_" . $arCatalogBasePrices[$i]["IND"]});
                        $arCatalogPrice_tmp[$i] = array("ID" => IntVal(${"CAT_ID_" . $arCatGroups["ID"]}[$arCatalogBasePrices[$i]["IND"]]), "EXTRA_ID" => ${"CAT_EXTRA_" . $arCatGroups["ID"] . "_" . $arCatalogBasePrices[$i]["IND"]} ? IntVal(${"CAT_EXTRA_" . $arCatGroups["ID"] . "_" . $arCatalogBasePrices[$i]["IND"]}) : 0, "PRICE" => ${"CAT_PRICE_" . $arCatGroups["ID"] . "_" . $arCatalogBasePrices[$i]["IND"]}, "CURRENCY" => Trim(${"CAT_CURRENCY_" . $arCatGroups["ID"] . "_" . $arCatalogBasePrices[$i]["IND"]}), "QUANTITY_FROM" => $arCatalogBasePrices[$i]["QUANTITY_FROM"], "QUANTITY_TO" => $arCatalogBasePrices[$i]["QUANTITY_TO"]);
                        if (strlen($arCatalogPrice_tmp[$i]["CURRENCY"]) <= 0) {
                            $arCatalogPrice_tmp[$i]["CURRENCY"] = $arCatalogBasePrices[$i]["CURRENCY"];
                        }
                        if ($arCatalogPrice_tmp[$i]["EXTRA_ID"] > 0) {
                            if (0 < doubleval($arCatalogBasePrices[$i]["PRICE"])) {
                                $arCatalogPrice_tmp[$i]["CURRENCY"] = $arCatalogBasePrices[$i]["CURRENCY"];
Example #7
0
 $arIBlockSitesList = array();
 $arIBlockFullInfo = array();
 $rsIBlocks = CIBlock::GetList(array('IBLOCK_TYPE' => 'ASC', 'NAME' => 'ASC'));
 while ($arIBlock = $rsIBlocks->Fetch()) {
     if (false == array_key_exists($arIBlock['ID'], $arIBlockSitesList)) {
         $arLIDList = array();
         $arWithoutLinks = array();
         $rsIBlockSites = CIBlock::GetSite($arIBlock['ID']);
         while ($arIBlockSite = $rsIBlockSites->Fetch()) {
             $arLIDList[] = $arIBlockSite['LID'];
             $arWithoutLinks[] = htmlspecialcharsbx($arIBlockSite['LID']);
         }
         $arIBlockSitesList[$arIBlock['ID']] = array('SITE_ID' => $arLIDList, 'WITHOUT_LINKS' => implode(' ', $arWithoutLinks));
     }
     $arIBlockItem = array('ID' => $arIBlock['ID'], 'IBLOCK_TYPE_ID' => $arIBlock['IBLOCK_TYPE_ID'], 'SITE_ID' => $arIBlockSitesList[$arIBlock['ID']]['SITE_ID'], 'NAME' => htmlspecialcharsbx($arIBlock['NAME']), 'ACTIVE' => $arIBlock['ACTIVE'], 'FULL_NAME' => '[' . $arIBlock['IBLOCK_TYPE_ID'] . '] ' . htmlspecialcharsbx($arIBlock['NAME']) . ' (' . $arIBlockSitesList[$arIBlock['ID']]['WITHOUT_LINKS'] . ')', 'IS_CATALOG' => 'N', 'SUBSCRIPTION' => 'N', 'YANDEX_EXPORT' => 'N', 'VAT_ID' => 0, 'PRODUCT_IBLOCK_ID' => 0, 'SKU_PROPERTY_ID' => 0, 'OFFERS_IBLOCK_ID' => 0, 'IS_OFFERS' => 'N');
     $ar_res1 = CCatalog::GetByID($arIBlock['ID']);
     if (is_array($ar_res1)) {
         $arIBlockItem['IS_CATALOG'] = 'Y';
         $arIBlockItem['SUBSCRIPTION'] = $ar_res1['SUBSCRIPTION'];
         $arIBlockItem['YANDEX_EXPORT'] = $ar_res1['YANDEX_EXPORT'];
         $arIBlockItem['VAT_ID'] = $ar_res1['VAT_ID'];
         $arIBlockItem['PRODUCT_IBLOCK_ID'] = $ar_res1['PRODUCT_IBLOCK_ID'];
         $arIBlockItem['SKU_PROPERTY_ID'] = $ar_res1['SKU_PROPERTY_ID'];
         $arIBlockItem['OFFERS_IBLOCK_ID'] = 0;
         if (0 < $ar_res1['PRODUCT_IBLOCK_ID']) {
             $arIBlockItem['IS_OFFERS'] = 'Y';
         }
     }
     $arIBlockFullInfo[$arIBlock['ID']] = $arIBlockItem;
 }
 foreach ($arIBlockFullInfo as $res) {
Example #8
0
function getDataForXml()
{
    CModule::IncludeModule("iblock");
    CModule::IncludeModule('catalog');
    $filter["ACTIVE"] = "Y";
    $filter["ACTIVE_DATE"] = "Y";
    $filter["IBLOCK_ID"] = 2;//goodies
    $rsItems = CIBlockElement::GetList(array(), $filter, false, false, array());
    $strOfferGoogle = '';
    while ($obItem = $rsItems->GetNextElement()) {
        $arItem = $obItem->GetFields();
        if (CModule::IncludeModule("catalog") && CCatalog::GetByID($arItem['IBLOCK_ID'])) {
            $arItem = $obItem->GetFields();
            $productId = $arItem['ID'];
            $rsPrices = CPrice::GetByID($productId);
            $arItem['PROPERTIES'] = $obItem->GetProperties();
            $strFile = '';
            $arItem["DETAIL_PICTURE"] = (int)$arItem["DETAIL_PICTURE"];
            $arItem["PREVIEW_PICTURE"] = (int)$arItem["PREVIEW_PICTURE"];
            if ($arItem["DETAIL_PICTURE"] > 0 || $arItem["PREVIEW_PICTURE"] > 0) {
                $pictNo = ($arItem["DETAIL_PICTURE"] > 0 ? $arItem["DETAIL_PICTURE"] : $arItem["PREVIEW_PICTURE"]);

                if ($ar_file = CFile::GetFileArray($pictNo)) {
                    if (substr($ar_file["SRC"], 0, 1) == "/")
                        $strFile = "http://" . $_SERVER['SERVER_NAME'] . CHTTP::urnEncode($ar_file['SRC'], 'utf-8');
                    else
                        $strFile = $ar_file["SRC"];
                }
            }
            $arItem['google_PICT'] = $strFile;

            if (!empty($arItem["DETAIL_TEXT"]))
                $arItem['google_DESCR'] = google_text2xml(strip_tags(stristr($arItem["DETAIL_TEXT"], '.', true)));
            else
                $arItem['google_DESCR'] = google_text2xml(strip_tags($arItem["NAME"]));

            $strOfferGoogle .= "<item>\n";
            $strOfferGoogle .= "<title>";
            $strOfferGoogle .= $arItem['NAME'];
            $strOfferGoogle .= "</title>\n";
            $strOfferGoogle .= "<link>";
            $strOfferGoogle .= "http://".$_SERVER['SERVER_NAME'].$arItem['DETAIL_PAGE_URL'];
            $strOfferGoogle .= "</link>\n";
            $strOfferGoogle .= "<description>";
            $strOfferGoogle .= $arItem['google_DESCR'];
            $strOfferGoogle .= "</description>\n";
            $strOfferGoogle .= "<g:image_link>";
            $strOfferGoogle .= $strFile;
            $strOfferGoogle .= "</g:image_link>\n";
            $strOfferGoogle .= "<g:price>";
            $strOfferGoogle .= $rsPrices['PRICE'];
            $strOfferGoogle .= "</g:price>\n";
            $strOfferGoogle .= "<g:condition>";
            $strOfferGoogle .= "новый";
            $strOfferGoogle .= "</g:condition>\n";
            $strOfferGoogle .= "<g:id>";
            $strOfferGoogle .= $arItem['CODE'];
            $strOfferGoogle .= "</g:id>\n";
            $strOfferGoogle .= "</item>\n";
            //etc etc
        }
        else
        {
            continue;
        }
    }
    writeData($strOfferGoogle);
}
Example #9
0
					{
						$arIBlockInfo['PRODUCT_IBLOCK_ID'] = 0;
						$arIBlockInfo['SKU_PROPERTY_ID'] = 0;
						$boolCatalogUpdate = true;
					}
					else
					{
						$boolFlag = false;
						$ex = $APPLICATION->GetException();
						$strError = $ex->GetString();
						$strWarning .= str_replace(array('#PRODUCT#','#ERROR#'),array($arIBlockInfo['INFO'],$strError),GetMessage('CAT_IBLOCK_OFFERS_ERR_UNLINK_SKU')).'<br />';
					}
				}
				if ($boolFlag)
				{
					$ar_res1 = CCatalog::GetByID($intIBlockID);

					if (($arIBlockInfo['CATALOG']=="Y" || $arIBlockInfo['SUBSCRIPTION']=="Y" || 0 < $arIBlockInfo['PRODUCT_IBLOCK_ID']) && $ar_res1)
					{
						$boolAttr = $obCatalog->Update($intIBlockID, array('IBLOCK_ID' => $arIBlockInfo['ID'],"YANDEX_EXPORT" => $arIBlockInfo['YANDEX_EXPORT'], "SUBSCRIPTION" => $arIBlockInfo['SUBSCRIPTION'], "VAT_ID" => $arIBlockInfo['VAT_ID'], "PRODUCT_IBLOCK_ID" => $arIBlockInfo['PRODUCT_IBLOCK_ID'], 'SKU_PROPERTY_ID' => $arIBlockInfo['SKU_PROPERTY_ID']));
						if (!$boolAttr)
						{
							$ex = $APPLICATION->GetException();
							$strError = $ex->GetString();
							$strWarning .= str_replace(array('#PRODUCT#','#ERROR#'),array($arIBlockInfo['INFO'],$strError),GetMessage('CAT_IBLOCK_OFFERS_ERR_CAT_UPDATE')).'<br />';
							$boolFlag = false;
						}
						else
						{
							if (($ar_res1['SUBSCRIPTION'] != $arIBlockInfo['SUBSCRIPTION']) || (intval($ar_res1['PRODUCT_IBLOCK_ID']) != intval($arIBlockInfo['PRODUCT_IBLOCK_ID'])) || ($ar_res1['YANDEX_EXPORT'] != $arIBlockInfo['YANDEX_EXPORT']) || ($ar_res1['VAT_ID'] != $arIBlockInfo['VAT_ID']))
							{
Example #10
0
function DoIBlockAfterSave($arg1, $arg2 = false)
{
    $ELEMENT_ID = false;
    $IBLOCK_ID = false;
    $OFFERS_IBLOCK_ID = false;
    $OFFERS_PROPERTY_ID = false;
    if (CModule::IncludeModule('currency')) {
        $strDefaultCurrency = CCurrency::GetBaseCurrency();
    }
    //Check for catalog event
    if (is_array($arg2) && $arg2["PRODUCT_ID"] > 0) {
        //Get iblock element
        $rsPriceElement = CIBlockElement::GetList(array(), array("ID" => $arg2["PRODUCT_ID"]), false, false, array("ID", "IBLOCK_ID"));
        if ($arPriceElement = $rsPriceElement->Fetch()) {
            $arCatalog = CCatalog::GetByID($arPriceElement["IBLOCK_ID"]);
            if (is_array($arCatalog)) {
                //Check if it is offers iblock
                if ($arCatalog["OFFERS"] == "Y") {
                    //Find product element
                    $rsElement = CIBlockElement::GetProperty($arPriceElement["IBLOCK_ID"], $arPriceElement["ID"], "sort", "asc", array("ID" => $arCatalog["SKU_PROPERTY_ID"]));
                    $arElement = $rsElement->Fetch();
                    if ($arElement && $arElement["VALUE"] > 0) {
                        $ELEMENT_ID = $arElement["VALUE"];
                        $IBLOCK_ID = $arCatalog["PRODUCT_IBLOCK_ID"];
                        $OFFERS_IBLOCK_ID = $arCatalog["IBLOCK_ID"];
                        $OFFERS_PROPERTY_ID = $arCatalog["SKU_PROPERTY_ID"];
                    }
                } elseif ($arCatalog["OFFERS_IBLOCK_ID"] > 0) {
                    $ELEMENT_ID = $arPriceElement["ID"];
                    $IBLOCK_ID = $arPriceElement["IBLOCK_ID"];
                    $OFFERS_IBLOCK_ID = $arCatalog["OFFERS_IBLOCK_ID"];
                    $OFFERS_PROPERTY_ID = $arCatalog["OFFERS_PROPERTY_ID"];
                } else {
                    $ELEMENT_ID = $arPriceElement["ID"];
                    $IBLOCK_ID = $arPriceElement["IBLOCK_ID"];
                    $OFFERS_IBLOCK_ID = false;
                    $OFFERS_PROPERTY_ID = false;
                }
            }
        }
    } elseif (is_array($arg1) && $arg1["ID"] > 0 && $arg1["IBLOCK_ID"] > 0) {
        //Check if iblock has offers
        $arOffers = CIBlockPriceTools::GetOffersIBlock($arg1["IBLOCK_ID"]);
        if (is_array($arOffers)) {
            $ELEMENT_ID = $arg1["ID"];
            $IBLOCK_ID = $arg1["IBLOCK_ID"];
            $OFFERS_IBLOCK_ID = $arOffers["OFFERS_IBLOCK_ID"];
            $OFFERS_PROPERTY_ID = $arOffers["OFFERS_PROPERTY_ID"];
        }
    }
    if ($ELEMENT_ID) {
        static $arPropCache = array();
        if (!array_key_exists($IBLOCK_ID, $arPropCache)) {
            //Check for MINIMAL_PRICE property
            $rsProperty = CIBlockProperty::GetByID("MINIMUM_PRICE", $IBLOCK_ID);
            $arProperty = $rsProperty->Fetch();
            if ($arProperty) {
                $arPropCache[$IBLOCK_ID] = $arProperty["ID"];
            } else {
                $arPropCache[$IBLOCK_ID] = false;
            }
        }
        if ($arPropCache[$IBLOCK_ID]) {
            //Compose elements filter
            if ($OFFERS_IBLOCK_ID) {
                $rsOffers = CIBlockElement::GetList(array(), array("IBLOCK_ID" => $OFFERS_IBLOCK_ID, "PROPERTY_" . $OFFERS_PROPERTY_ID => $ELEMENT_ID), false, false, array("ID"));
                while ($arOffer = $rsOffers->Fetch()) {
                    $arProductID[] = $arOffer["ID"];
                }
                if (!is_array($arProductID)) {
                    $arProductID = array($ELEMENT_ID);
                }
            } else {
                $arProductID = array($ELEMENT_ID);
            }
            $minPrice = false;
            $maxPrice = false;
            //Get prices
            $rsPrices = CPrice::GetList(array(), array("PRODUCT_ID" => $arProductID));
            while ($arPrice = $rsPrices->Fetch()) {
                if (CModule::IncludeModule('currency') && $strDefaultCurrency != $arPrice['CURRENCY']) {
                    $arPrice["PRICE"] = CCurrencyRates::ConvertCurrency($arPrice["PRICE"], $arPrice["CURRENCY"], $strDefaultCurrency);
                }
                $PRICE = $arPrice["PRICE"];
                if ($minPrice === false || $minPrice > $PRICE) {
                    $minPrice = $PRICE;
                }
                if ($maxPrice === false || $maxPrice < $PRICE) {
                    $maxPrice = $PRICE;
                }
            }
            //Save found minimal price into property
            if ($minPrice !== false) {
                CIBlockElement::SetPropertyValuesEx($ELEMENT_ID, $IBLOCK_ID, array("MINIMUM_PRICE" => $minPrice, "MAXIMUM_PRICE" => $maxPrice));
            }
        }
    }
}
 }
 $IBLOCK_OFFERS_ID = WizardServices::ImportIBlockFromXML($iblockXMLFile, "furniture_offers", $iblockType, WIZARD_SITE_ID, $permissions);
 if ($IBLOCK_OFFERS_ID < 1) {
     return;
 }
 //IBlock fields
 $iblock = new CIBlock();
 $arFields = array("ACTIVE" => "Y", "FIELDS" => array('IBLOCK_SECTION' => array('IS_REQUIRED' => 'N', 'DEFAULT_VALUE' => ''), 'ACTIVE' => array('IS_REQUIRED' => 'Y', 'DEFAULT_VALUE' => 'Y'), 'ACTIVE_FROM' => array('IS_REQUIRED' => 'N', 'DEFAULT_VALUE' => ''), 'ACTIVE_TO' => array('IS_REQUIRED' => 'N', 'DEFAULT_VALUE' => ''), 'SORT' => array('IS_REQUIRED' => 'N', 'DEFAULT_VALUE' => ''), 'NAME' => array('IS_REQUIRED' => 'Y', 'DEFAULT_VALUE' => ''), 'PREVIEW_PICTURE' => array('IS_REQUIRED' => 'N', 'DEFAULT_VALUE' => array('FROM_DETAIL' => 'N', 'SCALE' => 'N', 'WIDTH' => '', 'HEIGHT' => '', 'IGNORE_ERRORS' => 'N', 'METHOD' => 'resample', 'COMPRESSION' => 95, 'DELETE_WITH_DETAIL' => 'N', 'UPDATE_WITH_DETAIL' => 'N')), 'PREVIEW_TEXT_TYPE' => array('IS_REQUIRED' => 'Y', 'DEFAULT_VALUE' => 'text'), 'PREVIEW_TEXT' => array('IS_REQUIRED' => 'N', 'DEFAULT_VALUE' => ''), 'DETAIL_PICTURE' => array('IS_REQUIRED' => 'N', 'DEFAULT_VALUE' => array('SCALE' => 'N', 'WIDTH' => '', 'HEIGHT' => '', 'IGNORE_ERRORS' => 'N', 'METHOD' => 'resample', 'COMPRESSION' => 95)), 'DETAIL_TEXT_TYPE' => array('IS_REQUIRED' => 'Y', 'DEFAULT_VALUE' => 'text'), 'DETAIL_TEXT' => array('IS_REQUIRED' => 'N', 'DEFAULT_VALUE' => ''), 'XML_ID' => array('IS_REQUIRED' => 'N', 'DEFAULT_VALUE' => ''), 'CODE' => array('IS_REQUIRED' => 'N', 'DEFAULT_VALUE' => array('UNIQUE' => 'Y', 'TRANSLITERATION' => 'Y', 'TRANS_LEN' => 100, 'TRANS_CASE' => 'L', 'TRANS_SPACE' => '_', 'TRANS_OTHER' => '_', 'TRANS_EAT' => 'Y', 'USE_GOOGLE' => 'Y')), 'TAGS' => array('IS_REQUIRED' => 'N', 'DEFAULT_VALUE' => ''), 'SECTION_NAME' => array('IS_REQUIRED' => 'N', 'DEFAULT_VALUE' => ''), 'SECTION_PICTURE' => array('IS_REQUIRED' => 'N', 'DEFAULT_VALUE' => array('FROM_DETAIL' => 'N', 'SCALE' => 'N', 'WIDTH' => '', 'HEIGHT' => '', 'IGNORE_ERRORS' => 'N', 'METHOD' => 'resample', 'COMPRESSION' => 95, 'DELETE_WITH_DETAIL' => 'N', 'UPDATE_WITH_DETAIL' => 'N')), 'SECTION_DESCRIPTION_TYPE' => array('IS_REQUIRED' => 'N', 'DEFAULT_VALUE' => 'text'), 'SECTION_DESCRIPTION' => array('IS_REQUIRED' => 'N', 'DEFAULT_VALUE' => ''), 'SECTION_DETAIL_PICTURE' => array('IS_REQUIRED' => 'N', 'DEFAULT_VALUE' => array('SCALE' => 'N', 'WIDTH' => '', 'HEIGHT' => '', 'IGNORE_ERRORS' => 'N', 'METHOD' => 'resample', 'COMPRESSION' => 95)), 'SECTION_XML_ID' => array('IS_REQUIRED' => 'N', 'DEFAULT_VALUE' => ''), 'SECTION_CODE' => array('IS_REQUIRED' => 'N', 'DEFAULT_VALUE' => array('UNIQUE' => 'Y', 'TRANSLITERATION' => 'Y', 'TRANS_LEN' => 100, 'TRANS_CASE' => 'L', 'TRANS_SPACE' => '_', 'TRANS_OTHER' => '_', 'TRANS_EAT' => 'Y', 'USE_GOOGLE' => 'Y'))), "CODE" => "furniture_offers", "XML_ID" => $iblockCode);
 $iblock->Update($IBLOCK_OFFERS_ID, $arFields);
 $iblockCodeFur = "furniture_" . WIZARD_SITE_ID;
 $iblockTypeFur = "catalog";
 $rsIBlockFur = CIBlock::GetList(array(), array("XML_ID" => $iblockCodeFur, "TYPE" => $iblockTypeFur));
 if ($arIBlockFur = $rsIBlockFur->Fetch()) {
     $ID_SKU = CCatalog::LinkSKUIBlock($arIBlockFur["ID"], $IBLOCK_OFFERS_ID);
 }
 $arCatalog = CCatalog::GetByID($IBLOCK_OFFERS_ID);
 if ($arCatalog) {
     CCatalog::Update($IBLOCK_OFFERS_ID, array('PRODUCT_IBLOCK_ID' => $arIBlockFur["ID"], 'SKU_PROPERTY_ID' => $ID_SKU));
 } else {
     CCatalog::Add(array('IBLOCK_ID' => $IBLOCK_OFFERS_ID, 'PRODUCT_IBLOCK_ID' => $arIBlockFur["ID"], 'SKU_PROPERTY_ID' => $ID_SKU));
 }
 $dbOfferProps = CIblock::GetProperties($IBLOCK_OFFERS_ID, array(), array());
 while ($arOfferProps = $dbOfferProps->Fetch()) {
     $arProps[$arOfferProps["XML_ID"]] = $arOfferProps["ID"];
 }
 $property_enums = CIBlockPropertyEnum::GetList(array(), array("IBLOCK_ID" => $IBLOCK_OFFERS_ID, "CODE" => "WIDTH"));
 $arEnumIds = array();
 while ($enum_fields = $property_enums->GetNext()) {
     $arEnumIds[] = $enum_fields["ID"];
 }
 $dbElement = CIBlockElement::GetList(array(), array("IBLOCK_ID" => $arIBlockFur["ID"], "XML_ID" => 56), false);
 public function PrepareIBlock($arIBlock = array(), $UseSKU = fasle)
 {
     $excludeIBlock = array();
     if (!is_array($arIBlock)) {
         $arIBlock = array();
     }
     $catalogSKU = array();
     if ($UseSKU) {
         foreach ($arIBlock as $iblocID) {
             if ($iblock = CCatalog::GetByID($iblocID)) {
                 if (intval($iblock["OFFERS_IBLOCK_ID"]) > 0) {
                     $catalogSKU[] = $iblock["OFFERS_IBLOCK_ID"];
                 }
             }
         }
     }
     $arIblocks = array_merge($arIBlock, $catalogSKU);
     $arIblocks = array_unique($arIblocks);
     return $arIblocks;
 }
Example #13
0
 public function yandex_GetPrice($Product)
 {
     $prop = array();
     $value = "";
     $prc = strlen($this->PRICE) > 0 ? $this->PRICE : 0;
     if (!$this->isCat or !CCatalog::GetByID($Product["IBLOCK_ID"])) {
         foreach ($this->XML_DATA as $data) {
             if (trim($data["UNIT"]) == "g:price") {
                 $tmp = explode("-", $data["ID"]);
                 $tmp1 = explode("_", $tmp);
                 if (in_array("PRICE", $tmp1)) {
                     $prop = $tmp[1];
                 } elseif (in_array("SKU", $tmp1)) {
                     $prop = $tmp1[1];
                 }
                 $db_props = CIBlockElement::GetProperty($tmp[0], $Product["ID"], array("sort" => "asc"), array("ID" => $prop));
                 if ($ar_props = $db_props->Fetch()) {
                     $value = $ar_props["VALUE"];
                 } else {
                     $value = "";
                 }
                 break;
             } else {
                 $value = false;
             }
         }
     } elseif ($this->isCat) {
         if ($prc > 0) {
             $dbProductPrices1 = CPrice::GetList(array(), array("PRODUCT_ID" => $Product["ID"], "CATALOG_GROUP_ID" => $prc));
             $price = 0;
             while ($arProductPrice = $dbProductPrices1->Fetch()) {
                 if ($arProductPrice["PRICE"] && ($arProductPrice["PRICE"] < $price || !$price)) {
                     $price = $arProductPrice["PRICE"];
                 }
                 $arDissizeofs = CCatalogDiscount::GetDiscountByProduct($arProductPrice["PRODUCT_ID"], array(), "N", $arProductPrice["CATALOG_GROUP_ID"], $this->LID);
                 foreach ($arDissizeofs as $arDissizeof) {
                     if ($arDissizeof["VALUE_TYPE"] == "P") {
                         $price_buf = $arProductPrice["PRICE"] - $arDissizeof["VALUE"] * $arProductPrice["PRICE"] / 100;
                     } else {
                         $price_buf = $arProductPrice["PRICE"] - $arDissizeof["VALUE"];
                     }
                     if ($price_buf && ($price_buf < $price || !$price)) {
                         $price = $price_buf;
                     }
                 }
             }
             $value = $price;
         } else {
             $value = false;
         }
     }
     return $value;
 }
Example #14
0
/**
 * Функция обратного вызова для корзины
 * аналогична функции CatalogBasketCallback за исключением использования одной определенной цены для конкретного города
 * 
 * @param $productID
 * @param $quantity
 * @param $renewal
 */
function CatalogBasketCustomCallback($productID, $quantity = 0, $renewal = "N")
{
	global $USER;

	$productID = IntVal($productID);
	$quantity = DoubleVal($quantity);
	$renewal = (($renewal == "Y") ? "Y" : "N");

	$arResult = array();

	if ($arCatalogProduct = CCatalogProduct::GetByID($productID))
	{
		if ($arCatalogProduct["QUANTITY_TRACE"]=="Y" && DoubleVal($arCatalogProduct["QUANTITY"])<=0)
			return $arResult;
		
	}

	$dbIBlockElement = CIBlockElement::GetList(
			array(),
			array(
					"ID" => $productID,
					"ACTIVE_DATE" => "Y",
					"ACTIVE" => "Y",
					"CHECK_PERMISSIONS" => "Y"
				)
		);
	$arProduct = $dbIBlockElement->GetNext();
	$arCatalog = CCatalog::GetByID($arProduct["IBLOCK_ID"]);
	if ($arCatalog["SUBSCRIPTION"] == "Y")
	{
		$quantity = 1;
	}
	$rs = CPrice::GetList(
		array(),
		array("CATALOG_GROUP_NAME" => GetCityPrice(), "PRODUCT_ID" => $productID), false, false);
	
	$ar = $rs -> Fetch();

	$arPrice = array();
	$arPrice[] = array(
		"ID" => $ar["ID"],
		"PRICE" => $ar["PRICE"],
		"CURRENCY" => $ar["CURRENCY"],
		"CATALOG_GROUP_ID" => $ar["CATALOG_GROUP_ID"]
	);

	$arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, $USER -> GetUserGroupArray(), $renewal, $arPrice);

	if (!$arPrice || count($arPrice) <= 0)
	{
		if ($nearestQuantity = CCatalogProduct::GetNearestQuantityPrice($productID, $quantity, $USER->GetUserGroupArray()))
		{
			$quantity = $nearestQuantity;
			$arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, $USER->GetUserGroupArray(), $renewal);
		}
	}

	if (!$arPrice || count($arPrice) <= 0)
	{
		return $arResult;
	}

	$currentPrice = $arPrice["PRICE"]["PRICE"];
	$currentDiscount = 0.0;

	//SIGURD: logic change. see mantiss 5036.
	// discount applied to a final price with VAT already included.
	if ($arPrice['PRICE']['VAT_INCLUDED'] == 'N')
	{
		if(DoubleVal($arPrice['PRICE']['VAT_RATE']) > 0)
		{
			$currentPrice *= (1 + $arPrice['PRICE']['VAT_RATE']);
			$arPrice['PRICE']['VAT_INCLUDED'] = 'y';
		}
	}

	if (isset($arPrice["DISCOUNT"]) && count($arPrice["DISCOUNT"]) > 0)
	{
		if ($arPrice["DISCOUNT"]["VALUE_TYPE"]=="F")
		{
			if ($arPrice["DISCOUNT"]["CURRENCY"] == $arPrice["PRICE"]["CURRENCY"])
				$currentDiscount = $arPrice["DISCOUNT"]["VALUE"];
			else
				$currentDiscount = CCurrencyRates::ConvertCurrency($arPrice["DISCOUNT"]["VALUE"], $arPrice["DISCOUNT"]["CURRENCY"], $arPrice["PRICE"]["CURRENCY"]);
		}
		else
			$currentDiscount = $currentPrice * $arPrice["DISCOUNT"]["VALUE"] / 100.0;

		$currentDiscount = roundEx($currentDiscount, SALE_VALUE_PRECISION);

		if (DoubleVal($arPrice["DISCOUNT"]["MAX_DISCOUNT"]) > 0)
		{
			if ($arPrice["DISCOUNT"]["CURRENCY"] == $baseCurrency)
				$maxDiscount = $arPrice["DISCOUNT"]["MAX_DISCOUNT"];
			else
				$maxDiscount = CCurrencyRates::ConvertCurrency($arPrice["DISCOUNT"]["MAX_DISCOUNT"], $arPrice["DISCOUNT"]["CURRENCY"], $arPrice["PRICE"]["CURRENCY"]);
			$maxDiscount = roundEx($maxDiscount, CATALOG_VALUE_PRECISION);

			if ($currentDiscount > $maxDiscount)
				$currentDiscount = $maxDiscount;
		}
		
		$currentPrice = $currentPrice - $currentDiscount;
	}

	$arResult = array(
			"PRODUCT_PRICE_ID" => $arPrice["PRICE"]["ID"],
			"PRICE" => $currentPrice,
			"VAT_RATE" => $arPrice['PRICE']['VAT_RATE'],
			"CURRENCY" => $arPrice["PRICE"]["CURRENCY"],
			"QUANTITY" => $quantity,
			"DISCOUNT_PRICE" => $currentDiscount,
			"WEIGHT" => 0,
			"NAME" => $arProduct["~NAME"],
			"CAN_BUY" => "Y",
			"NOTES" => $arPrice["PRICE"]["CATALOG_GROUP_NAME"]
		);

	if ($arCatalogProduct)
	{
		$arResult["WEIGHT"] = IntVal($arCatalogProduct["WEIGHT"]);
		if ($arCatalogProduct["QUANTITY_TRACE"]=="Y")
		{
			if ((DoubleVal($arCatalogProduct["QUANTITY"]) - $quantity) < 0)
				$arResult["QUANTITY"] = DoubleVal($arCatalogProduct["QUANTITY"]);
		}
	}

	//echo '<pre>arResult: '; print_r($arResult); echo '</pre>';
	return $arResult;
}
Example #15
0
    public static function OnBeforePrologHandler()
    {
        global $USER_FIELD_MANAGER;
        if (isset($_REQUEST['action_button']) && !isset($_REQUEST['action'])) {
            $_REQUEST['action'] = $_REQUEST['action_button'];
        }
        if (!isset($_REQUEST['action'])) {
            return;
        }
        $BID = isset($_REQUEST['ID']) ? (int) $_REQUEST['ID'] : 0;
        if ($_REQUEST['action'] == 'asd_prop_export' && $BID > 0 && check_bitrix_sessid() && CModule::IncludeModule('iblock') && CASDIblockRights::IsIBlockEdit($BID)) {
            $strPath = $_SERVER['DOCUMENT_ROOT'] . '/bitrix/tmp/asd.iblock/';
            $strName = 'asd_props_export_' . $BID . '_' . md5(LICENSE_KEY) . '.xml';
            CheckDirPath($strPath);
            if ($hdlOutput = fopen($strPath . $strName, 'wb')) {
                fwrite($hdlOutput, '<?xml version="1.0" encoding="' . SITE_CHARSET . '"?>' . "\n");
                fwrite($hdlOutput, '<asd_iblock_props>' . "\n");
                fwrite($hdlOutput, CASDiblockTools::ExportPropsToXML($BID, $_REQUEST['p']));
                if ($_REQUEST['forms'] == 'Y') {
                    fwrite($hdlOutput, CASDiblockTools::ExportSettingsToXML($BID, array('forms')));
                }
                fwrite($hdlOutput, '</asd_iblock_props>' . "\n");
                fclose($hdlOutput);
            }
            ?>
<script type="text/javascript">
				top.BX.closeWait(); top.BX.WindowManager.Get().AllowClose(); top.BX.WindowManager.Get().Close();
				window.location.href = '/bitrix/tools/asd.iblock/props_export.php?ID=<?php 
            echo $BID;
            ?>
';
			</script><?php 
            die;
        }
        if ($_REQUEST['action'] == 'asd_prop_import' && $BID > 0 && !$_FILES['xml_file']['error'] && check_bitrix_sessid() && CModule::IncludeModule('iblock') && CASDIblockRights::IsIBlockEdit($BID)) {
            CASDiblockTools::ImportPropsFromXML($BID, $_FILES['xml_file']['tmp_name'], $arOldNewID);
            CASDiblockTools::ImportFormsFromXML($BID, $_FILES['xml_file']['tmp_name'], $arOldNewID);
            LocalRedirect('/bitrix/admin/iblock_edit.php?type=' . $_REQUEST['type'] . '&tabControl_active_tab=edit2&lang=' . LANGUAGE_ID . '&ID=' . $BID . '&admin=Y');
        }
        $IBLOCK_ID = 0;
        if (isset($_REQUEST['IBLOCK_ID'])) {
            $IBLOCK_ID = (int) $_REQUEST['IBLOCK_ID'];
            if ($IBLOCK_ID < 0) {
                $IBLOCK_ID = 0;
            }
        }
        if ($_REQUEST['action'] == 'asd_reverse' && $IBLOCK_ID > 0 && check_bitrix_sessid() && CModule::IncludeModule('iblock') && CASDIblockRights::IsIBlockEdit($IBLOCK_ID)) {
            $LIST_MODE = CIBlock::GetArrayByID($IBLOCK_ID, 'LIST_MODE');
            if (!strlen($LIST_MODE)) {
                $LIST_MODE = COption::GetOptionString('iblock', 'combined_list_mode', 'N') == 'Y' ? 'C' : 'S';
            }
            $LIST_MODE = $LIST_MODE == 'C' ? 'S' : 'C';
            $ib = new CIBlock();
            $ib->Update($IBLOCK_ID, array('LIST_MODE' => $LIST_MODE));
            LocalRedirect('/bitrix/admin/' . ($LIST_MODE == 'S' ? 'iblock_element_admin' : 'iblock_list_admin') . '.php?IBLOCK_ID=' . $IBLOCK_ID . '&type=' . htmlspecialcharsbx($_REQUEST['type']) . '&find_section_section=' . intval($_REQUEST['find_section_section']) . '&lang=' . LANGUAGE_ID);
        }
        $strCurPage = $GLOBALS['APPLICATION']->GetCurPage();
        $bElemPage = $strCurPage == '/bitrix/admin/iblock_element_admin.php' || $strCurPage == '/bitrix/admin/cat_product_admin.php';
        $bSectPage = $strCurPage == '/bitrix/admin/iblock_section_admin.php' || $strCurPage == '/bitrix/admin/cat_section_admin.php';
        $bMixPage = $strCurPage == '/bitrix/admin/iblock_list_admin.php';
        $bRightPage = $bElemPage || $bSectPage || $bMixPage;
        $successRedirect = false;
        if ($bRightPage && $_REQUEST['action'] == 'asd_copy_in_list' && strlen($_REQUEST['ID']) > 0) {
            $bDoAction = true;
            $_REQUEST['action'] = 'asd_copy';
            $_REQUEST['asd_ib_dest'] = $IBLOCK_ID;
            $_REQUEST['ID'] = array($_REQUEST['ID']);
        } else {
            $bDoAction = false;
        }
        if ($bRightPage && check_bitrix_sessid() && !empty($_REQUEST['ID']) && ($_SERVER['REQUEST_METHOD'] == 'POST' || $bDoAction) && CModule::IncludeModule('iblock') && ($_REQUEST['action'] == 'asd_copy' || $_REQUEST['action'] == 'asd_move') && isset($_REQUEST['asd_ib_dest']) && (int) $_REQUEST['asd_ib_dest'] > 0 && CASDIblockRights::IsIBlockDisplay($_REQUEST['asd_ib_dest'])) {
            $intSrcIBlockID = $IBLOCK_ID;
            $intDestIBlockID = (int) $_REQUEST['asd_ib_dest'];
            $intSetSectID = 0;
            if (isset($_REQUEST['asd_sect_dest'])) {
                $intSetSectID = (int) $_REQUEST['asd_sect_dest'];
                if ($intSetSectID < 0) {
                    $intSetSectID = 0;
                }
            }
            $boolCreateElement = false;
            $boolCreateSection = false;
            if ($bElemPage || $bMixPage) {
                $boolCreateElement = CASDIblockRights::IsSectionElementCreate($intDestIBlockID, $intSetSectID);
            }
            if ($bSectPage || $bMixPage) {
                $boolCreateSection = CASDIblockRights::IsSectionSectionCreate($intDestIBlockID, $intSetSectID);
            }
            if ($boolCreateElement || $boolCreateSection) {
                $arPropListCache = array();
                $arOldPropListCache = array();
                $arNamePropListCache = array();
                $arOldNamePropListCache = array();
                $boolUFListCache = false;
                $arUFListCache = array();
                $arOldUFListCache = array();
                $arUFEnumCache = array();
                $arOldUFEnumCache = array();
                $arUFNameEnumCache = array();
                $arOldUFNameEnumCache = array();
                $arDestIBlock = CIBlock::GetArrayByID($intDestIBlockID);
                $arDestIBFields = $arDestIBlock['FIELDS'];
                $boolCodeUnique = false;
                if ($arDestIBFields['CODE']['DEFAULT_VALUE']['UNIQUE'] == 'Y') {
                    $boolCodeUnique = $intSrcIBlockID == $intDestIBlockID;
                }
                $boolSectCodeUnique = false;
                if ($arDestIBFields['SECTION_CODE']['DEFAULT_VALUE']['UNIQUE'] == 'Y') {
                    $boolSectCodeUnique = $intSrcIBlockID == $intDestIBlockID;
                }
                $boolCatalog = CModule::IncludeModule('catalog');
                $boolCopyCatalog = false;
                $boolNewCatalog = false;
                if ($boolCatalog) {
                    $boolCopyCatalog = is_array(CCatalog::GetByID($intDestIBlockID));
                    $boolNewCatalog = $boolCopyCatalog;
                    if ($boolCopyCatalog) {
                        $boolCopyCatalog = is_array(CCatalog::GetByID($intSrcIBlockID));
                    }
                }
                $el = new CIBlockElement();
                $sc = new CIBlockSection();
                $obEnum = new CUserFieldEnum();
                foreach ($_REQUEST['ID'] as $eID) {
                    $boolCopyElem = false;
                    $boolCopySect = false;
                    if ($bMixPage) {
                        if (substr($eID, 0, 1) != 'E') {
                            $boolCopySect = true;
                        } else {
                            $boolCopyElem = true;
                        }
                        $ID = (int) substr($eID, 1);
                    } else {
                        $boolCopyElem = $bElemPage;
                        $boolCopySect = $bSectPage;
                        $ID = (int) $eID;
                    }
                    if ($boolCreateElement && $boolCopyElem) {
                        if ($obSrc = CIBlockElement::GetByID($ID)->GetNextElement()) {
                            $arSrc = $obSrc->GetFields();
                            $arSrcPr = $obSrc->GetProperties(false, array('EMPTY' => 'N'));
                            $arSrc['PREVIEW_PICTURE'] = (int) $arSrc['PREVIEW_PICTURE'];
                            if ($arSrc['PREVIEW_PICTURE'] > 0) {
                                $arSrc['PREVIEW_PICTURE'] = CFile::MakeFileArray($arSrc['PREVIEW_PICTURE']);
                                if (empty($arSrc['PREVIEW_PICTURE'])) {
                                    $arSrc['PREVIEW_PICTURE'] = false;
                                } else {
                                    $arSrc['PREVIEW_PICTURE']['COPY_FILE'] = 'Y';
                                }
                            } else {
                                $arSrc['PREVIEW_PICTURE'] = false;
                            }
                            $arSrc['DETAIL_PICTURE'] = (int) $arSrc['DETAIL_PICTURE'];
                            if ($arSrc['DETAIL_PICTURE'] > 0) {
                                $arSrc['DETAIL_PICTURE'] = CFile::MakeFileArray($arSrc['DETAIL_PICTURE']);
                                if (empty($arSrc['DETAIL_PICTURE'])) {
                                    $arSrc['DETAIL_PICTURE'] = false;
                                } else {
                                    $arSrc['DETAIL_PICTURE']['COPY_FILE'] = 'Y';
                                }
                            } else {
                                $arSrc['DETAIL_PICTURE'] = false;
                            }
                            $arSrc = array('IBLOCK_ID' => $intDestIBlockID, 'ACTIVE' => $arSrc['ACTIVE'], 'ACTIVE_FROM' => $arSrc['ACTIVE_FROM'], 'ACTIVE_TO' => $arSrc['ACTIVE_TO'], 'SORT' => $arSrc['SORT'], 'NAME' => $arSrc['~NAME'], 'PREVIEW_PICTURE' => $arSrc['PREVIEW_PICTURE'], 'PREVIEW_TEXT' => $arSrc['~PREVIEW_TEXT'], 'PREVIEW_TEXT_TYPE' => $arSrc['PREVIEW_TEXT_TYPE'], 'DETAIL_TEXT' => $arSrc['~DETAIL_TEXT'], 'DETAIL_TEXT_TYPE' => $arSrc['DETAIL_TEXT_TYPE'], 'DETAIL_PICTURE' => $arSrc['DETAIL_PICTURE'], 'WF_STATUS_ID' => $arSrc['WF_STATUS_ID'], 'CODE' => $arSrc['~CODE'], 'TAGS' => $arSrc['~TAGS'], 'XML_ID' => $arSrc['~XML_ID'], 'PROPERTY_VALUES' => array());
                            if ($arDestIBFields['CODE']['IS_REQUIRED'] == 'Y') {
                                if (!strlen($arSrc['CODE'])) {
                                    $arSrc['CODE'] = mt_rand(100000, 1000000);
                                }
                            }
                            if ($arDestIBFields['CODE']['DEFAULT_VALUE']['UNIQUE'] == 'Y') {
                                $boolElCodeUnique = $boolCodeUnique;
                                if (!$boolCodeUnique) {
                                    $rsCheckItems = CIBlockElement::GetList(array(), array('IBLOCK_ID' => $intDestIBlockID, '=CODE' => $arSrc['CODE'], 'CHECK_PERMISSIONS' => 'N'), false, array('nTopCount' => 1), array('ID', 'IBLOCK_ID'));
                                    if ($arCheck = $rsCheckItems->Fetch()) {
                                        $boolElCodeUnique = true;
                                    }
                                }
                                if ($boolElCodeUnique) {
                                    $arSrc['CODE'] .= mt_rand(100, 10000);
                                }
                            }
                            if ($intSetSectID > 0) {
                                $arSrc['IBLOCK_SECTION_ID'] = $intSetSectID;
                            } elseif ($intSrcIBlockID == $intDestIBlockID) {
                                $arSectionList = array();
                                $rsSections = CIBlockElement::GetElementGroups($ID, true);
                                while ($arSection = $rsSections->Fetch()) {
                                    $arSectionList[] = $arSection['ID'];
                                }
                                $arSrc['IBLOCK_SECTION'] = $arSectionList;
                            }
                            if ($intSrcIBlockID != $intDestIBlockID) {
                                if (empty($arPropListCache)) {
                                    $rsProps = CIBlockProperty::GetList(array(), array('IBLOCK_ID' => $intDestIBlockID, 'PROPERTY_TYPE' => 'L', 'ACTIVE' => 'Y', 'CHECK_PERMISSIONS' => 'N'));
                                    while ($arProp = $rsProps->Fetch()) {
                                        $arValueList = array();
                                        $arNameList = array();
                                        $rsValues = CIBlockProperty::GetPropertyEnum($arProp['ID']);
                                        while ($arValue = $rsValues->Fetch()) {
                                            $arValueList[$arValue['XML_ID']] = $arValue['ID'];
                                            $arNameList[$arValue['ID']] = trim($arValue['VALUE']);
                                        }
                                        if (!empty($arValueList)) {
                                            $arPropListCache[$arProp['CODE']] = $arValueList;
                                        }
                                        if (!empty($arNameList)) {
                                            $arNamePropListCache[$arProp['CODE']] = $arNameList;
                                        }
                                    }
                                }
                                if (empty($arOldPropListCache)) {
                                    $rsProps = CIBlockProperty::GetList(array(), array('IBLOCK_ID' => $intSrcIBlockID, 'PROPERTY_TYPE' => 'L', 'ACTIVE' => 'Y', 'CHECK_PERMISSIONS' => 'N'));
                                    while ($arProp = $rsProps->Fetch()) {
                                        $arValueList = array();
                                        $arNameList = array();
                                        $rsValues = CIBlockProperty::GetPropertyEnum($arProp['ID']);
                                        while ($arValue = $rsValues->Fetch()) {
                                            $arValueList[$arValue['ID']] = $arValue['XML_ID'];
                                            $arNameList[$arValue['ID']] = trim($arValue['VALUE']);
                                        }
                                        if (!empty($arValueList)) {
                                            $arOldPropListCache[$arProp['CODE']] = $arValueList;
                                        }
                                        if (!empty($arNameList)) {
                                            $arOldNamePropListCache[$arProp['CODE']] = $arNameList;
                                        }
                                    }
                                }
                            }
                            foreach ($arSrcPr as &$arProp) {
                                if ($arProp['USER_TYPE'] == 'HTML') {
                                    if (is_array($arProp['~VALUE'])) {
                                        if ($arProp['MULTIPLE'] == 'N') {
                                            $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = array('VALUE' => array('TEXT' => $arProp['~VALUE']['TEXT'], 'TYPE' => $arProp['~VALUE']['TYPE']));
                                            if ($arProp['WITH_DESCRIPTION'] == 'Y') {
                                                $arSrc['PROPERTY_VALUES'][$arProp['CODE']]['DESCRIPTION'] = $arProp['~DESCRIPTION'];
                                            }
                                        } else {
                                            if (!empty($arProp['~VALUE'])) {
                                                $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = array();
                                                foreach ($arProp['~VALUE'] as $propValueKey => $propValue) {
                                                    $oneNewValue = array('VALUE' => array('TEXT' => $propValue['TEXT'], 'TYPE' => $propValue['TYPE']));
                                                    if ($arProp['WITH_DESCRIPTION'] == 'Y') {
                                                        $oneNewValue['DESCRIPTION'] = $arProp['~DESCRIPTION'][$propValueKey];
                                                    }
                                                    $arSrc['PROPERTY_VALUES'][$arProp['CODE']][] = $oneNewValue;
                                                    unset($oneNewValue);
                                                }
                                                unset($propValue, $propValueKey);
                                            }
                                        }
                                    }
                                } elseif ($arProp['PROPERTY_TYPE'] == 'F') {
                                    if (is_array($arProp['VALUE'])) {
                                        $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = array();
                                        foreach ($arProp['VALUE'] as $propValueKey => $file) {
                                            if ($file > 0) {
                                                $tmpValue = CFile::MakeFileArray($file);
                                                if (!is_array($tmpValue)) {
                                                    continue;
                                                }
                                                if ($arProp['WITH_DESCRIPTION'] == 'Y') {
                                                    $tmpValue = array('VALUE' => $tmpValue, 'DESCRIPTION' => $arProp['~DESCRIPTION'][$propValueKey]);
                                                }
                                                $arSrc['PROPERTY_VALUES'][$arProp['CODE']][] = $tmpValue;
                                            }
                                        }
                                    } elseif ($arProp['VALUE'] > 0) {
                                        $tmpValue = CFile::MakeFileArray($arProp['VALUE']);
                                        if (is_array($tmpValue)) {
                                            if ($arProp['WITH_DESCRIPTION'] == 'Y') {
                                                $tmpValue = array('VALUE' => $tmpValue, 'DESCRIPTION' => $arProp['~DESCRIPTION']);
                                            }
                                            $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = $tmpValue;
                                        }
                                    }
                                } elseif ($arProp['PROPERTY_TYPE'] == 'L') {
                                    if (!empty($arProp['VALUE_ENUM_ID'])) {
                                        if ($intSrcIBlockID == $arSrc['IBLOCK_ID']) {
                                            $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = $arProp['VALUE_ENUM_ID'];
                                        } else {
                                            if (isset($arPropListCache[$arProp['CODE']]) && isset($arOldPropListCache[$arProp['CODE']])) {
                                                if (is_array($arProp['VALUE_ENUM_ID'])) {
                                                    $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = array();
                                                    foreach ($arProp['VALUE_ENUM_ID'] as &$intValueID) {
                                                        $strValueXmlID = $arOldPropListCache[$arProp['CODE']][$intValueID];
                                                        if (isset($arPropListCache[$arProp['CODE']][$strValueXmlID])) {
                                                            $arSrc['PROPERTY_VALUES'][$arProp['CODE']][] = $arPropListCache[$arProp['CODE']][$strValueXmlID];
                                                        } else {
                                                            $strValueName = $arOldNamePropListCache[$arProp['CODE']][$intValueID];
                                                            $intValueKey = array_search($strValueName, $arNamePropListCache[$arProp['CODE']]);
                                                            if ($intValueKey !== false) {
                                                                $arSrc['PROPERTY_VALUES'][$arProp['CODE']][] = $intValueKey;
                                                            }
                                                        }
                                                    }
                                                    if (isset($intValueID)) {
                                                        unset($intValueID);
                                                    }
                                                    if (empty($arSrc['PROPERTY_VALUES'][$arProp['CODE']])) {
                                                        unset($arSrc['PROPERTY_VALUES'][$arProp['CODE']]);
                                                    }
                                                } else {
                                                    $strValueXmlID = $arOldPropListCache[$arProp['CODE']][$arProp['VALUE_ENUM_ID']];
                                                    if (isset($arPropListCache[$arProp['CODE']][$strValueXmlID])) {
                                                        $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = $arPropListCache[$arProp['CODE']][$strValueXmlID];
                                                    } else {
                                                        $strValueName = $arOldNamePropListCache[$arProp['CODE']][$arProp['VALUE_ENUM_ID']];
                                                        $intValueKey = array_search($strValueName, $arNamePropListCache[$arProp['CODE']]);
                                                        if ($intValueKey !== false) {
                                                            $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = $intValueKey;
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                } elseif ($arProp['PROPERTY_TYPE'] == 'S' || $arProp['PROPERTY_TYPE'] == 'N') {
                                    if ($arProp['MULTIPLE'] == 'Y') {
                                        if (is_array($arProp['~VALUE'])) {
                                            if ($arProp['WITH_DESCRIPTION'] == 'Y') {
                                                $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = array();
                                                foreach ($arProp['~VALUE'] as $propValueKey => $propValue) {
                                                    $arSrc['PROPERTY_VALUES'][$arProp['CODE']][] = array('VALUE' => $propValue, 'DESCRIPTION' => $arProp['~DESCRIPTION'][$propValueKey]);
                                                }
                                                unset($propValue, $propValueKey);
                                            } else {
                                                $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = $arProp['~VALUE'];
                                            }
                                        }
                                    } else {
                                        $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = $arProp['WITH_DESCRIPTION'] == 'Y' ? array('VALUE' => $arProp['~VALUE'], 'DESCRIPTION' => $arProp['~DESCRIPTION']) : $arProp['~VALUE'];
                                    }
                                } else {
                                    $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = $arProp['~VALUE'];
                                }
                            }
                            if (isset($arProp)) {
                                unset($arProp);
                            }
                            AddMessage2Log($arSrc['PROPERTY_VALUES']);
                            $intNewID = $el->Add($arSrc, true, true, true);
                            if ($intNewID) {
                                if ($boolCatalog && $boolCopyCatalog) {
                                    $priceRes = CPrice::GetListEx(array(), array('PRODUCT_ID' => $ID), false, false, array('PRODUCT_ID', 'EXTRA_ID', 'CATALOG_GROUP_ID', 'PRICE', 'CURRENCY', 'QUANTITY_FROM', 'QUANTITY_TO'));
                                    while ($arPrice = $priceRes->Fetch()) {
                                        $arPrice['PRODUCT_ID'] = $intNewID;
                                        CPrice::Add($arPrice);
                                    }
                                }
                                if ($boolCatalog && $boolNewCatalog) {
                                    $arProduct = array('ID' => $intNewID);
                                    if ($boolCopyCatalog) {
                                        $productRes = CCatalogProduct::GetList(array(), array('ID' => $ID), false, false, array('QUANTITY', 'QUANTITY_TRACE_ORIG', 'CAN_BUY_ZERO_ORIG', 'NEGATIVE_AMOUNT_TRACE_ORIG', 'SUBSCRIBE_ORIG', 'WEIGHT', 'PRICE_TYPE', 'RECUR_SCHEME_TYPE', 'RECUR_SCHEME_LENGTH', 'TRIAL_PRICE_ID', 'WITHOUT_ORDER', 'SELECT_BEST_PRICE', 'VAT_ID', 'VAT_INCLUDED', 'WIDTH', 'LENGTH', 'HEIGHT', 'PURCHASING_PRICE', 'PURCHASING_CURRENCY', 'MEASURE'));
                                        if ($arCurProduct = $productRes->Fetch()) {
                                            $arProduct = $arCurProduct;
                                            $arProduct['ID'] = $intNewID;
                                            $arProduct['QUANTITY_TRACE'] = $arProduct['QUANTITY_TRACE_ORIG'];
                                            $arProduct['CAN_BUY_ZERO'] = $arProduct['CAN_BUY_ZERO_ORIG'];
                                            $arProduct['NEGATIVE_AMOUNT_TRACE'] = $arProduct['NEGATIVE_AMOUNT_TRACE_ORIG'];
                                            if (isset($arProduct['SUBSCRIBE_ORIG'])) {
                                                $arProduct['SUBSCRIBE'] = $arProduct['SUBSCRIBE_ORIG'];
                                            }
                                            foreach ($arProduct as $productKey => $productValue) {
                                                if ($productValue === null) {
                                                    unset($arProduct[$productKey]);
                                                }
                                            }
                                        }
                                    }
                                    CCatalogProduct::Add($arProduct, false);
                                }
                                if ($_REQUEST['action'] == 'asd_move') {
                                    if (CASDIblockRights::IsElementDelete($intSrcIBlockID, $ID)) {
                                        $el->Delete($ID);
                                    } else {
                                        CASDiblock::$error .= '[' . $ID . '] ' . GetMessage('ASD_ACTION_ERR_DELETE_ELEMENT_RIGHTS') . "\n";
                                    }
                                }
                            } else {
                                CASDiblock::$error .= '[' . $ID . '] ' . $el->LAST_ERROR . "\n";
                            }
                        }
                    }
                    if ($boolCreateSection && $boolCopySect) {
                        if ($_REQUEST['action'] == 'asd_move') {
                            continue;
                        }
                        $rsSections = CIBlockSection::GetList(array(), array('ID' => $ID, 'IBLOCK_ID' => $intSrcIBlockID), false, array('ID', 'NAME', 'XML_ID', 'CODE', 'IBLOCK_SECTION_ID', 'IBLOCK_ID', 'ACTIVE', 'SORT', 'PICTURE', 'DESCRIPTION', 'DESCRIPTION_TYPE', 'DETAIL_PICTURE', 'SOCNET_GROUP_ID', 'UF_*'));
                        if ($arSrcSect = $rsSections->Fetch()) {
                            $arDestSect = $arSrcSect;
                            unset($arDestSect['ID']);
                            $arDestSect['IBLOCK_ID'] = $intDestIBlockID;
                            if ($arDestIBFields['SECTION_CODE']['IS_REQUIRED'] == 'Y') {
                                if (!strlen($arDestSect['CODE'])) {
                                    $arDestSect['CODE'] = mt_rand(100000, 1000000);
                                }
                            }
                            if ($arDestIBFields['SECTION_CODE']['DEFAULT_VALUE']['UNIQUE'] == 'Y') {
                                $boolScCodeUnique = $boolSectCodeUnique;
                                if (!$boolSectCodeUnique) {
                                    $rsCheckItems = CIBlockElement::GetList(array(), array('IBLOCK_ID' => $intDestIBlockID, '=CODE' => $arSrc['CODE'], 'CHECK_PERMISSIONS' => 'N'), false, array('nTopCount' => 1), array('ID', 'IBLOCK_ID'));
                                    if ($arCheck = $rsCheckItems->Fetch()) {
                                        $boolScCodeUnique = true;
                                    }
                                }
                                if ($boolScCodeUnique) {
                                    $arDestSect['CODE'] .= mt_rand(100, 10000);
                                }
                            }
                            if ($intSetSectID > 0) {
                                $arDestSect['IBLOCK_SECTION_ID'] = $intSetSectID;
                            } elseif ($intSrcIBlockID != $intDestIBlockID) {
                                $arDestSect['IBLOCK_SECTION_ID'] = 0;
                            }
                            $arDestSect['PICTURE'] = (int) $arDestSect['PICTURE'];
                            if ($arDestSect['PICTURE'] > 0) {
                                $arDestSect['PICTURE'] = CFile::MakeFileArray($arDestSect['PICTURE']);
                                if (empty($arDestSect['PICTURE'])) {
                                    $arDestSect['PICTURE'] = false;
                                } else {
                                    $arDestSect['PICTURE']['COPY_FILE'] = 'Y';
                                }
                            } else {
                                $arDestSect['PICTURE'] = false;
                            }
                            $arDestSect['DETAIL_PICTURE'] = (int) $arDestSect['DETAIL_PICTURE'];
                            if ($arDestSect['DETAIL_PICTURE'] > 0) {
                                $arDestSect['DETAIL_PICTURE'] = CFile::MakeFileArray($arDestSect['DETAIL_PICTURE']);
                                if (empty($arDestSect['DETAIL_PICTURE'])) {
                                    $arDestSect['DETAIL_PICTURE'] = false;
                                } else {
                                    $arDestSect['DETAIL_PICTURE']['COPY_FILE'] = 'Y';
                                }
                            } else {
                                $arDestSect['DETAIL_PICTURE'] = false;
                            }
                            if (!$boolUFListCache) {
                                $boolUFListCache = true;
                                $arUFListCache = $USER_FIELD_MANAGER->GetUserFields('IBLOCK_' . $intDestIBlockID . '_SECTION');
                                if (!empty($arUFListCache)) {
                                    if ($intSrcIBlockID != $intDestIBlockID) {
                                        $arOldUFListCache = $USER_FIELD_MANAGER->GetUserFields('IBLOCK_' . $intSrcIBlockID . '_SECTION');
                                        if (empty($arOldUFListCache)) {
                                            $arUFListCache = array();
                                        }
                                    } else {
                                        $arOldUFListCache = $arUFListCache;
                                    }
                                }
                                if (!empty($arUFListCache)) {
                                    if ($intSrcIBlockID != $intDestIBlockID) {
                                        foreach ($arUFListCache as &$arOneUserField) {
                                            if ('enum' == $arOneUserField['USER_TYPE']['BASE_TYPE']) {
                                                $arUFEnumCache[$arOneUserField['FIELD_NAME']] = array();
                                                $arUFNameEnumCache[$arOneUserField['FIELD_NAME']] = array();
                                                $rsEnum = $obEnum->GetList(array(), array('USER_FIELD_ID' => $arOneUserField['ID']));
                                                while ($arEnum = $rsEnum->Fetch()) {
                                                    $arUFEnumCache[$arOneUserField['FIELD_NAME']][$arEnum['XML_ID']] = $arEnum['ID'];
                                                    $arUFNameEnumCache[$arOneUserField['FIELD_NAME']][$arEnum['ID']] = trim($arEnum['VALUE']);
                                                }
                                            }
                                        }
                                        if (isset($arOneUserField)) {
                                            unset($arOneUserField);
                                        }
                                        foreach ($arOldUFListCache as &$arOneUserField) {
                                            if ($arOneUserField['USER_TYPE']['BASE_TYPE'] == 'enum') {
                                                $arOldUFEnumCache[$arOneUserField['FIELD_NAME']] = array();
                                                $arOldUFNameEnumCache[$arOneUserField['FIELD_NAME']] = array();
                                                $rsEnum = $obEnum->GetList(array(), array('USER_FIELD_ID' => $arOneUserField['ID']));
                                                while ($arEnum = $rsEnum->Fetch()) {
                                                    $arOldUFEnumCache[$arOneUserField['FIELD_NAME']][$arEnum['ID']] = $arEnum['XML_ID'];
                                                    $arOldUFNameEnumCache[$arOneUserField['FIELD_NAME']][$arEnum['ID']] = trim($arEnum['VALUE']);
                                                }
                                            }
                                        }
                                        if (isset($arOneUserField)) {
                                            unset($arOneUserField);
                                        }
                                    }
                                }
                            }
                            if (!empty($arUFListCache)) {
                                foreach ($arUFListCache as &$arOneUserField) {
                                    if (!isset($arDestSect[$arOneUserField['FIELD_NAME']])) {
                                        continue;
                                    }
                                    if ($arOneUserField['USER_TYPE']['BASE_TYPE'] == 'file') {
                                        if (!empty($arDestSect[$arOneUserField['FIELD_NAME']])) {
                                            if (is_array($arDestSect[$arOneUserField['FIELD_NAME']])) {
                                                $arNewFileList = array();
                                                foreach ($arDestSect[$arOneUserField['FIELD_NAME']] as &$intFileID) {
                                                    $arNewFile = false;
                                                    $intFileID = (int) $intFileID;
                                                    if ($intFileID > 0) {
                                                        $arNewFile = CFile::MakeFileArray($intFileID);
                                                    }
                                                    if (!empty($arNewFile)) {
                                                        $arNewFileList[] = $arNewFile;
                                                    }
                                                }
                                                if (isset($intFileID)) {
                                                    unset($intFileID);
                                                }
                                                $arDestSect[$arOneUserField['FIELD_NAME']] = !empty($arNewFileList) ? $arNewFileList : false;
                                            } else {
                                                $arNewFile = false;
                                                $intFileID = (int) $arDestSect[$arOneUserField['FIELD_NAME']];
                                                if ($intFileID > 0) {
                                                    $arNewFile = CFile::MakeFileArray($intFileID);
                                                }
                                                $arDestSect[$arOneUserField['FIELD_NAME']] = !empty($arNewFile) ? $arNewFile : false;
                                            }
                                        } else {
                                            $arDestSect[$arOneUserField['FIELD_NAME']] = false;
                                        }
                                    } elseif ($arOneUserField['USER_TYPE']['BASE_TYPE'] == 'enum') {
                                        if (!empty($arDestSect[$arOneUserField['FIELD_NAME']])) {
                                            if ($intSrcIBlockID != $intDestIBlockID) {
                                                if (array_key_exists($arOneUserField['FIELD_NAME'], $arUFEnumCache) && array_key_exists($arOneUserField['FIELD_NAME'], $arOldUFEnumCache)) {
                                                    if (is_array($arDestSect[$arOneUserField['FIELD_NAME']])) {
                                                        $arNewEnumList = array();
                                                        foreach ($arDestSect[$arOneUserField['FIELD_NAME']] as &$intValueID) {
                                                            $strValueXmlID = $arOldUFEnumCache[$arOneUserField['FIELD_NAME']][$intValueID];
                                                            if (array_key_exists($strValueXmlID, $arUFEnumCache[$arOneUserField['FIELD_NAME']])) {
                                                                $arNewEnumList[] = $arUFEnumCache[$arOneUserField['FIELD_NAME']][$strValueXmlID];
                                                            } else {
                                                                $strValueName = $arOldUFNameEnumCache[$arOneUserField['FIELD_NAME']][$intValueID];
                                                                $intValueKey = array_search($strValueName, $arUFNameEnumCache[$arOneUserField['FIELD_NAME']]);
                                                                if ($intValueKey !== false) {
                                                                    $arNewEnumList[] = $intValueKey;
                                                                }
                                                            }
                                                        }
                                                        if (isset($intValueID)) {
                                                            unset($intValueID);
                                                        }
                                                        if (!empty($arNewEnumList)) {
                                                            $arDestSect[$arOneUserField['FIELD_NAME']] = $arNewEnumList;
                                                        }
                                                    } else {
                                                        $strValueXmlID = $arOldUFEnumCache[$arOneUserField['FIELD_NAME']][$arDestSect[$arOneUserField['FIELD_NAME']]];
                                                        if (array_key_exists($strValueXmlID, $arUFEnumCache[$arOneUserField['FIELD_NAME']])) {
                                                            $arDestSect[$arOneUserField['FIELD_NAME']] = $arUFEnumCache[$arOneUserField['FIELD_NAME']][$strValueXmlID];
                                                        } else {
                                                            $strValueName = $arOldUFNameEnumCache[$arOneUserField['FIELD_NAME']][$arDestSect[$arOneUserField['FIELD_NAME']]];
                                                            $intValueKey = array_search($strValueName, $arUFNameEnumCache[$arOneUserField['FIELD_NAME']]);
                                                            if ($intValueKey !== false) {
                                                                $arDestSect[$arOneUserField['FIELD_NAME']] = $intValueKey;
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        } else {
                                            $arDestSect[$arOneUserField['FIELD_NAME']] = false;
                                        }
                                    }
                                }
                                if (isset($arOneUserField)) {
                                    unset($arOneUserField);
                                }
                            }
                            $intNewID = $sc->Add($arDestSect);
                            if (!$intNewID) {
                                CASDiblock::$error .= '[' . $ID . '] ' . $sc->LAST_ERROR . "\n";
                            }
                        }
                    }
                }
                $successRedirect = true;
            }
            unset($_REQUEST['action']);
            if (isset($_REQUEST['action_button'])) {
                unset($_REQUEST['action_button']);
            }
            if ($successRedirect) {
                LocalRedirect($GLOBALS['APPLICATION']->GetCurPageParam('', array('action', 'action_button', 'asd_ib_dest', 'asd_sect_dest', 'ID')));
            }
        }
        if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'asd_remove' && $IBLOCK_ID > 0 && isset($_REQUEST['find_section_section']) && check_bitrix_sessid() && CASDIblockRights::IsIBlockDisplay($IBLOCK_ID)) {
            $intSectionID = (int) $_REQUEST['find_section_section'];
            if ($intSectionID > 0) {
                $strCurPage = $GLOBALS['APPLICATION']->GetCurPage();
                $bElemPage = $strCurPage == '/bitrix/admin/iblock_element_admin.php' || $strCurPage == '/bitrix/admin/cat_product_admin.php';
                $bMixPage = $strCurPage == '/bitrix/admin/iblock_list_admin.php';
                if ($bElemPage || $bMixPage) {
                    foreach ($_REQUEST['ID'] as $eID) {
                        if ($bMixPage) {
                            if (substr($eID, 0, 1) != 'E') {
                                continue;
                            }
                            $ID = (int) substr($eID, 1);
                        } else {
                            $ID = (int) $eID;
                        }
                        if ($ID <= 0) {
                            continue;
                        }
                        if (CASDIblockRights::IsElementEdit($IBLOCK_ID, $ID)) {
                            $arSectionList = array();
                            $rsSections = CIBlockElement::GetElementGroups($ID, true);
                            while ($arSection = $rsSections->Fetch()) {
                                $arSection['ID'] = (int) $arSection['ID'];
                                if ($arSection['ID'] != $intSectionID) {
                                    $arSectionList[] = $arSection['ID'];
                                }
                            }
                            CIBlockElement::SetElementSection($ID, $arSectionList, false);
                            $successRedirect = true;
                        }
                    }
                }
            }
            unset($_REQUEST['action']);
            if (isset($_REQUEST['action_button'])) {
                unset($_REQUEST['action_button']);
            }
            if ($successRedirect) {
                LocalRedirect($GLOBALS['APPLICATION']->GetCurPageParam('', array('action', 'action_button')));
            }
        }
    }
Example #16
0
 public function CheckFields($ACTION, &$arFields, $ID = 0)
 {
     global $APPLICATION;
     $arMsg = array();
     $boolResult = true;
     $ID = (int) $ID;
     $arCatalog = false;
     if (0 < $ID) {
         $arCatalog = CCatalog::GetByID($ID);
     }
     if ($boolResult) {
         if ('UPDATE' == $ACTION && false == $arCatalog) {
             $boolResult = false;
             $arMsg[] = array('id' => 'ID', 'text' => Loc::getMessage('BT_MOD_CATALOG_ERR_UPDATE_BAD_ID'));
         }
     }
     if ($boolResult) {
         if ('ADD' == $ACTION || is_set($arFields, 'IBLOCK_ID')) {
             if (!is_set($arFields, 'IBLOCK_ID')) {
                 $arMsg[] = array('id' => 'IBLOCK_ID', "text" => Loc::getMessage('BT_MOD_CATALOG_ERR_IBLOCK_ID_FIELD_ABSENT'));
                 $boolResult = false;
             } elseif ((int) $arFields['IBLOCK_ID'] <= 0) {
                 $arMsg[] = array('id' => 'IBLOCK_ID', "text" => Loc::getMessage('BT_MOD_CATALOG_ERR_IBLOCK_ID_INVALID'));
                 $boolResult = false;
             } else {
                 $arFields['IBLOCK_ID'] = (int) $arFields['IBLOCK_ID'];
                 $rsIBlocks = CIBlock::GetByID($arFields['IBLOCK_ID']);
                 if (!($arIBlock = $rsIBlocks->Fetch())) {
                     $arMsg[] = array('id' => 'IBLOCK_ID', "text" => Loc::getMessage('BT_MOD_CATALOG_ERR_IBLOCK_ID_ABSENT'));
                     $boolResult = false;
                 }
             }
         }
         if ((is_set($arFields, "SUBSCRIPTION") || $ACTION == "ADD") && $arFields["SUBSCRIPTION"] != "Y") {
             $arFields["SUBSCRIPTION"] = "N";
         }
         if ((is_set($arFields, "YANDEX_EXPORT") || $ACTION == "ADD") && $arFields["YANDEX_EXPORT"] != "Y") {
             $arFields["YANDEX_EXPORT"] = "N";
         }
         if (is_set($arFields, 'VAT_ID') || 'ADD' == $ACTION) {
             $arFields['VAT_ID'] = intval($arFields['VAT_ID']);
             if (0 > $arFields['VAT_ID']) {
                 $arFields['VAT_ID'] = 0;
             }
         }
     }
     if ($boolResult) {
         if ('ADD' == $ACTION) {
             if (!is_set($arFields, "PRODUCT_IBLOCK_ID")) {
                 $arFields["PRODUCT_IBLOCK_ID"] = 0;
             } elseif (0 > (int) $arFields["PRODUCT_IBLOCK_ID"]) {
                 $arMsg[] = array('id' => 'PRODUCT_IBLOCK_ID', "text" => Loc::getMessage('BT_MOD_CATALOG_ERR_PRODUCT_ID_INVALID'));
                 $arFields["PRODUCT_IBLOCK_ID"] = 0;
                 $boolResult = false;
             } elseif (0 < (int) $arFields["PRODUCT_IBLOCK_ID"]) {
                 $arFields["PRODUCT_IBLOCK_ID"] = (int) $arFields["PRODUCT_IBLOCK_ID"];
                 $rsIBlocks = CIBlock::GetByID($arFields['PRODUCT_IBLOCK_ID']);
                 if (!($arIBlock = $rsIBlocks->Fetch())) {
                     $arMsg[] = array('id' => 'PRODUCT_IBLOCK_ID', "text" => Loc::getMessage('BT_MOD_CATALOG_ERR_PRODUCT_ID_ABSENT'));
                     $arFields["PRODUCT_IBLOCK_ID"] = 0;
                     $boolResult = false;
                 } else {
                     if ($arFields["PRODUCT_IBLOCK_ID"] == $arFields['IBLOCK_ID']) {
                         $arMsg[] = array('id' => 'PRODUCT_IBLOCK_ID', "text" => Loc::getMessage('BT_MOD_CATALOG_ERR_PRODUCT_ID_SELF'));
                         $arFields["PRODUCT_IBLOCK_ID"] = 0;
                         $boolResult = false;
                     }
                 }
             } else {
                 $arFields["PRODUCT_IBLOCK_ID"] = 0;
             }
             if (!is_set($arFields, "SKU_PROPERTY_ID")) {
                 $arFields["SKU_PROPERTY_ID"] = 0;
             } elseif (0 > (int) $arFields["SKU_PROPERTY_ID"]) {
                 $arMsg[] = array('id' => 'SKU_PROPERTY_ID', "text" => Loc::getMessage('BT_MOD_CATALOG_ERR_SKU_PROP_ID_INVALID'));
                 $arFields["SKU_PROPERTY_ID"] = 0;
                 $boolResult = false;
             } else {
                 $arFields["SKU_PROPERTY_ID"] = (int) $arFields["SKU_PROPERTY_ID"];
             }
             if (0 < $arFields["PRODUCT_IBLOCK_ID"] && 0 == $arFields['SKU_PROPERTY_ID']) {
                 $arMsg[] = array('id' => 'SKU_PROPERTY_ID', "text" => Loc::getMessage('BT_MOD_CATALOG_ERR_PRODUCT_WITHOUT_SKU_PROP'));
                 $boolResult = false;
             } elseif (0 == $arFields["PRODUCT_IBLOCK_ID"] && 0 < $arFields['SKU_PROPERTY_ID']) {
                 $arMsg[] = array('id' => 'PRODUCT_IBLOCK_ID', "text" => Loc::getMessage('BT_MOD_CATALOG_ERR_SKU_PROP_WITHOUT_PRODUCT'));
                 $boolResult = false;
             } elseif (0 < $arFields["PRODUCT_IBLOCK_ID"] && 0 < $arFields['SKU_PROPERTY_ID']) {
                 $rsProps = CIBlockProperty::GetList(array(), array('IBLOCK_ID' => $arFields['IBLOCK_ID'], 'ID' => $arFields['SKU_PROPERTY_ID'], 'ACTIVE' => 'Y'));
                 if ($arProp = $rsProps->Fetch()) {
                     if ('E' != $arProp['PROPERTY_TYPE'] || $arFields["PRODUCT_IBLOCK_ID"] != $arProp['LINK_IBLOCK_ID']) {
                         $arMsg[] = array('id' => 'SKU_PROPERTY_ID', "text" => Loc::getMessage('BT_MOD_CATALOG_ERR_SKU_PROP_WITHOUT_PRODUCT'));
                         $boolResult = false;
                     }
                 } else {
                     $arMsg[] = array('id' => 'SKU_PROPERTY_ID', "text" => Loc::getMessage('BT_MOD_CATALOG_ERR_SKU_PROP_NOT_FOUND'));
                     $boolResult = false;
                 }
             }
         } elseif ('UPDATE' == $ACTION) {
             $boolLocalFlag = is_set($arFields, 'PRODUCT_IBLOCK_ID') == is_set($arFields, 'SKU_PROPERTY_ID');
             if (!$boolLocalFlag) {
                 $arMsg[] = array('id' => 'PRODUCT_IBLOCK_ID', "text" => Loc::getMessage('BT_MOD_CATALOG_ERR_PRODUCT_ID_AND_SKU_PROPERTY_ID_NEED'));
                 $boolResult = false;
             } else {
                 if (is_set($arFields, 'PRODUCT_IBLOCK_ID')) {
                     if (0 > (int) $arFields["PRODUCT_IBLOCK_ID"]) {
                         $arMsg[] = array('id' => 'PRODUCT_IBLOCK_ID', "text" => Loc::getMessage('BT_MOD_CATALOG_ERR_PRODUCT_ID_INVALID'));
                         $arFields["PRODUCT_IBLOCK_ID"] = 0;
                         $boolResult = false;
                     } elseif (0 < (int) $arFields["PRODUCT_IBLOCK_ID"]) {
                         $arFields["PRODUCT_IBLOCK_ID"] = (int) $arFields["PRODUCT_IBLOCK_ID"];
                         $rsIBlocks = CIBlock::GetByID($arFields['PRODUCT_IBLOCK_ID']);
                         if (!($arIBlock = $rsIBlocks->Fetch())) {
                             $arMsg[] = array('id' => 'PRODUCT_IBLOCK_ID', "text" => Loc::getMessage('BT_MOD_CATALOG_ERR_PRODUCT_ID_ABSENT'));
                             $arFields["PRODUCT_IBLOCK_ID"] = 0;
                             $boolResult = false;
                         } else {
                             if (0 < $ID && $arFields["PRODUCT_IBLOCK_ID"] == $ID) {
                                 $arMsg[] = array('id' => 'PRODUCT_IBLOCK_ID', "text" => Loc::getMessage('BT_MOD_CATALOG_ERR_PRODUCT_ID_SELF'));
                                 $arFields["PRODUCT_IBLOCK_ID"] = 0;
                                 $boolResult = false;
                             } else {
                                 if (is_set($arFields, 'IBLOCK_ID') && $arFields["PRODUCT_IBLOCK_ID"] == $arFields['IBLOCK_ID']) {
                                     $arMsg[] = array('id' => 'PRODUCT_IBLOCK_ID', "text" => Loc::getMessage('BT_MOD_CATALOG_ERR_PRODUCT_ID_SELF'));
                                     $arFields["PRODUCT_IBLOCK_ID"] = 0;
                                     $boolResult = false;
                                 }
                             }
                         }
                     }
                 }
                 if (is_set($arFields, 'SKU_PROPERTY_ID')) {
                     if (0 > (int) $arFields["SKU_PROPERTY_ID"]) {
                         $arMsg[] = array('id' => 'SKU_PROPERTY_ID', "text" => Loc::getMessage('BT_MOD_CATALOG_ERR_SKU_PROP_ID_INVALID'));
                         $arFields["SKU_PROPERTY_ID"] = 0;
                         $boolResult = false;
                     } else {
                         $arFields["SKU_PROPERTY_ID"] = (int) $arFields["SKU_PROPERTY_ID"];
                     }
                 }
                 if (is_set($arFields, 'PRODUCT_IBLOCK_ID') && is_set($arFields, 'SKU_PROPERTY_ID')) {
                     if (0 < $arFields["PRODUCT_IBLOCK_ID"] && 0 == $arFields['SKU_PROPERTY_ID']) {
                         $arMsg[] = array('id' => 'SKU_PROPERTY_ID', "text" => Loc::getMessage('BT_MOD_CATALOG_ERR_PRODUCT_WITHOUT_SKU_PROP'));
                         $boolResult = false;
                     } elseif (0 == $arFields["PRODUCT_IBLOCK_ID"] && 0 < $arFields['SKU_PROPERTY_ID']) {
                         $arMsg[] = array('id' => 'PRODUCT_IBLOCK_ID', "text" => Loc::getMessage('BT_MOD_CATALOG_ERR_SKU_PROP_WITHOUT_PRODUCT'));
                         $boolResult = false;
                     } elseif (0 < $arFields["PRODUCT_IBLOCK_ID"] && 0 < $arFields['SKU_PROPERTY_ID']) {
                         $rsProps = CIBlockProperty::GetList(array(), array('IBLOCK_ID' => $ID, 'ID' => $arFields['SKU_PROPERTY_ID'], 'ACTIVE' => 'Y'));
                         if ($arProp = $rsProps->Fetch()) {
                             if ('E' != $arProp['PROPERTY_TYPE'] || $arFields["PRODUCT_IBLOCK_ID"] != $arProp['LINK_IBLOCK_ID']) {
                                 $arMsg[] = array('id' => 'SKU_PROPERTY_ID', "text" => Loc::getMessage('BT_MOD_CATALOG_ERR_SKU_PROP_WITHOUT_PRODUCT'));
                                 $boolResult = false;
                             }
                         } else {
                             $arMsg[] = array('id' => 'SKU_PROPERTY_ID', "text" => Loc::getMessage('BT_MOD_CATALOG_ERR_SKU_PROP_NOT_FOUND'));
                             $boolResult = false;
                         }
                     }
                 }
             }
         }
     }
     if (!$boolResult) {
         $obError = new CAdminException($arMsg);
         $APPLICATION->ResetException();
         $APPLICATION->ThrowException($obError);
     }
     return $boolResult;
 }
Example #17
0
function cmlStartElement($parser, $name, $attrs)
{
    global $DB;
    global $USER;
    global $currentCatalog, $currentProduct, $currentProperty, $currentOffersList, $currentOffer;
    global $arIBlockCache, $iBlockIDString, $arCMLCurrencies;
    global $APPLICATION, $nameUTF, $IBLOCK_TYPE_ID, $strImportErrorMessage;
    global $oIBlock, $cmlLoadCnts;
    global $USE_TRANSLIT, $ADD_TRANSLIT;
    global $boolIBlockTranslit, $boolTranslitElement, $boolTranslitSection, $arTranslitElement, $arTranslitSection;
    static $SITE_ID = false;
    if (false === $SITE_ID) {
        $SITE_ID = 'ru';
        $dbSite = CSite::GetByID($SITE_ID);
        if (!$dbSite->Fetch()) {
            $dbSite = CSite::GetList($by = 'sort', $order = 'asc');
            $arSite = $dbSite->Fetch();
            $SITE_ID = $arSite['ID'];
        }
    }
    switch ($name) {
        case $nameUTF["Catalog"]:
            $currentCatalog = array();
            if (in_array($nameUTF["ID"], array_keys($attrs))) {
                $currentCatalog["ID"] = $attrs[$nameUTF["ID"]];
            }
            if (in_array($nameUTF["Name"], array_keys($attrs))) {
                $currentCatalog["Name"] = $attrs[$nameUTF["Name"]];
            }
            if (in_array($nameUTF["Description"], array_keys($attrs))) {
                $currentCatalog["Description"] = $attrs[$nameUTF["Description"]];
            }
            $boolVersion = true;
            $dbIBlockList = CIBlock::GetList(array(), array("=TYPE" => $IBLOCK_TYPE_ID, "=XML_ID" => $currentCatalog["ID"], 'MIN_PERMISSION' => 'W'));
            if ($arIBlock = $dbIBlockList->Fetch()) {
                $arIBlock['VERSION'] = intval($arIBlock['VERSION']);
                if (1 != $arIBlock['VERSION']) {
                    $bUpdate = true;
                    $boolVersion = false;
                    $res = false;
                } else {
                    $bUpdate = true;
                    $currentCatalog["BID"] = $arIBlock["ID"];
                    $res = $oIBlock->Update($currentCatalog["BID"], array("NAME" => $currentCatalog["Name"], "DESCRIPTION" => $currentCatalog["Description"]));
                }
            } elseif ($USER->IsAdmin()) {
                $bUpdate = false;
                $arFields = array("ACTIVE" => "Y", "NAME" => $currentCatalog["Name"], "XML_ID" => $currentCatalog["ID"], "IBLOCK_TYPE_ID" => $IBLOCK_TYPE_ID, "LID" => $SITE_ID, "WORKFLOW" => "N", "VERSION" => 1);
                if ('Y' == $USE_TRANSLIT && 'Y' == $ADD_TRANSLIT) {
                    $arFields['FIELDS'] = array('CODE' => array('DEFAULT_VALUE' => array('TRANSLITERATION' => 'Y')), 'SECTION_CODE' => array('DEFAULT_VALUE' => array('TRANSLITERATION' => 'Y')));
                }
                $currentCatalog["BID"] = $oIBlock->Add($arFields);
                $res = $currentCatalog["BID"] > 0;
            } else {
                $res = false;
            }
            $cmlLoadCnts["CATALOG"]++;
            if (!$res) {
                $strImportErrorMessage .= str_replace("#ERROR#", $boolVersion ? $oIBlock->LAST_ERROR : GetMessage('CML_R_VERSION'), str_replace("#NAME#", "[" . $currentCatalog["BID"] . "] \"" . $currentCatalog["Name"] . "\" (" . $currentCatalog["ID"] . ")", str_replace("#ACT#", $bUpdate ? GetMessage("CML_R_EDIT") : GetMessage("CML_R_ADD"), GetMessage("CML_R_IBLOCK")))) . ".<br>";
                $currentCatalog = false;
            } else {
                $boolIBlockTranslit = $USE_TRANSLIT;
                $boolTranslitElement = false;
                $boolTranslitSection = false;
                $arTranslitElement = array();
                $arTranslitSection = array();
                if ('Y' == $boolIBlockTranslit) {
                    $boolOutTranslit = false;
                    $arIBlock = CIBlock::GetArrayByID($currentCatalog["BID"]);
                    if (isset($arIBlock['FIELDS']['CODE']['DEFAULT_VALUE'])) {
                        if ('Y' == $arIBlock['FIELDS']['CODE']['DEFAULT_VALUE']['TRANSLITERATION'] && 'Y' == $arIBlock['FIELDS']['CODE']['DEFAULT_VALUE']['USE_GOOGLE']) {
                            $boolOutTranslit = true;
                        }
                    }
                    if (isset($arIBlock['FIELDS']['SECTION_CODE']['DEFAULT_VALUE'])) {
                        if ('Y' == $arIBlock['FIELDS']['SECTION_CODE']['DEFAULT_VALUE']['TRANSLITERATION'] && 'Y' == $arIBlock['FIELDS']['SECTION_CODE']['DEFAULT_VALUE']['USE_GOOGLE']) {
                            $boolOutTranslit = true;
                        }
                    }
                    if ($boolOutTranslit) {
                        $boolIBlockTranslit = 'N';
                        $strImportErrorMessage .= str_replace("#ERROR#", GetMessage('CATI_USE_CODE_TRANSLIT_OUT'), str_replace("#NAME#", "[" . $currentCatalog["BID"] . "] \"" . $currentCatalog["Name"] . "\" (" . $currentCatalog["ID"] . ")", str_replace("#ACT#", $bUpdate ? GetMessage("CML_R_EDIT") : GetMessage("CML_R_ADD"), GetMessage("CML_R_IBLOCK")))) . ".<br>";
                        $currentCatalog = false;
                        break;
                    }
                    if ('Y' == $boolIBlockTranslit) {
                        if (isset($arIBlock['FIELDS']['CODE']['DEFAULT_VALUE'])) {
                            $arTransSettings = $arIBlock['FIELDS']['CODE']['DEFAULT_VALUE'];
                            $boolTranslitElement = 'Y' == $arTransSettings['TRANSLITERATION'] ? true : false;
                            $arTranslitElement = array("max_len" => $arTransSettings['TRANS_LEN'], "change_case" => $arTransSettings['TRANS_CASE'], "replace_space" => $arTransSettings['TRANS_SPACE'], "replace_other" => $arTransSettings['TRANS_OTHER'], "delete_repeat_replace" => 'Y' == $arTransSettings['TRANS_EAT'] ? true : false, "use_google" => 'Y' == $arTransSettings['USE_GOOGLE'] ? true : false);
                        }
                        if (isset($arIBlock['FIELDS']['SECTION_CODE']['DEFAULT_VALUE'])) {
                            $arTransSettings = $arIBlock['FIELDS']['SECTION_CODE']['DEFAULT_VALUE'];
                            $boolTranslitSection = 'Y' == $arTransSettings['TRANSLITERATION'] ? true : false;
                            $arTranslitSection = array("max_len" => $arTransSettings['TRANS_LEN'], "change_case" => $arTransSettings['TRANS_CASE'], "replace_space" => $arTransSettings['TRANS_SPACE'], "replace_other" => $arTransSettings['TRANS_OTHER'], "delete_repeat_replace" => 'Y' == $arTransSettings['TRANS_EAT'] ? true : false, "use_google" => 'Y' == $arTransSettings['USE_GOOGLE'] ? true : false);
                        }
                    }
                }
                $arIBlockCache[$currentCatalog["ID"]] = IntVal($currentCatalog["BID"]);
                $iBlockIDString .= "," . IntVal($currentCatalog["BID"]);
                if (!CCatalog::GetByID($currentCatalog["BID"])) {
                    CCatalog::Add(array("IBLOCK_ID" => $currentCatalog["BID"]));
                }
                if (function_exists("catalog_1c_mutator_catalogT")) {
                    catalog_1c_mutator_catalogT($currentCatalog["BID"], $bUpdate, $attrs);
                }
            }
            break;
        case $nameUTF["Property"]:
            if ($currentCatalog) {
                $currentProperty = array();
                $currentProperty["ID"] = $attrs[$nameUTF["ID"]];
                $currentProperty["DataType"] = $attrs[$nameUTF["DataType"]];
                $currentProperty["Multiple"] = $attrs[$nameUTF["Multiple"]] == "1" || $attrs[$nameUTF["Multiple"]] == "Y" ? "Y" : "N";
                $currentProperty["Name"] = $attrs[$nameUTF["Name"]];
                $currentProperty["DefaultValue"] = $attrs[$nameUTF["DefaultValue"]];
                if ($currentProperty["DataType"] == "enumeration") {
                    $currentProperty["DataType"] = "L";
                } else {
                    $currentProperty["DataType"] = "S";
                }
                $strSql = "INSERT INTO b_catalog_cml_property (XML_ID, CATALOG_ID, DATA_TYPE, MULTIPLE, NAME, DEFAULT_VALUE) " . "VALUES ('" . $currentProperty["ID"] . "', " . $currentCatalog["BID"] . ", '" . $currentProperty["DataType"] . "', '" . $currentProperty["Multiple"] . "', '" . $DB->ForSql($currentProperty["Name"]) . "', '" . $DB->ForSql($currentProperty["DefaultValue"]) . "')";
                $DB->Query($strSql);
                $cmlLoadCnts["PROPERTY"]++;
            }
            break;
        case $nameUTF["PropertyVariant"]:
            if ($currentProperty) {
                $currentPropertyEnum = array();
                $currentPropertyEnum["ID"] = $attrs[$nameUTF["ID"]];
                $currentPropertyEnum["Name"] = $attrs[$nameUTF["Name"]];
                $currentPropertyEnum["Default"] = $currentProperty["DefaultValue"] == $currentPropertyEnum["ID"] ? "Y" : "N";
                $strSql = "INSERT INTO b_catalog_cml_property_var (XML_ID, CATALOG_ID, PROPERTY_XML_ID, NAME, DEFAULT_VALUE) " . "VALUES ('" . $currentPropertyEnum["ID"] . "', " . $currentCatalog["BID"] . ", '" . $currentProperty["ID"] . "', '" . $DB->ForSql($currentPropertyEnum["Name"]) . "', '" . $currentPropertyEnum["Default"] . "')";
                $DB->Query($strSql);
            }
            break;
        case $nameUTF["Category"]:
            if ($currentCatalog) {
                $currentCategory = array();
                if (in_array($nameUTF["ID"], array_keys($attrs))) {
                    $currentCategory["ID"] = $attrs[$nameUTF["ID"]];
                }
                if (in_array($nameUTF["Name"], array_keys($attrs))) {
                    $currentCategory["Name"] = $attrs[$nameUTF["Name"]];
                }
                if (in_array($nameUTF["ParentCategory"], array_keys($attrs))) {
                    $currentCategory["ParentCategory"] = $attrs[$nameUTF["ParentCategory"]];
                }
                $currentCategory["Code"] = false;
                if (true === $boolTranslitSection) {
                    $currentCategory["Code"] = CUtil::translit($currentCategory["Name"], 'ru', $arTranslitSection);
                }
                $strSql = "INSERT INTO b_catalog_cml_section (XML_ID, CATALOG_ID, PARENT_XML_ID, NAME, CODE) " . "VALUES ('" . $currentCategory["ID"] . "', " . $currentCatalog["BID"] . ", '" . $currentCategory["ParentCategory"] . "', '" . $DB->ForSql($currentCategory["Name"]) . "', '" . (false === $currentCategory["Code"] ? '' : $DB->ForSql($currentCategory["Code"])) . "')";
                $DB->Query($strSql);
                $cmlLoadCnts["SECTION"]++;
            }
            break;
        case $nameUTF["Product"]:
            if ($currentCatalog) {
                $currentProduct = array();
                $currentProduct["ID"] = $attrs[$nameUTF["ID"]];
                $currentProduct["Name"] = $attrs[$nameUTF["Name"]];
                $currentProduct["ParentCategory"] = $attrs[$nameUTF["ParentCategory"]];
                $currentProduct["Code"] = false;
                if (true === $boolTranslitElement) {
                    $currentProduct["Code"] = CUtil::translit($currentProduct["Name"], 'ru', $arTranslitElement);
                }
                $strSql = "INSERT INTO b_catalog_cml_product (XML_ID, CATALOG_ID, NAME, MODIFIED_BY, PARENT_CATEGORY, CODE) " . "VALUES ('" . $currentProduct["ID"] . "', " . $currentCatalog["BID"] . ", '" . $DB->ForSql($currentProduct["Name"]) . "', " . (IntVal($USER->GetID()) > 0 ? IntVal($USER->GetID()) : 1) . ", '" . $currentProduct["ParentCategory"] . "', '" . (false === $currentProduct["Code"] ? '' : $DB->ForSql($currentProduct["Code"])) . "')";
                $DB->Query($strSql);
                if (function_exists("catalog_1c_mutator_productT")) {
                    catalog_1c_mutator_productT($attrs);
                }
                $cmlLoadCnts["PRODUCT"]++;
                if (strlen($currentProduct["ParentCategory"]) > 0) {
                    $strSql = "INSERT INTO b_catalog_cml_product_cat (CATALOG_ID, PRODUCT_XML_ID, CATEGORY_XML_ID) " . "VALUES (" . $currentCatalog["BID"] . ", '" . $currentProduct["ID"] . "',  '" . $currentProduct["ParentCategory"] . "')";
                    $DB->Query($strSql);
                }
            }
            break;
        case $nameUTF["CategoryReference"]:
            if ($currentProduct) {
                $strSql = "INSERT INTO b_catalog_cml_product_cat (CATALOG_ID, PRODUCT_XML_ID, CATEGORY_XML_ID) " . "VALUES (" . $currentCatalog["BID"] . ", '" . $currentProduct["ID"] . "',  '" . $attrs[$nameUTF["IdInCatalog"]] . "')";
                $DB->Query($strSql);
            }
            break;
        case $nameUTF["PropertyValue"]:
            if ($currentProduct) {
                $propertyID = $attrs[$nameUTF["PropertyId"]];
                $propertyValue = $attrs[$nameUTF["Value"]];
                $strSql = "INSERT INTO b_catalog_cml_product_prop (CATALOG_ID, PRODUCT_XML_ID, PROPERTY_XML_ID, PROPERTY_VALUE, PROPERTY_VALUE_TEXT) " . "VALUES (" . $currentCatalog["BID"] . ", '" . $currentProduct["ID"] . "',  '" . $propertyID . "', '" . $DB->ForSql($propertyValue, 255) . "', '" . $DB->ForSql($propertyValue) . "')";
                $DB->Query($strSql);
            } elseif ($currentOffersList && !$currentOffer) {
                $priceType = $attrs[$nameUTF["Value"]];
                $currentOffersList["PRICE_TYPE"] = $priceType;
                $strSql = "INSERT INTO b_catalog_cml_oflist_prop (OFFER_LIST_XML_ID, PROPERTY_VALUE) " . "VALUES (" . $currentOffersList["ID"] . ", '" . $DB->ForSql($priceType, 255) . "')";
                $DB->Query($strSql);
            }
            break;
        case $nameUTF["OffersList"]:
            $currentOffersList = array();
            $currentOffersList["CatalogID"] = $attrs[$nameUTF["CatalogID"]];
            $currentOffersList["Currency"] = $arCMLCurrencies[$attrs[$nameUTF["Currency"]]];
            if (strlen($currentOffersList["Currency"]) <= 0) {
                $currentOffersList["Currency"] = "USD";
            }
            if (!array_key_exists($currentOffersList["CatalogID"], $arIBlockCache)) {
                $dbIBlockList = CIBlock::GetList(array(), array("XML_ID" => $currentOffersList["CatalogID"]));
                if ($arIBlock = $dbIBlockList->Fetch()) {
                    $arIBlockCache[$currentOffersList["CatalogID"]] = IntVal($arIBlock["ID"]);
                }
            }
            $strSql = "INSERT INTO b_catalog_cml_oflist(CATALOG_ID) " . "VALUES (" . $arIBlockCache[$currentOffersList["CatalogID"]] . ")";
            $DB->Query($strSql);
            $currentOffersList["ID"] = IntVal($DB->LastID());
            break;
        case $nameUTF["Offer"]:
            if ($currentOffersList) {
                $currentOffer = array();
                $currentOffer["ProductId"] = $attrs[$nameUTF["ProductId"]];
                $currentOffer["Price"] = DoubleVal(str_replace(",", ".", $attrs[$nameUTF["Price"]]));
                $currentOffer["Amount"] = IntVal($attrs[$nameUTF["Amount"]]);
                $currentOffer["Currency"] = $arCMLCurrencies[$attrs[$nameUTF["Currency"]]];
                if (strlen($currentOffer["Currency"]) <= 0) {
                    $currentOffer["Currency"] = $currentOffersList["Currency"];
                }
                $strSql = "INSERT INTO b_catalog_cml_offer (OFFER_LIST_XML_ID, PRODUCT_XML_ID, PRICE, AMOUNT, CURRENCY) " . "VALUES ('" . $currentOffersList["ID"] . "', '" . $currentOffer["ProductId"] . "', " . $currentOffer["Price"] . ", " . $currentOffer["Amount"] . ", '" . $currentOffer["Currency"] . "')";
                $DB->Query($strSql);
                $cmlLoadCnts["OFFER"]++;
            }
            break;
        case $nameUTF['CommerceInfo']:
            if (isset($attrs[$nameUTF['CommerceInfoVersion']])) {
                $strVersion = (string) $attrs[$nameUTF['CommerceInfoVersion']];
                if (version_compare($strVersion, '2.0') >= 0) {
                    $strImportErrorMessage .= GetMessage("CICML_INVALID_VERSION") . "<br>";
                }
                $currentCatalog = false;
                return false;
            }
            break;
        default:
            break;
    }
    return true;
}
				<td valign="top">
					<font class="text"><?php 
        echo GetMessage("CET_EXPORT_CATALOGS");
        ?>
<br><br></font>
					<?php 
        if (!isset($YANDEX_EXPORT) || !is_array($YANDEX_EXPORT)) {
            $YANDEX_EXPORT = array();
        }
        $boolAll = false;
        $intCountChecked = 0;
        $intCountAvailIBlock = 0;
        $arIBlockList = array();
        $db_res = CIBlock::GetList(array("IBLOCK_TYPE" => "ASC", "NAME" => "ASC"), array('CHECK_PERMISSIONS' => 'Y', 'MIN_PERMISSION' => 'W'));
        while ($res = $db_res->Fetch()) {
            if ($ar_res1 = CCatalog::GetByID($res["ID"])) {
                $arSiteList = array();
                $rsSites = CIBlock::GetSite($res["ID"]);
                while ($arSite = $rsSites->Fetch()) {
                    $arSiteList[] = $arSite["SITE_ID"];
                }
                $boolYandex = in_array($res['ID'], $YANDEX_EXPORT);
                $arIBlockList[] = array('ID' => $res['ID'], 'NAME' => $res['NAME'], 'IBLOCK_TYPE_ID' => $res['IBLOCK_TYPE_ID'], 'YANDEX_EXPORT' => $boolYandex, 'SITE_LIST' => '(' . implode(' ', $arSiteList) . ')');
                if ($boolYandex) {
                    $intCountChecked++;
                }
                $intCountAvailIBlock++;
            }
        }
        if ($intCountChecked == $intCountAvailIBlock) {
            $boolAll = true;
Example #19
0
				<tr><td colspan="2" valign="top"><?php 
                echo $dbItems->NavPrint(GetMessage("UNI_S_PRODUCTS"));
                ?>
</td></tr>
				<?php 
                while ($arItem = $dbItems->Fetch()) {
                    ?>
					<tr>
						<td width="0%" valign="top" align="center">
							<?php 
                    echo ShowImage($arItem["PREVIEW_PICTURE"], 100, 100, "border='0' alt='" . $arItem["NAME"] . "'", CIBlock::ReplaceDetailUrl($DETAIL_PAGE_TEMPLATE, $arItem, true));
                    ?>
						</td>
						<td width="100%">
							<?php 
                    if (CModule::IncludeModule("catalog") && CCatalog::GetByID($IBLOCK_ID)) {
                        ?>
							<div align="right">
								<table border="0" cellSpacing="1" width="150" cellPadding="0" style="border: 1px solid #C7DAE4" align="right">
									<tr>
										<td>
									<table border="0" class="tablebody" cellSpacing="0" width="100%" cellPadding="2">
										<?php 
                        $arProduct = GetCatalogProduct($arItem["ID"]);
                        $arPrice = GetCatalogProductPriceList($arItem["ID"], "SORT", "ASC");
                        //print_r($arPrice);
                        $bCanBuy = False;
                        // Let's find indexes of #1 and #2 price types
                        $indPT1 = -1;
                        $indPT2 = -1;
                        for ($ii = 0; $ii < count($arPrice); $ii++) {
            $tabControl->BeginCustomField("CATALOG", GetMessage("IBLOCK_TCATALOG"), true);
            include $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/catalog/admin/templates/product_edit.php";
            $tabControl->EndCustomField("CATALOG", "");
        }
        if ($bOffers && !$bPropertyAjax) {
            $tabControl->BeginNextFormTab();
            $tabControl->BeginCustomField('OFFERS', GetMessage("IBLOCK_EL_TAB_OFFERS"), false);
            ?>
<tr id="tr_OFFERS"><td colspan="2"><?php 
            define('B_ADMIN_SUBELEMENTS', 1);
            define('B_ADMIN_SUBELEMENTS_LIST', false);
            $strSubIBlockType = CIBlock::GetArrayByID($arMainCatalog['OFFERS_IBLOCK_ID'], 'IBLOCK_TYPE_ID');
            $arSubIBlockType = CIBlockType::GetByIDLang($strSubIBlockType, LANGUAGE_ID);
            $intSubIBlockID = $arMainCatalog['OFFERS_IBLOCK_ID'];
            $arSubIBlock = CIBlock::GetArrayByID($intSubIBlockID);
            $arSubCatalog = CCatalog::GetByID($arMainCatalog['OFFERS_IBLOCK_ID']);
            $arSubIBlock["SITE_ID"] = array();
            $rsSites = CIBlock::GetSite($intSubIBlockID);
            while ($arSite = $rsSites->Fetch()) {
                $arSubIBlock["SITE_ID"][] = $arSite["LID"];
            }
            $boolIncludeOffers = CIBlockRights::UserHasRightTo($intSubIBlockID, $intSubIBlockID, "iblock_admin_display");
            $boolSubCatalog = is_array($arSubCatalog) ? true : false;
            if (!($USER->CanDoOperation('catalog_read') || $USER->CanDoOperation('catalog_price'))) {
                $boolSubCatalog = false;
            }
            $boolSubWorkFlow = CModule::IncludeModule("workflow") && CIBlock::GetArrayByID($intSubIBlockID, "WORKFLOW") != "N";
            $boolSubBizproc = CModule::IncludeModule("bizproc") && CIBlock::GetArrayByID($intSubIBlockID, "BIZPROC") != "N";
            $intSubPropValue = 0 == $ID || $bCopy ? '-' . $TMP_ID : $ID;
            $strSubTMP_ID = $TMP_ID;
            $strSubElementAjaxPath = '/bitrix/admin/iblock_subelement_admin.php?WF=Y&IBLOCK_ID=' . $intSubIBlockID . '&type=' . urlencode($strSubIBlockType) . '&lang=' . LANGUAGE_ID . '&find_section_section=0&find_el_property_' . $arSubCatalog['SKU_PROPERTY_ID'] . '=' . (0 == $ID || $bCopy ? '-' . $TMP_ID : $ID) . '&TMP_ID=' . urlencode($strSubTMP_ID);
Example #21
0
	{
		$arResult["PATH"] = array();
		$rsPath = CIBlockSection::GetNavChain($arResult["IBLOCK_ID"], $arResult["ID"]);
		$rsPath->SetUrlTemplates("", $arParams["SECTION_URL"]);
		while($arPath = $rsPath->GetNext())
		{
			$arResult["PATH"][]=$arPath;
		}
	}

	$bIBlockCatalog = false;
	$arCatalog = false;
	$bCatalog = CModule::IncludeModule('catalog');
	if ($bCatalog)
	{
		$arCatalog = CCatalog::GetByID($arParams["IBLOCK_ID"]);
		if (!empty($arCatalog) && is_array($arCatalog))
			$bIBlockCatalog = true;
	}
	$arResult['CATALOG'] = $arCatalog;
	//This function returns array with prices description and access rights
	//in case catalog module n/a prices get values from element properties
	$arResult["PRICES"] = CIBlockPriceTools::GetCatalogPrices($arParams["IBLOCK_ID"], $arParams["PRICE_CODE"]);

	$arResult['CONVERT_CURRENCY'] = $arConvertParams;

	$arResult["PICTURE"] = CFile::GetFileArray($arResult["PICTURE"]);
	$arResult["DETAIL_PICTURE"] = CFile::GetFileArray($arResult["DETAIL_PICTURE"]);

	// list of the element fields that will be used in selection
	$arSelect = array(
</a>
	<?php 
    require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_admin.php";
    die;
}
$arSubIBlock["SITE_ID"] = array();
$rsSites = CIBlock::GetSite($intSubIBlockID);
while ($arSite = $rsSites->Fetch()) {
    $arSubIBlock["SITE_ID"][] = $arSite["LID"];
}
$boolSubWorkFlow = $boolSubBizproc && CIBlock::GetArrayByID($intSubIBlockID, "WORKFLOW") != "N";
$boolSubBizproc = $boolSubBizproc && CIBlock::GetArrayByID($intSubIBlockID, "BIZPROC") != "N";
$boolSubCatalog = false;
$bCatalog = CModule::IncludeModule("catalog");
if ($bCatalog) {
    $arSubCatalog = CCatalog::GetByID($arSubIBlock["ID"]);
    $boolSubCatalog = is_array($arSubCatalog) ? true : false;
    if (!$boolSubCatalog) {
        require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php";
        require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_admin.php";
        die;
    }
    if (!($USER->CanDoOperation('catalog_read') || $USER->CanDoOperation('catalog_price'))) {
        $boolSubCatalog = false;
    }
}
$intSubPropValue = intval($_REQUEST['find_el_property_' . $arSubCatalog['SKU_PROPERTY_ID']]);
if (0 >= $intSubPropValue) {
    if ('' == $strSubTMP_ID) {
        require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php";
        require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_admin.php";