%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/sale/lib/tradingplatform/ebay/ |
| Current File : //home/bitrix/www/bitrix/modules/sale/lib/tradingplatform/ebay/catalogsectiontabhandler.php |
<?php
namespace Bitrix\Sale\TradingPlatform\Ebay;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\SystemException;
use Bitrix\Sale\TradingPlatform\MapTable;
use Bitrix\Sale\TradingPlatform\TabHandler;
use Bitrix\Sale\TradingPlatform\Ebay\MapHelper;
Loc::loadMessages(__FILE__);
/**
* Class CatalogSectionTabHandler
* Work with iblock section / catalog category edit page.
* @package Bitrix\Sale\TradingPlatform\Ebay
*/
class CatalogSectionTabHandler extends TabHandler
{
public $name = "Ebay";
public $description = "Ebay section mappings";
protected static $ebayCategoriesVariations = array();
protected static $ebayRequiredVariations = array();
public function Action($arArgs)
{
if(!isset($_POST["SALE"]["EBAY"]))
return true;
$propsRes = true;
$ebayCategoryId = isset($_POST["SALE"]["EBAY"]["EBAY_CATEGORY_ID"]) ? $_POST["SALE"]["EBAY"]["EBAY_CATEGORY_ID"] : "";
$params = array();
if(!empty($_POST["SALE"]["EBAY"]["POLICY"]) && is_array($_POST["SALE"]["EBAY"]["POLICY"]))
{
$ebay = \Bitrix\Sale\TradingPlatform\Ebay\Ebay::getInstance();
$settings = $ebay->getSettings();
$siteSettings = $settings[$arArgs["IBLOCK"]["LID"]];
if($_POST["SALE"]["EBAY"]["POLICY"]["RETURN"] == $siteSettings["POLICY"]["RETURN"]["DEFAULT"])
unset($_POST["SALE"]["EBAY"]["POLICY"]["RETURN"]);
if($_POST["SALE"]["EBAY"]["POLICY"]["PAYMENT"] == $siteSettings["POLICY"]["PAYMENT"]["DEFAULT"])
unset($_POST["SALE"]["EBAY"]["POLICY"]["PAYMENT"]);
if($_POST["SALE"]["EBAY"]["POLICY"]["SHIPPING"] == $siteSettings["POLICY"]["SHIPPING"]["DEFAULT"])
unset($_POST["SALE"]["EBAY"]["POLICY"]["SHIPPING"]);
if(!empty($_POST["SALE"]["EBAY"]["POLICY"]))
$params = array("POLICY" => $_POST["SALE"]["EBAY"]["POLICY"]);
}
$catRes = self::saveCategoryMap($arArgs["ID"], $arArgs["IBLOCK"]["ID"], array($ebayCategoryId), $params);
if(
isset($_POST["SALE"]["EBAY"]["EBAY_CATEGORY_VARIATIONS"])
&& is_array($_POST["SALE"]["EBAY"]["EBAY_CATEGORY_VARIATIONS"])
&& isset($_POST["SALE"]["EBAY"]["BITRIX_CATEGORY_PROPS"])
&& is_array($_POST["SALE"]["EBAY"]["BITRIX_CATEGORY_PROPS"])
)
{
$propsRes = self::saveCategoryPropsMap($arArgs["IBLOCK"]["ID"], $ebayCategoryId, $_POST["SALE"]["EBAY"]["EBAY_CATEGORY_VARIATIONS"], $_POST["SALE"]["EBAY"]["BITRIX_CATEGORY_PROPS"]);
}
return $catRes && $propsRes;
}
protected function saveCategoryPropsMap($iblockId, $ebayCategoryId, array $ebayCatVar, array $bitrixCatProps)
{
$result = true;
$mapEntityId = MapHelper::getCategoryVariationEntityId($iblockId, $ebayCategoryId);
MapTable::deleteByMapEntityId($mapEntityId);
foreach($ebayCatVar as $key => $ebayCategoryVariation)
{
if(!isset($bitrixCatProps[$key]) || strlen($ebayCategoryVariation) <=0 )
continue;
$fields = array(
"ENTITY_ID" => $mapEntityId,
"VALUE_EXTERNAL" => $ebayCategoryVariation,
"VALUE_INTERNAL" => $bitrixCatProps[$key]
);
$addRes = MapTable::add($fields);
$result = $result && $addRes->isSuccess();
}
return $result;
}
protected function saveCategoryMap($bitrixCategoryId, $iblockId, array $ebayCategoriesIds, $params = array())
{
$result = true;
$catMapEntId = MapHelper::getCategoryEntityId($iblockId);
foreach($ebayCategoriesIds as $ebayCategoryId)
{
if(strlen(trim($ebayCategoryId)) <= 0)
continue;
$fields = array(
"ENTITY_ID" => $catMapEntId,
"VALUE_INTERNAL" => $bitrixCategoryId
);
$dbRes = MapTable::getList(array(
'filter' => $fields
));
$fields["VALUE_EXTERNAL"] = $ebayCategoryId;
if(!empty($params))
$fields["PARAMS"] = $params;
if($map = $dbRes->fetch())
$res = MapTable::update($map['ID'], $fields);
else
$res = MapTable::add($fields);
$result = $result && $res->isSuccess();
}
return $result;
}
public function Check($arArgs)
{
if(!isset($_POST["SALE"]["EBAY"]["EBAY_CATEGORY_VARIATIONS"]) || !is_array($_POST["SALE"]["EBAY"]["EBAY_CATEGORY_VARIATIONS"]))
return true;
$result = true;
$categoriesVarResult = CategoryVariationTable::getList( array(
'select' => array('ID', 'NAME', 'REQUIRED'),
'filter' => array("=CATEGORY_ID" => $_POST["SALE"]["EBAY"]["EBAY_CATEGORY_ID"]),
));
while($var = $categoriesVarResult->fetch())
{
if($var['REQUIRED'] == 'Y')
{
if(!in_array($var["ID"], $_POST["SALE"]["EBAY"]["EBAY_CATEGORY_VARIATIONS"]))
{
$result = false;
break;
}
$variationIdx = array_search($var["ID"], $_POST["SALE"]["EBAY"]["EBAY_CATEGORY_VARIATIONS"]);
if($variationIdx === false
||!isset($_POST["SALE"]["EBAY"]["BITRIX_CATEGORY_PROPS"][$variationIdx])
|| strlen($_POST["SALE"]["EBAY"]["BITRIX_CATEGORY_PROPS"][$variationIdx]) <=0 )
{
$result = false;
break;
}
}
}
if(!$result)
throw new SystemException("All required variations of category must be filled!");
return $result;
}
public function ShowTabSection($divName, $arArgs, $bVarsFromForm)
{
$ebay = \Bitrix\Sale\TradingPlatform\Ebay\Ebay::getInstance();
$settings = $ebay->getSettings();
if(empty($settings[$arArgs["IBLOCK"]["LID"]]))
return '';
$siteSettings = $settings[$arArgs["IBLOCK"]["LID"]];
global $APPLICATION;
//categories
$resultHtml =
'<tr>'.
'<td width="40%" valign="top">'.Loc::getMessage("SALE_EBAY_CSTH_CATEGORY").':</td>'.
'<td width="60%">';
$catMapRes = \Bitrix\Sale\TradingPlatform\MapTable::getList(array(
"filter" => array(
"ENTITY_ID" => \Bitrix\Sale\TradingPlatform\Ebay\MapHelper::getCategoryEntityId($arArgs["IBLOCK"]["ID"]),
"VALUE_INTERNAL" => $arArgs["ID"]
)
));
$arMapRes = $catMapRes->fetch();
$params = array(
"TOP_CATEGORY_SELECT_NAME" => "SALE[EBAY][TOP_CATEGORY]",
"CATEGORY_INPUT_NAME" => "SALE[EBAY][EBAY_CATEGORY_ID]",
"EBAY_CATEGORY_VARIATIONS_SN" => "SALE[EBAY][EBAY_CATEGORY_VARIATIONS]",
"BITRIX_CATEGORY_PROPS_SN" => "SALE[EBAY][BITRIX_CATEGORY_PROPS]",
"BITRIX_CATEGORY_ID"=> $arArgs["ID"],
"IBLOCK_ID" => $arArgs["IBLOCK"]["ID"]
);
if(isset($_POST["SALE"]["EBAY"]["EBAY_CATEGORY_ID"]))
$params["EBAY_CATEGORY_ID"] = $_POST["SALE"]["EBAY"]["EBAY_CATEGORY_ID"];
elseif(isset($arMapRes["VALUE_EXTERNAL"]))
$params["EBAY_CATEGORY_ID"] = $arMapRes["VALUE_EXTERNAL"];
if(isset($_POST["SALE"]["EBAY"]["EBAY_CATEGORY_VARIATIONS"]) && isset($_POST["SALE"]["EBAY"]["BITRIX_CATEGORY_PROPS"]))
{
$params["VARIATIONS_VALUES"] = array();
for($i=0, $l=count($_POST["SALE"]["EBAY"]["EBAY_CATEGORY_VARIATIONS"]); $i<$l; $i++)
$params["VARIATIONS_VALUES"][$_POST["SALE"]["EBAY"]["EBAY_CATEGORY_VARIATIONS"][$i]] = $_POST["SALE"]["EBAY"]["BITRIX_CATEGORY_PROPS"][$i];
}
ob_start();
$APPLICATION->IncludeComponent(
"bitrix:sale.ebay.categories",
".default",
$params
);
$resultHtml .= ob_get_contents();
ob_end_clean();
$resultHtml .=
'</td>'.
'</tr>';
//policies
$errorMsg = "";
$policy = null;
$policyReturn = "";
$policyPayment = "";
$policyShipping = "";
if(isset($_POST["SALE"]["EBAY"]["POLICY"]))
{
if(!empty($_POST["SALE"]["EBAY"]["POLICY"]["RETURN"]))
$policyReturn = $_POST["SALE"]["EBAY"]["POLICY"]["RETURN"];
if(!empty($_POST["SALE"]["EBAY"]["POLICY"]["SHIPPING"]))
$policyShipping = $_POST["SALE"]["EBAY"]["POLICY"]["SHIPPING"];
if(!empty($_POST["SALE"]["EBAY"]["POLICY"]["PAYMENT"]))
$policyPayment = $_POST["SALE"]["EBAY"]["POLICY"]["PAYMENT"];
}
elseif(!empty($arMapRes["PARAMS"]["POLICY"]))
{
if(!empty($arMapRes["PARAMS"]["POLICY"]["RETURN"]))
$policyReturn = $arMapRes["PARAMS"]["POLICY"]["RETURN"];
if(!empty($arMapRes["PARAMS"]["POLICY"]["SHIPPING"]))
$policyShipping = $arMapRes["PARAMS"]["POLICY"]["SHIPPING"];
if(!empty($arMapRes["PARAMS"]["POLICY"]["PAYMENT"]))
$policyPayment = $arMapRes["PARAMS"]["POLICY"]["PAYMENT"];
}
if(strlen($policyReturn) <= 0 && !empty($siteSettings["POLICY"]["RETURN"]["DEFAULT"]))
$policyReturn = $siteSettings["POLICY"]["RETURN"]["DEFAULT"];
if(strlen($policyShipping) <= 0 && !empty($siteSettings["POLICY"]["SHIPPING"]["DEFAULT"]))
$policyShipping = $siteSettings["POLICY"]["SHIPPING"]["DEFAULT"];
if(strlen($policyPayment) <= 0 && !empty($siteSettings["POLICY"]["PAYMENT"]["DEFAULT"]))
$policyPayment = $siteSettings["POLICY"]["PAYMENT"]["DEFAULT"];
if(isset($siteSettings["API"]["AUTH_TOKEN"]) && strlen($siteSettings["API"]["AUTH_TOKEN"]) > 0)
$policy = new \Bitrix\Sale\TradingPlatform\Ebay\Policy($siteSettings["API"]["AUTH_TOKEN"], $arArgs["IBLOCK"]["LID"]);
else
$errorMsg .= "You must set API token first!\n";
$resultHtml .= '
<tr></tr><td colspan="2" style="border-top: 2px solid #e0e8ea;"> </td></tr>
<tr>
<td>'.Loc::getMessage("SALE_EBAY_CSTH_POLICY_RETURN").':</span></td>
<td>';
if($policy)
$names = $policy->getPoliciesNames(\Bitrix\Sale\TradingPlatform\Ebay\Policy::TYPE_RETURN);
else
$names = array();
if($policy && !empty($names))
{
$resultHtml .= '<select name="SALE[EBAY][POLICY][RETURN]">';
foreach($names as $policyId => $policyName)
$resultHtml .= '<option value="'.htmlspecialcharsbx($policyId).'"'.($policyReturn == $policyId ? " selected" : "").'>'.$policyName.'</option>';
$resultHtml .= '</select>';
}
else
{
$resultHtml .= Loc::getMessage("SALE_EBAY_CSTH_NO_POLICY");
}
$resultHtml .= '
</td>
</tr>
<tr>
<td>'.Loc::getMessage("SALE_EBAY_CSTH_POLICY_SHIPMENT").':</td>
<td>';
if($policy)
$names = $policy->getPoliciesNames(\Bitrix\Sale\TradingPlatform\Ebay\Policy::TYPE_SHIPPING);
else
$names = array();
if($policy && !empty($names))
{
$resultHtml .= '<select name="SALE[EBAY][POLICY][SHIPPING]">';
foreach($names as $policyId => $policyName)
$resultHtml .= '<option value="'.htmlspecialcharsbx($policyId).'"'.($policyShipping == $policyId ? " selected" : "").'>'.$policyName.'</option>';
$resultHtml .= '</select>';
}
else
{
$resultHtml .= Loc::getMessage("SALE_EBAY_CSTH_NO_POLICY");
}
$resultHtml .='
</td>
</tr>
<tr>
<td>'.Loc::getMessage("SALE_EBAY_CSTH_POLICY_PAYMENT").':</td>
<td>';
if($policy)
$names = $policy->getPoliciesNames(\Bitrix\Sale\TradingPlatform\Ebay\Policy::TYPE_PAYMENT);
else
$names = array();
if($policy && !empty($names))
{
$resultHtml .= '<select name="SALE[EBAY][POLICY][PAYMENT]">';
foreach($policy->getPoliciesNames(\Bitrix\Sale\TradingPlatform\Ebay\Policy::TYPE_PAYMENT) as $policyId => $policyName)
$resultHtml .= '<option value="'.htmlspecialcharsbx($policyId).'"'.($policyPayment == $policyId ? " selected" : "").'>'.$policyName.'</option>';
$resultHtml .= '</select>';
}
else
{
$resultHtml .= Loc::getMessage("SALE_EBAY_CSTH_NO_POLICY");
}
$resultHtml .='
</td>
</tr>
<tr>
<td> </td><td><a href="http://www.bizpolicy.ebay.ru/businesspolicy/manage?totalPages=1">'.Loc::getMessage('SALE_EBAY_CSTH_EDIT_POLICIES').'</a></td>
</tr>';
return $resultHtml;
}
}