Example #1
0
 function Init(&$next_step, $files_dir = false, $use_crc = true, $preview = false, $detail = false, $use_offers = false, $use_iblock_type_id = false, $table_name = "b_xml_tree")
 {
     $this->next_step =& $next_step;
     $this->files_dir = $files_dir;
     $this->use_offers = $use_offers;
     $this->use_iblock_type_id = $use_iblock_type_id;
     $this->use_crc = $use_crc;
     $this->_xml_file = new CIBlockXMLFile($table_name);
     if (!is_array($preview) && $preview) {
         $this->iblock_resize = true;
     }
     if (is_array($preview) && count($preview) == 2) {
         $this->preview = $preview;
     } else {
         $this->preview = false;
     }
     if (is_array($detail) && count($detail) == 2) {
         $this->detail = $detail;
     } else {
         $this->detail = false;
     }
     $this->bCatalog = CModule::IncludeModule('catalog');
     if ($this->bCatalog) {
         $catalogsIterator = \Bitrix\Catalog\CatalogIblockTable::getList(array('select' => array('IBLOCK_ID'), 'filter' => array('=IBLOCK_ID' => $this->next_step["IBLOCK_ID"])));
         if ($catalogData = $catalogsIterator->fetch()) {
             $this->isCatalogIblock = true;
         }
         unset($catalogData, $catalogsIterator);
     }
     $this->arProperties = array();
     $this->PROPERTY_MAP = array();
     if ($this->next_step["IBLOCK_ID"] > 0) {
         $obProperty = new CIBlockProperty();
         $rsProperties = $obProperty->GetList(array(), array("IBLOCK_ID" => $this->next_step["IBLOCK_ID"], "ACTIVE" => "Y"));
         while ($arProperty = $rsProperties->Fetch()) {
             $this->PROPERTY_MAP[$arProperty["XML_ID"]] = $arProperty["ID"];
             $this->arProperties[$arProperty["ID"]] = $arProperty;
         }
     }
     if ($this->next_step["lang"]) {
         $this->mess = IncludeModuleLangFile(__FILE__, $this->next_step["lang"], true);
     }
     $this->arTempFiles = array();
     $this->arLinkedProps = false;
 }
Example #2
0
 /**
  * Returns product separate by iblocks.
  *
  * @param array $productList		Product id list.
  * @return array
  */
 protected static function getProductIblocks($productList)
 {
     $result = array('iblockElement' => array(), 'iblockList' => array(), 'skuIblockList' => array());
     if (empty($productList)) {
         return $result;
     }
     $elementIterator = Iblock\ElementTable::getList(array('select' => array('ID', 'IBLOCK_ID'), 'filter' => array('@ID' => $productList)));
     while ($element = $elementIterator->fetch()) {
         $element['ID'] = (int) $element['ID'];
         $element['IBLOCK_ID'] = (int) $element['IBLOCK_ID'];
         if (!isset($result['iblockElement'][$element['IBLOCK_ID']])) {
             $result['iblockElement'][$element['IBLOCK_ID']] = array();
         }
         $result['iblockElement'][$element['IBLOCK_ID']][] = $element['ID'];
     }
     unset($element, $elementIterator);
     if (!empty($result['iblockElement'])) {
         $result['iblockList'] = array_keys($result['iblockElement']);
         $skuIterator = Catalog\CatalogIblockTable::getList(array('select' => array('IBLOCK_ID', 'PRODUCT_IBLOCK_ID', 'SKU_PROPERTY_ID'), 'filter' => array('@IBLOCK_ID' => $result['iblockList'], '!=PRODUCT_IBLOCK_ID' => 0)));
         while ($sku = $skuIterator->fetch()) {
             $sku['IBLOCK_ID'] = (int) $sku['IBLOCK_ID'];
             $sku['PRODUCT_IBLOCK_ID'] = (int) $sku['PRODUCT_IBLOCK_ID'];
             $sku['SKU_PROPERTY_ID'] = (int) $sku['SKU_PROPERTY_ID'];
             $result['skuIblockList'][$sku['IBLOCK_ID']] = $sku;
         }
         unset($sku, $skuIterator);
     }
     return $result;
 }
Example #3
0
 protected function getServiceRequestParamsByType($type)
 {
     $a = array('uid' => $_COOKIE['BX_USER_ID'], 'aid' => \Bitrix\Main\Analytics\Counter::getAccountId(), 'count' => $this->arParams['PAGE_ELEMENT_COUNT'] + 10);
     // random choices
     if ($type == 'any_similar') {
         $possible = array('similar_sell', 'similar_view', 'similar');
         $type = $possible[array_rand($possible)];
     } elseif ($type == 'any_personal') {
         $possible = array('bestsell', 'personal');
         $type = $possible[array_rand($possible)];
     } elseif ($type == 'any') {
         $possible = array('similar_sell', 'similar_view', 'similar', 'bestsell', 'personal');
         $type = $possible[array_rand($possible)];
     }
     // configure
     if ($type == 'bestsell') {
         $a['op'] = 'sim_domain_items';
         $a['type'] = 'order';
         $a['domain'] = Bitrix\Main\Context::getCurrent()->getServer()->getHttpHost();
     } elseif ($type == 'personal') {
         $a['op'] = 'recommend';
     } elseif ($type == 'similar_sell') {
         $a['op'] = 'simitems';
         $a['eid'] = $this->arParams['ID'];
         $a['type'] = 'order';
     } elseif ($type == 'similar_view') {
         $a['op'] = 'simitems';
         $a['eid'] = $this->arParams['ID'];
         $a['type'] = 'view';
     } elseif ($type == 'similar') {
         $a['op'] = 'simitems';
         $a['eid'] = $this->arParams['ID'];
     } else {
         // unkonwn type
     }
     // get iblocks
     $iblocks = array();
     if (!empty($this->arParams['IBLOCK_ID'])) {
         $iblocks = array($this->arParams['IBLOCK_ID']);
     } else {
         $iblockList = array();
         /* catalog */
         $iblockIterator = \Bitrix\Catalog\CatalogIblockTable::getList(array('select' => array('IBLOCK_ID', 'PRODUCT_IBLOCK_ID')));
         while ($iblock = $iblockIterator->fetch()) {
             $iblock['IBLOCK_ID'] = (int) $iblock['IBLOCK_ID'];
             $iblock['PRODUCT_IBLOCK_ID'] = (int) $iblock['PRODUCT_IBLOCK_ID'];
             $iblockList[$iblock['IBLOCK_ID']] = $iblock['IBLOCK_ID'];
             if ($iblock['PRODUCT_IBLOCK_ID'] > 0) {
                 $iblockList[$iblock['PRODUCT_IBLOCK_ID']] = $iblock['PRODUCT_IBLOCK_ID'];
             }
         }
         /* iblock */
         $iblockIterator = \Bitrix\Iblock\IblockSiteTable::getList(array('select' => array('IBLOCK_ID'), 'filter' => array('@IBLOCK_ID' => $iblockList, '=SITE_ID' => $this->getSiteId())));
         while ($iblock = $iblockIterator->fetch()) {
             $iblocks[] = $iblock['IBLOCK_ID'];
         }
     }
     $a['ib'] = join('.', $iblocks);
     return $a;
 }
Example #4
0
function getAdditionalColumns()
{
	static $propList = null;

	if ($propList === null && Loader::includeModule('catalog'))
	{
		$arIblockIDs = array();
		$arIblockNames = array();
		$catalogIterator = Catalog\CatalogIblockTable::getList(array(
			'select' => array('IBLOCK_ID', 'NAME' => 'IBLOCK.NAME'),
			'order' => array('IBLOCK_ID' => 'ASC')
		));
		while ($catalog = $catalogIterator->fetch())
		{
			$catalog['IBLOCK_ID'] = (int)$catalog['IBLOCK_ID'];
			$arIblockIDs[] = $catalog['IBLOCK_ID'];
			$arIblockNames[$catalog['IBLOCK_ID']] = $catalog['NAME'];
		}
		unset($catalog, $catalogIterator);

		if (!empty($arIblockIDs))
		{
			$arProps = array();
			$propertyIterator = Iblock\PropertyTable::getList(array(
				'select' => array('ID', 'CODE', 'NAME', 'IBLOCK_ID'),
				'filter' => array('@IBLOCK_ID' => $arIblockIDs, '=ACTIVE' => 'Y'),
				'order' => array('IBLOCK_ID' => 'ASC', 'SORT' => 'ASC', 'ID' => 'ASC')
			));
			while ($property = $propertyIterator->fetch())
			{
				$property['ID'] = (int)$property['ID'];
				$property['IBLOCK_ID'] = (int)$property['IBLOCK_ID'];
				$property['CODE'] = (string)$property['CODE'];
				if ($property['CODE'] == '')
					$property['CODE'] = $property['ID'];
				if (!isset($arProps[$property['CODE']]))
				{
					$arProps[$property['CODE']] = array(
						'CODE' => $property['CODE'],
						'TITLE' => $property['NAME'].' ['.$property['CODE'].']',
						'ID' => array($property['ID']),
						'IBLOCK_ID' => array($property['IBLOCK_ID'] => $property['IBLOCK_ID']),
						'IBLOCK_TITLE' => array($property['IBLOCK_ID'] => $arIblockNames[$property['IBLOCK_ID']]),
						'COUNT' => 1
					);
				}
				else
				{
					$arProps[$property['CODE']]['ID'][] = $property['ID'];
					$arProps[$property['CODE']]['IBLOCK_ID'][$property['IBLOCK_ID']] = $property['IBLOCK_ID'];
					if ($arProps[$property['CODE']]['COUNT'] < 5)
						$arProps[$property['CODE']]['IBLOCK_TITLE'][$property['IBLOCK_ID']] = $arIblockNames[$property['IBLOCK_ID']];
					$arProps[$property['CODE']]['COUNT']++;
				}
			}
			unset($property, $propertyIterator, $arIblockNames, $arIblockIDs);

			$propList = array();
			foreach ($arProps as &$property)
			{
				$iblockList = '';
				if ($property['COUNT'] > 1)
				{
					$iblockList = ($property['COUNT'] > 5 ? ' ( ... )' : ' ('.implode(', ', $property['IBLOCK_TITLE']).')');
				}
				$propList['PROPERTY_'.$property['CODE']] = $property['TITLE'].$iblockList;
			}
			unset($property, $arProps);
		}
	}

	return (empty($propList) ? array() : $propList);
}
Example #5
0
 /**
  * @param array $arParams
  * @return array|false
  */
 public static function GetProductData($arParams)
 {
     $adminSection = defined('ADMIN_SECTION') && ADMIN_SECTION === true;
     if (!isset($arParams['QUANTITY']) || (double) $arParams['QUANTITY'] <= 0) {
         $arParams['QUANTITY'] = 0;
     }
     $arParams['RENEWAL'] = isset($arParams['RENEWAL']) && $arParams['RENEWAL'] == 'Y' ? 'Y' : 'N';
     $arParams['CHECK_QUANTITY'] = isset($arParams['CHECK_QUANTITY']) && $arParams["CHECK_QUANTITY"] == 'N' ? 'N' : 'Y';
     $arParams['CHECK_PRICE'] = isset($arParams['CHECK_PRICE']) && $arParams['CHECK_PRICE'] == 'N' ? 'N' : 'Y';
     $arParams['CHECK_COUPONS'] = isset($arParams['CHECK_COUPONS']) && $arParams['CHECK_COUPONS'] == 'N' ? 'N' : 'Y';
     $arParams['CHECK_DISCOUNT'] = isset($arParams['CHECK_DISCOUNT']) && $arParams['CHECK_DISCOUNT'] == 'N' ? 'N' : 'Y';
     $arParams['SELECT_QUANTITY_TRACE'] = isset($arParams['SELECT_QUANTITY_TRACE']) && $arParams['SELECT_QUANTITY_TRACE'] == 'Y' ? 'Y' : 'N';
     $arParams['BASKET_ID'] = (string) (isset($arParams['BASKET_ID']) ? $arParams['BASKET_ID'] : '0');
     $arParams['USER_ID'] = isset($arParams['USER_ID']) ? (int) $arParams['USER_ID'] : 0;
     if ($arParams['USER_ID'] < 0) {
         $arParams['USER_ID'] = 0;
     }
     $arParams['SITE_ID'] = isset($arParams['SITE_ID']) ? $arParams['SITE_ID'] : false;
     $strSiteID = $arParams['SITE_ID'];
     $arParams['CURRENCY'] = isset($arParams['CURRENCY']) ? Currency\CurrencyManager::checkCurrencyID($arParams['CURRENCY']) : false;
     if ($arParams['CURRENCY'] === false) {
         $arParams['CURRENCY'] = CSaleLang::GetLangCurrency($strSiteID ? $strSiteID : SITE_ID);
     }
     $productID = (int) $arParams['PRODUCT_ID'];
     $quantity = (double) $arParams['QUANTITY'];
     $intUserID = (int) $arParams['USER_ID'];
     global $USER, $APPLICATION;
     $arResult = array();
     if ($adminSection) {
         if (!($userGroups = static::getHitCache('USER_GROUPS', $intUserID))) {
             $userGroups = self::getUserGroups($intUserID);
             static::setHitCache('USER_GROUPS', $intUserID, $userGroups);
         }
         if (empty($userGroups)) {
             return $arResult;
         }
         if (!($arProduct = static::getHitCache('IBLOCK_ELEMENT_PERM_N', $productID))) {
             $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 ($arProduct = $dbIBlockElement->GetNext()) {
                 static::setHitCache('IBLOCK_ELEMENT_PERM_N', $productID, $arProduct);
             }
             unset($dbIBlockElement);
         }
         if (empty($arProduct) || !is_array($arProduct)) {
             return $arResult;
         }
         if (!($iblockRights = static::getHitCache('IBLOCK_RIGHT', $arProduct['IBLOCK_ID']))) {
             if ($iblockRights = CIBlock::GetArrayByID($arProduct['IBLOCK_ID'], 'RIGHTS_MODE')) {
                 static::setHitCache('IBLOCK_RIGHT', $arProduct['IBLOCK_ID'], $iblockRights);
             }
         }
         $extRights = $iblockRights == 'E';
         if ($intUserID == 0) {
             if ($extRights) {
                 $elementRights = new CIBlockElementRights($arProduct['IBLOCK_ID'], $arProduct['ID']);
                 $readList = $elementRights->GetRights(array('operations' => array('element_read')));
                 $disable = true;
                 if (!empty($readList) && is_array($readList)) {
                     foreach ($readList as &$row) {
                         if ($row['GROUP_CODE'] == 'G2') {
                             $disable = false;
                             break;
                         }
                     }
                     unset($row);
                 }
                 unset($readList, $elementRights);
                 if ($disable) {
                     return $arResult;
                 }
                 unset($disable);
             } else {
                 $groupRights = CIBlock::GetGroupPermissions($arProduct['IBLOCK_ID']);
                 if (empty($groupRights) || !isset($groupRights[2]) || $groupRights[2] < 'R') {
                     return $arResult;
                 }
                 unset($groupRights);
             }
         } else {
             if ($extRights) {
                 $proxyUserPermissionKey = $productID . "|" . $intUserID;
                 if (!($arUserRights = static::getHitCache('USER_RIGHT', $proxyUserPermissionKey))) {
                     if ($arUserRights = CIBlockElementRights::GetUserOperations($productID, $intUserID)) {
                         static::setHitCache('USER_RIGHT', $proxyUserPermissionKey, $arUserRights);
                     }
                 }
                 if (empty($arUserRights) || !isset($arUserRights['element_read'])) {
                     return $arResult;
                 }
                 unset($arUserRights);
             } else {
                 static $permissions = array();
                 if (empty($permissions[$arProduct['IBLOCK_ID'] . "_" . $intUserID])) {
                     $permissions[$arProduct['IBLOCK_ID'] . "_" . $intUserID] = CIBlock::GetPermission($arProduct['IBLOCK_ID'], $intUserID);
                 }
                 if ($permissions < 'R') {
                     return $arResult;
                 }
             }
         }
         unset($extRights);
     } else {
         $userGroups = $USER->GetUserGroupArray();
         if (!($arProduct = static::getHitCache('IBLOCK_ELEMENT_PERM_Y', $productID))) {
             $dbIBlockElement = CIBlockElement::GetList(array(), array('ID' => $productID, 'ACTIVE' => 'Y', 'ACTIVE_DATE' => 'Y', 'CHECK_PERMISSIONS' => 'Y', 'MIN_PERMISSION' => 'R'), false, false, array('ID', 'IBLOCK_ID', 'NAME', 'DETAIL_PAGE_URL'));
             if ($arProduct = $dbIBlockElement->GetNext()) {
                 static::setHitCache('IBLOCK_ELEMENT_PERM_Y', $productID, $arProduct);
             }
             unset($dbIBlockElement);
         }
         if (empty($arProduct) || !is_array($arProduct)) {
             return $arResult;
         }
     }
     if (!isset(self::$catalogList[$arProduct['IBLOCK_ID']])) {
         self::$catalogList[$arProduct['IBLOCK_ID']] = Catalog\CatalogIblockTable::getList(array('select' => array('IBLOCK_ID', 'SUBSCRIPTION'), 'filter' => array('=IBLOCK_ID' => $arProduct['IBLOCK_ID'])))->fetch();
     }
     if (empty(self::$catalogList[$arProduct['IBLOCK_ID']]) || !is_array(self::$catalogList[$arProduct['IBLOCK_ID']])) {
         return $arResult;
     }
     if (self::$catalogList[$arProduct['IBLOCK_ID']]['SUBSCRIPTION'] == 'Y') {
         $quantity = 1;
     }
     if (!($arCatalogProduct = static::getHitCache('CATALOG_PRODUCT', $productID))) {
         $rsProducts = CCatalogProduct::GetList(array(), array('ID' => $productID), false, false, array('ID', 'CAN_BUY_ZERO', 'QUANTITY_TRACE', 'QUANTITY', 'WEIGHT', 'WIDTH', 'HEIGHT', 'LENGTH', 'BARCODE_MULTI', 'TYPE'));
         if ($arCatalogProduct = $rsProducts->Fetch()) {
             static::setHitCache('CATALOG_PRODUCT', $productID, $arCatalogProduct);
         }
         unset($rsProducts);
     }
     if (!empty($arCatalogProduct) && is_array($arCatalogProduct)) {
         $dblQuantity = doubleval($arCatalogProduct["QUANTITY"]);
         $boolQuantity = 'Y' != $arCatalogProduct["CAN_BUY_ZERO"] && 'Y' == $arCatalogProduct["QUANTITY_TRACE"];
         if ($arParams["CHECK_QUANTITY"] == "Y" && $boolQuantity && 0 >= $dblQuantity) {
             $APPLICATION->ThrowException(Loc::getMessage("CATALOG_NO_QUANTITY_PRODUCT", array("#NAME#" => htmlspecialcharsbx($arProduct["~NAME"]))), "CATALOG_NO_QUANTITY_PRODUCT");
             return $arResult;
         }
     } else {
         $APPLICATION->ThrowException(Loc::getMessage("CATALOG_ERR_NO_PRODUCT"), "CATALOG_NO_QUANTITY_PRODUCT");
         return $arResult;
     }
     if ($arParams["CHECK_PRICE"] == "Y") {
         $productHash = array('MODULE' => 'catalog', 'PRODUCT_ID' => $productID, 'BASKET_ID' => $arParams['BASKET_ID']);
         $arCoupons = array();
         if ($arParams['CHECK_COUPONS'] == 'Y') {
             $arCoupons = DiscountCouponsManager::getForApply(array(), $productHash, true);
             if (!empty($arCoupons)) {
                 $arCoupons = array_keys($arCoupons);
             }
         }
         if ($adminSection) {
             if ($intUserID > 0) {
                 CCatalogDiscountSave::SetDiscountUserID($intUserID);
             } else {
                 CCatalogDiscountSave::Disable();
             }
         }
         $currentVatMode = CCatalogProduct::getPriceVatIncludeMode();
         $currentUseDiscount = CCatalogProduct::getUseDiscount();
         CCatalogProduct::setUseDiscount($arParams['CHECK_DISCOUNT'] == 'Y');
         CCatalogProduct::setPriceVatIncludeMode(true);
         CCatalogProduct::setUsedCurrency($arParams['CURRENCY']);
         $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, $userGroups, $arParams['RENEWAL'], array(), $adminSection ? $strSiteID : false, $arCoupons);
         if (empty($arPrice)) {
             if ($nearestQuantity = CCatalogProduct::GetNearestQuantityPrice($productID, $quantity, $userGroups)) {
                 $quantity = $nearestQuantity;
                 $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, $userGroups, $arParams['RENEWAL'], array(), $adminSection ? $strSiteID : false, $arCoupons);
             }
         }
         CCatalogProduct::clearUsedCurrency();
         CCatalogProduct::setPriceVatIncludeMode($currentVatMode);
         CCatalogProduct::setUseDiscount($currentUseDiscount);
         unset($userGroups, $currentUseDiscount, $currentVatMode);
         if ($adminSection) {
             if ($intUserID > 0) {
                 CCatalogDiscountSave::ClearDiscountUserID();
             } else {
                 CCatalogDiscountSave::Enable();
             }
         }
         if (empty($arPrice)) {
             return $arResult;
         }
         $arDiscountList = array();
         if (empty($arPrice['DISCOUNT_LIST']) && !empty($arPrice['DISCOUNT']) && is_array($arPrice['DISCOUNT'])) {
             $arPrice['DISCOUNT_LIST'] = array($arPrice['DISCOUNT']);
         }
         if (!empty($arPrice['DISCOUNT_LIST'])) {
             $appliedCoupons = array();
             foreach ($arPrice['DISCOUNT_LIST'] as &$arOneDiscount) {
                 $arOneList = array('ID' => $arOneDiscount['ID'], 'NAME' => $arOneDiscount['NAME'], 'COUPON' => '', 'COUPON_TYPE' => '', 'USE_COUPONS' => isset($arOneDiscount['USE_COUPONS']) ? $arOneDiscount['USE_COUPONS'] : 'N', 'MODULE_ID' => isset($oneDiscount['MODULE_ID']) ? $oneDiscount['MODULE_ID'] : 'catalog', 'TYPE' => $arOneDiscount['TYPE'], 'VALUE' => $arOneDiscount['VALUE'], 'VALUE_TYPE' => $arOneDiscount['VALUE_TYPE'], 'MAX_VALUE' => $arOneDiscount['VALUE_TYPE'] == Catalog\DiscountTable::VALUE_TYPE_PERCENT ? $arOneDiscount['MAX_DISCOUNT'] : 0, 'CURRENCY' => $arOneDiscount['CURRENCY'], 'HANDLERS' => isset($arOneDiscount['HANDLERS']) ? $arOneDiscount['HANDLERS'] : array());
                 if (!empty($arOneDiscount['COUPON'])) {
                     $arOneList['USE_COUPONS'] = 'Y';
                     $arOneList['COUPON'] = $arOneDiscount['COUPON'];
                     $arOneList['COUPON_TYPE'] = $arOneDiscount['COUPON_ONE_TIME'];
                     $appliedCoupons[] = $arOneDiscount['COUPON'];
                 }
                 $arDiscountList[] = $arOneList;
             }
             unset($arOneList, $arOneDiscount);
             if (!empty($appliedCoupons)) {
                 $resultApply = DiscountCouponsManager::setApplyByProduct($productHash, $appliedCoupons);
             }
             unset($resultApply, $appliedCoupons);
         }
         if (empty($arPrice['PRICE']['CATALOG_GROUP_NAME'])) {
             if (!empty($arPrice['PRICE']['CATALOG_GROUP_ID'])) {
                 $priceName = self::getPriceTitle($arPrice['PRICE']['CATALOG_GROUP_ID']);
                 if ($priceName != '') {
                     $arPrice['PRICE']['CATALOG_GROUP_NAME'] = $priceName;
                 }
                 unset($priceName);
             }
         }
     } else {
         $vatRate = 0.0;
         if (!($arVAT = static::getHitCache('VAT_INFO', $productID))) {
             $rsVAT = CCatalogProduct::GetVATInfo($productID);
             if ($arVAT = $rsVAT->Fetch()) {
                 static::setHitCache('VAT_INFO', $productID, $arVAT);
             }
             unset($rsVAT);
         }
         if (!empty($arVAT) && is_array($arVAT)) {
             $vatRate = (double) $arVAT['RATE'] * 0.01;
         }
     }
     $arResult = array("NAME" => $arProduct["~NAME"], "CAN_BUY" => "Y", "DETAIL_PAGE_URL" => $arProduct['~DETAIL_PAGE_URL'], "BARCODE_MULTI" => $arCatalogProduct["BARCODE_MULTI"], "WEIGHT" => (double) $arCatalogProduct['WEIGHT'], "DIMENSIONS" => serialize(array("WIDTH" => $arCatalogProduct["WIDTH"], "HEIGHT" => $arCatalogProduct["HEIGHT"], "LENGTH" => $arCatalogProduct["LENGTH"])), "TYPE" => $arCatalogProduct["TYPE"] == CCatalogProduct::TYPE_SET ? CCatalogProductSet::TYPE_SET : null);
     if ($arParams['SELECT_QUANTITY_TRACE'] == "Y") {
         $arResult["QUANTITY_TRACE"] = $arCatalogProduct["QUANTITY_TRACE"];
     }
     if ($arParams["CHECK_QUANTITY"] == "Y") {
         $arResult["QUANTITY"] = $boolQuantity && $dblQuantity < $quantity ? $dblQuantity : $quantity;
     } else {
         $arResult["QUANTITY"] = $arParams["QUANTITY"];
     }
     if ($arParams["CHECK_QUANTITY"] == "Y" && $boolQuantity && $dblQuantity < $quantity) {
         $APPLICATION->ThrowException(Loc::getMessage("CATALOG_QUANTITY_NOT_ENOGH", array("#NAME#" => htmlspecialcharsbx($arProduct["~NAME"]), "#CATALOG_QUANTITY#" => $arCatalogProduct["QUANTITY"], "#QUANTITY#" => $quantity)), "CATALOG_QUANTITY_NOT_ENOGH");
     }
     if ($arParams['CHECK_PRICE'] == 'Y') {
         $arResult['PRODUCT_PRICE_ID'] = $arPrice['PRICE']['ID'];
         $arResult['NOTES'] = $arPrice['PRICE']['CATALOG_GROUP_NAME'];
         $arResult['VAT_RATE'] = $arPrice['PRICE']['VAT_RATE'];
         $arResult['DISCOUNT_NAME'] = '';
         $arResult['DISCOUNT_COUPON'] = '';
         $arResult['DISCOUNT_LIST'] = array();
         if (empty($arPrice['RESULT_PRICE']) || !is_array($arPrice['RESULT_PRICE'])) {
             $arPrice['RESULT_PRICE'] = CCatalogDiscount::calculateDiscountList($arPrice['PRICE'], $arParams['CURRENCY'], $arDiscountList, true);
         }
         $arResult['BASE_PRICE'] = $arPrice['RESULT_PRICE']['BASE_PRICE'];
         $arResult['PRICE'] = $arPrice['RESULT_PRICE']['DISCOUNT_PRICE'];
         $arResult['CURRENCY'] = $arPrice['RESULT_PRICE']['CURRENCY'];
         $arResult['DISCOUNT_PRICE'] = $arPrice['RESULT_PRICE']['DISCOUNT'];
         if (isset($arPrice['RESULT_PRICE']['PERCENT'])) {
             $arResult['DISCOUNT_VALUE'] = $arPrice['RESULT_PRICE']['PERCENT'] > 0 ? $arPrice['RESULT_PRICE']['PERCENT'] . '%' : 0;
         } else {
             $arResult['DISCOUNT_VALUE'] = $arPrice['RESULT_PRICE']['DISCOUNT_VALUE'];
         }
         if (!empty($arDiscountList)) {
             $arResult['DISCOUNT_LIST'] = $arDiscountList;
         }
         if (!empty($arPrice['DISCOUNT'])) {
             $arResult['DISCOUNT_NAME'] = '[' . $arPrice['DISCOUNT']['ID'] . '] ' . $arPrice['DISCOUNT']['NAME'];
             if (!empty($arPrice['DISCOUNT']['COUPON'])) {
                 $arResult['DISCOUNT_COUPON'] = $arPrice['DISCOUNT']['COUPON'];
             }
             if (empty($arResult['DISCOUNT_LIST'])) {
                 $arResult['DISCOUNT_LIST'] = array($arPrice['DISCOUNT']);
             }
         }
     } else {
         $arResult['VAT_RATE'] = $vatRate;
     }
     $arResult["VAT_INCLUDED"] = "Y";
     return $arResult;
 }
Example #6
0
     if (!isset($arIBlockSitesList[$arIBlock['ID']])) {
         $arLIDList = array();
         $arWithLinks = array();
         $arWithoutLinks = array();
         $rsIBlockSites = CIBlock::GetSite($arIBlock['ID']);
         while ($arIBlockSite = $rsIBlockSites->Fetch()) {
             $arLIDList[] = $arIBlockSite['LID'];
             $arWithLinks[] = '<a href="/bitrix/admin/site_edit.php?LID=' . urlencode($arIBlockSite['LID']) . '&lang=' . LANGUAGE_ID . '" title="' . Loc::getMessage("CO_SITE_ALT") . '">' . htmlspecialcharsbx($arIBlockSite["LID"]) . '</a>';
             $arWithoutLinks[] = htmlspecialcharsbx($arIBlockSite['LID']);
         }
         $arIBlockSitesList[$arIBlock['ID']] = array('SITE_ID' => $arLIDList, 'WITH_LINKS' => implode('&nbsp;', $arWithLinks), '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', 'IS_CONTENT' => 'N', 'YANDEX_EXPORT' => 'N', 'VAT_ID' => 0, 'PRODUCT_IBLOCK_ID' => 0, 'SKU_PROPERTY_ID' => 0, 'OFFERS_IBLOCK_ID' => 0, 'IS_OFFERS' => 'N', 'OFFERS_PROPERTY_ID' => 0);
     $arIBlockFullInfo[$arIBlock['ID']] = $arIBlockItem;
 }
 $catalogIterator = Catalog\CatalogIblockTable::getList(array('select' => array('IBLOCK_ID', 'PRODUCT_IBLOCK_ID', 'SKU_PROPERTY_ID', 'SUBSCRIPTION', 'YANDEX_EXPORT', 'VAT_ID')));
 while ($arOneCatalog = $catalogIterator->fetch()) {
     $arOneCatalog['IBLOCK_ID'] = (int) $arOneCatalog['IBLOCK_ID'];
     $arOneCatalog['VAT_ID'] = (int) $arOneCatalog['VAT_ID'];
     $arOneCatalog['PRODUCT_IBLOCK_ID'] = (int) $arOneCatalog['PRODUCT_IBLOCK_ID'];
     $arOneCatalog['SKU_PROPERTY_ID'] = (int) $arOneCatalog['SKU_PROPERTY_ID'];
     if (!CBXFeatures::IsFeatureEnabled('SaleRecurring') && 'Y' == $arOneCatalog['SUBSCRIPTION']) {
         $arRecurring[] = '[' . $arIBlockItem['ID'] . '] ' . $arIBlockItem['NAME'];
         $arRecurringKey[$arIBlockItem['ID']] = true;
     }
     $arIBlock = $arIBlockFullInfo[$arOneCatalog['IBLOCK_ID']];
     $arIBlock['IS_CATALOG'] = 'Y';
     $arIBlock['IS_CONTENT'] = CBXFeatures::IsFeatureEnabled('SaleRecurring') ? $arOneCatalog['SUBSCRIPTION'] : 'N';
     $arIBlock['YANDEX_EXPORT'] = $arOneCatalog['YANDEX_EXPORT'];
     $arIBlock['VAT_ID'] = $arOneCatalog['VAT_ID'];
     $arIBlock['PRODUCT_IBLOCK_ID'] = $arOneCatalog['PRODUCT_IBLOCK_ID'];
Example #7
0
require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/iblock/prolog.php";
IncludeModuleLangFile(__FILE__);
$IBLOCK_ID = isset($_GET['IBLOCK_ID']) ? (int) $_GET['IBLOCK_ID'] : 0;
if (!CIBlockRights::UserHasRightTo($IBLOCK_ID, $IBLOCK_ID, "iblock_edit")) {
    $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));
}
$max_execution_time = isset($_REQUEST['max_execution_time']) ? (int) $_REQUEST['max_execution_time'] : 0;
if ($max_execution_time <= 0) {
    $max_execution_time = 20;
}
$res = false;
$iblockDropDown = array();
$iblockFilter = array('=PROPERTY_INDEX' => 'I');
if (Loader::includeModule('catalog')) {
    $OfferIblocks = array();
    $offersIterator = \Bitrix\Catalog\CatalogIblockTable::getList(array('select' => array('IBLOCK_ID'), 'filter' => array('!PRODUCT_IBLOCK_ID' => 0)));
    while ($offer = $offersIterator->fetch()) {
        $OfferIblocks[] = (int) $offer['IBLOCK_ID'];
    }
    if (!empty($OfferIblocks)) {
        unset($offer);
        $iblockFilter['!ID'] = $OfferIblocks;
    }
    unset($offersIterator, $OfferIblocks);
}
$iblockList = \Bitrix\Iblock\IblockTable::getList(array('select' => array('ID', 'NAME', 'ACTIVE'), 'filter' => $iblockFilter, 'order' => array('ID' => 'asc', 'NAME' => 'asc')));
while ($iblockInfo = $iblockList->fetch()) {
    $iblockDropDown[$iblockInfo['ID']] = '[' . $iblockInfo['ID'] . '] ' . $iblockInfo['NAME'] . ($iblockInfo['ACTIVE'] == 'N' ? ' (' . GetMessage('IBLOCK_REINDEX_DEACTIVE') . ')' : '');
}
unset($iblockInfo, $iblockList);
if ($_SERVER["REQUEST_METHOD"] == "POST" && $_REQUEST["Reindex"] == "Y") {
Example #8
0
 protected function getIblockList()
 {
     if ($this->iblockList === null) {
         $this->iblockList = array();
         $ids = array();
         $filter = array();
         if ($this->getSubscription()) {
             $filter['=SUBSCRIPTION'] = 'Y';
         }
         $showOffersIBlock = \Bitrix\Main\Config\Option::get('catalog', 'product_form_show_offers_iblock');
         $catalogIterator = Catalog\CatalogIblockTable::getList(array('select' => array('IBLOCK_ID', 'PRODUCT_IBLOCK_ID', 'SKU_PROPERTY_ID', 'SUBSCRIPTION'), 'filter' => $filter));
         while ($catalog = $catalogIterator->fetch()) {
             $catalog['IBLOCK_ID'] = (int) $catalog['IBLOCK_ID'];
             $catalog['PRODUCT_IBLOCK_ID'] = (int) $catalog['PRODUCT_IBLOCK_ID'];
             $catalog['SKU_PROPERTY_ID'] = (int) $catalog['SKU_PROPERTY_ID'];
             if ($catalog['SUBSCRIPTION'] == 'N' && $catalog['PRODUCT_IBLOCK_ID'] > 0) {
                 $ids[$catalog['PRODUCT_IBLOCK_ID']] = $catalog['PRODUCT_IBLOCK_ID'];
                 if ($showOffersIBlock == 'Y') {
                     $ids[$catalog['IBLOCK_ID']] = $catalog['IBLOCK_ID'];
                 }
             } else {
                 $ids[$catalog['IBLOCK_ID']] = $catalog['IBLOCK_ID'];
             }
         }
         unset($catalog, $catalogIterator);
         if ($ids) {
             $filter = array("ID" => $ids, 'ACTIVE' => 'Y');
             if ($this->checkPermissions) {
                 $filter['MIN_PERMISSION'] = 'R';
             }
             if ($this->getLid()) {
                 $filter["LID"] = $this->getLid();
             }
             $res = \CIBlock::GetList(array("ID" => "ASC"), $filter, false);
             while ($row = $res->Fetch()) {
                 $this->iblockList[$row['ID']] = $row;
             }
             if (sizeof($ids) > 1) {
                 $siteTable = new \Bitrix\Iblock\IblockSiteTable();
                 $siteResult = $siteTable->getList(array('select' => array('IBLOCK_ID', 'SITE.NAME'), 'filter' => array('IBLOCK_ID' => $ids)));
                 while ($row = $siteResult->fetch()) {
                     if (isset($this->iblockList[$row['IBLOCK_ID']])) {
                         $this->iblockList[$row['IBLOCK_ID']]['SITE_NAME'] = $row['IBLOCK_IBLOCK_SITE_SITE_NAME'];
                     }
                 }
             }
         }
     }
     return $this->iblockList;
 }
<?php

if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) {
    die;
}
use Bitrix\Main\Loader;
use Bitrix\Catalog;
use Bitrix\Iblock;
if (!Loader::includeModule('sale')) {
    return;
}
$arColumns = array("NAME" => GetMessage("SBB_BNAME"), "DISCOUNT" => GetMessage("SBB_BDISCOUNT"), "WEIGHT" => GetMessage("SBB_BWEIGHT"), "PROPS" => GetMessage("SBB_BPROPS"), "DELETE" => GetMessage("SBB_BDELETE"), "DELAY" => GetMessage("SBB_BDELAY"), "TYPE" => GetMessage("SBB_BTYPE"), "PRICE" => GetMessage("SBB_BPRICE"), "QUANTITY" => GetMessage("SBB_BQUANTITY"), "SUM" => GetMessage("SBB_BSUM"));
if (Loader::includeModule('catalog')) {
    $arIblockIDs = array();
    $arIblockNames = array();
    $catalogIterator = Catalog\CatalogIblockTable::getList(array('select' => array('IBLOCK_ID', 'NAME' => 'IBLOCK.NAME'), 'order' => array('IBLOCK_ID' => 'ASC')));
    while ($catalog = $catalogIterator->fetch()) {
        $catalog['IBLOCK_ID'] = (int) $catalog['IBLOCK_ID'];
        $arIblockIDs[] = $catalog['IBLOCK_ID'];
        $arIblockNames[$catalog['IBLOCK_ID']] = $catalog['NAME'];
    }
    unset($catalog, $catalogIterator);
    $arProps = array();
    $propertyIterator = Iblock\PropertyTable::getList(array('select' => array('ID', 'CODE', 'NAME', 'IBLOCK_ID'), 'filter' => array('@IBLOCK_ID' => $arIblockIDs, 'ACTIVE' => 'Y', '!XML_ID' => CIBlockPropertyTools::XML_SKU_LINK), 'order' => array('IBLOCK_ID' => 'ASC', 'SORT' => 'ASC', 'ID' => 'ASC')));
    while ($property = $propertyIterator->fetch()) {
        $property['ID'] = (int) $property['ID'];
        $property['IBLOCK_ID'] = (int) $property['IBLOCK_ID'];
        $property['CODE'] = (string) $property['CODE'];
        if ($property['CODE'] == '') {
            $property['CODE'] = $property['ID'];
        }
Example #10
0
 public static function getProductIdsByOfferIds($offerIds)
 {
     if (empty($offerIds)) {
         return array();
     }
     $bestList = array();
     $iblockGroup = array();
     $itemIterator = \Bitrix\Iblock\ElementTable::getList(array('select' => array('ID', 'IBLOCK_ID'), 'filter' => array('ID' => $offerIds, 'ACTIVE' => 'Y')));
     while ($item = $itemIterator->fetch()) {
         if (!isset($iblockGroup[$item['IBLOCK_ID']])) {
             $iblockGroup[$item['IBLOCK_ID']] = array();
         }
         $iblockGroup[$item['IBLOCK_ID']][] = $item['ID'];
         $bestList[$item['ID']] = array();
     }
     if (empty($iblockGroup)) {
         return array();
     }
     $iblockSku = array();
     $iblockOffers = array();
     if (!empty($iblockGroup)) {
         $iblockIterator = \Bitrix\Catalog\CatalogIblockTable::getList(array('select' => array('IBLOCK_ID', 'PRODUCT_IBLOCK_ID', 'SKU_PROPERTY_ID', 'VERSION' => 'IBLOCK.VERSION'), 'filter' => array('=IBLOCK_ID' => array_keys($iblockGroup), '!PRODUCT_IBLOCK_ID' => 0)));
         while ($iblock = $iblockIterator->fetch()) {
             $iblock['IBLOCK_ID'] = (int) $iblock['IBLOCK_ID'];
             $iblock['PRODUCT_IBLOCK_ID'] = (int) $iblock['PRODUCT_IBLOCK_ID'];
             $iblock['SKU_PROPERTY_ID'] = (int) $iblock['SKU_PROPERTY_ID'];
             $iblock['VERSION'] = (int) $iblock['VERSION'];
             $iblockSku[$iblock['IBLOCK_ID']] = $iblock;
             $iblockOffers[$iblock['IBLOCK_ID']] = $iblockGroup[$iblock['IBLOCK_ID']];
         }
         unset($iblock, $iblockIterator);
     }
     if (empty($iblockOffers)) {
         return array();
     }
     $offerLink = array();
     foreach ($iblockOffers as $iblockId => $items) {
         $skuProperty = 'PROPERTY_' . $iblockSku[$iblockId]['SKU_PROPERTY_ID'];
         $iblockFilter = array('IBLOCK_ID' => $iblockId, '=ID' => $items);
         $iblockFields = array('ID', 'IBLOCK_ID', $skuProperty);
         $skuProperty .= '_VALUE';
         $offersIterator = \CIBlockElement::getList(array('ID' => 'ASC'), $iblockFilter, false, false, $iblockFields);
         while ($offer = $offersIterator->Fetch()) {
             $productId = (int) $offer[$skuProperty];
             if ($productId <= 0) {
                 unset($bestList[$offer['ID']]);
             } else {
                 $bestList[$offer['ID']]['PARENT_ID'] = $productId;
                 $bestList[$offer['ID']]['PARENT_IBLOCK'] = $iblockSku[$iblockId]['PRODUCT_IBLOCK_ID'];
                 if (!isset($offerLink[$productId])) {
                     $offerLink[$productId] = array();
                 }
                 $offerLink[$productId][] = $offer['ID'];
             }
         }
     }
     if (!empty($offerLink)) {
         $productIterator = \Bitrix\Iblock\ElementTable::getList(array('select' => array('ID'), 'filter' => array('@ID' => array_keys($offerLink), 'ACTIVE' => 'N')));
         while ($product = $productIterator->fetch()) {
             if (empty($offerLink[$product['ID']])) {
                 continue;
             }
             foreach ($offerLink[$product['ID']] as $value) {
                 unset($bestList[$value]);
             }
         }
     }
     if (empty($bestList)) {
         return array();
     }
     $finalIds = array();
     $dublicate = array();
     foreach ($bestList as $id => $info) {
         if (empty($info)) {
             if (!isset($dublicate[$id])) {
                 $finalIds[] = $id;
             }
             $dublicate[$id] = true;
         } else {
             if (!isset($dublicate[$id])) {
                 $finalIds[] = $info['PARENT_ID'];
             }
             $dublicate[$info['PARENT_ID']] = true;
         }
     }
     unset($id, $info, $dublicate);
     return $finalIds;
 }
Example #11
0
	public static function getProductList($offerID, $iblockID = 0)
	{
		$iblockID = (int)$iblockID;
		if (!is_array($offerID))
			$offerID = array($offerID);
		Collection::normalizeArrayValuesByInt($offerID);
		if (empty($offerID))
			return false;

		$iblockSku = array();
		$iblockOffers = array();
		if ($iblockID == 0)
		{
			$iblockList = array();
			$elementIterator = Iblock\ElementTable::getList(array(
				'select' => array('ID', 'IBLOCK_ID'),
				'filter' => array('=ID' => $offerID)
			));
			while ($element = $elementIterator->fetch())
			{
				$element['ID'] = (int)$element['ID'];
				$element['IBLOCK_ID'] = (int)$element['IBLOCK_ID'];
				if (!isset($iblockList[$element['IBLOCK_ID']]))
					$iblockList[$element['IBLOCK_ID']] = array();
				$iblockList[$element['IBLOCK_ID']][] = $element['ID'];
			}
			unset($element, $elementIterator);
			if (!empty($iblockList))
			{
				$iblockIterator = Catalog\CatalogIblockTable::getList(array(
					'select' => array('IBLOCK_ID', 'PRODUCT_IBLOCK_ID', 'SKU_PROPERTY_ID', 'VERSION' => 'IBLOCK.VERSION'),
					'filter' => array('=IBLOCK_ID' => array_keys($iblockList), '!PRODUCT_IBLOCK_ID' => 0)
				));
				while ($iblock = $iblockIterator->fetch())
				{
					$iblock['IBLOCK_ID'] = (int)$iblock['IBLOCK_ID'];
					$iblock['PRODUCT_IBLOCK_ID'] = (int)$iblock['PRODUCT_IBLOCK_ID'];
					$iblock['SKU_PROPERTY_ID'] = (int)$iblock['SKU_PROPERTY_ID'];
					$iblock['VERSION'] = (int)$iblock['VERSION'];
					$iblockSku[$iblock['IBLOCK_ID']] = $iblock;
					self::$arProductCache[$iblock['PRODUCT_IBLOCK_ID']] = $iblock;
					$iblockOffers[$iblock['IBLOCK_ID']] = $iblockList[$iblock['IBLOCK_ID']];
				}
				unset($iblock, $iblockIterator);
			}
			unset($iblockList);
		}
		else
		{
			$iblockIterator = Catalog\CatalogIblockTable::getList(array(
				'select' => array('IBLOCK_ID', 'PRODUCT_IBLOCK_ID', 'SKU_PROPERTY_ID', 'VERSION' => 'IBLOCK.VERSION'),
				'filter' => array('=IBLOCK_ID' => $iblockID, '!PRODUCT_IBLOCK_ID' => 0)
			));
			if ($iblock = $iblockIterator->fetch())
			{
				$iblock['IBLOCK_ID'] = (int)$iblock['IBLOCK_ID'];
				$iblock['PRODUCT_IBLOCK_ID'] = (int)$iblock['PRODUCT_IBLOCK_ID'];
				$iblock['SKU_PROPERTY_ID'] = (int)$iblock['SKU_PROPERTY_ID'];
				$iblock['VERSION'] = (int)$iblock['VERSION'];
				$iblockSku[$iblock['IBLOCK_ID']] = $iblock;
				self::$arProductCache[$iblock['PRODUCT_IBLOCK_ID']] = $iblock;
				$iblockOffers[$iblockID] = $offerID;
			}
			unset($iblock, $iblockIterator);
		}
		if (empty($iblockOffers))
			return array();

		$result = array_fill_keys($offerID, array());

		foreach ($iblockOffers as $iblockID => $offerList)
		{
			$skuProperty = 'PROPERTY_'.$iblockSku[$iblockID]['SKU_PROPERTY_ID'];
			$iblockFilter = array(
				'IBLOCK_ID' => $iblockID,
				'=ID' => $offerList
			);
			$iblockFields = array('ID', 'IBLOCK_ID', $skuProperty);
			$skuProperty .= '_VALUE';

			$offersIterator = CIBlockElement::GetList(
				array('ID' => 'ASC'),
				$iblockFilter,
				false,
				false,
				$iblockFields
			);
			while ($offer = $offersIterator->Fetch())
			{
				$currentOffer = (int)$offer['ID'];
				$productID = (int)$offer[$skuProperty];
				if (!isset($result[$currentOffer]) || $productID <= 0)
					continue;
				unset($offer[$skuProperty]);

				$result[$currentOffer] = array(
					'ID' => $productID,
					'IBLOCK_ID' => $iblockSku[$iblockID]['PRODUCT_IBLOCK_ID'],
					'OFFER_IBLOCK_ID' => $iblockID,
					'SKU_PROPERTY_ID' => $iblockSku[$iblockID]['SKU_PROPERTY_ID']
				);
			}
			unset($currentOffer, $offer, $offersIterator, $skuProperty);
		}

		unset($iblockID, $iblockOffers);

		return array_filter($result);
	}
Example #12
0
 public static function OnBeforeIBlockPropertyDelete($intPropertyID)
 {
     global $APPLICATION;
     $intPropertyID = (int) $intPropertyID;
     if ($intPropertyID <= 0) {
         return true;
     }
     $propertyIterator = Catalog\CatalogIblockTable::getList(array('select' => array('IBLOCK_ID', 'PRODUCT_IBLOCK_ID', 'SKU_PROPERTY_ID'), 'filter' => array('=SKU_PROPERTY_ID' => $intPropertyID)));
     if ($property = $propertyIterator->fetch()) {
         $APPLICATION->ThrowException(Loc::getMessage('BT_MOD_CATALOG_ERR_CANNOT_DELETE_SKU_PROPERTY', array('#SKU_PROPERTY_ID#' => $property['SKU_PROPERTY_ID'], '#PRODUCT_IBLOCK_ID#' => $property['PRODUCT_IBLOCK_ID'], '#IBLOCK_ID#' => $property['IBLOCK_ID'])));
         unset($property, $propertyIterator);
         return false;
     }
     unset($property, $propertyIterator);
     return true;
 }
Example #13
0
						messageOk: "<?php 
    echo Loc::getMessage('SALE_EBAY_GET_SFTP_OK');
    ?>
",
						messageError: "<?php 
    echo Loc::getMessage('SALE_EBAY_GET_SFTP_ERROR');
    ?>
",
						submit: false
					});
			</script>
		</td>
	</tr>
	<?php 
    $tabControl->BeginNextTab();
    $res = \Bitrix\Catalog\CatalogIblockTable::getList(array('select' => array('IBLOCK_ID', 'SITE_ID' => 'IBLOCK_SITE.SITE_ID'), 'filter' => array('SITE_ID' => $SITE_ID), 'runtime' => array('IBLOCK_SITE' => array('data_type' => 'Bitrix\\Iblock\\IblockSiteTable', 'reference' => array('ref.IBLOCK_ID' => 'this.IBLOCK_ID'), 'join_type' => 'inner'))));
    $maps = array();
    while ($ib = $res->fetch()) {
        $entityId = \Bitrix\Sale\TradingPlatform\Ebay\MapHelper::getCategoryEntityId($ib["IBLOCK_ID"]);
        $mapRes = \Bitrix\Sale\TradingPlatform\MapTable::getList(array('select' => array('VALUE_EXTERNAL', 'VALUE_INTERNAL', 'CATEGORY_EBAY_NAME' => 'CATEGORY_EBAY.NAME', 'CATEGORY_BITRIX_NAME' => 'CATEGORY_BITRIX.NAME', 'IBLOCK_ID' => 'CATEGORY_BITRIX.IBLOCK_ID'), 'filter' => array('=ENTITY_ID' => $entityId), 'order' => array('CATEGORY_BITRIX_NAME' => 'ASC', 'CATEGORY_EBAY_NAME' => 'ASC'), 'runtime' => array(new \Bitrix\Main\Entity\ReferenceField('CATEGORY_EBAY', '\\Bitrix\\Sale\\TradingPlatform\\Ebay\\CategoryTable', array('=this.VALUE_EXTERNAL' => 'ref.CATEGORY_ID')), new \Bitrix\Main\Entity\ReferenceField('CATEGORY_BITRIX', '\\Bitrix\\Iblock\\SectionTable', array('=this.VALUE_INTERNAL' => 'ref.ID')))));
        $maps = array_merge($maps, $mapRes->fetchAll());
    }
    ?>
	<tr><td colspan="2" align="center">
	<table class="adm-detail-content-table edit-table" style="opacity: 1;">
	<tr><td colspan="2" align="center">

	<table border="0" cellpadding="0" cellspacing="0" class="internal" style="width:80%;">
	<tr class="heading"><td><?php 
    echo Loc::getMessage("SALE_EBAY_CAT_BITRIX_NAME");
    ?>
Example #14
0
    return;
}
$siteId = isset($_REQUEST['src_site']) && is_string($_REQUEST['src_site']) ? $_REQUEST['src_site'] : '';
$siteId = substr(preg_replace('/[^a-z0-9_]/i', '', $siteId), 0, 2);
$arColumns = array("PREVIEW_PICTURE" => GetMessage("SOA_PREVIEW_PICTURE"), "DETAIL_PICTURE" => GetMessage("SOA_DETAIL_PICTURE"), "PREVIEW_TEXT" => GetMessage("SOA_PREVIEW_TEXT"), "PROPS" => GetMessage("SOA_PROPS"), "NOTES" => GetMessage("SOA_PRICE_TYPE"), "DISCOUNT_PRICE_PERCENT_FORMATED" => GetMessage("SOA_DISCOUNT"), "PRICE_FORMATED" => GetMessage("SOA_PRICE_FORMATED"), "WEIGHT_FORMATED" => GetMessage("SOA_WEIGHT"));
if (Loader::includeModule('catalog')) {
    $arIblockIDs = array();
    $arIblockNames = array();
    $parameters = array('select' => array('IBLOCK_ID', 'NAME' => 'IBLOCK.NAME', 'SITE_ID' => 'IBLOCK_SITE.SITE_ID'), 'order' => array('IBLOCK_ID' => 'ASC'), 'filter' => array('SITE_ID' => 's1'), 'runtime' => array('IBLOCK_SITE' => array('data_type' => 'Bitrix\\Iblock\\IblockSiteTable', 'reference' => array('ref.IBLOCK_ID' => 'this.IBLOCK_ID'), 'join_type' => 'inner')));
    $parameters = array('select' => array('IBLOCK_ID', 'NAME' => 'IBLOCK.NAME'), 'order' => array('IBLOCK_ID' => 'ASC'));
    if (!empty($siteId) && is_string($siteId)) {
        $parameters['select']['SITE_ID'] = 'IBLOCK_SITE.SITE_ID';
        $parameters['filter'] = array('SITE_ID' => $siteId);
        $parameters['runtime'] = array('IBLOCK_SITE' => array('data_type' => 'Bitrix\\Iblock\\IblockSiteTable', 'reference' => array('ref.IBLOCK_ID' => 'this.IBLOCK_ID'), 'join_type' => 'inner'));
    }
    $catalogIterator = Catalog\CatalogIblockTable::getList($parameters);
    while ($catalog = $catalogIterator->fetch()) {
        $catalog['IBLOCK_ID'] = (int) $catalog['IBLOCK_ID'];
        $arIblockIDs[] = $catalog['IBLOCK_ID'];
        $arIblockNames[$catalog['IBLOCK_ID']] = $catalog['NAME'];
    }
    unset($catalog, $catalogIterator);
    if (!empty($arIblockIDs)) {
        $arProps = array();
        $propertyIterator = Iblock\PropertyTable::getList(array('select' => array('ID', 'CODE', 'NAME', 'IBLOCK_ID'), 'filter' => array('@IBLOCK_ID' => $arIblockIDs, '=ACTIVE' => 'Y', '!=XML_ID' => CIBlockPropertyTools::XML_SKU_LINK), 'order' => array('IBLOCK_ID' => 'ASC', 'SORT' => 'ASC', 'ID' => 'ASC')));
        while ($property = $propertyIterator->fetch()) {
            $property['ID'] = (int) $property['ID'];
            $property['IBLOCK_ID'] = (int) $property['IBLOCK_ID'];
            $property['CODE'] = (string) $property['CODE'];
            if ($property['CODE'] == '') {
                $property['CODE'] = $property['ID'];
Example #15
0
 public static function getProductList($offerID, $iblockID = 0)
 {
     $iblockID = (int) $iblockID;
     if (!is_array($offerID)) {
         $offerID = array($offerID);
     }
     Collection::normalizeArrayValuesByInt($offerID);
     if (empty($offerID)) {
         return false;
     }
     $iblockSku = array();
     $iblockOffers = array();
     if ($iblockID == 0) {
         $iblockList = array();
         $elementIterator = Iblock\ElementTable::getList(array('select' => array('ID', 'IBLOCK_ID'), 'filter' => array('@ID' => $offerID)));
         while ($element = $elementIterator->fetch()) {
             $element['ID'] = (int) $element['ID'];
             $element['IBLOCK_ID'] = (int) $element['IBLOCK_ID'];
             if (!isset($iblockList[$element['IBLOCK_ID']])) {
                 $iblockList[$element['IBLOCK_ID']] = array();
             }
             $iblockList[$element['IBLOCK_ID']][] = $element['ID'];
         }
         unset($element, $elementIterator);
         if (!empty($iblockList)) {
             $iblockListIds = array_keys($iblockList);
             foreach ($iblockListIds as &$oneIblock) {
                 if (!empty(self::$arProductCache[$oneIblock])) {
                     unset($iblockList[$oneIblock]);
                     continue;
                 }
                 if (isset(self::$arOfferCache[$oneIblock])) {
                     if (!empty(self::$arOfferCache[$oneIblock])) {
                         $iblockSku[$oneIblock] = self::$arOfferCache[$oneIblock];
                         $iblockOffers[$oneIblock] = $iblockList[$oneIblock];
                     }
                     unset($iblockList[$oneIblock]);
                 }
             }
             unset($oneIblock, $iblockListIds);
             if (!empty($iblockList)) {
                 $iblockIterator = Catalog\CatalogIblockTable::getList(array('select' => array('IBLOCK_ID', 'PRODUCT_IBLOCK_ID', 'SKU_PROPERTY_ID', 'VERSION' => 'IBLOCK.VERSION'), 'filter' => array('@IBLOCK_ID' => array_keys($iblockList), '!=PRODUCT_IBLOCK_ID' => 0)));
                 while ($iblock = $iblockIterator->fetch()) {
                     $iblock['IBLOCK_ID'] = (int) $iblock['IBLOCK_ID'];
                     $iblock['PRODUCT_IBLOCK_ID'] = (int) $iblock['PRODUCT_IBLOCK_ID'];
                     $iblock['SKU_PROPERTY_ID'] = (int) $iblock['SKU_PROPERTY_ID'];
                     $iblock['VERSION'] = (int) $iblock['VERSION'];
                     $iblockSku[$iblock['IBLOCK_ID']] = $iblock;
                     self::$arProductCache[$iblock['PRODUCT_IBLOCK_ID']] = $iblock;
                     self::$arProductCache[$iblock['IBLOCK_ID']] = false;
                     self::$arOfferCache[$iblock['IBLOCK_ID']] = $iblock;
                     self::$arOfferCache[$iblock['PRODUCT_IBLOCK_ID']] = false;
                     self::$arPropertyCache[$iblock['SKU_PROPERTY_ID']] = $iblock;
                     $iblockOffers[$iblock['IBLOCK_ID']] = $iblockList[$iblock['IBLOCK_ID']];
                 }
                 unset($iblock, $iblockIterator);
             }
         }
         unset($iblockList);
     } else {
         if (empty(self::$arProductCache[$iblockID])) {
             if (isset(self::$arOfferCache[$iblockID])) {
                 if (!empty(self::$arOfferCache[$iblockID])) {
                     $iblockSku[$iblockID] = self::$arOfferCache[$iblockID];
                     $iblockOffers[$iblockID] = $offerID;
                 }
             } else {
                 $iblockIterator = Catalog\CatalogIblockTable::getList(array('select' => array('IBLOCK_ID', 'PRODUCT_IBLOCK_ID', 'SKU_PROPERTY_ID', 'VERSION' => 'IBLOCK.VERSION'), 'filter' => array('=IBLOCK_ID' => $iblockID, '!=PRODUCT_IBLOCK_ID' => 0)));
                 if ($iblock = $iblockIterator->fetch()) {
                     $iblock['IBLOCK_ID'] = (int) $iblock['IBLOCK_ID'];
                     $iblock['PRODUCT_IBLOCK_ID'] = (int) $iblock['PRODUCT_IBLOCK_ID'];
                     $iblock['SKU_PROPERTY_ID'] = (int) $iblock['SKU_PROPERTY_ID'];
                     $iblock['VERSION'] = (int) $iblock['VERSION'];
                     $iblockSku[$iblock['IBLOCK_ID']] = $iblock;
                     self::$arProductCache[$iblock['PRODUCT_IBLOCK_ID']] = $iblock;
                     self::$arProductCache[$iblock['IBLOCK_ID']] = false;
                     self::$arOfferCache[$iblock['IBLOCK_ID']] = $iblock;
                     self::$arOfferCache[$iblock['PRODUCT_IBLOCK_ID']] = false;
                     self::$arPropertyCache[$iblock['SKU_PROPERTY_ID']] = $iblock;
                     $iblockOffers[$iblockID] = $offerID;
                 }
                 unset($iblock, $iblockIterator);
             }
         }
     }
     if (empty($iblockOffers)) {
         return array();
     }
     $result = array_fill_keys($offerID, array());
     $conn = Application::getConnection();
     $helper = $conn->getSqlHelper();
     $offerField = $helper->quote('IBLOCK_ELEMENT_ID');
     $propertyIdField = $helper->quote('IBLOCK_PROPERTY_ID');
     foreach ($iblockOffers as $iblockID => $offerList) {
         $sku = $iblockSku[$iblockID];
         if ($sku['VERSION'] == 2) {
             $productField = $helper->quote('PROPERTY_' . $sku['SKU_PROPERTY_ID']);
             $sqlQuery = 'select ' . $productField . ' as PRODUCT_ID, ' . $offerField . ' as ID from ' . $helper->quote('b_iblock_element_prop_s' . $sku['IBLOCK_ID']) . ' where ' . $offerField . ' IN (' . implode(',', $offerList) . ')';
         } else {
             $productField = $helper->quote('VALUE_NUM');
             $sqlQuery = 'select ' . $productField . ' as PRODUCT_ID, ' . $offerField . ' as ID from ' . $helper->quote('b_iblock_element_property') . ' where ' . $propertyIdField . ' = ' . $sku['SKU_PROPERTY_ID'] . ' and ' . $offerField . ' IN (' . implode(',', $offerList) . ')';
         }
         unset($productField);
         $offersIterator = $conn->query($sqlQuery);
         while ($offer = $offersIterator->fetch()) {
             $currentOffer = (int) $offer['ID'];
             $productID = (int) $offer['PRODUCT_ID'];
             if (!isset($result[$currentOffer]) || $productID <= 0) {
                 continue;
             }
             $result[$currentOffer] = array('ID' => $productID, 'IBLOCK_ID' => $sku['PRODUCT_IBLOCK_ID'], 'OFFER_IBLOCK_ID' => $iblockID, 'SKU_PROPERTY_ID' => $sku['SKU_PROPERTY_ID']);
         }
         unset($sku);
     }
     unset($iblockID, $iblockOffers);
     unset($helper, $conn);
     return array_filter($result);
 }