diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e3127b7..20634551 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2018-10-25 v.2.3.13 +* Добавлен функционал для активации модуля в маркетплейсе retailCRM +* Исправлен баг при генерации каталога с подстановкой схемы + ## 2018-10-17 v.2.3.12 * Исрпавлена некорректная выгрузка остатков по складам * Исправлена отправка габаритов товаров в заказах diff --git a/intaro.retailcrm/classes/general/ApiClient_v5.php b/intaro.retailcrm/classes/general/ApiClient_v5.php index 2d032516..9476f2df 100644 --- a/intaro.retailcrm/classes/general/ApiClient_v5.php +++ b/intaro.retailcrm/classes/general/ApiClient_v5.php @@ -123,7 +123,7 @@ class ApiClient $parameters ); } - + /** * Change user status * @@ -608,7 +608,7 @@ class ApiClient $parameters ); } - + /** * Combine orders * @@ -723,13 +723,13 @@ class ApiClient 'Note id must be set' ); } - + return $this->client->makeRequest( "/orders/payments/$id/delete", Client::METHOD_POST ); } - + /** * Combine customers * @@ -1063,7 +1063,7 @@ class ApiClient Client::METHOD_GET ); } - + /** * Get tasks list * @@ -1168,7 +1168,7 @@ class ApiClient Client::METHOD_GET ); } - + /** * Get orders assembly list * @@ -1397,7 +1397,7 @@ class ApiClient $this->fillSite($site, array('offers' => json_encode($offers))) ); } - + /** * Upload store prices * @@ -1483,6 +1483,7 @@ class ApiClient Client::METHOD_GET ); } + /** * Edit module configuration * @@ -1857,7 +1858,7 @@ class ApiClient array('productStatus' => json_encode($data)) ); } - + /** * Get products groups * @@ -2196,7 +2197,7 @@ class ApiClient $parameters ); } - + /** * Get segments list * diff --git a/intaro.retailcrm/classes/general/RCrmActions.php b/intaro.retailcrm/classes/general/RCrmActions.php index b4ac891c..fde89489 100644 --- a/intaro.retailcrm/classes/general/RCrmActions.php +++ b/intaro.retailcrm/classes/general/RCrmActions.php @@ -13,15 +13,15 @@ class RCrmActions $arSites = array(); $rsSites = CSite::GetList($by, $sort, array('ACTIVE' => 'Y')); while ($ar = $rsSites->Fetch()) { - $arSites[] = $ar; + $arSites[] = $ar; } - + return $arSites; } - + public static function OrderTypesList($arSites) { - $orderTypesList = array(); + $orderTypesList = array(); foreach ($arSites as $site) { $personTypes = \Bitrix\Sale\PersonType::load($site['LID']); $bitrixOrderTypesList = array(); @@ -33,10 +33,10 @@ class RCrmActions } $orderTypesList = $orderTypesList + $bitrixOrderTypesList; } - + return $orderTypesList; } - + public static function DeliveryList() { $bitrixDeliveryTypesList = array(); @@ -49,9 +49,9 @@ class RCrmActions } } foreach ($arDeliveryServiceAll as $arDeliveryService) { - if ((($arDeliveryService['PARENT_ID'] == '0' || $arDeliveryService['PARENT_ID'] == null) || - in_array($arDeliveryService['PARENT_ID'], $groups)) && - $arDeliveryService['ID'] != $noOrderId && + if ((($arDeliveryService['PARENT_ID'] == '0' || $arDeliveryService['PARENT_ID'] == null) || + in_array($arDeliveryService['PARENT_ID'], $groups)) && + $arDeliveryService['ID'] != $noOrderId && $arDeliveryService['CLASS_NAME'] != '\Bitrix\Sale\Delivery\Services\Group') { if (in_array($arDeliveryService['PARENT_ID'], $groups)) { $arDeliveryService['PARENT_ID'] = 0; @@ -62,7 +62,7 @@ class RCrmActions return $bitrixDeliveryTypesList; } - + public static function PaymentList() { $bitrixPaymentTypesList = array(); @@ -73,9 +73,9 @@ class RCrmActions while ($payment = $dbPaymentAll->fetch()) { $bitrixPaymentTypesList[] = $payment; } - + return $bitrixPaymentTypesList; - } + } public static function StatusesList() { @@ -90,7 +90,7 @@ class RCrmActions 'NAME' => $arStatus['NAME'], ); } - + return $bitrixPaymentStatusesList; } @@ -104,11 +104,11 @@ class RCrmActions while ($prop = $arPropsAll->Fetch()) { $bitrixPropsList[$prop['PERSON_TYPE_ID']][] = $prop; } - + return $bitrixPropsList; - } - - public static function PricesExportList() + } + + public static function PricesExportList() { $priceId = COption::GetOptionString(self::$MODULE_ID, 'catalog_base_price', 0); $catalogExportPrices = array(); @@ -117,21 +117,21 @@ class RCrmActions { $catalogExportPrices[$arPriceType['ID']] = $arPriceType; } - + return $catalogExportPrices; - } - - public static function StoresExportList() + } + + public static function StoresExportList() { $catalogExportStores = array(); $dbStores = CCatalogStore::GetList(array(), array("ACTIVE" => "Y"), false, false, array('ID', 'TITLE')); while ($stores = $dbStores->Fetch()) { $catalogExportStores[] = $stores; } - + return $catalogExportStores; - } - + } + public static function IblocksExportList() { $catalogExportIblocks = array(); @@ -154,10 +154,10 @@ class RCrmActions } } } - + return $catalogExportIblocks; } - + /** * * w+ event in bitrix log @@ -208,7 +208,7 @@ class RCrmActions RetailCrmHistory::customerHistory(); RetailCrmHistory::orderHistory(); self::uploadOrdersAgent(); - + return 'RCrmActions::orderAgent();'; } @@ -295,7 +295,7 @@ class RCrmActions } else { $newFio = explode(" ", $fio, 3); } - + switch (count($newFio)) { default: case 0: @@ -322,31 +322,74 @@ class RCrmActions return $result; } + public static function sendConfiguration($api, $api_version, $active = true) + { + $scheme = isset($_SERVER['HTTPS']) ? 'https://' : 'http://'; + $baseUrl = $scheme . $_SERVER['HTTP_HOST']; + $integrationCode = 'bitrix'; + $logo = 'https://s3.eu-central-1.amazonaws.com/retailcrm-billing/images/5af47fe682bf2-1c-bitrix-logo.svg'; + $accountUrl = $baseUrl . '/bitrix/admin'; + + $clientId = COption::GetOptionString(self::$MODULE_ID, 'client_id', 0); + + if (!$clientId) { + $clientId = uniqid(); + COption::SetOptionString(self::$MODULE_ID, 'client_id', $clientId); + } + + $code = $integrationCode . '-' . $clientId; + + if ($api_version == 'v4') { + $configuration = array( + 'name' => GetMessage('API_MODULE_NAME'), + 'code' => $code, + 'logo' => $logo, + 'configurationUrl' => $accountUrl, + 'active' => $active + ); + + self::apiMethod($api, 'marketplaceSettingsEdit', __METHOD__, $configuration); + } else { + $configuration = array( + 'clientId' => $clientId, + 'code' => $code, + 'integrationCode' => $integrationCode, + 'active' => $active, + 'name' => GetMessage('API_MODULE_NAME'), + 'logo' => $logo, + 'baseUrl' => $baseUrl, + 'accountUrl' => $accountUrl + ); + + self::apiMethod($api, 'integrationModulesEdit', __METHOD__, $configuration); + } + } + public static function apiMethod($api, $methodApi, $method, $params, $site = null) { switch ($methodApi) { - case 'ordersPaymentDelete': + case 'ordersPaymentDelete': case 'ordersHistory': - case 'customerHistory': + case 'customerHistory': case 'ordersFixExternalIds': case 'customersFixExternalIds': return self::proxy($api, $methodApi, $method, array($params)); - + case 'orderGet': return self::proxy($api, 'ordersGet', $method, array($params, 'id', $site)); - + case 'ordersGet': case 'ordersEdit': case 'customersGet': case 'customersEdit': return self::proxy($api, $methodApi, $method, array($params, 'externalId', $site)); - + case 'paymentEditById': return self::proxy($api, 'ordersPaymentEdit', $method, array($params, 'id', $site)); - + case 'paymentEditByExternalId': return self::proxy($api, 'ordersPaymentEdit', $method, array($params, 'externalId', $site)); - + default: return self::proxy($api, $methodApi, $method, array($params, $site)); } @@ -403,12 +446,12 @@ class RCrmActions ); $log->write(array( 'api' => $version, - 'methodApi' => $methodApi, - 'errorMsg' => $e->getMessage(), - 'errors' => $e->getCode(), + 'methodApi' => $methodApi, + 'errorMsg' => $e->getMessage(), + 'errors' => $e->getCode(), 'params' => $params ), 'apiErrors'); - + if (function_exists('retailCrmApiResult')) { retailCrmApiResult($methodApi, false, 'CurlException'); } @@ -421,12 +464,12 @@ class RCrmActions ); $log->write(array( 'api' => $version, - 'methodApi' => $methodApi, - 'errorMsg' => $e->getMessage(), - 'errors' => $e->getCode(), + 'methodApi' => $methodApi, + 'errorMsg' => $e->getMessage(), + 'errors' => $e->getCode(), 'params' => $params ), 'apiErrors'); - + if (function_exists('retailCrmApiResult')) { retailCrmApiResult($methodApi, false, 'ArgumentException'); } diff --git a/intaro.retailcrm/classes/general/icml/RetailCrmICML.php b/intaro.retailcrm/classes/general/icml/RetailCrmICML.php index d55f3b89..a46be235 100644 --- a/intaro.retailcrm/classes/general/icml/RetailCrmICML.php +++ b/intaro.retailcrm/classes/general/icml/RetailCrmICML.php @@ -74,7 +74,7 @@ class RetailCrmICML $defaultSite = CSite::GetList($by = "def", $order = "desc", array('DEF' => 'Y'))->Fetch(); $this->encodingDefault = $defaultSite["CHARSET"]; - $url = 'https://' . $this->serverName; + $url = 'https://' . $this->defaultServerName; $curlHandler = curl_init(); curl_setopt($curlHandler, CURLOPT_URL, $url); $responseBody = curl_exec($curlHandler); diff --git a/intaro.retailcrm/description.ru b/intaro.retailcrm/description.ru index 566db60a..86ad509e 100644 --- a/intaro.retailcrm/description.ru +++ b/intaro.retailcrm/description.ru @@ -1,2 +1 @@ -- Исправлена передача габаритов товаров в заказе -- Исправлена передача остатков по складам \ No newline at end of file +- Добавлен функционал для активации модуля в маркетплейсе retailCRM \ No newline at end of file diff --git a/intaro.retailcrm/install/index.php b/intaro.retailcrm/install/index.php index 50af5d2d..11ab0390 100644 --- a/intaro.retailcrm/install/index.php +++ b/intaro.retailcrm/install/index.php @@ -69,6 +69,8 @@ class intaro_retailcrm extends CModule var $CRM_API_VERSION = 'api_version'; var $HISTORY_TIME = 'history_time'; + var $CLIENT_ID = 'client_id'; + var $INSTALL_PATH; function intaro_retailcrm() @@ -1042,15 +1044,10 @@ class intaro_retailcrm extends CModule $api_host = COption::GetOptionString($this->MODULE_ID, $this->CRM_API_HOST_OPTION, 0); $api_key = COption::GetOptionString($this->MODULE_ID, $this->CRM_API_KEY_OPTION, 0); + $api_version = COption::GetOptionString($this->MODULE_ID, $this->CRM_API_VERSION, 0); $this->RETAIL_CRM_API = new \RetailCrm\ApiClient($api_host, $api_key); - try { - $this->RETAIL_CRM_API->statisticUpdate(); - } catch (\RetailCrm\Exception\CurlException $e) { - RCrmActions::eventLog( - 'intaro.retailcrm/install/index.php', 'RetailCrm\ApiClient::statisticUpdate::CurlException', - $e->getCode() . ': ' . $e->getMessage() - ); - } + + RCrmActions::sendConfiguration($this->RETAIL_CRM_API, $api_version); $APPLICATION->IncludeAdminFile( GetMessage('MODULE_INSTALL_TITLE'), $this->INSTALL_PATH . '/step6.php' @@ -1062,6 +1059,27 @@ class intaro_retailcrm extends CModule { global $APPLICATION; + $api_host = COption::GetOptionString($this->MODULE_ID, $this->CRM_API_HOST_OPTION, 0); + $api_key = COption::GetOptionString($this->MODULE_ID, $this->CRM_API_KEY_OPTION, 0); + $api_version = COption::GetOptionString($this->MODULE_ID, $this->CRM_API_VERSION, 0); + + include($this->INSTALL_PATH . '/../classes/general/Http/Client.php'); + include($this->INSTALL_PATH . '/../classes/general/Response/ApiResponse.php'); + include($this->INSTALL_PATH . '/../classes/general/Exception/InvalidJsonException.php'); + include($this->INSTALL_PATH . '/../classes/general/Exception/CurlException.php'); + + if ($api_version == 'v4') { + include($this->INSTALL_PATH . '/../classes/general/ApiClient_v4.php'); + include($this->INSTALL_PATH . '/../classes/general/order/RetailCrmOrder_v4.php'); + include($this->INSTALL_PATH . '/../classes/general/history/RetailCrmHistory_v4.php'); + } elseif ($api_version == 'v5') { + include($this->INSTALL_PATH . '/../classes/general/ApiClient_v5.php'); + include($this->INSTALL_PATH . '/../classes/general/order/RetailCrmOrder_v5.php'); + include($this->INSTALL_PATH . '/../classes/general/history/RetailCrmHistory_v5.php'); + } + + $retail_crm_api = new \RetailCrm\ApiClient($api_host, $api_key); + CAgent::RemoveAgent("RCrmActions::orderAgent();", $this->MODULE_ID); CAgent::RemoveAgent("RetailCrmInventories::inventoriesUpload();", $this->MODULE_ID); CAgent::RemoveAgent("RetailCrmPrices::pricesUpload();", $this->MODULE_ID); @@ -1108,6 +1126,7 @@ class intaro_retailcrm extends CModule COption::RemoveOption($this->MODULE_ID, $this->CRM_API_VERSION); COption::RemoveOption($this->MODULE_ID, $this->HISTORY_TIME); + COption::RemoveOption($this->MODULE_ID, $this->CLIENT_ID); UnRegisterModuleDependences("sale", "OnOrderUpdate", $this->MODULE_ID, "RetailCrmEvent", "onUpdateOrder"); UnRegisterModuleDependences("main", "OnAfterUserUpdate", $this->MODULE_ID, "RetailCrmEvent", "OnAfterUserUpdate"); @@ -1131,12 +1150,14 @@ class intaro_retailcrm extends CModule } } + RCrmActions::sendConfiguration($retail_crm_api, $api_version, false); + $this->DeleteFiles(); UnRegisterModule($this->MODULE_ID); $APPLICATION->IncludeAdminFile( - GetMessage('MODULE_UNINSTALL_TITLE'), $this->INSTALL_PATH . '/unstep1.php' + GetMessage('MODULE_UNINSTALL_TITLE'), $this->INSTALL_PATH . '/unstep1.php' ); } diff --git a/intaro.retailcrm/install/version.php b/intaro.retailcrm/install/version.php index de4a7c69..13dfef96 100644 --- a/intaro.retailcrm/install/version.php +++ b/intaro.retailcrm/install/version.php @@ -1,5 +1,5 @@ "2.3.12", - "VERSION_DATE" => "2018-10-17 13:50:00" + "VERSION" => "2.3.13", + "VERSION_DATE" => "2018-10-25 10:40:00" ); diff --git a/intaro.retailcrm/lang/ru/classes/general/RCrmActions.php b/intaro.retailcrm/lang/ru/classes/general/RCrmActions.php new file mode 100644 index 00000000..5e605d10 --- /dev/null +++ b/intaro.retailcrm/lang/ru/classes/general/RCrmActions.php @@ -0,0 +1,2 @@ +