Для работы модуля сначала нужно удалить лицензию admin\controller\extension\module\ms.php
<?php
class ControllerExtensionModuleMS extends Controller {
private $error = array();
public function index() {
$this->load->language('extension/module/ms'); //подключаем любой языковой файл
$request_data = [
'host' => $_SERVER['HTTP_HOST'],
'secret' => 'zerrnoco'
];
if (true) {
$this->document->addScript('view/javascript/ms/ms.js');
$this->document->addStyle('view/stylesheet/ms/ms.css');
$this->document->setTitle($this->language->get('heading_title'));
// регистрируем модуль
$this->load->model('setting/setting');
if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
$this->model_setting_setting->editSetting('ms', $this->request->post);
$this->session->data['success'] = $this->language->get('text_success');
$data['success'] = $this->session->data['success'] ;
//создаем таблицы в БД
$this->load->model('extension/module/ms');
$this->model_extension_module_ms->createTable();
$this->response->redirect($this->url->link('extension/module/ms', 'token=' . $this->session->data['token'] . '&type=module', true));
}
if (!empty($this->config->get('ms_name')) && !empty($this->config->get('ms_password'))) {
$sklad = new Sklad ($this->config->get('ms_name'), $this->config->get('ms_password'));
$ms_organizations = $sklad->getOrganizations();
if (isset($ms_organizations['errors'])) {
foreach ($ms_organizations['errors'] as $error) {
$data['errors'][] = $error['error'];
}
} else {
foreach ($ms_organizations['rows'] as $row) {
$data['organizations'][] = [
'id' => $row['id'],
'name' => $row['name'],
];
}
}
}
$data['ms_name'] = $this->config->get('ms_name');
$data['ms_pasword'] = $this->config->get('ms_password');
$data['heading_title'] = $this->language->get('heading_title'); //объявляем переменную heading_title с данными из языкового файла
$data['entry_status'] = $this->language->get('entry_status');
$data['entry_name'] = $this->language->get('entry_name');
$data['entry_password'] = $this->language->get('entry_password');
$data['entry_organization'] = $this->language->get('entry_organization');
$data['entry_category'] = $this->language->get('entry_category');
$data['entry_stock'] = $this->language->get('entry_stock');
$data['entry_sms'] = $this->language->get('entry_sms');
$data['entry_order'] = $this->language->get('entry_order');
$data['entry_opt'] = $this->language->get('entry_opt');
$data['entry_sms_template'] = $this->language->get('entry_sms_template');
$data['entry_name_sms'] = $this->language->get('entry_name_sms');
$data['entry_password_sms'] = $this->language->get('entry_password_sms');
$data['entry_values'] = $this->language->get('entry_values');
$data['help_ms_sms'] = $this->language->get('help_ms_sms');
$data['help_sms_tpl'] = $this->language->get('help_sms_tpl');
$data['help_sms_tpl_30'] = $this->language->get('help_sms_tpl_30');
$data['button_save'] = $this->language->get('button_save');
$data['button_cancel'] = $this->language->get('button_cancel');
$data['text_enabled'] = $this->language->get('text_enabled');
$data['text_disabled'] = $this->language->get('text_disabled');
$data['text_edit'] = $this->language->get('text_edit');
$data['text_sync'] = $this->language->get('text_sync');
$data['text_yes'] = $this->language->get('text_yes');
$data['text_no'] = $this->language->get('text_no');
$data['token'] = $this->session->data['token'];
$data['loader'] = HTTPS_SERVER . 'view/image/ms/loader.gif';
if (isset($this->error['warning'])) {
$data['error_warning'] = $this->error['warning'];
} else {
$data['error_warning'] = '';
}
$data['breadcrumbs'] = array();
// Добавляем по одной крошке, сначала ссылка на главную страницу
$data['breadcrumbs'][] = array(
'text' => $this->language->get('text_home'), // text_home по всей видимости доступен отовсюду
'href' => $this->url->link('common/dashboard', 'token=' . $this->session->data['token'], 'SSL')
);
// добавляем ссылку на список с модулями, прописано в своем языковом файле
$data['breadcrumbs'][] = array(
'text' => $this->language->get('text_module'),
'href' => $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL')
);
// кнопки
$data['action'] = $this->url->link('extension/module/ms', 'token=' . $this->session->data['token'], 'SSL');
$data['cancel'] = $this->url->link('extension/extension', 'token=' . $this->session->data['token'], 'SSL');
if (!empty($this->config->get('ms_name')) && !empty($this->config->get('ms_password'))) {
$data['sync'] = $this->url->link('extension/module/ms/sync', 'token=' . $this->session->data['token'], 'SSL');
} else {
$data['sync'] ='';
}
if (isset($this->request->post['ms_status'])) {//статус модуля
$data['ms_status'] = $this->request->post['ms_status'];
} else {
$data['ms_status'] = $this->config->get('ms_status');
}
if ($data['ms_status'] != 1) {//если модуль отключен удалить все данные из него
$this->model_setting_setting->deleteSetting('ms');
}
if (isset($this->request->post['ms_name'])) {
$data['ms_name'] = $this->request->post['ms_name'];
} else {
$data['ms_name'] = $this->config->get('ms_name');
}
if (isset($this->request->post['ms_password'])) {
$data['ms_password'] = $this->request->post['ms_password'];
} else {
$data['ms_password'] = $this->config->get('ms_password');
}
if (isset($this->request->post['ms_category'])) {
$data['ms_category'] = $this->request->post['ms_category'];
} else {
$data['ms_category'] = $this->config->get('ms_category');
}
if (isset($this->request->post['ms_stock'])) {
$data['ms_stock'] = $this->request->post['ms_stock'];
} else {
$data['ms_stock'] = $this->config->get('ms_stock');
}
if (isset($this->request->post['ms_org'])) {
$data['ms_org'] = $this->request->post['ms_org'];
} else {
$data['ms_org'] = $this->config->get('ms_org');
}
if (isset($this->request->post['ms_sms'])) {
$data['ms_sms'] = $this->request->post['ms_sms'];
} else {
$data['ms_sms'] = $this->config->get('ms_sms');
}
if (isset($this->request->post['ms_order'])) {
$data['ms_order'] = $this->request->post['ms_order'];
} else {
$data['ms_order'] = $this->config->get('ms_order');
}
if (isset($this->request->post['ms_opt'])) {
$data['ms_opt'] = $this->request->post['ms_opt'];
} else {
$data['ms_opt'] = $this->config->get('ms_opt');
}
if (isset($this->request->post['ms_sms_tpl'])) {
$data['ms_sms_tpl'] = $this->request->post['ms_sms_tpl'];
} else {
$data['ms_sms_tpl'] = $this->config->get('ms_sms_tpl');
}
if (isset($this->request->post['ms_sms_login'])) {
$data['ms_sms_login'] = $this->request->post['ms_sms_login'];
} else {
$data['ms_sms_login'] = $this->config->get('ms_sms_login');
}
if (isset($this->request->post['ms_sms_password'])) {
$data['ms_sms_password'] = $this->request->post['ms_sms_password'];
} else {
$data['ms_sms_password'] = $this->config->get('ms_sms_password');
}
if (isset($this->request->post['ms_sms_tpl_30'])) {
$data['ms_sms_tpl_30'] = $this->request->post['ms_sms_tpl_30'];
} else {
$data['ms_sms_tpl_30'] = $this->config->get('ms_sms_tpl_30');
}
$data['header'] = $this->load->controller('common/header');
$data['column_left'] = $this->load->controller('common/column_left');
$data['footer'] = $this->load->controller('common/footer');
// передаем данные на отрисовку
$this->response->setOutput($this->load->view('extension/module/ms.tpl', $data));
} else {
// $this->response->setOutput($this->load->view('extension/extension', $data));
// $this->session->data['license_error'] = $this->language->get('license_error');
// $data['license_error'] = $this->session->data['license_error'];
$this->response->redirect($this->url->link('extension/extension', '&token=' . $this->session->data['token'], 'SSL'));
}
}
protected function validate() {
if (!$this->user->hasPermission('modify', 'extension/module/ms')) {
$this->error['warning'] = $this->language->get('error_permission');
}
return !$this->error;
}
// protected function license($request_data) {
// $url = 'http://www.api.zerrno.com/?apiLicense.validateLicense={"host":"'.$request_data['host'].'","secret":"'.$request_data['secret'].'"}';
// $process = curl_init($url);
// curl_setopt($process, CURLOPT_HEADER, false);
// curl_setopt($process, CURLOPT_TIMEOUT, 30);
// curl_setopt($process, CURLOPT_RETURNTRANSFER, true);
// $return = curl_exec($process) or die(curl_error($process));
// $return = (array)(json_decode($return));
//
// curl_close($process);
//
// return $return['response']->license;
// }
public function sync() {
$this->load->language('extension/module/ms');
set_time_limit(900);
$request_data = [
'host' => $_SERVER['HTTP_HOST']
];
if (true) {
$this->load->model('extension/module/ms');
$this->load->model('catalog/category');
$this->load->model('catalog/product');
$this->load->model('catalog/option');
$json = [];
if (!empty($this->config->get('ms_name')) && !empty($this->config->get('ms_password'))) {
$login = $this->config->get('ms_name');
$password = $this->config->get('ms_password');
} else {
return false;
}
$sklad = new Sklad($login, $password);
$products = $sklad->getAllProducts();
$sklad->response = [];
$stocks = $sklad->getAllStocks();//остаток
$sklad->response = [];
$ms_product_ids = $this->model_extension_module_ms->getMSProductIds();
$ms_category_ids = $this->model_extension_module_ms->getMSCategoryIds();
foreach ($products as $product) {
if (isset($ms_product_ids) && !empty($ms_product_ids)) {
for ($i = 0; $i < count((array)$ms_product_ids); $i++) {//находим id товаров которые нужно удалить из опенкарт
if ($ms_product_ids[$i]['ms_product_id'] == $product['id']) {
unset($ms_product_ids[$i]);
sort($ms_product_ids);
}
}
}
$product_oc = $this->model_catalog_product->getProduct($this->model_extension_module_ms->getProductIdByMSId($product['id']));
if (!empty($product_oc)) {// если продукт уже существует в опенкарт, нужно обновить его
if (isset($product['name'])) {
$name = $product['name'];
} else {
$name = '';
}
// $name = $product['name'] ?? '';
if (isset($product['code'])) {
$model = $product['code'];
} else {
$model = '';
}
// $model = $product['code'] ?? '';
if (isset($product['description'])) {
$description = $product['description'];
} else {
$description = '';
}
// $description = $product['description'] ?? '';
if (isset($product['article'])) {
$sku = $product['article'];
} else {
$sku = '';
}
// $sku = $product['article'] ?? '';
if (isset($product['image'])) {
$image = $sklad->getProductImage($product['image']['meta']['href']);
} else {
$image = '';
}
// $image = isset($product['image']) ? $sklad->getProductImage($product['image']['meta']['href']) : '';
// if (isset($product['attributes'])) {
// foreach ($product['attributes'] as $field) {
// switch ($field['name']) {
// case 'SEO URL':
// $keyword = $field['value'];
// break;
// case 'Мета-тег Description':
// $meta_desc = $field['value'];
// break;
// default:
// $value = '';
// break;
// }
// }
// }
if (isset($product['salePrices'])) {
foreach ($product['salePrices'] as $prices) {
if ($prices['priceType'] == 'Цена продажи') {
$price = $prices['value']/100;
}
}
}
if ($this->config->get('ms_category')) {
if (isset($product['productFolder']) && $product['pathName'] != '') {//добавляем категорию в опенкарт
$categories = [];
$path = explode('/', $product['pathName']);
$i = 0;
for ($i = 0; $i < count($path); $i++) {
$category_info = $this->model_extension_module_ms->getSyncCategory($path[$i]);
$j = 0;
if (isset($ms_category_ids)) {
for ($j = 0; $j < count((array)$ms_category_ids); $j++) {
$ms_category_name = $this->model_extension_module_ms->getSyncCategoryById($ms_category_ids[$j]['category_id']);
if ($ms_category_name[0]['category_name'] == $path[$i]) {
unset($ms_category_ids[$j]);
sort($ms_category_ids);
}
}
}
if (empty($category_info)) {
$data_category = [
'category_description' => [
'1' => [
'name' => $path[$i],
'description' => $path[$i],
'meta_title' => $path[$i],
'meta_h1' => $path[$i],
'meta_description' => $path[$i],
'meta_keyword' => $path[$i],
]
],
'category_store' => [
'0' => 0
],
'status' => 1,
'image' => '',
'top' => 1,
'column' => 1,
'sort_order' => 0,
'keyword' => '',
'parent_id' => '',
];
if (isset($path[$i - 1])) {
$parent_category_id = $this->model_extension_module_ms->getSyncCategory($path[$i - 1]);
$data_category['parent_id'] = $parent_category_id[0]['category_id'];
}
$category_id = $this->model_catalog_category->addCategory($data_category);
$this->model_extension_module_ms->setSyncCategory($category_id, $path[$i]);
$categories[] = $category_id;
} else {
if (isset($path[$i - 1])) {
$parent_category_id = $this->model_extension_module_ms->getSyncCategory($path[$i - 1]);
$edit_category_data = [
'category_description' => [
'1' => [
'name' => $path[$i],
'description' => $path[$i],
'meta_title' => $path[$i],
'meta_h1' => $path[$i],
'meta_description' => $path[$i],
'meta_keyword' => $path[$i],
]
],
'category_store' => [
'0' => 0
],
'status' => 1,
'image' => '',
'top' => 1,
'column' => 1,
'sort_order' => 0,
'keyword' => '',
'parent_id' => $parent_category_id[0]['category_id'],
];
$this->model_catalog_category->editCategory($category_info[0]['category_id'], $edit_category_data);
}
$categories[] = $category_info[0]['category_id'];
}
}
// echo '<pre>';
// print_r($data_category);
// echo '</pre>';
$main_category_id = $this->model_extension_module_ms->getSyncCategory(array_pop($path));
}
}
$quantity = 0;
if ($this->config->get('ms_stock')) {
if (!empty($stocks) && isset($product['code'])) {//синхронизация остатков
foreach ($stocks as $stock) {
if (isset($product['code'])) {
if ($stock['code'] == $product['code']) {
$quantity += $stock['quantity'];
}
}
}
}
}
if ($this->config->get('ms_opt')) {
if ($product['modificationsCount'] > 0) {//добавить модификации в опенкарт
$variants = $sklad->getVariantsById($product['id']);
$product_options = [];
$product_option_values = [];
if (isset($variants['errors'])) {
$this->error += $variants['errors'];
} else {
foreach ($variants as $variant) {
foreach ($variant['characteristics'] as $options => $option) {
$option_oc = $this->model_extension_module_ms->getOptionByName($option['name']);
$product_options[] = $option['name'];//////////////////////////////////array_unique()собираем в массив опции данного товара
$product_option_values[] = $option['value'];//////////////////////////////////array_unique() -=- значения опций
if (empty($option_oc)) {
$data_option = [
'option_description' => [
'1' => [
'name' => $option['name'],
],
],
'type' => 'select',
'sort_order' => '',
'option_value' => [
'0' => [
'option_value_id' => '',
'option_value_description' => [
'1' => [
'name' => $option['value'],
],
],
'image' => '',
'sort_order' => '',
],
],
];
$option_id_oc = $this->model_catalog_option->addOption($data_option);
$this->model_extension_module_ms->setSyncOption($option_id_oc, $option['name']);
} else {
$option_values_oc = $this->model_catalog_option->getOptionValues($option_oc[0]['option_id']);
$option_value = [];
$find = false;
foreach ($option_values_oc as $option_values) {
$option_value[] = [
'option_value_id' => $option_values['option_value_id'],
'option_value_description' => [
'1' => [
'name' => $option_values['name'],
],
],
'image' => '',
'sort_order' => '',
];
if ($option_values['name'] == $option['value']) {
$find = true;
}
}
if (!$find) {
$option_value[] = [
'option_value_id' => '',
'option_value_description' => [
'1' => [
'name' => $option['value'],
],
],
'image' => '',
'sort_order' => '',
];
}
$edit_option_data = [
'option_description' => [
'1' => [
'name' => $option['name']
]
],
'type' => 'select',
'sort_order' => '',
'option_value' => isset($option_value) ? $option_value : [],
];
$this->model_catalog_option->editOption($option_oc[0]['option_id'], $edit_option_data);
}
}
}
//
// echo "<pre>";
// print_r(array_unique($product_option_values));
// echo "</pre>";
// die();
if (!empty($product_options)) {//добавляем опции к товарам
$product_options = array_unique($product_options);//удаляем повторяющиеся эллементы массива с опциями
foreach ($product_options as $key => $option_name) {
$oc_option_id = $this->model_extension_module_ms->getOptionByName($option_name);
if (!empty($oc_option_id)) {
$oc_option = $this->model_catalog_option->getOption($oc_option_id[0]['option_id']);
$product_option = [
'product_option_id' => '',
'name' => $oc_option['name'],
'option_id' => $oc_option['option_id'],
'type' => $oc_option['type'],
'required' => '1',
];
}
//по аналогии с опциями нужно собрать массив значений опций данного товара
if (!empty($product_option_values)) {
$product_option_values = array_unique($product_option_values);//удаляем повторяющиеся эллементы массива
foreach ($product_option_values as $value) {//перебираем значения модификации данного товара
$product_option_values_oc = $this->model_catalog_option->getOptionValues($oc_option_id[0]['option_id']);//получаем значения данной опции из опенкарт
foreach ($product_option_values_oc as $values) {//перебираем значения опций опенкарт
if ($values['name'] == $value) {//если значение опции опенкарт == значению модификации мойсклад -> добавляем значение этой опции к товару
$product_option['product_option_value'][] = [
'option_value_id' => $values['option_value_id'],
'product_option_value_id' => '',
'quantity' => '',
'subtract' => 0,
'price_prefix' => '+',
'price' => '',
'points_prefix' => '+',
'points' => '',
'weight_prefix' => '+',
'weight' => '',
];
}
}
}
}
$product_option_arr[] = $product_option;
}
}
}
// echo "<pre>";
// print_r($product_option_arr);
// echo "</pre>";
// print_r("END------------------");
}
}
//
$product_data = [
'product_description' => [
'1' => [
'name' => $name,
'description' => $description,
'meta_title' => $name,
'meta_h1' => $name,
'meta_description' => $name,
'meta_keyword' => $name,
'tag' => $name
]
],
'model' => $model,
'sku' => $sku,
'upc' => '',
'ean' => '',
'jan' => '',
'isbn' => '',
'mpn' => '',
'location' => '',
'image' => $image,
'keyword' => '',
'length' => '',
'width'=> '',
'height' => '',
'status' => 1,
'price' => isset($price) ? $price : 1,
'tax_class_id' => 0,
'minimum' => 1,
'shipping' => 1,
'product_store' => [
'0' => 0
],
'quantity' => $quantity,
'subtract' => 1,
'manufacturer_id' => 0,
'sort_order' => 1,
'weight_class_id' => 1,
'weight' => '',
'length_class_id' => 1,
'location' => '',
'product_category' => isset($categories) ? $categories : [],
'stock_status_id' => ($quantity == 0) ? 5 : 7,
'date_available' => date('Y-m-d', time()),
'points' => '',
'main_category_id' => isset($main_category_id) ? $main_category_id[0]['category_id'] : '',
];
if (isset($product_option_arr)) {
$product_data['product_option'] = $product_option_arr;
}
$product_data['main_category_id'] = isset($main_category_id) ? $main_category_id[0]['category_id'] : '';
$this->model_catalog_product->editProduct($product_oc['product_id'], $product_data);
unset($data_category);
unset($categories);
unset($main_category_id);
unset($product_option_arr);
} else {//иначе добавить новый товар в опенкарт
if (isset($product['name'])) {//название товара
$name = $product['name'];
} else {
$name = '';
}
// $name = $product['name'] ?? '';
if (isset($product['code'])) {//код(модель товара)
$model = $product['code'];
} else {
$model = '';
}
// $model = $product['code'] ?? '';
if (isset($product['description'])) {//описание товара
$description = $product['description'];
} else {
$description = '';
}
// $description = $product['description'] ?? '';
if (isset($product['article'])) {//артикул товара
$sku = $product['article'];
} else {
$sku = '';
}
// $sku = $product['article'] ?? '';
if (isset($product['image'])) { //изображение товара
$image = $sklad->getProductImage($product['image']['meta']['href']);
} else {
$image = '';
}
// $image = isset($product['image']) ? $sklad->getProductImage($product['image']['meta']['href']) : '';
// if (isset($product['attributes'])) {//дополнительные поля
// foreach ($product['attributes'] as $field) {
// switch ($field['name']) {
// case 'SEO URL':
// $keyword = $field['value'];
// break;
// case 'Мета-тег Description':
// $meta_desc = $field['value'];
// break;
// default:
// $value = '';
// break;
// }
// }
// }
if (isset($product['salePrices'])) {//цена продажи
foreach ($product['salePrices'] as $prices) {
if ($prices['priceType'] == 'Цена продажи') {
$price = $prices['value']/100;
}
}
}
if ($this->config->get('ms_category')) {
if (isset($product['productFolder']) && $product['pathName'] != '') {//добавляем категорию в опенкарт
$categories = [];
$path = explode('/', $product['pathName']);
$i = 0;
for ($i = 0; $i < count($path); $i++) {
$category_info = $this->model_extension_module_ms->getSyncCategory($path[$i]);
$j = 0;
if (isset($ms_category_ids)) {
for ($j = 0; $j < count((array)$ms_category_ids); $j++) {
$ms_category_name = $this->model_extension_module_ms->getSyncCategoryById($ms_category_ids[$j]['category_id']);
if ($ms_category_name[0]['category_name'] == $path[$i]) {
unset($ms_category_ids[$j]);
sort($ms_category_ids);
}
}
}
if (empty($category_info)) {
$data_category = [
'category_description' => [
'1' => [
'name' => $path[$i],
'description' => $path[$i],
'meta_title' => $path[$i],
'meta_h1' => $path[$i],
'meta_description' => $path[$i],
'meta_keyword' => $path[$i],
]
],
'category_store' => [
'0' => 0
],
'status' => 1,
'image' => '',
'top' => 1,
'column' => 1,
'sort_order' => 0,
'keyword' => '',
'parent_id' => '',
];
if (isset($path[$i - 1])) {
$parent_category_id = $this->model_extension_module_ms->getSyncCategory($path[$i - 1]);
$data_category['parent_id'] = $parent_category_id[0]['category_id'];
}
$category_id = $this->model_catalog_category->addCategory($data_category);
$this->model_extension_module_ms->setSyncCategory($category_id, $path[$i]);
$categories[] = $category_id;
} else {
if (isset($path[$i - 1])) {
$parent_category_id = $this->model_extension_module_ms->getSyncCategory($path[$i - 1]);
$edit_category_data = [
'category_description' => [
'1' => [
'name' => $path[$i],
'description' => $path[$i],
'meta_title' => $path[$i],
'meta_h1' => $path[$i],
'meta_description' => $path[$i],
'meta_keyword' => $path[$i],
]
],
'category_store' => [
'0' => 0
],
'status' => 1,
'image' => '',
'top' => 1,
'column' => 1,
'sort_order' => 0,
'keyword' => '',
'parent_id' => $parent_category_id[0]['category_id'],
];
$this->model_catalog_category->editCategory($category_info[0]['category_id'], $edit_category_data);
}
$categories[] = $category_info[0]['category_id'];
}
}
// echo '<pre>';
// print_r($data_category);
// echo '</pre>';
$main_category_id = $this->model_extension_module_ms->getSyncCategory(array_pop($path));
}
}
$quantity = 0;
if ($this->config->get('ms_stock')) {
if (!empty($stocks) && isset($product['code'])) {//синхронизация остатков
foreach ($stocks as $stock) {
if (isset($product['code'])) {
if ($stock['code'] == $product['code']) {
$quantity += $stock['quantity'];
}
}
}
}
}
//
if ($this->config->get('ms_opt')) {
if ($product['modificationsCount'] > 0) {//добавить модификации в опенкарт
$variants = $sklad->getVariantsById($product['id']);
$product_options = [];
$product_option_values = [];
if (isset($variants['errors'])) {
$this->error += $variants['errors'];
} else {
foreach ($variants as $variant) {
foreach ($variant['characteristics'] as $options => $option) {
$option_oc = $this->model_extension_module_ms->getOptionByName($option['name']);
$product_options[] = $option['name'];//////////////////////////////////array_unique()собираем в массив опции данного товара
$product_option_values[] = $option['value'];//////////////////////////////////array_unique() -=- значения опций
if (empty($option_oc)) {
$data_option = [
'option_description' => [
'1' => [
'name' => $option['name'],
],
],
'type' => 'select',
'sort_order' => '',
'option_value' => [
'0' => [
'option_value_id' => '',
'option_value_description' => [
'1' => [
'name' => $option['value'],
],
],
'image' => '',
'sort_order' => '',
],
],
];
$option_id_oc = $this->model_catalog_option->addOption($data_option);
$this->model_extension_module_ms->setSyncOption($option_id_oc, $option['name']);
} else {
$option_values_oc = $this->model_catalog_option->getOptionValues($option_oc[0]['option_id']);
$option_value = [];
$find = false;
foreach ($option_values_oc as $option_values) {
$option_value[] = [
'option_value_id' => $option_values['option_value_id'],
'option_value_description' => [
'1' => [
'name' => $option_values['name'],
],
],
'image' => '',
'sort_order' => '',
];
if ($option_values['name'] == $option['value']) {
$find = true;
}
}
if (!$find) {
$option_value[] = [
'option_value_id' => '',
'option_value_description' => [
'1' => [
'name' => $option['value'],
],
],
'image' => '',
'sort_order' => '',
];
}
$edit_option_data = [
'option_description' => [
'1' => [
'name' => $option['name']
]
],
'type' => 'select',
'sort_order' => '',
'option_value' => isset($option_value) ? $option_value : [],
];
$this->model_catalog_option->editOption($option_oc[0]['option_id'], $edit_option_data);
}
}
}
//
// echo "<pre>";
// print_r(array_unique($product_option_values));
// echo "</pre>";
// die();
if (!empty($product_options)) {//добавляем опции к товарам
$product_options = array_unique($product_options);//удаляем повторяющиеся эллементы массива с опциями
foreach ($product_options as $key => $option_name) {
$oc_option_id = $this->model_extension_module_ms->getOptionByName($option_name);
$oc_option = $this->model_catalog_option->getOption($oc_option_id[0]['option_id']);
$product_option = [
'product_option_id' => '',
'name' => $oc_option['name'],
'option_id' => $oc_option['option_id'],
'type' => $oc_option['type'],
'required' => '1',
];
//по аналогии с опциями нужно собрать массив значений опций данного товара
if (!empty($product_option_values)) {
$product_option_values = array_unique($product_option_values);//удаляем повторяющиеся эллементы массива
foreach ($product_option_values as $value) {//перебираем значения модификации данного товара
$product_option_values_oc = $this->model_catalog_option->getOptionValues($oc_option_id[0]['option_id']);//получаем значения данной опции из опенкарт
foreach ($product_option_values_oc as $values) {//перебираем значения опций опенкарт
if ($values['name'] == $value) {//если значение опции опенкарт == значению модификации мойсклад -> добавляем значение этой опции к товару
$product_option['product_option_value'][] = [
'option_value_id' => $values['option_value_id'],
'product_option_value_id' => '',
'quantity' => '',
'subtract' => 0,
'price_prefix' => '+',
'price' => '',
'points_prefix' => '+',
'points' => '',
'weight_prefix' => '+',
'weight' => '',
];
}
}
}
}
$product_option_arr[] = $product_option;
}
}
}
// echo "<pre>";
// print_r($product_option_arr);
// echo "</pre>";
// print_r("END------------------");
}
}
//
$product_data = [
'product_description' => [
'1' => [
'name' => $name,
'description' => $description,
'meta_title' => $name,
'meta_h1' => $name,
'meta_description' => $name,
'meta_keyword' => $name,
'tag' => $name
]
],
'model' => $model,
'sku' => $sku,
'upc' => '',
'ean' => '',
'jan' => '',
'isbn' => '',
'mpn' => '',
'image' => $image,
'keyword' => '',
'length' => '',
'width'=> '',
'height' => '',
'status' => 1,
'price' => isset($price) ? $price : 1,
'tax_class_id' => 0,
'minimum' => 1,
'shipping' => 1,
'product_store' => [
'0' => 0
],
'quantity' => $quantity,
'subtract' => 1,
'manufacturer_id' => 0,
'sort_order' => 1,
'weight_class_id' => 1,
'weight' => '',
'length_class_id' => 1,
'location' => '',
'product_category' => isset($categories) ? $categories : [],
'stock_status_id' => ($quantity == 0) ? 5 : 7,
'date_available' => date('Y-m-d', time()),
'points' => '',
'main_category_id' => isset($main_category_id) ? $main_category_id[0]['category_id'] : '',
];
if (isset($product_option_arr)) {
$product_data['product_option'] = $product_option_arr;
}
$product_id = $this->model_catalog_product->addProduct($product_data);
unset($data_category);
unset($categories);
unset($main_category_id);
unset($product_option_arr);
$this->model_extension_module_ms->syncProducts($product_id, $product['id']);
}
}
//удалить товары
if (!empty($ms_product_ids)) {
foreach ($ms_product_ids as $id) {
$product_oc_id = $this->model_extension_module_ms->getProductIdByMSId($id['ms_product_id']);
$this->model_catalog_product->deleteProduct($product_oc_id);
// $this->model_extension_module_ms->deleteProductId($product_oc_id);
}
}
//удалить категории
if (!empty($ms_category_ids)) {
foreach ($ms_category_ids as $cat_id) {
$this->model_catalog_category->deleteCategory($cat_id['category_id']);
// $this->model_extension_module_ms->deleteCategoryId($cat_id['category_id']);
}
}
if ($this->error) {//return json errors
$json['errors'] = $this->error;
}
// sleep(10);
$this->response->addHeader('Content-Type: application/json');
$this->response->setOutput(json_encode($json));
// $this->response->redirect($this->url->link('catalog/product','&token=' . $this->session->data['token'], 'SSL'));
} else {
// $this->session->data['license_error'] = $this->language->get('license_error');
// $data['license_error'] = $this->session->data['license_error'];
$this->response->redirect($this->url->link('extension/extension', '&token=' . $this->session->data['token'], 'SSL'));
}
}
//function for send SMS customers who didn`t have orders last 30 days
public function sendSMS() {
$this->load->language('extension/module/ms');
$request_data = [
'host' => $_SERVER['HTTP_HOST'],
'secret' => 'zerrnoco'
];
if (true) {
$this->load->model('extension/module/ms');
$this->load->model('customer/customer');
$customers_id = $this->model_extension_module_ms->getCustomerIds();
if (!empty($customers_id)) {
//send msg SMSint
$sms_login = $this->config->get('ms_sms_login');
$sms_password = $this->config->get('ms_sms_password');
$smsint = new Transport($sms_login, $sms_password);
foreach ($customers_id as $customer) {
$customer_info = $this->model_customer_customer->getCustomer($customer['customer_id']);
// echo '<pre>';
// print_r($customer_info);
// echo '</pre>';
// die();
if (!empty($customer_info)) {
if ($customer_info['sms_status'] == 0) {
$sms_text = $this->config->get('ms_sms_tpl_30');
$customer_telephone = str_replace(array('+', ' ', '(' , ')', '-'), '', $customer_info['telephone']);
$customer_email = $customer_info['email'];
//replace values
$replace = [
'{$name}' => isset($customer_name) ? $customer_name : '',
'{$email}' => isset($customer_email) ? $customer_email : '',
];
//
$sms_text = strtr($sms_text, $replace);
$params = [
'text' => $sms_text,
'source' => 'PikFormy',
'action' => 'check'
];
$phones = [strval($customer_telephone)];
$send = $smsint->send($params, $phones);
echo "<pre>";
print_r($send);
echo "</pre>";
if ($send['code'] == 1) {
$status = 1;
$this->model_extension_module_ms->changeSmsStatus($customer['customer_id'], $status);
}
} elseif ($customer_info['sms_status'] == 1) {
$diff = (time() - strtotime($customer_info['date_update_status'], time()))/(60 * 60 * 24);//(*24)
if ($diff >= 30) {
$this->model_extension_module_ms->changeSmsStatus($customer['customer_id'], 0);
}
}
}
}
}
} else {
// $this->session->data['license_error'] = $this->language->get('license_error');
// $data['license_error'] = $this->session->data['license_error'];
$this->response->redirect($this->url->link('extension/extension', '&token=' . $this->session->data['token'], 'SSL'));
}
}
}