From 3436b4f956683dee0cb15bcdf0f6346212fb7f47 Mon Sep 17 00:00:00 2001 From: gleemand Date: Thu, 28 Jul 2022 11:59:40 +0300 Subject: [PATCH] Added 'files' api methods --- CHANGELOG.md | 6 + VERSION | 2 +- .../admin/RetailcrmOrdersController.php | 2 +- .../admin/RetailcrmReferencesController.php | 22 ++-- retailcrm/lib/RetailcrmContextSwitcher.php | 4 +- retailcrm/lib/RetailcrmExportOrdersHelper.php | 2 +- retailcrm/lib/RetailcrmHistory.php | 22 ++-- retailcrm/lib/RetailcrmOrderBuilder.php | 4 +- retailcrm/lib/api/RetailcrmApiClientV5.php | 105 ++++++++++++++++++ retailcrm/lib/api/RetailcrmHttpClient.php | 11 +- .../RetailcrmExceptionMiddleware.php | 2 +- .../RetailcrmExportOrdersMiddleware.php | 2 +- .../RetailcrmReferenceMiddleware.php | 2 +- .../events/RetailcrmAbandonedCartsEvent.php | 2 +- retailcrm/lib/events/RetailcrmExportEvent.php | 2 +- retailcrm/lib/events/RetailcrmIcmlEvent.php | 2 +- .../events/RetailcrmIcmlUpdateUrlEvent.php | 2 +- .../lib/events/RetailcrmInventoriesEvent.php | 2 +- retailcrm/lib/events/RetailcrmSyncEvent.php | 2 +- .../events/RetailcrmUpdateSinceIdEvent.php | 2 +- retailcrm/retailcrm.php | 10 +- 21 files changed, 164 insertions(+), 46 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f0a0a4..fc372d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v3.4.9 +* Добавлены api методы для работы с файлами + +## v3.4.8 +* Исправлена синхронизация заказов при ненастроенном маппинге статусов + ## v3.4.7 * Исправлена ошибка в работе воркеров публичной части сайта diff --git a/VERSION b/VERSION index 7921bd0..7bcbb38 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.4.8 +3.4.9 diff --git a/retailcrm/controllers/admin/RetailcrmOrdersController.php b/retailcrm/controllers/admin/RetailcrmOrdersController.php index 820bd8c..cb8772c 100644 --- a/retailcrm/controllers/admin/RetailcrmOrdersController.php +++ b/retailcrm/controllers/admin/RetailcrmOrdersController.php @@ -52,7 +52,7 @@ class RetailcrmOrdersController extends RetailcrmAdminPostAbstractController protected function getHandler() { $orders = Tools::getValue('orders', []); - $page = (int) (Tools::getValue('page', 1)); + $page = (int) Tools::getValue('page', 1); switch (Tools::getValue('filter')) { case '1': diff --git a/retailcrm/controllers/admin/RetailcrmReferencesController.php b/retailcrm/controllers/admin/RetailcrmReferencesController.php index 62efe31..c435369 100644 --- a/retailcrm/controllers/admin/RetailcrmReferencesController.php +++ b/retailcrm/controllers/admin/RetailcrmReferencesController.php @@ -69,20 +69,20 @@ class RetailcrmReferencesController extends RetailcrmAdminPostAbstractController $moduleReferences = new RetailcrmReferences($client); switch (true) { - case Tools::getIsset('delivery'): - $references['deliveryTypesCRM'] = $moduleReferences->getApiDeliveryTypes(); + case Tools::getIsset('delivery'): + $references['deliveryTypesCRM'] = $moduleReferences->getApiDeliveryTypes(); - break; - case Tools::getIsset('payment'): - $references['paymentTypesCRM'] = $moduleReferences->getApiPaymentTypes(); + break; + case Tools::getIsset('payment'): + $references['paymentTypesCRM'] = $moduleReferences->getApiPaymentTypes(); - break; - case Tools::getIsset('status'): - $references['statusesCRM'] = $moduleReferences->getApiStatusesWithGroup(); + break; + case Tools::getIsset('status'): + $references['statusesCRM'] = $moduleReferences->getApiStatusesWithGroup(); - break; - default: - throw new Exception('Invalid request data'); + break; + default: + throw new Exception('Invalid request data'); } return [ diff --git a/retailcrm/lib/RetailcrmContextSwitcher.php b/retailcrm/lib/RetailcrmContextSwitcher.php index 48e2573..6da0772 100644 --- a/retailcrm/lib/RetailcrmContextSwitcher.php +++ b/retailcrm/lib/RetailcrmContextSwitcher.php @@ -61,8 +61,8 @@ class RetailcrmContextSwitcher self::storeContext(); foreach (self::getShops() as $shop) { - self::setShopContext((int) ($shop['id_shop'])); - $result[(int) ($shop['id_shop'])] = call_user_func_array($callback, $arguments); + self::setShopContext((int) $shop['id_shop']); + $result[(int) $shop['id_shop']] = call_user_func_array($callback, $arguments); } self::restoreContext(); diff --git a/retailcrm/lib/RetailcrmExportOrdersHelper.php b/retailcrm/lib/RetailcrmExportOrdersHelper.php index 9059244..ace2754 100644 --- a/retailcrm/lib/RetailcrmExportOrdersHelper.php +++ b/retailcrm/lib/RetailcrmExportOrdersHelper.php @@ -91,7 +91,7 @@ class RetailcrmExportOrdersHelper $sqlOrdersInfo = 'FROM `' . _DB_PREFIX_ . 'retailcrm_exported_orders` eo LEFT JOIN `' . _DB_PREFIX_ . 'orders` o on o.`id_order` = eo.`id_order` WHERE 1 ' . Shop::addSqlRestriction(false, 'o') - ; + ; if (0 < count($ordersIds)) { $sqlOrdersInfo .= ' AND (eo.`id_order` IN ( ' . pSQL(implode(', ', $ordersIds)) . ') diff --git a/retailcrm/lib/RetailcrmHistory.php b/retailcrm/lib/RetailcrmHistory.php index 4702850..20348d6 100755 --- a/retailcrm/lib/RetailcrmHistory.php +++ b/retailcrm/lib/RetailcrmHistory.php @@ -56,9 +56,9 @@ class RetailcrmHistory private static function init() { - self::$receiveOrderNumber = (bool) (Configuration::get(RetailCRM::ENABLE_ORDER_NUMBER_RECEIVING)); - self::$sendOrderNumber = (bool) (Configuration::get(RetailCRM::ENABLE_ORDER_NUMBER_SENDING)); - self::$cartStatus = (string) (Configuration::get(RetailCRM::SYNC_CARTS_STATUS)); + self::$receiveOrderNumber = (bool) Configuration::get(RetailCRM::ENABLE_ORDER_NUMBER_RECEIVING); + self::$sendOrderNumber = (bool) Configuration::get(RetailCRM::ENABLE_ORDER_NUMBER_SENDING); + self::$cartStatus = (string) Configuration::get(RetailCRM::SYNC_CARTS_STATUS); self::$statuses = array_flip(array_filter(json_decode(Configuration::get(RetailCRM::STATUS), true))); self::$deliveries = array_flip(array_filter(json_decode(Configuration::get(RetailCRM::DELIVERY), true))); self::$payments = array_flip(array_filter(json_decode(Configuration::get(RetailCRM::PAYMENT), true))); @@ -1002,7 +1002,7 @@ class RetailcrmHistory $default_currency = (int) Configuration::get('PS_CURRENCY_DEFAULT'); $newOrder = new Order(); $newOrder->id_shop = Context::getContext()->shop->id; - $newOrder->id_shop_group = (int) (Context::getContext()->shop->id_shop_group); + $newOrder->id_shop_group = (int) Context::getContext()->shop->id_shop_group; $newOrder->id_address_delivery = isset($addressDelivery->id) ? (int) $addressDelivery->id : 0; $newOrder->id_address_invoice = isset($addressInvoice->id) ? (int) $addressInvoice->id : 0; $newOrder->id_cart = (int) $cart->id; @@ -1289,7 +1289,7 @@ class RetailcrmHistory ->setAlias($orderAddress->alias) ->build() ->getData() - ; + ; } private static function checkDeliveryTypeAndCost($order, $orderToUpdate) @@ -1299,12 +1299,12 @@ class RetailcrmHistory $orderDeliveryCost = !empty($order['delivery']['cost']) ? $order['delivery']['cost'] : null; if (( - null !== $orderDeliveryCode - && isset(self::$deliveries[$orderDeliveryCode]) - && null !== self::$deliveries[$orderDeliveryCode] - && self::$deliveries[$orderDeliveryCode] !== $orderToUpdate->id_carrier - ) - || null !== $orderDeliveryCost + null !== $orderDeliveryCode + && isset(self::$deliveries[$orderDeliveryCode]) + && null !== self::$deliveries[$orderDeliveryCode] + && self::$deliveries[$orderDeliveryCode] !== $orderToUpdate->id_carrier + ) + || null !== $orderDeliveryCost ) { $orderCarrier = self::getOrderCarrier($orderToUpdate); diff --git a/retailcrm/lib/RetailcrmOrderBuilder.php b/retailcrm/lib/RetailcrmOrderBuilder.php index ce51cf6..da3e06d 100644 --- a/retailcrm/lib/RetailcrmOrderBuilder.php +++ b/retailcrm/lib/RetailcrmOrderBuilder.php @@ -295,7 +295,6 @@ class RetailcrmOrderBuilder $this->cmsCustomer, $this->cmsCart, false, - false, $dataFromCart, '', '', @@ -861,7 +860,6 @@ class RetailcrmOrderBuilder $this->cmsCustomer, $this->cmsCart, false, - false, $dataFromCart, $contactPersonId, $contactPersonExternalId, @@ -902,7 +900,7 @@ class RetailcrmOrderBuilder $delivery = json_decode(Configuration::get(RetailCRM::DELIVERY), true); $payment = json_decode(Configuration::get(RetailCRM::PAYMENT), true); $status = json_decode(Configuration::get(RetailCRM::STATUS), true); - $sendOrderNumber = (bool) (Configuration::get(RetailCRM::ENABLE_ORDER_NUMBER_SENDING)); + $sendOrderNumber = (bool) Configuration::get(RetailCRM::ENABLE_ORDER_NUMBER_SENDING); $orderNumber = $sendOrderNumber ? $order->reference : null; if (false === Module::getInstanceByName('advancedcheckout')) { diff --git a/retailcrm/lib/api/RetailcrmApiClientV5.php b/retailcrm/lib/api/RetailcrmApiClientV5.php index 568d0e6..c59b379 100644 --- a/retailcrm/lib/api/RetailcrmApiClientV5.php +++ b/retailcrm/lib/api/RetailcrmApiClientV5.php @@ -207,6 +207,111 @@ class RetailcrmApiClientV5 ); } + /** + * Get files list + * + * @param array $filter + * @param null $limit + * @param null $page + * + * @return RetailcrmApiResponse + */ + public function filesList(array $filter = [], $limit = null, $page = null) + { + $parameters = []; + + if (count($filter)) { + $parameters['filter'] = $filter; + } + if (null !== $page) { + $parameters['page'] = (int) $page; + } + if (null !== $limit) { + $parameters['limit'] = (int) $limit; + } + + return $this->client->makeRequest( + '/files', + RetailcrmHttpClient::METHOD_GET, + $parameters + ); + } + + /** + * Upload file + * + * @param $file + * + * @return RetailcrmApiResponse + */ + public function filesUpload($file) + { + return $this->client->makeRequest( + '/files/upload', + RetailcrmHttpClient::METHOD_POST, + ['file' => $file] + ); + } + + /** + * Returns file data + * + * @param int $id file ID + * + * @throws \RetailCrm\Exception\InvalidJsonException + * @throws \RetailCrm\Exception\CurlException + * @throws \InvalidArgumentException + * + * @return RetailcrmApiResponse + */ + public function filesGet($id) + { + return $this->client->makeRequest("/files/$id", RetailcrmHttpClient::METHOD_GET); + } + + /** + * Delete file + * + * @param string $id file id + * + * @return RetailcrmApiResponse + */ + public function filesDelete($id) + { + if (!$id) { + throw new \InvalidArgumentException( + 'Parameter `id` must be set' + ); + } + + return $this->client->makeRequest( + sprintf('/files/%s/delete', $id), + RetailcrmHttpClient::METHOD_POST + ); + } + + /** + * Edit file + * + * @param array $file + * + * @return RetailcrmApiResponse + */ + public function filesEdit(array $file) + { + if (!count($file)) { + throw new \InvalidArgumentException( + 'Parameter `file` must contains a data' + ); + } + + return $this->client->makeRequest( + "/files/{$file['id']}/edit", + RetailcrmHttpClient::METHOD_POST, + ['file' => json_encode($file), 'id' => $file['id']] + ); + } + /** * Get custom fields list * diff --git a/retailcrm/lib/api/RetailcrmHttpClient.php b/retailcrm/lib/api/RetailcrmHttpClient.php index af489a1..1d4cb48 100644 --- a/retailcrm/lib/api/RetailcrmHttpClient.php +++ b/retailcrm/lib/api/RetailcrmHttpClient.php @@ -114,6 +114,10 @@ class RetailcrmHttpClient $url .= '?' . http_build_query($parameters, '', '&'); } + if (self::METHOD_POST === $method && '/files/upload' === $path) { + $url .= '?apiKey=' . $parameters['apiKey']; + } + $curlHandler = curl_init(); curl_setopt($curlHandler, CURLOPT_URL, $url); curl_setopt($curlHandler, CURLOPT_RETURNTRANSFER, 1); @@ -126,7 +130,12 @@ class RetailcrmHttpClient if (self::METHOD_POST === $method) { curl_setopt($curlHandler, CURLOPT_POST, true); - curl_setopt($curlHandler, CURLOPT_POSTFIELDS, $parameters); + + if ('/files/upload' === $path) { + curl_setopt($curlHandler, CURLOPT_POSTFIELDS, file_get_contents($parameters['file'])); + } else { + curl_setopt($curlHandler, CURLOPT_POSTFIELDS, $parameters); + } } $responseBody = curl_exec($curlHandler); diff --git a/retailcrm/lib/api/middleware/RetailcrmExceptionMiddleware.php b/retailcrm/lib/api/middleware/RetailcrmExceptionMiddleware.php index e36c458..e1c69f6 100644 --- a/retailcrm/lib/api/middleware/RetailcrmExceptionMiddleware.php +++ b/retailcrm/lib/api/middleware/RetailcrmExceptionMiddleware.php @@ -66,7 +66,7 @@ class RetailcrmExceptionMiddleware implements RetailcrmMiddlewareInterface sprintf( 'Expected instance of `%s`, but `%s` given', RetailcrmApiResponse::class, - (is_object($response) ? get_class($response) : gettype($response)) + is_object($response) ? get_class($response) : gettype($response) ) ); } diff --git a/retailcrm/lib/api/middleware/RetailcrmExportOrdersMiddleware.php b/retailcrm/lib/api/middleware/RetailcrmExportOrdersMiddleware.php index eb11c8a..761a6a9 100644 --- a/retailcrm/lib/api/middleware/RetailcrmExportOrdersMiddleware.php +++ b/retailcrm/lib/api/middleware/RetailcrmExportOrdersMiddleware.php @@ -132,7 +132,7 @@ class RetailcrmExportOrdersMiddleware implements RetailcrmMiddlewareInterface $uploadedOrders = []; foreach ($orders as $order) { RetailcrmExportOrdersHelper::updateExportState($order['externalId'], $order['id']); - $uploadedOrders[] = (int) ($order['externalId']); + $uploadedOrders[] = (int) $order['externalId']; } $notUploadedOrders = array_filter($requestedOrders, function ($orderId) use ($uploadedOrders) { diff --git a/retailcrm/lib/api/middleware/RetailcrmReferenceMiddleware.php b/retailcrm/lib/api/middleware/RetailcrmReferenceMiddleware.php index 1fa789a..6bc660e 100644 --- a/retailcrm/lib/api/middleware/RetailcrmReferenceMiddleware.php +++ b/retailcrm/lib/api/middleware/RetailcrmReferenceMiddleware.php @@ -53,7 +53,7 @@ class RetailcrmReferenceMiddleware implements RetailcrmMiddlewareInterface || 'ordersEdit' === $request->getMethod() ) ) { - $receiveOrderNumber = (bool) (Configuration::get(RetailCRM::ENABLE_ORDER_NUMBER_RECEIVING)); + $receiveOrderNumber = (bool) Configuration::get(RetailCRM::ENABLE_ORDER_NUMBER_RECEIVING); $crmOrder = $response->order; if ($receiveOrderNumber diff --git a/retailcrm/lib/events/RetailcrmAbandonedCartsEvent.php b/retailcrm/lib/events/RetailcrmAbandonedCartsEvent.php index 86f9d32..b417bf7 100644 --- a/retailcrm/lib/events/RetailcrmAbandonedCartsEvent.php +++ b/retailcrm/lib/events/RetailcrmAbandonedCartsEvent.php @@ -58,7 +58,7 @@ class RetailcrmAbandonedCartsEvent extends RetailcrmAbstractEvent implements Ret } foreach ($shops as $shop) { - RetailcrmContextSwitcher::setShopContext((int) ($shop['id_shop'])); + RetailcrmContextSwitcher::setShopContext((int) $shop['id_shop']); $syncCartsActive = Configuration::get(RetailCRM::SYNC_CARTS_ACTIVE); diff --git a/retailcrm/lib/events/RetailcrmExportEvent.php b/retailcrm/lib/events/RetailcrmExportEvent.php index aefc97a..91da9f1 100644 --- a/retailcrm/lib/events/RetailcrmExportEvent.php +++ b/retailcrm/lib/events/RetailcrmExportEvent.php @@ -54,7 +54,7 @@ class RetailcrmExportEvent extends RetailcrmAbstractEvent implements RetailcrmEv $shops = $this->getShops(); foreach ($shops as $shop) { - RetailcrmContextSwitcher::setShopContext((int) ($shop['id_shop'])); + RetailcrmContextSwitcher::setShopContext((int) $shop['id_shop']); $api = RetailcrmTools::getApiClient(); diff --git a/retailcrm/lib/events/RetailcrmIcmlEvent.php b/retailcrm/lib/events/RetailcrmIcmlEvent.php index ec55e83..e0e721f 100644 --- a/retailcrm/lib/events/RetailcrmIcmlEvent.php +++ b/retailcrm/lib/events/RetailcrmIcmlEvent.php @@ -54,7 +54,7 @@ class RetailcrmIcmlEvent extends RetailcrmAbstractEvent implements RetailcrmEven $shops = $this->getShops(); foreach ($shops as $shop) { - RetailcrmContextSwitcher::setShopContext((int) ($shop['id_shop'])); + RetailcrmContextSwitcher::setShopContext((int) $shop['id_shop']); $job = new RetailcrmCatalog(); $data = $job->getData(); diff --git a/retailcrm/lib/events/RetailcrmIcmlUpdateUrlEvent.php b/retailcrm/lib/events/RetailcrmIcmlUpdateUrlEvent.php index 2b97dfc..1607853 100644 --- a/retailcrm/lib/events/RetailcrmIcmlUpdateUrlEvent.php +++ b/retailcrm/lib/events/RetailcrmIcmlUpdateUrlEvent.php @@ -54,7 +54,7 @@ class RetailcrmIcmlUpdateUrlEvent extends RetailcrmAbstractEvent implements Reta $shops = $this->getShops(); foreach ($shops as $shop) { - RetailcrmContextSwitcher::setShopContext((int) ($shop['id_shop'])); + RetailcrmContextSwitcher::setShopContext((int) $shop['id_shop']); if (!file_exists(RetailcrmCatalogHelper::getIcmlFilePath())) { continue; diff --git a/retailcrm/lib/events/RetailcrmInventoriesEvent.php b/retailcrm/lib/events/RetailcrmInventoriesEvent.php index a349661..458f022 100644 --- a/retailcrm/lib/events/RetailcrmInventoriesEvent.php +++ b/retailcrm/lib/events/RetailcrmInventoriesEvent.php @@ -54,7 +54,7 @@ class RetailcrmInventoriesEvent extends RetailcrmAbstractEvent implements Retail $shops = $this->getShops(); foreach ($shops as $shop) { - RetailcrmContextSwitcher::setShopContext((int) ($shop['id_shop'])); + RetailcrmContextSwitcher::setShopContext((int) $shop['id_shop']); if (!Configuration::get(RetailCRM::ENABLE_BALANCES_RECEIVING)) { RetailcrmLogger::writeDebug( diff --git a/retailcrm/lib/events/RetailcrmSyncEvent.php b/retailcrm/lib/events/RetailcrmSyncEvent.php index ba80b77..31b2941 100644 --- a/retailcrm/lib/events/RetailcrmSyncEvent.php +++ b/retailcrm/lib/events/RetailcrmSyncEvent.php @@ -54,7 +54,7 @@ class RetailcrmSyncEvent extends RetailcrmAbstractEvent implements RetailcrmEven $shops = $this->getShops(); foreach ($shops as $shop) { - RetailcrmContextSwitcher::setShopContext((int) ($shop['id_shop'])); + RetailcrmContextSwitcher::setShopContext((int) $shop['id_shop']); if (!Configuration::get(RetailCRM::ENABLE_HISTORY_UPLOADS)) { RetailcrmLogger::writeDebug( diff --git a/retailcrm/lib/events/RetailcrmUpdateSinceIdEvent.php b/retailcrm/lib/events/RetailcrmUpdateSinceIdEvent.php index e00e3ca..86c905e 100644 --- a/retailcrm/lib/events/RetailcrmUpdateSinceIdEvent.php +++ b/retailcrm/lib/events/RetailcrmUpdateSinceIdEvent.php @@ -54,7 +54,7 @@ class RetailcrmUpdateSinceIdEvent extends RetailcrmAbstractEvent implements Reta $shops = $this->getShops(); foreach ($shops as $shop) { - RetailcrmContextSwitcher::setShopContext((int) ($shop['id_shop'])); + RetailcrmContextSwitcher::setShopContext((int) $shop['id_shop']); $api = RetailcrmTools::getApiClient(); diff --git a/retailcrm/retailcrm.php b/retailcrm/retailcrm.php index d9bc99e..629ac7a 100644 --- a/retailcrm/retailcrm.php +++ b/retailcrm/retailcrm.php @@ -48,7 +48,7 @@ require_once dirname(__FILE__) . '/bootstrap.php'; class RetailCRM extends Module { - const VERSION = '3.4.8'; + const VERSION = '3.4.9'; const API_URL = 'RETAILCRM_ADDRESS'; const API_KEY = 'RETAILCRM_API_TOKEN'; @@ -204,7 +204,7 @@ class RetailCRM extends Module && ($this->use_new_hooks ? $this->registerHook('actionValidateCustomerAddressForm') : true) && $this->installDB() && $this->installTab() - ; + ; } /** @@ -342,21 +342,21 @@ class RetailCRM extends Module && Configuration::deleteByName(RetailcrmCli::CURRENT_TASK_CLI) && $this->uninstallDB() && $this->uninstallTab() - ; + ; } public function enable($force_all = false) { return parent::enable($force_all) && $this->installTab() - ; + ; } public function disable($force_all = false) { return parent::disable($force_all) && $this->uninstallTab() - ; + ; } public function installDB()