diff --git a/MoySkladICMLParser.php b/MoySkladICMLParser.php
index 07eccb9..f62d3a1 100644
--- a/MoySkladICMLParser.php
+++ b/MoySkladICMLParser.php
@@ -12,11 +12,6 @@ class MoySkladICMLParser
*/
const IMGUR_URL = 'https://api.imgur.com/3/image.json';
- /**
- * imgur client id
- */
- const IMGUR_CLIENT_ID = '042dcb6bf65b6fd';
-
/**
* Таймаут в секундах
*/
@@ -148,7 +143,7 @@ class MoySkladICMLParser
$products = $this->parseProducts($categories, $vendors);
- if (isset($this->options['image']) && $this->options['image'] === true) {
+ if (isset($this->options['imgur']) && isset($this->options['imgur']['clientId'])) {
$products = $this->uploadImage($products);
}
@@ -165,40 +160,50 @@ class MoySkladICMLParser
*/
protected function uploadImage($products)
{
+ if (file_exists(__DIR__ . '/images') === false) {
+ @mkdir(__DIR__ . '/images');
+ }
+
$uploaded = array();
- if (file_exists(__DIR__ . "/images.json")) {
- $uploaded = json_decode(file_get_contents(__DIR__ . "/images.json"), true);
+ if (file_exists(__DIR__ . "/images/{$this->shop}.json")) {
+ $uploaded = json_decode(file_get_contents(__DIR__ . "/images/{$this->shop}.json"), true);
}
foreach ($products as $id => $product) {
if (isset($product['tmpPicture'])) {
- if (isset($uploaded[$this->shop]) && isset($uploaded[$this->shop][$product['tmpPicture']['uuid']])) {
- $products[$id]['picture'] = $uploaded[$this->shop][$product['tmpPicture']['uuid']];
+ if (isset($uploaded) && isset($uploaded[$product['tmpPicture']['uuid']])) {
+ $products[$id]['picture'] = $uploaded[$product['tmpPicture']['uuid']];
+ unset($product['tmpPicture']);
continue;
}
+ $data = array(
+ 'image' => $product['tmpPicture']['contents'],
+ 'name' => $product['tmpPicture']['filename']
+ );
+
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, self::IMGUR_URL);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
- curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Client-ID ' . self::IMGUR_CLIENT_ID));
+ curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Client-ID {$this->options['imgur']['clientId']}"));
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
- curl_setopt($ch, CURLOPT_POSTFIELDS, array('image' => $product['tmpPicture']['contents']));
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($ch);
curl_close($ch);
- $result = json_decode($result, true);
+ $result = @json_decode($result, true);
if (isset($result['success']) && $result['success'] == true) {
$products[$id]['picture'] = $result['data']['link'];
- $uploaded[$this->shop][$product['tmpPicture']['uuid']] = $result['data']['link'];
+ $uploaded[$product['tmpPicture']['uuid']] = $result['data']['link'];
}
unset($product['tmpPicture']);
}
}
if (count($uploaded) > 0) {
- file_put_contents(__DIR__ . "/images.json", json_encode($uploaded));
+ file_put_contents(__DIR__ . "/images/{$this->shop}.json", json_encode($uploaded));
}
return $products;
@@ -324,7 +329,7 @@ class MoySkladICMLParser
$total = 0;
do {
$query = array('start' => $start);
- if (isset($this->options['image']) && $this->options['image'] === true) {
+ if (isset($this->options['imgur'])) {
$query['fileContent'] = 'true';
}
$xml = $this->requestXml(self::PRODUCT_LIST_URL.'?'.http_build_query($query));
@@ -356,8 +361,7 @@ class MoySkladICMLParser
);
if (
- isset($this->options['image']) &&
- $this->options['image'] === true &&
+ isset($this->options['imgur']) &&
isset($v->images) &&
isset($v->images->image) &&
isset($v->images->image->contents)
@@ -366,6 +370,10 @@ class MoySkladICMLParser
'uuid' => (string) $v->images->image->uuid,
'contents' => (string) $v->images->image->contents
);
+
+ if (isset($v->images->image['filename'])) {
+ $products[$uuid]['tmpPicture']['filename'] = $v->images->image['filename'];
+ }
}
}
diff --git a/README.md b/README.md
index 19c9821..d27cad4 100644
--- a/README.md
+++ b/README.md
@@ -38,24 +38,19 @@ $parser->generateICML();
* `ignoreProducts` - Массив с ключами:
* `uuids` - Массив с `uuid` товаров, которые будут проигнорированы (Модификации товара проигнорировать нельзя)
* `externalCodes` - Массив с `внешними кодами` товаров, которые будут проигнорированы (Модификации товара проигнорировать нельзя)
+* `imgur` - Хостинг изображений
+ * `clientId` - Уникальный идентификатор приложения (как его получить читайте далее)
Все доступные опции не обязательны для использования
-## Добавление пользовательских полей url и picture
+## Добавление изображения
-Для того чтобы добавить в выгрузку изображение товара либо url требуется создать 2 пользовательских поля к товару в моем складе
+Для того чтобы добавить в выгрузку изображение товара
-1) Заходим в Администрирование
-2) Выбираем вкладку справочники
-3) Затем выбрать справочник Товар
-4) Добавить нужное пользовательское поле
-
-Параметры пользовательского поля для URL
-* `Название` - RetailCrmURL
-* `Тип` - Строка
-
-Параметры пользовательского поля для пути к изображению
-* `Название` - RetailCrmPicture
-* `Тип` - Строка
-
-
\ No newline at end of file
+Создать приложение на сайте https://api.imgur.com/oauth2/addclient
+* Application name - Название сайта
+* Authorization type - OAuth 2 authorization without a callback URL
+* Application website - URL сайта
+* Email - email администаротора сайта
+* Description - Описание сайта
+После создания приложения отобразится два поля `Client ID` и `Client secret`. Нам потребуется только `Client ID` который требуется вставить в $options.
\ No newline at end of file
diff --git a/doc/settings/settings.png b/doc/settings/settings.png
deleted file mode 100644
index f31aa62..0000000
Binary files a/doc/settings/settings.png and /dev/null differ