📁 PHP Dosya Yöneticisi
/
/
home
/
demodesigncom
/
e-ticaretv11.demodesign.com.tr
/
propanel
/
model
/
gkd_import
📝
handler.php
← Geri Dön
<?php class ModelGkdImportHandler extends Model { public $simulation = true; public $storeIdToName = array(); public $layoutIdToName = array(); public $customer_groups = array(); public $filetype = ''; private $tool; public function getObject() { return $this; } public function __construct($registry) { parent::__construct($registry); $this->tool = $this->model_gkd_import_tool->getObject(); } public function forceString($field, $value) { if (!is_scalar($value)) { $this->tool->log(array( 'row' => $this->session->data['obui_current_line'], 'status' => 'error', 'title' => $this->language->get('warning'), 'msg' => $field.' does not contains a string value, make sure to not select an array for this field, content: <br/>'.print_r($value, true), )); return ''; } return $value; } public function simpleArrayHandler($field, $config) { $values_array = array(); if (empty($config['columns'][$field])) { return $values_array; } if (count($config['columns'][$field]) == 1 && $config['columns'][$field][0] === '') { return array(); } foreach ((array) $config['columns'][$field] as $value) { if (is_array($value)) { $values_array = array_merge($values_array, $value); } else if (!empty($config['multiple_separator'])) { $values_array = array_merge($values_array, explode(@html_entity_decode($config['multiple_separator'], ENT_QUOTES, 'UTF-8'), $value)); } else { $values_array[] = $value; } } return $values_array; } public function simpleArrayHandlerValue($value, $config) { $values_array = array(); if (empty($value)) { return $values_array; } if (count($value) == 1 && $value[0] === '') { return array(); } foreach ((array) $value as $value) { if (is_array($value)) { $values_array = array_merge($values_array, $value); } else if (!empty($config['multiple_separator'])) { $values_array = array_merge($values_array, explode(@html_entity_decode($config['multiple_separator'], ENT_QUOTES, 'UTF-8'), $value)); } else { $values_array[] = $value; } } return $values_array; } public function customerGroupHandler($value, $config) { $value = $this->db->escape($this->request->clean($value)); if (!$value) return ''; // get by id if (is_numeric($value)) { $query = $this->db->query("SELECT customer_group_id, name FROM " . DB_PREFIX . "customer_group_description WHERE customer_group_id = '" . (int) $value . "'")->row; } else { $query = $this->db->query("SELECT customer_group_id, name FROM " . DB_PREFIX . "customer_group_description WHERE name = '" . $value . "'")->row; } if (!empty($query['customer_group_id'])) { $customer_group_name = $query['name']; $customer_group_id = $query['customer_group_id']; } else { $this->load->model('localisation/language'); $languages = $this->model_localisation_language->getLanguages(); $customer_group_data = array( 'approval' => '', 'sort_order' => '', ); foreach ($languages as $language) { $customer_group_data['customer_group_description'][$language['language_id']] = array( 'name' => $value, 'description' => '', ); } if (!$this->simulation) { if (version_compare(VERSION, '2.1', '>=')) { $this->load->model('customer/customer_group'); $customer_group_id = $this->model_customer_customer_group->addCustomerGroup($this->request->clean($customer_group_data)); } else { $this->load->model('sale/customer_group'); $customer_group_id = $this->model_sale_customer_group->addCustomerGroup($this->request->clean($customer_group_data)); } } $customer_group_name = '['.$this->language->get('new').'] ' . $value; } if ($this->simulation) { return $customer_group_name; } else { return $customer_group_id; } } public function countryHandler($value, $config, $get_name = false) { $value = $this->db->escape($this->request->clean($value)); if (!$value) return ''; // get by id if (is_numeric($value)) { $query = $this->db->query("SELECT DISTINCT country_id, name FROM " . DB_PREFIX . "country WHERE country_id = '" . (int) $value . "'")->row; } else { $query = $this->db->query("SELECT DISTINCT country_id, name FROM " . DB_PREFIX . "country WHERE name = '" . $value . "' OR iso_code_2 = '" . strtoupper($value) . "' OR iso_code_3 = '" . strtoupper($value) . "'")->row; } if ($get_name) { return !empty($query['name']) ? $query['name'] : $value; } if (!empty($query['country_id'])) { if ($this->simulation) { return $query['name']; } else { return $query['country_id']; } } else { $this->tool->log(array( 'row' => $this->session->data['obui_current_line'], 'status' => 'error', 'title' => $this->language->get('warning'), 'msg' => $this->language->get('warning_country_not_found') . ': ' . $value, )); } return ''; } public function zoneHandler($value, $config, $country_id = 0, $get_name = false) { $value = $this->db->escape($this->request->clean($value)); if (!$value) return ''; // get by id if (is_numeric($value)) { $query = $this->db->query("SELECT DISTINCT zone_id, name FROM " . DB_PREFIX . "zone WHERE zone_id = '" . (int) $value . "'")->row; } else { // get country id if is a string if (is_string($country_id)) { $country = $this->db->query("SELECT DISTINCT country_id, name FROM " . DB_PREFIX . "country WHERE name = '" . $this->db->escape($country_id) . "'")->row; if (!empty($country['country_id'])) { $country_id = $country['country_id']; } } $query = $this->db->query("SELECT DISTINCT zone_id, name FROM " . DB_PREFIX . "zone WHERE name = '" . $value . "' OR (code = '" . strtoupper($value) . "' AND country_id = '" . (int) $country_id . "')")->row; } if ($get_name) { return !empty($query['name']) ? $query['name'] : $value; } if (!empty($query['zone_id'])) { if ($this->simulation) { return $query['name']; } else { return $query['zone_id']; } } else { $this->tool->log(array( 'row' => $this->session->data['obui_current_line'], 'status' => 'error', 'title' => $this->language->get('warning'), 'msg' => $this->language->get('warning_zone_not_found') . ': ' . $value, )); } return ''; } /* public function countryHandler($key, $config) { if (empty($config['columns']['address'][$key]['country_id'])) { return ''; } // get by id if (is_numeric($config['columns']['address'][$key]['country_id'])) { $query = $this->db->query("SELECT DISTINCT country_id, name FROM " . DB_PREFIX . "country WHERE country_id = '" . (int) $config['columns']['address'][$key]['country_id'] . "'")->row; if ($this->simulation) { if (!empty($query['name'])) { return '['.$query['country_id'].'] '.$query['name']; } else { return $this->language->get('not_found'); } } else { if (!empty($query['country_id'])) { return $query['country_id']; } } // get by name } else if (is_string($config['columns']['address'][$key]['country_id'])) { $query = $this->db->query("SELECT DISTINCT country_id, name FROM " . DB_PREFIX . "country WHERE name = '" . $this->db->escape($this->request->clean($config['columns']['address'][$key]['country_id'])) . "'")->row; if (!empty($query['country_id'])) { if ($this->simulation) { return $query['name']; } else { return $query['country_id']; } } else { $this->session->data['obui_log'][] = array( 'row' => $this->session->data['obui_current_line'], 'status' => 'error', 'title' => $this->language->get('warning'), 'msg' => $this->language->get('warning_country_not_found') . ': ' . $config['columns']['address'][$key]['country_id'], ); } } return ''; } public function zoneHandler($key, $config) { if (empty($config['columns']['address'][$key]['zone_id'])) { return ''; } // get by id if (is_numeric($config['columns']['address'][$key]['zone_id'])) { $query = $this->db->query("SELECT DISTINCT zone_id, name FROM " . DB_PREFIX . "zone WHERE country_id = '" . (int) $config['columns']['address'][$key]['zone_id'] . "'")->row; if ($this->simulation) { if (!empty($query['name'])) { return $query['name']; } else { return $this->language->get('not_found'); } } else { if (!empty($query['zone_id'])) { return $query['zone_id']; } } // get by name } else if (is_string($config['columns']['address'][$key]['zone_id'])) { $query = $this->db->query("SELECT DISTINCT zone_id, name FROM " . DB_PREFIX . "zone WHERE name = '" . $this->db->escape($this->request->clean($config['columns']['address'][$key]['zone_id'])) . "'")->row; if (!empty($query['zone_id'])) { if ($this->simulation) { return '['.$query['zone_id'].'] '.$query['name']; } else { return $query['zone_id']; } } else { $this->session->data['obui_log'][] = array( 'row' => $this->session->data['obui_current_line'], 'status' => 'error', 'title' => $this->language->get('warning'), 'msg' => $this->language->get('warning_zone_not_found') . ': ' . $config['columns']['address'][$key]['zone_id'], ); } } return ''; } */ public function stockHandler($field, $config) { if (empty($config['columns'][$field])) { return ''; } // get by id if (is_numeric($config['columns'][$field])) { $query = $this->db->query("SELECT DISTINCT stock_status_id, name FROM " . DB_PREFIX . "stock_status WHERE stock_status_id = '" . (int) $config['columns'][$field] . "'")->row; if ($this->simulation) { if (!empty($query['name'])) { return '['.$query['stock_status_id'].'] '.$query['name']; } else { return $this->language->get('not_found'); } } else { if (!empty($query['stock_status_id'])) { return $query['stock_status_id']; } } // get by name } else if (is_string($config['columns'][$field])) { $query = $this->db->query("SELECT DISTINCT stock_status_id, name FROM " . DB_PREFIX . "stock_status WHERE name = '" . $this->db->escape($this->request->clean($config['columns'][$field])) . "'")->row; if (!empty($query['stock_status_id'])) { if ($this->simulation) { return '['.$query['stock_status_id'].'] '.$query['name']; } else { return $query['stock_status_id']; } } else if (true) { // stock does not exists, create it ? $this->load->model('localisation/language'); $languages = $this->model_localisation_language->getLanguages(); $stock_data = array(); foreach ($languages as $language) { $stock_data['stock_status'][$language['language_id']] = array( 'name' => $config['columns'][$field], ); } $this->load->model('localisation/stock_status'); if (!$this->simulation) { $stock_id = $this->model_localisation_stock_status->addStockStatus($this->request->clean($stock_data)); } else { return '['.$this->language->get('new').'] '.$config['columns'][$field]; } return $stock_id; } } return ''; } public function dataArrayHandler($field, $config) { $values_array = array(); if (empty($config['columns'][$field])) { return $values_array; } if (count($config['columns'][$field]) == 1 && $config['columns'][$field][0] === '') { return array(); } foreach ((array) $config['columns'][$field] as $value) { if (is_array($value)) { $values_array = array_merge($values_array, $value); } else if (!empty($config['multiple_separator'])) { $values_array = array_merge($values_array, explode(@html_entity_decode($config['multiple_separator'], ENT_QUOTES, 'UTF-8'), $value)); } else { $values_array[] = $value; } } return $values_array; } public function optionHandler($field, $config, $line, $product_id) { $return_values = $values_array = $summed_quantity = $header_keys = $header_keys_number = array(); if (empty($config['columns'][$field]) && empty($config['option_fields'])) { return $values_array; } if (isset($config['columns'][$field]) && array_filter($config['columns'][$field])) { foreach ((array) $config['columns'][$field] as $key => $value) { if ($value === '') { continue; } else if (is_array($value)) { $values_array = array_merge($values_array, $value); foreach($value as $v) { //$header_keys[] = $key; $header_keys[] = $config['columns_bindings'][$field][$key]; $header_keys_number[] = $key; } //$force_header_name = 'Option'; // force option name because header cannot be found when merged } else if (!empty($config['option_separator'])) { $value = explode(@html_entity_decode($config['option_separator'], ENT_QUOTES, 'UTF-8'), $value); $values_array = array_merge($values_array, $value); foreach($value as $v) { $header_keys[] = $config['columns_bindings'][$field][$key]; $header_keys_number[] = $key; } } else if (!empty($config['multiple_separator'])) { $value = explode(@html_entity_decode($config['multiple_separator'], ENT_QUOTES, 'UTF-8'), $value); $values_array = array_merge($values_array, $value); foreach($value as $v) { $header_keys[] = $config['columns_bindings'][$field][$key]; $header_keys_number[] = $key; } // } else if (!empty($config['multiple_separator'])) { // $values_array = array_merge($values_array, explode(@html_entity_decode($config['multiple_separator'], ENT_QUOTES, 'UTF-8'), $value)); // $force_header_name = 'Option'; // force option name because header cannot be found when merged } else { $values_array[] = $value; $header_keys[] = $config['columns_bindings'][$field][$key]; $header_keys_number[] = $key; } } } else { if (!empty($config['option_fields'])) { $values_array[] = ''; } } $this->load->model('localisation/language'); $languages = $this->model_localisation_language->getLanguages(); $toInsertArray = array(); foreach ($values_array as $current_key => &$value) { $option_names = $option_values = $option_names_ml = $option_values_ml = array(); $option_type_arr = $option_image_arr = $option_price_arr = $option_price_prefix_arr = $option_required_arr = $option_weight_arr = $option_quantity_arr = $option_subtract_arr = $option_points_arr = $option_sku_arr = $option_upc_arr = $option_ean_arr = $option_model_arr= array(); $option_type = $option_name = $option_prod_opt_val_id = $option_image = $option_price = $option_price_prefix = $option_required = $option_weight = $option_quantity = $option_subtract = $option_points = $option_sku = $option_upc = $option_ean = $option_model = ''; if (isset($header_keys[$current_key])) { $header_key = $header_keys[$current_key]; } // csv advanced option fields if (!in_array($this->filetype, array('xml', 'json')) && !empty($config['option_fields']) && !$value) { if (isset($config['option_fields']['type']) && !empty($line[$config['option_fields']['type']])) { $option_type = strtolower($line[$config['option_fields']['type']]); } /* if (isset($config['option_fields']['name'])) { // handle multilingual values if (is_array($config['option_fields']['name'])) { $ml_values = array(); foreach ($config['option_fields']['name'] as $lang_id => $optNameField) { if (!empty($line[$optNameField])) { $ml_values[$lang_id] = $line[$optNameField]; } } if (!empty($ml_values)) { $option_names_ml[] = $ml_values; $option_names[] = reset($ml_values); } } else if (!empty($line[$config['option_fields']['name']])) { $option_names[] = $line[$config['option_fields']['name']]; } }*/ if (isset($config['option_fields']['name'])) { // handle multilingual values if (is_array($config['option_fields']['name'])) { $ml_values = array(); foreach ($config['option_fields']['name'] as $lang_id => $optNameField) { if (is_array($optNameField)) { foreach ($optNameField as $k => $valField) { if (!empty($line[$valField]) && substr($valField, 0, 2) !== './') { $ml_values[$k][$lang_id] = $line[$valField]; } else { if (substr($valField, 0, 2) == './') { $valField = substr($valField, 2); } $currentVal = $this->getArrayPath($value, $valField); if ($currentVal) { //$option_values[] = $this->getArrayPath($value, $valField); $ml_values[$k][$lang_id] = $currentVal; } } } } else if (!empty($line[$optNameField]) && substr($optNameField, 0, 2) !== './') { //$ml_values[$current_key][$lang_id] = $line[$optNameField]; $currentVal = $line[$optNameField]; } else { if (substr($optNameField, 0, 2) == './') { $optNameField = substr($optNameField, 2); } $currentVal = $this->getArrayPath($value, $optNameField); // if ($currentVal) { // $ml_values[$current_key][$lang_id] = $currentVal; // } } if (($currentVal)) { if (is_array($currentVal)) { foreach ($currentVal as $k => $valField) { if (!empty($valField)) { $ml_values[$k][$lang_id] = $valField; } } } else { $ml_values[$current_key][$lang_id] = $currentVal; } } } /* if (!empty($ml_values)) { $option_names_ml[] = $ml_values; $option_names[] = reset($ml_values); } */ if (!empty($ml_values)) { foreach($ml_values as $ml_value) { $option_names_ml[] = $ml_value; $option_names[] = reset($ml_value); } } } else if (!empty($line[$config['option_fields']['name']])) { $option_names[] = $line[$config['option_fields']['name']]; } } if (isset($config['option_fields']['value']) && is_array($config['option_fields']['value'])) { $ml_values = array(); $i = 0; foreach ($config['option_fields']['value'] as $lang_id => $optValueField) { if (($optValueField == '[current]' || $optValueField == '.' || $optValueField == '') && is_string($value)) { $ml_values[$current_key][$lang_id] = $value; } else if (strpos($optValueField, '~')) { $valFields = explode('~', $optValueField); $currentVal = array(); $composed = ''; foreach ($valFields as $k => $valField) { if (!empty($line[$valField]) && substr($valField, 0, 2) !== './') { $composed .= (!empty($composed) ? '|' : '') . $line[$valField]; } else { if (substr($valField, 0, 2) == './') { $valField = substr($valField, 2); } $composed .= (!empty($composed) ? '|' : '') . $this->getArrayPath($value, $valField); } } $currentVal[] = $composed; } else if (strpos($optValueField, '+')) { $valFields = explode('+', $optValueField); $currentVal = array(); foreach ($valFields as $k => $valField) { if (!empty($line[$valField]) && substr($valField, 0, 2) !== './') { $currentVal[] = $line[$valField]; } else { if (substr($valField, 0, 2) == './') { $valField = substr($valField, 2); } $currentVal[] = $this->getArrayPath($value, $valField); if ($currentVal) { // $option_values[] = $this->getArrayPath($value, $valField); // $ml_values[$k][$lang_id] = $currentVal; } } } } else if (strpos($optValueField, '|')) { $valFields = explode('|', $optValueField); //$option_values[] = ''; foreach ($valFields as $valField) { if (!empty($line[$valField]) && substr($valField, 0, 2) !== './') { $currentVal = $line[$valField]; break; } else { if (substr($valField, 0, 2) == './') { $valField = substr($valField, 2); } $currentVal = $this->getArrayPath($value, $valField); if ($currentVal) { //$option_values[] = $this->getArrayPath($value, $valField); //$ml_values[$current_key][$lang_id] = $currentVal; break; } } } } else if (!empty($optValueField)) { //$option_values[] = $this->getArrayPath($value, $optValueField); // use initial slash to get an absolute value instead of relative to current node if ((!$value || substr($optValueField, 0, 1) == '/') && !empty($line[$optValueField])) { $optValueField = @ltrim($optValueField, '/'); // $ml_values[$current_key][$lang_id] = $line[$optValueField]; $currentVal = $line[$optValueField]; } else { $currentVal = $this->getArrayPath($value, $optValueField); // if ($currentVal) { // $ml_values[$current_key][$lang_id] = $currentVal; // } } if (!empty($config['option_separator'])) { $currentVal = explode($config['option_separator'], $currentVal); } } if (!empty($currentVal)) { if (is_array($currentVal)) { foreach ($currentVal as $k => $valField) { if (!empty($valField)) { $ml_values[$k][$lang_id] = $valField; } } } else { $ml_values[$current_key][$lang_id] = $currentVal; } } } if (!empty($ml_values)) { foreach($ml_values as $ml_value) { $option_values_ml[] = $ml_value; $option_values[] = reset($ml_value); } } if (!empty($config['option_fields_default']['name'])) { foreach ($config['option_fields_default']['name'] as $lang_id => $optNameField) { if (empty($option_names_ml[$i][$lang_id])) { $optNames = explode('+', $optNameField); $option_names_ml[$i][$lang_id] = isset($optNames[$i]) ? $optNames[$i] : 'Size'; } $option_names[$i] = reset($option_names_ml[$i]); } } // copy names if there is more values than names if (count($option_names_ml)) { while (count($option_values_ml) > count($option_names_ml)) { $option_names_ml[] = end($option_names_ml); $option_names[] = end($option_names); } } else if (count($option_names)) { while (count($option_values_ml) > count($option_names)) { //$option_names_ml[] = end($option_names_ml); $option_names[] = end($option_names); } } } /* if (isset($config['option_fields']['value'])) { if (is_array($config['option_fields']['value'])) { $ml_values = array(); foreach ($config['option_fields']['value'] as $lang_id => $optValueField) { if (!empty($line[$optValueField])) { if (is_string($line[$optValueField]) && !empty($this->xfn_multiple_separator[$optValueField])) { $line[$optValueField] = explode($this->xfn_multiple_separator[$optValueField], htmlspecialchars_decode(trim($line[$optValueField]))); } $ml_values[$lang_id] = $line[$optValueField]; } } if (!empty($ml_values)) { $option_values_ml[] = $ml_values; $option_values[] = reset($ml_values); } } else if (is_string($config['option_fields']['value']) && strpos($config['option_fields']['value'], '+')) { $valFields = explode('+', $config['option_fields']['value']); foreach ($valFields as $valField) { if (!empty($line[$valField]) && substr($valField, 0, 2) !== './') { $option_values[] = $line[$valField]; } } } else if (is_string($config['option_fields']['value']) && strpos($config['option_fields']['value'], '|')) { $valFields = explode('|', $config['option_fields']['value']); $option_values[] = ''; foreach ($valFields as $valField) { if (!empty($line[$valField]) && substr($valField, 0, 2) !== './') { $option_values[] = $line[$valField]; break; } } } else if (!empty($line[$config['option_fields']['value']])) { //$option_values[] = $line[$config['option_fields']['value']]; $currentVal = $line[$config['option_fields']['value']]; if (!empty($config['option_separator'])) { $option_values[] = explode($config['option_separator'], $currentVal); } } } */ $optionFields = array('prod_opt_val_id', 'image', 'price', 'price_prefix', 'required', 'quantity', 'subtract', 'weight', 'points', 'sku', 'upc', 'ean', 'model'); # add_option_field # foreach ($optionFields as $currentOptType) { if (isset($config['option_fields'][$currentOptType]) && !empty($line[$config['option_fields'][$currentOptType]])) { ${'option_'.$currentOptType} = $line[$config['option_fields'][$currentOptType]]; } else if (!empty($config['option_fields_default'][$currentOptType])) { ${'option_'.$currentOptType} = $config['option_fields_default'][$currentOptType]; } } // set defaults if empty foreach ($option_values as $i => $option_value) { if (!empty($config['option_fields_default']['name'])) { foreach ($config['option_fields_default']['name'] as $lang_id => $optNameField) { if (empty($option_names_ml[$i][$lang_id])) { $optNames = explode('+', $optNameField); $option_names_ml[$i][$lang_id] = isset($optNames[$i]) ? $optNames[$i] : 'Size'; } $option_names[$i] = reset($option_names_ml[$i]); } } if (!empty($config['option_fields_default']['value'])) { foreach ($config['option_fields_default']['value'] as $lang_id => $optValueField) { if (!empty($optValueField)) { if (empty($option_values_ml[$i][$lang_id])) { $option_values_ml[$i][$lang_id] = $optValueField; } $option_values[$i] = reset($option_values_ml[$i]); } } } } } // xml advanced option fields else if (in_array($this->filetype, array('xml', 'json')) && isset($config['option_fields']['value']) && array_filter($config['option_fields']['value'])) { if (isset($config['option_fields']['type']) && !empty($line[$config['option_fields']['type']])) { $option_type = strtolower($line[$config['option_fields']['type']]); } else if (isset($config['option_fields']['type']) && !empty($value[$config['option_fields']['type']])) { $option_type = strtolower($this->getArrayPath($value, $config['option_fields']['type'])); } if (isset($config['option_fields']['name'])) { // handle multilingual values if (is_array($config['option_fields']['name'])) { $ml_values = array(); foreach ($config['option_fields']['name'] as $lang_id => $optNameField) { if (is_array($optNameField)) { foreach ($optNameField as $k => $valField) { if (!empty($line[$valField]) && substr($valField, 0, 2) !== './') { $ml_values[$k][$lang_id] = $line[$valField]; } else { if (substr($valField, 0, 2) == './') { $valField = substr($valField, 2); } $currentVal = $this->getArrayPath($value, $valField); if ($currentVal) { //$option_values[] = $this->getArrayPath($value, $valField); $ml_values[$k][$lang_id] = $currentVal; } } } } else if (!empty($line[$optNameField]) && substr($optNameField, 0, 2) !== './') { //$ml_values[$current_key][$lang_id] = $line[$optNameField]; $currentVal = $line[$optNameField]; } else { if (substr($optNameField, 0, 2) == './') { $optNameField = substr($optNameField, 2); } $currentVal = $this->getArrayPath($value, $optNameField); // if ($currentVal) { // $ml_values[$current_key][$lang_id] = $currentVal; // } } if (($currentVal)) { if (is_array($currentVal)) { foreach ($currentVal as $k => $valField) { if (!empty($valField)) { $ml_values[$k][$lang_id] = $valField; } } } else { $ml_values[$current_key][$lang_id] = $currentVal; } } } /* if (!empty($ml_values)) { $option_names_ml[] = $ml_values; $option_names[] = reset($ml_values); } */ if (!empty($ml_values)) { foreach($ml_values as $ml_value) { $option_names_ml[] = $ml_value; $option_names[] = reset($ml_value); } } } else if (!empty($line[$config['option_fields']['name']])) { $option_names[] = $line[$config['option_fields']['name']]; } } if (isset($config['option_fields']['value']) && is_array($config['option_fields']['value'])) { $ml_values = array(); $i = 0; foreach ($config['option_fields']['value'] as $lang_id => $optValueField) { if (($optValueField == '[current]' || $optValueField == '.' || $optValueField == '') && is_string($value)) { $ml_values[$current_key][$lang_id] = $value; } else if (strpos($optValueField, '~')) { $valFields = explode('~', $optValueField); $currentVal = array(); $composed = ''; foreach ($valFields as $k => $valField) { if (!empty($line[$valField]) && substr($valField, 0, 2) !== './') { $composed .= (!empty($composed) ? '|' : '') . $line[$valField]; } else { if (substr($valField, 0, 2) == './') { $valField = substr($valField, 2); } $composed .= (!empty($composed) ? '|' : '') . $this->getArrayPath($value, $valField); } } $currentVal[] = $composed; } else if (strpos($optValueField, '+')) { $valFields = explode('+', $optValueField); $currentVal = array(); foreach ($valFields as $k => $valField) { if (!empty($line[$valField]) && substr($valField, 0, 2) !== './') { $currentVal[] = $line[$valField]; } else { if (substr($valField, 0, 2) == './') { $valField = substr($valField, 2); } $currentVal[] = $this->getArrayPath($value, $valField); if ($currentVal) { // $option_values[] = $this->getArrayPath($value, $valField); // $ml_values[$k][$lang_id] = $currentVal; } } } } else if (strpos($optValueField, '|')) { $valFields = explode('|', $optValueField); //$option_values[] = ''; foreach ($valFields as $valField) { if (!empty($line[$valField]) && substr($valField, 0, 2) !== './') { $currentVal = $line[$valField]; break; } else { if (substr($valField, 0, 2) == './') { $valField = substr($valField, 2); } $currentVal = $this->getArrayPath($value, $valField); if ($currentVal) { //$option_values[] = $this->getArrayPath($value, $valField); //$ml_values[$current_key][$lang_id] = $currentVal; break; } } } } else if (!empty($optValueField)) { // use initial slash to get an absolute value instead of relative to current node if ((!$value || substr($optValueField, 0, 1) == '/') && !empty($line[$optValueField])) { $optValueField = @ltrim($optValueField, '/'); // $ml_values[$current_key][$lang_id] = $line[$optValueField]; $currentVal = $line[$optValueField]; } else { $currentVal = $this->getArrayPath($value, $optValueField); // get array of values in case getArrayPath generate extra array container if (is_array($currentVal) && count($currentVal) == 1 && is_array($currentVal[0])) { $currentVal = $currentVal[0]; } // if ($currentVal) { // $ml_values[$current_key][$lang_id] = $currentVal; // } } if (!empty($config['option_separator'])) { $currentVal = explode($config['option_separator'], $currentVal); } } if (!empty($currentVal)) { if (is_array($currentVal)) { foreach ($currentVal as $k => $valField) { if (!empty($valField)) { $ml_values[$k][$lang_id] = $valField; } } } else { $ml_values[$current_key][$lang_id] = $currentVal; } } } if (!empty($ml_values)) { foreach($ml_values as $ml_value) { $option_values_ml[] = $ml_value; $option_values[] = reset($ml_value); } } // copy names if there is more values than names if (count($option_names_ml)) { while (count($option_values_ml) > count($option_names_ml)) { $option_names_ml[] = end($option_names_ml); $option_names[] = end($option_names); } } } $optionFields = array('prod_opt_val_id', 'image', 'price', 'price_prefix', 'required', 'quantity', 'subtract', 'weight', 'points', 'sku', 'upc', 'ean', 'model'); # add_option_field # foreach ($optionFields as $currentOptType) { $currentVal = NULL; // if main parameter is empty try to get direct value if (empty($value) && isset($config['option_fields'][$currentOptType]) && !empty($line[$config['option_fields'][$currentOptType]])) { $currentVal = $line[$config['option_fields'][$currentOptType]]; // else try to get relative value } else if (!empty($config['option_fields'][$currentOptType]) && $config['option_fields'][$currentOptType] == '{model_option_value}') { $currentVal = $option_values; if (is_array($currentVal)) { foreach ($currentVal as &$cVal) { $cVal = $config['columns']['model'] . '-' . $cVal; } } } else if (!empty($config['option_fields'][$currentOptType])) { $currentVal = ${'option_'.$currentOptType} = $this->getArrayPath($value, $config['option_fields'][$currentOptType]); } if (!empty($currentVal)) { if (is_array($currentVal)) { foreach ($currentVal as $k => $valField) { if (isset($valField)) { ${'option_'.$currentOptType.'_arr'}[$k] = $valField; } } ${'option_'.$currentOptType} = reset(${'option_'.$currentOptType.'_arr'}); } else { ${'option_'.$currentOptType.'_arr'}[$current_key] = $currentVal; } } } // sum quantities foreach ($option_values as $optVal) { if (!empty($option_quantity)) { $summed_quantity[$optVal] = isset($summed_quantity[$optVal]) ? $summed_quantity[$optVal] + $option_quantity : $option_quantity; } } // set defaults if empty foreach ($option_values as $i => $option_value) { if (!empty($config['option_fields_default']['name'])) { foreach ($config['option_fields_default']['name'] as $lang_id => $optNameField) { if (empty($option_names_ml[$i][$lang_id])) { $optNames = explode('+', $optNameField); if (count($option_values) > 1) { $option_names_ml[$i][$lang_id] = isset($optNames[$i]) ? $optNames[$i] : 'Size'; } else if (isset($header_keys_number[$current_key]) && isset($optNames[$header_keys_number[$current_key]])) { $option_names_ml[$i][$lang_id] = $optNames[$header_keys_number[$current_key]]; } else { $option_names_ml[$i][$lang_id] = 'Size'; } } $option_names[$i] = reset($option_names_ml[$i]); } } if (!empty($config['option_fields_default']['value'])) { foreach ($config['option_fields_default']['value'] as $lang_id => $optValueField) { if (!empty($optValueField)) { if (empty($option_values_ml[$i][$lang_id])) { $option_values_ml[$i][$lang_id] = $optValueField; } $option_values[$i] = reset($option_values_ml[$i]); } } } } } // option in array mode else if (is_array($value)) { $option_type = !empty($value['type']) ? strtolower($value['type']) : 'select'; $option_names[] = isset($value['name']) ? $value['name'] : ''; $option_values[] = isset($value['value']) ? $value['value'] : ''; $option_price = isset($value['price']) ? (isset($value['price_prefix']) ? $value['price_prefix'] : '') . $value['price'] : ''; $option_quantity = isset($value['quantity']) ? $value['quantity'] : ''; $option_subtract = isset($value['subtract']) ? $value['subtract'] : ''; $option_weight = isset($value['weight']) ? (isset($value['weight_prefix']) ? $value['weight_prefix'] : '') . $value['weight'] : ''; $option_required = isset($value['required']) ? $value['required'] : ''; $option_points = isset($value['points']) ? (isset($value['points_prefix']) ? $value['points_prefix'] : '') . $value['points'] : ''; $option_sku = isset($value['sku']) ? $value['sku'] : ''; $option_upc = isset($value['upc']) ? $value['upc'] : ''; } // option in string mode else if (!empty($config['option_format'])) { if (strpos($value, ':') !== false) { $values = explode(':', $value); } // set defaults foreach (array('prod_opt_val_id', 'name', 'value', 'type', 'price', 'image', 'price_prefix', 'required', 'quantity', 'subtract', 'weight', 'points', 'sku', 'upc', 'ean', 'model') as $currentOptType) { if (empty(${'option_'.$currentOptType})) { ${'option_'.$currentOptType} = isset($config['option_fields_default'][$currentOptType]) ? $config['option_fields_default'][$currentOptType] : ''; } } $optFormat = array_flip($config['option_format']); $option_type = (isset($optFormat['type']) && !empty($values[$optFormat['type']])) ? strtolower($values[$optFormat['type']]) : 'select'; $option_names[] = (isset($optFormat['name']) && isset($values[$optFormat['name']])) ? $values[$optFormat['name']] : ''; $option_values[] = (isset($optFormat['value']) && isset($values[$optFormat['value']])) ? $values[$optFormat['value']] : ''; $option_price = (isset($optFormat['price']) && isset($values[$optFormat['price']])) ? $values[$optFormat['price']] : ''; $option_quantity = (isset($optFormat['quantity']) && isset($values[$optFormat['quantity']])) ? $values[$optFormat['quantity']] : ''; $option_subtract = (isset($optFormat['subtract']) && isset($values[$optFormat['subtract']])) ? $values[$optFormat['subtract']] : ''; $option_weight = (isset($optFormat['weight']) && isset($values[$optFormat['weight']])) ? $values[$optFormat['weight']] : ''; $option_required = (isset($optFormat['required']) && isset($values[$optFormat['required']])) ? $values[$optFormat['required']] : ''; $option_points = (isset($optFormat['points']) && isset($values[$optFormat['points']])) ? $values[$optFormat['points']] : ''; $option_sku = (isset($optFormat['sku']) && isset($values[$optFormat['sku']])) ? $values[$optFormat['sku']] : ''; $option_upc = (isset($optFormat['upc']) && isset($values[$optFormat['upc']])) ? $values[$optFormat['upc']] : ''; // set defaults foreach ($option_values as $i => $option_value) { if (!empty($config['option_fields_default']['name'])) { foreach ($config['option_fields_default']['name'] as $lang_id => $optNameField) { if (empty($option_names_ml[$i][$lang_id])) { $optNames = explode('+', $optNameField); $option_names_ml[$i][$lang_id] = isset($optNames[$i]) ? $optNames[$i] : 'Size'; } $option_names[$i] = reset($option_names_ml[$i]); } } if (!empty($config['option_fields_default']['value'])) { foreach ($config['option_fields_default']['value'] as $lang_id => $optValueField) { if (!empty($optValueField)) { if (empty($option_values_ml[$i][$lang_id])) { $option_values_ml[$i][$lang_id] = $optValueField; } $option_values[$i] = reset($option_values_ml[$i]); } } } } } // option in string mode else { if (strpos($value, ':') !== false) { $values = explode(':', $value); } if (empty($values)) { // get column header $column_headers = (array) json_decode(base64_decode($config['column_headers'])); if (!empty($config['option_fields_default']['name'])) { // set default option name, in case of multiple values set in main option field use comma as separator foreach ($config['option_fields_default']['name'] as $lang_id => $optNames) { $optNames = explode('+', $optNames); if (isset($optNames[(isset($header_key) ? $header_key : 0)])) { $option_names_ml[$lang_id] = $optNames[(isset($header_key) ? $header_key : 0)]; } else { $option_names_ml[$lang_id] = $optNames[0]; } } $option_names[] = reset($option_names_ml); $option_values[] = $value; } else if (empty($force_header_name) && isset($header_key) && !empty($column_headers[ $header_key ])) { $option_names[] = $column_headers[ $header_key ]; $option_values[] = $value; } else if (!empty($force_header_name)) { $option_names[] = $force_header_name; $option_values[] = $value; } else { $option_names[] = 'Option'; $option_values[] = $value; } } else if (count($values) == 2) { // name:value $option_names[] = $values[0]; $option_values[] = $values[1]; } else if (count($values) == 3) { // type:name:value $option_type = strtolower($values[0]); $option_names[] = $values[1]; $option_values[] = $values[2]; } else if (count($values) == 4) { // type:name:value:price $option_type = strtolower($values[0]); $option_names[] = $values[1]; $option_values[] = $values[2]; $option_price = $values[3]; } else if (count($values) == 5) { // type:name:value:price:qty $option_type = strtolower($values[0]); $option_names[] = $values[1]; $option_values[] = $values[2]; $option_price = $values[3]; $option_quantity = $values[4]; } else if (count($values) == 6) { // type:name:value:price:qty:subtract $option_type = strtolower($values[0]); $option_names[] = $values[1]; $option_values[] = $values[2]; $option_price = $values[3]; $option_quantity = $values[4]; $option_subtract = $values[5]; } else if (count($values) == 7) { // type:name:value:price:qty:subtract:weight $option_type = strtolower($values[0]); $option_names[] = $values[1]; $option_values[] = $values[2]; $option_price = $values[3]; $option_quantity = $values[4]; $option_subtract = $values[5]; $option_weight = $values[6]; } else if (count($values) == 8) { // type:name:value:price:qty:subtract:weight:required $option_type = strtolower($values[0]); $option_names[] = $values[1]; $option_values[] = $values[2]; $option_price = $values[3]; $option_quantity = $values[4]; $option_subtract = $values[5]; $option_weight = $values[6]; $option_required = $values[7]; } else if (count($values) == 9) { // type:name:value:price:qty:subtract:weight:required $option_type = strtolower($values[0]); $option_names[] = $values[1]; $option_values[] = $values[2]; $option_price = $values[3]; $option_quantity = $values[4]; $option_subtract = $values[5]; $option_weight = $values[6]; $option_required = $values[7]; $option_sku = $values[8]; } else { // too much parts ? continue; } } // set default foreach (array('prod_opt_val_id', 'type', 'price', 'image', 'price_prefix', 'required', 'quantity', 'subtract', 'weight', 'points', 'sku', 'upc', 'ean', 'model') as $currentOptType) { if (empty(${'option_'.$currentOptType})) { ${'option_'.$currentOptType} = isset($config['option_fields_default'][$currentOptType]) ? $config['option_fields_default'][$currentOptType] : ''; } } if (empty($option_type)) { $option_type = 'select'; } // deduplicate if option to insert already exists foreach ($option_values as $i => $option_value) { if (in_array($option_names[$i].':'.serialize($option_value), $toInsertArray)) { //unset($option_values[$i]); } else { $toInsertArray[] = $option_names[$i].':'.serialize($option_value); } } if (!empty($config['filters_from_options'])) { if ($option_quantity) { foreach ($option_values as $i => $optVal) { $config['columns']['product_filter'][$option_names[$i].':'.serialize($optVal)] = $option_names[$i] .':'. $optVal; } } } // calculate price difference if (!empty($config['option_price_mode']) && $option_price && !(isset($option_price_prefix) && $option_price_prefix == '=')) { if ($product_id) { $query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product WHERE product_id = '" . (int) $product_id . "'")->row; } if (isset($query['price'])) { $product_price = $query['price']; } else { $product_price = $config['columns']['price']; } $option_price = (float) $option_price - (float) $product_price; } if ($this->simulation) { foreach ($option_values as $i => $option_value) { if (!$option_value) continue; if (isset($summed_quantity[$option_value])) { if (!isset($option_quantity_arr[$i])) { $option_quantity_arr[$i] = $summed_quantity[$option_value]; } } if (!empty($config['include_option'])) { if (!in_array($option_names[$i], explode('|', $config['include_option']))) { continue; } } if (is_array($option_value)) { $return_values[$option_names[$i].':'.serialize($option_value).':'.$option_weight] = $option_names[$i] .' <b>></b> '. print_r($option_value, true) . ' [qty: '. (int) $option_quantity . ', price: '.$option_price.']'; } else { $optPreview = ''; $optPreviewData = array(); $optPreview .= $option_names[$i] .' <b>></b> '. $option_value; foreach (array('prod_opt_val_id', 'quantity', 'price', 'ean', 'sku', 'upc', 'model', 'weight') as $dispOptType) { if (!empty(${'option_'.$dispOptType.'_arr'}[$i]) || !empty(${'option_'.$dispOptType})) { $optPreviewData[] = str_replace('quantity', 'qty', $dispOptType) . ': '. (!empty(${'option_'.$dispOptType.'_arr'}[$i]) ? ${'option_'.$dispOptType.'_arr'}[$i] : ${'option_'.$dispOptType}); } } if (!empty($optPreviewData)) { $optPreview .= ' ['; $optPreview .= implode(', ', $optPreviewData); $optPreview .= ']'; } $return_values[$option_names[$i].':'.serialize($option_value).':'.$option_weight] = $optPreview; //$return_values[] = $option_names[$i] .' <b>></b> '. $option_value . ' [qty: '. (int) $option_quantity . ', price: '.$option_price.']'; //. ($option_price ? ' <b>></b> '. ($option_price > 0 ? '+' : '') . $option_price : ''); // disabled display price because calculation is not correct in case of product insert } } continue; } foreach ($option_values as $i => $option_value) { if (!$option_value) continue; if (isset($option_names_ml[$i])) { $option_name_ml = $option_names_ml[$i]; $option_name = reset($option_names_ml[$i]); } else { $option_name = $option_names[$i]; } if (!empty($config['include_option'])) { if (!in_array($option_names[$i], explode('|', $config['include_option']))) { continue; } } if (isset($summed_quantity[$option_value])) { $option_quantity_arr[$i] = $summed_quantity[$option_value]; } // set current value in case of array of values $optionFields = array('prod_opt_val_id', 'image', 'price', 'price_prefix', 'required', 'quantity', 'subtract', 'weight', 'points', 'sku', 'upc', 'ean', 'model'); # add_option_field # foreach ($optionFields as $currentOptType) { if (isset(${'option_'.$currentOptType.'_arr'}[$i])) { ${'option_'.$currentOptType} = ${'option_'.$currentOptType.'_arr'}[$i]; } } /* // option name binding switch ($option_name) { case 'option_size': $option_name = 'size'; break; case 'option_color': $option_name = 'color'; break; } */ if (isset($option_values_ml[$i])) { $option_value_ml = $option_values_ml[$i]; } // get option id or create $opt_group = $this->db->query("SELECT option_id FROM " . DB_PREFIX . "option_description WHERE name = '" . $this->db->escape($option_name) . "' OR name = '" . $this->db->escape(htmlspecialchars($option_name, ENT_QUOTES, 'UTF-8')) . "'")->row; // group exists - get id if (!empty($opt_group['option_id'])) { $option_id = $opt_group['option_id']; } // group not exists - create else { $opt_group_data = array(); $opt_group_data['sort_order'] = ''; $opt_group_data['type'] = $option_type; $opt_group_data['option_description'] = array(); $opt_group_data['option_value'] = array(); foreach ($languages as $language) { $opt_group_data['option_description'][$language['language_id']]['name'] = !empty($option_name_ml[$language['language_id']]) ? $option_name_ml[$language['language_id']] : $option_name; $opt_group_data['option_description'][$language['language_id']]['description'] = ''; } $this->load->model('catalog/option'); $option_id = $this->model_catalog_option->addOption($this->request->clean($opt_group_data)); } // get option value id or create $opt = $this->db->query("SELECT option_value_id FROM " . DB_PREFIX . "option_value_description WHERE option_id = '" . (int) $option_id . "' AND name = '" . $this->db->escape($option_value) . "' COLLATE utf8_bin")->row; // option value exists ? if (!empty($opt['option_value_id'])) { $option_value_id = $opt['option_value_id']; // force update option if (false) { #force_option_udpate# // image download if ($option_image) { if (strpos($option_image, 'http') === false) { $opt_data['image'] = @trim($option_image); } else { $file_info = pathinfo(parse_url(@trim($option_image), PHP_URL_PATH)); $path = version_compare(VERSION, '2', '>=') ? 'catalog/option/' : 'data/option/'; if (!is_dir(DIR_IMAGE . $path)) { mkdir(DIR_IMAGE . $path, 0777, true); } $opt_data['image'] = $path . urldecode($file_info['filename']) . '.' . $file_info['extension']; $copyError = $this->tool->copy_image(@trim(str_replace(' ', '%20', $option_image)), DIR_IMAGE . $opt_data['image']); if ($copyError !== true) { $this->tool->log(array( 'row' => $this->session->data['obui_current_line'], 'status' => 'error', 'title' => $this->language->get('warning'), 'msg' => $copyError, )); $opt_data['image'] = ''; } } } // create option value $this->db->query("UPDATE " . DB_PREFIX . "option_value SET image = '" . $this->db->escape(@html_entity_decode($opt_data['image'], ENT_QUOTES, 'UTF-8')) . "' WHERE option_value_id = '" . (int)$option_value_id . "'"); } } // not exists - create else { $optCount = $this->db->query("SELECT COUNT(option_value_id) AS total FROM " . DB_PREFIX . "option_value WHERE option_id = '" . (int) $option_id . "'")->row; $opt_data = array(); $opt_data['sort_order'] = $optCount['total']; $opt_data['image'] = ''; // image download if ($option_image) { if (strpos($option_image, 'http') === false) { $opt_data['image'] = @trim($option_image); } else { $file_info = pathinfo(parse_url(@trim($option_image), PHP_URL_PATH)); $path = version_compare(VERSION, '2', '>=') ? 'catalog/option/' : 'data/option/'; if (!is_dir(DIR_IMAGE . $path)) { mkdir(DIR_IMAGE . $path, 0777, true); } $opt_data['image'] = $path . urldecode($file_info['filename']) . '.' . $file_info['extension']; $copyError = $this->tool->copy_image(@trim(str_replace(' ', '%20', $option_image)), DIR_IMAGE . $opt_data['image']); if ($copyError !== true) { $this->tool->log(array( 'row' => $this->session->data['obui_current_line'], 'status' => 'error', 'title' => $this->language->get('warning'), 'msg' => $copyError, )); $opt_data['image'] = ''; } } } // create option value $this->db->query("INSERT INTO " . DB_PREFIX . "option_value SET option_id = '" . (int)$option_id . "', image = '" . $this->db->escape(@html_entity_decode($opt_data['image'], ENT_QUOTES, 'UTF-8')) . "', sort_order = '" . (int)$opt_data['sort_order'] . "'"); $option_value_id = $this->db->getLastId(); foreach ($languages as $language) { $this->db->query("INSERT INTO " . DB_PREFIX . "option_value_description SET option_value_id = '" . (int)$option_value_id . "', language_id = '" . (int) $language['language_id'] . "', option_id = '" . (int)$option_id . "', name = '" . $this->db->escape(!empty($option_value_ml[$language['language_id']]) ? $option_value_ml[$language['language_id']] : $option_value) . "'"); } } // @todo: check if option already assigned in product_option, if so skip it to not insert duplicate // format values for product if (in_array($option_type, array('select', 'radio', 'checkbox', 'image'))) { if (!isset($return_values[$option_name])) { $return_values[$option_name] = array( 'type' => $option_type, 'required' => $option_required, 'product_option_value' => array(), 'option_id' => $option_id, ); } if (empty($option_price_prefix)) { $option_price_prefix = !empty($option_price) && ($option_price < 0) ? '-' : '+'; } $return_values[$option_name]['product_option_value'][serialize($option_value).$option_weight] = array( 'product_option_value_id' => $option_prod_opt_val_id, 'option_value_id' => $option_value_id, 'quantity' => !empty($option_quantity) ? $option_quantity : '', 'subtract' => !empty($option_subtract) ? $option_subtract : '', 'price' => !empty($option_price) ? abs($option_price) : '', 'price_prefix' => $option_price_prefix , 'points' => !empty($option_points) ? abs($option_points) : '', 'points_prefix' => !empty($option_points) && ($option_points < 0) ? '-' : '+', 'weight' => !empty($option_weight) ? abs($option_weight) : '', 'weight_prefix' => !empty($option_weight) && ($option_weight < 0) ? '-' : '+', 'sku' => !empty($option_sku) ? $option_sku : '', 'upc' => !empty($option_upc) ? $option_upc : '', 'ean' => !empty($option_ean) ? $option_ean : '', 'model' => !empty($option_model) ? $option_model : '', # custom_product_option_value # ); } else { if (!isset($return_values[$option_name])) { $return_values[$option_name] = array( 'type' => $option_type, 'required' => $option_required, 'option_id' => $option_id, 'value' => $option_value, ); } } } } return $return_values; } public function discountHandler($field, $config) { $return_values = $values_array = array(); // advanced mode if (!empty($config['columns']['discountByCustomerGroup'])) { foreach ($config['columns']['discountByCustomerGroup'] as $customer_group_id => $groupData) { $return_values[] = array( 'customer_group_id' => $customer_group_id, 'quantity' => !empty($groupData['quantity']) ? $groupData['quantity'] : (!empty($config['defaults']['discountByCustomerGroup'][$customer_group_id]['quantity']) ? $config['defaults']['discountByCustomerGroup'][$customer_group_id]['quantity'] : 99999), 'priority' => !empty($groupData['priority']) ? $groupData['priority'] : (!empty($config['defaults']['discountByCustomerGroup'][$customer_group_id]['priority']) ? $config['defaults']['discountByCustomerGroup'][$customer_group_id]['priority'] : ''), 'price' => isset($groupData['price']) ? $groupData['price'] : (!empty($config['defaults']['discountByCustomerGroup'][$customer_group_id]['price']) ? $config['defaults']['discountByCustomerGroup'][$customer_group_id]['price'] : ''), 'date_start' => !empty($groupData['date_start']) ? $groupData['date_start'] : (!empty($config['defaults']['discountByCustomerGroup'][$customer_group_id]['date_start']) ? date('Y-m-d', strtotime($config['defaults']['discountByCustomerGroup'][$customer_group_id]['date_start'])) : ''), 'date_end' => !empty($groupData['date_end']) ? $groupData['date_end'] : (!empty($config['defaults']['discountByCustomerGroup'][$customer_group_id]['date_end']) ? date('Y-m-d', strtotime($config['defaults']['discountByCustomerGroup'][$customer_group_id]['date_end'])) : ''), ); } } else { // parse string mode if (empty($config['columns'][$field])) { return $values_array; } foreach ((array) $config['columns'][$field] as $value) { if (!$value) { continue; } else if (is_array($value)) { $values_array = array_merge($values_array, $value); } else if (!empty($config['multiple_separator'])) { $values_array = array_merge($values_array, explode(@html_entity_decode($config['multiple_separator'], ENT_QUOTES, 'UTF-8'), $value)); } else { $values_array[] = $value; } } foreach ($values_array as $value) { if (is_array($value)) { $customer_group_id = isset($value['customer_group_id']) ? $value['customer_group_id'] : 1; $return_values[] = array( 'customer_group_id' => $customer_group_id, 'quantity' => isset($value['quantity']) ? $value['quantity'] : '', 'priority' => isset($value['priority']) ? $value['priority'] : '', 'price' => isset($value['price']) ? $value['price'] : '', 'date_start' => isset($value['date_start']) ? $value['date_start'] : (!empty($config['defaults']['discountByCustomerGroup'][$customer_group_id]['date_start']) ? date('Y-m-d', strtotime($config['defaults']['discountByCustomerGroup'][$customer_group_id]['date_start'])) : ''), 'date_end' => isset($value['date_end']) ? $value['date_end'] : (!empty($config['defaults']['discountByCustomerGroup'][$customer_group_id]['date_end']) ? date('Y-m-d', strtotime($config['defaults']['discountByCustomerGroup'][$customer_group_id]['date_end'])) : ''), # custom_discount_field # ); // string mode with specific format } else if (is_string($value) && !empty($config['discount_format'])) { if (strpos($value, ':') !== false) { $values = explode(':', $value); } else { $values = (array) $value; } $currentValues = array(); foreach ($config['discount_format'] as $k => $type) { $currentValues[$type] = isset($values[$k]) ? $values[$k] : ''; } // set defaults if (empty($currentValues['priority'])) { $currentValues['priority'] = '0'; } if (empty($currentValues['quantity'])) { $currentValues['quantity'] = '1'; } if (empty($currentValues['date_start'])) { //$currentValues['date_start'] = '2000-01-01'; } if (empty($currentValues['date_end'])) { //$currentValues['date_end'] = '2100-01-01'; } // save final values if (!empty($currentValues['customer_group_id'])) { // defined customer group $return_values[] = $currentValues; } else { // all customer groups $this->loadCustomerGroups(); foreach ($this->customer_groups as $customer_group_id) { $currentValues['customer_group_id']; $return_values[] = $currentValues; } } // autodetect string } else if (is_scalar($value)) { if (strpos($value, ':') !== false) { $values = explode(':', $value); /* formats: - price - price:date_end - price:date_start:date_end - qty:price:date_start:date_end - customer_group_id:qty:price:date_start:date_end - customer_group_id:qty:priority:price:date_start:date_end */ # custom_discount_field_string # if (count($values) == 6) { $return_values[] = array( 'customer_group_id' => $values[0], 'quantity' => $values[1], 'priority' => $values[2], 'price' => $values[3], 'date_start' => (!empty($values[4]) ? date('Y-m-d', strtotime($values[4])) : ''), 'date_end' => (!empty($values[5]) ? date('Y-m-d', strtotime($values[5])) : ''), ); } else if (count($values) == 5) { $return_values[] = array( 'customer_group_id' => $values[0], 'quantity' => $values[1], 'priority' => 1, 'price' => $values[2], 'date_start' => (!empty($values[3]) ? date('Y-m-d', strtotime($values[3])) : ''), 'date_end' => (!empty($values[4]) ? date('Y-m-d', strtotime($values[4])) : ''), ); } else if (count($values) == 4) { $this->loadCustomerGroups(); foreach ($this->customer_groups as $customer_group) { $return_values[] = array( 'customer_group_id' => $customer_group, 'quantity' => $values[0], 'priority' => 1, 'price' => $values[1], 'date_start' => (!empty($values[2]) ? date('Y-m-d', strtotime($values[2])) : ''), 'date_end' => (!empty($values[3]) ? date('Y-m-d', strtotime($values[3])) : ''), ); } } else if (count($values) == 3) { $this->loadCustomerGroups(); foreach ($this->customer_groups as $customer_group) { $return_values[] = array( 'customer_group_id' => $customer_group, 'quantity' => 999999, 'priority' => 1, 'price' => $values[0], 'date_start' => (!empty($values[1]) ? date('Y-m-d', strtotime($values[1])) : ''), 'date_end' => (!empty($values[2]) ? date('Y-m-d', strtotime($values[2])) : ''), ); } } else if (count($values) == 2) { $this->loadCustomerGroups(); foreach ($this->customer_groups as $customer_group) { $return_values[] = array( 'customer_group_id' => $customer_group, 'quantity' => 999999, 'priority' => 1, 'price' => $values[0], 'date_start' => (!empty($config['defaults']['discountByCustomerGroup'][$customer_group_id]['date_start']) ? date('Y-m-d', strtotime($config['defaults']['discountByCustomerGroup'][$customer_group_id]['date_start'])) : ''), 'date_end' => $values[1], ); } } } else { $this->loadCustomerGroups(); foreach ($this->customer_groups as $customer_group_id) { $return_values[] = array( 'customer_group_id' => $customer_group_id, 'quantity' => 999999, 'priority' => 1, 'price' => $value, 'date_start' => (!empty($config['defaults']['discountByCustomerGroup'][$customer_group_id]['date_start']) ? date('Y-m-d', strtotime($config['defaults']['discountByCustomerGroup'][$customer_group_id]['date_start'])) : ''), 'date_end' => (!empty($config['defaults']['discountByCustomerGroup'][$customer_group_id]['date_end']) ? date('Y-m-d', strtotime($config['defaults']['discountByCustomerGroup'][$customer_group_id]['date_end'])) : ''), ); } } } } } foreach ($return_values as $key => $item) { if (!is_numeric($item['price'])) { $this->tool->log(array( 'row' => $this->session->data['obui_current_line'], 'status' => 'error', 'title' => $this->language->get('warning'), 'msg' => $this->language->get('warning_discount_not_numeric'), )); unset($return_values[$key]); } } if ($this->simulation) { $return_simu = array(); foreach ($return_values as $item) { if (isset($item['date_start'])) { $return_simu[] = $item['quantity'] . ' : ' . round($item['price'], 2) . ' (' . $item['date_start'] . ' <b>></b> ' . $item['date_end'] . ')'; } } return $return_simu; } return $return_values; } public function specialHandler($field, $config) { $return_values = $values_array = array(); // advanced mode if (!empty($config['columns']['specialByCustomerGroup'])) { foreach ($config['columns']['specialByCustomerGroup'] as $customer_group_id => $groupData) { if (isset($config['columns']['price']) && $config['columns']['price'] == $this->tool->floatValue($groupData['price'])) { // same price, do not add special $hasSamePrice = true; continue; } $return_values[] = array( 'customer_group_id' => $customer_group_id, 'priority' => !empty($groupData['priority']) ? $groupData['priority'] : (!empty($config['defaults']['specialByCustomerGroup'][$customer_group_id]['priority']) ? $config['defaults']['specialByCustomerGroup'][$customer_group_id]['priority'] : ''), 'price' => isset($groupData['price']) ? $groupData['price'] : (!empty($config['defaults']['specialByCustomerGroup'][$customer_group_id]['price']) ? $config['defaults']['specialByCustomerGroup'][$customer_group_id]['price'] : ''), 'date_start' => !empty($groupData['date_start']) ? $groupData['date_start'] : (!empty($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_start']) ? date('Y-m-d', strtotime($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_start'])) : ''), 'date_end' => !empty($groupData['date_end']) ? $groupData['date_end'] : (!empty($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_end']) ? date('Y-m-d', strtotime($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_end'])) : ''), ); } } else { // parse string mode if (empty($config['columns'][$field])) { return $return_values; } foreach ((array) $config['columns'][$field] as $value) { if (!$value) { continue; } else if (is_array($value) && !empty($value['gkd_formatted'])) { $values_array[] = $value; } else if (is_array($value)) { $values_array = array_merge($values_array, $value); } else if (!empty($config['multiple_separator'])) { $values_array = array_merge($values_array, explode(@html_entity_decode($config['multiple_separator'], ENT_QUOTES, 'UTF-8'), $value)); } else { $values_array[] = $value; } } /* $customer_group_id = 1; if (!empty($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_start'])) { $defaultStartDate = date('Y-m-d', strtotime($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_start'])); } else { $defaultStartDate = '2000-01-01'; } if (!empty($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_end'])) { $defaultEndDate = date('Y-m-d', strtotime($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_end'])); } else { $defaultEndDate = '2100-01-01'; } */ foreach ($values_array as &$value) { if (is_array($value) && !empty($value['gkd_formatted'])) { if (isset($config['columns']['price']) && $config['columns']['price'] == $this->tool->floatValue($value['price'])) { // same price, do not add special $hasSamePrice = true; continue; } $this->loadCustomerGroups(); if (isset($value['customer_group_id']) && $value['customer_group_id'] !== '') { $customer_group_id = $value['customer_group_id']; $return_values[] = array( 'customer_group_id' => $value['customer_group_id'], 'priority' => !empty($value['priority']) ? $value['priority'] : 1, 'price' => $this->tool->floatValue($value['price']), 'date_start' => !empty($value['date_start']) ? $value['date_start'] : (!empty($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_start']) ? date('Y-m-d', strtotime($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_start'])) : ''), 'date_end' => !empty($value['date_end']) ? $value['date_end'] : (!empty($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_end']) ? date('Y-m-d', strtotime($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_end'])) : ''), ); } else { foreach ($this->customer_groups as $customer_group_id) { $return_values[] = array( 'customer_group_id' => $customer_group_id, 'priority' => !empty($value['priority']) ? $value['priority'] : 1, 'price' => $this->tool->floatValue($value['price']), 'date_start' => !empty($value['date_start']) ? $value['date_start'] : (!empty($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_start']) ? date('Y-m-d', strtotime($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_start'])) : ''), 'date_end' => !empty($value['date_end']) ? $value['date_end'] : (!empty($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_end']) ? date('Y-m-d', strtotime($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_end'])) : ''), ); } } // string mode with specific format } else if (is_string($value) && !empty($config['special_format'])) { if (strpos($value, ':') !== false) { $values = explode(':', $value); } else { $values = (array) $value; } $currentValues = array(); foreach ($config['special_format'] as $k => $type) { $currentValues[$type] = isset($values[$k]) ? $values[$k] : ''; } // set defaults if (empty($currentValues['priority'])) { $currentValues['priority'] = '0'; } if (empty($currentValues['date_start'])) { //$currentValues['date_start'] = '2000-01-01'; } if (empty($currentValues['date_end'])) { //$currentValues['date_end'] = '2100-01-01'; } // save final values if (!empty($currentValues['customer_group_id'])) { // defined customer group $return_values[] = $currentValues; } else { // all customer groups $this->loadCustomerGroups(); foreach ($this->customer_groups as $customer_group_id) { $currentValues['customer_group_id']; $return_values[] = $currentValues; } } // string mode autodetect } else if (is_string($value) && strpos($value, ':') !== false) { $values = explode(':', $value); if (count($values) == 5) { if (isset($config['columns']['price']) && $config['columns']['price'] == $this->tool->floatValue($values[2])) { // same price, do not add special $hasSamePrice = true; continue; } $customer_group_id = $values[0]; $return_values[] = array( 'customer_group_id' => $values[0], 'priority' => $values[1], 'price' => $this->tool->floatValue($values[2]), 'date_start' => !empty($values[3]) ? $values[3] : (!empty($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_start']) ? date('Y-m-d', strtotime($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_start'])) : ''), 'date_end' => !empty($values[4]) ? $values[4] : (!empty($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_end']) ? date('Y-m-d', strtotime($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_end'])) : ''), ); } else if (count($values) == 4) { if (isset($config['columns']['price']) && $config['columns']['price'] == $this->tool->floatValue($values[2])) { // same price, do not add special $hasSamePrice = true; continue; } $customer_group_id = $values[0]; $return_values[] = array( 'customer_group_id' => $values[0], 'priority' => $values[1], 'price' => $this->tool->floatValue($values[2]), 'date_start' => (!empty($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_start']) ? date('Y-m-d', strtotime($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_start'])) : ''), 'date_end' => !empty($values[3]) ? $values[3] : (!empty($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_end']) ? date('Y-m-d', strtotime($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_end'])) : ''), ); } else if (count($values) == 3) { if (isset($config['columns']['price']) && $config['columns']['price'] == $this->tool->floatValue($values[2])) { // same price, do not add special $hasSamePrice = true; continue; } $customer_group_id = $values[0]; $return_values[] = array( 'customer_group_id' => $values[0], 'priority' => $values[1], 'price' => $this->tool->floatValue($values[2]), 'date_start' => (!empty($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_start']) ? date('Y-m-d', strtotime($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_start'])) : ''), 'date_end' => (!empty($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_end']) ? date('Y-m-d', strtotime($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_end'])) : ''), ); } else if (count($values) == 2) { if (isset($config['columns']['price']) && $config['columns']['price'] == $this->tool->floatValue($values[1])) continue; { // same price, do not add special $hasSamePrice = true; continue; } $customer_group_id = $values[0]; $return_values[] = array( 'customer_group_id' => $values[0], 'priority' => 1, 'price' => $this->tool->floatValue($values[1]), 'date_start' => (!empty($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_start']) ? date('Y-m-d', strtotime($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_start'])) : ''), 'date_end' => (!empty($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_end']) ? date('Y-m-d', strtotime($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_end'])) : ''), ); } } else if (is_scalar($value)) { $this->loadCustomerGroups(); foreach ($this->customer_groups as $customer_group_id) { if (isset($config['columns']['price']) && $config['columns']['price'] == $this->tool->floatValue($value)) { // same price, do not add special $hasSamePrice = true; continue; } $return_values[] = array( 'customer_group_id' => $customer_group_id, 'priority' => 1, 'price' => $this->tool->floatValue($value), 'date_start' => (!empty($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_start']) ? date('Y-m-d', strtotime($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_start'])) : ''), 'date_end' => (!empty($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_end']) ? date('Y-m-d', strtotime($config['defaults']['specialByCustomerGroup'][$customer_group_id]['date_end'])) : ''), ); } } } } $return_values = array_filter($return_values, array($this, 'filterEmptyPrice')); if ($this->simulation) { $return_simu = array(); foreach ($return_values as $item) { $return_simu[] = round($item['price'], 2) . ' ('.$item['date_start'] . ' <b>></b> ' . $item['date_end'] . ')'; } return $return_simu; } if (empty($return_values) && !empty($hasSamePrice)) { return 'reset'; } return $return_values; } public function filterHandler($field, $config) { $return_values = $values_array = $column_bindings = array(); if (empty($config['columns'][$field])) { return $values_array; } foreach ((array) $config['columns'][$field] as $key => $value) { # custom_filter_handler if (is_array($value)) { $values_array = array_merge($values_array, $value); foreach ($value as $arr_val) { $column_bindings[] = $config['columns_bindings'][$field][$key]; } } else if (!empty($config['multiple_separator']) && strpos($value, $config['multiple_separator']) !== false) { $values_array = array_merge($values_array, explode(@html_entity_decode($config['multiple_separator'], ENT_QUOTES, 'UTF-8'), $value)); foreach (explode(@html_entity_decode($config['multiple_separator'], ENT_QUOTES, 'UTF-8'), $value) as $arr_val) { $column_bindings[] = isset($config['columns_bindings'][$field][$key]) ? $config['columns_bindings'][$field][$key] : ''; } } else { $values_array = array_merge($values_array, (array) $value); $column_bindings[] = isset($config['columns_bindings'][$field][$key]) ? $config['columns_bindings'][$field][$key] : ''; } } $values_array = array_filter($values_array); $this->load->model('localisation/language'); $languages = $this->model_localisation_language->getLanguages(); foreach ($values_array as $current_key => &$value) { // xml advanced values if ($this->filetype == 'xml' && !empty($config['filter_fields']['name'][$this->config->get('config_language_id')])) { foreach (array('group', 'name') as $attribute_type) { foreach ($languages as $language) { if (!empty($config['filter_fields'][$attribute_type][$language['language_id']])) { ${'filter_'.$attribute_type.'_ml'}[$language['language_id']] = $this->getArrayPath($value, $config['filter_fields'][$attribute_type][$language['language_id']]); } } if (!empty(${'filter_'.$attribute_type.'_ml'})) { ${'filter_'.$attribute_type} = reset(${'filter_'.$attribute_type.'_ml'}); } // set defaults if empty if (empty(${'filter_'.$attribute_type})) { foreach ($languages as $language) { if ($attribute_type == 'group') { ${'filter_'.$attribute_type.'_ml'}[$language['language_id']] = 'Default'; } else { ${'filter_'.$attribute_type.'_ml'}[$language['language_id']] = ''; } } if (!empty(${'filter_'.$attribute_type.'_ml'})) { ${'filter_'.$attribute_type} = reset(${'filter_'.$attribute_type.'_ml'}); } else { ${'filter_'.$attribute_type} = ($attribute_type == 'group') ? 'Default' : ''; } } } // import by filter id } else if (!empty($config['filter_identifier']) && is_numeric($value)) { if ($this->simulation) { $filter = $this->db->query("SELECT fd.name, fgd.name AS 'group' FROM " . DB_PREFIX . "filter_description fd LEFT JOIN " . DB_PREFIX . "filter_group_description fgd ON (fgd.filter_group_id = fd.filter_group_id) WHERE fd.filter_id = '" . (int) $value . "'")->row; if (isset($filter['group'])) { $filter_group = $filter['group']; } if (isset($filter['name'])) { $filter_name = $filter['name']; } } else { $return_values[] = $value; } } else if (is_scalar($value)) { if (strpos($value, ':') !== false) { $values = explode(':', $value); } if (!isset($values)) { // get column header $column_headers = (array) json_decode(base64_decode($config['column_headers'])); if (!empty($column_headers[ $column_bindings[$current_key] ])) { if ($this->filetype == 'xml') { $filter_group = basename($column_headers[ $column_bindings[$current_key] ]); } else { $filter_group = $column_headers[ $column_bindings[$current_key] ]; } $filter_name = $value; } else { continue; } } else if (isset($values) && count($values) == 2) { $filter_group = $values[0]; $filter_name = $values[1]; } else { // too much parts ? continue; } } if (!empty($return_values)) { //continue; ?? } if (!isset($filter_name) || $filter_name === '') { continue; } if (!isset($filter_group) || $filter_group === '') { continue; } if ($this->simulation) { if (@trim($filter_name)) { $return_values[] = $filter_group .' <b>></b> '. $filter_name; } continue; } $filter_group = $this->request->clean($filter_group); $filter_name = $this->request->clean($filter_name); $filter = $this->db->query("SELECT fd.filter_id FROM " . DB_PREFIX . "filter_description fd LEFT JOIN " . DB_PREFIX . "filter_group_description fgd ON (fgd.filter_group_id = fd.filter_group_id) WHERE fgd.name = '" . $this->db->escape($filter_group) . "' AND fd.name = '" . $this->db->escape($filter_name) . "'")->row; // filter exists ? if (!empty($filter['filter_id'])) { $filter_id = $filter['filter_id']; } // not exists - create else { $filter_data = array(); $filter_data['sort_order'] = 1; $filter_group_query = $this->db->query("SELECT filter_group_id FROM " . DB_PREFIX . "filter_group_description WHERE name = '" . $this->db->escape($filter_group) . "'")->row; // group exists - get id if (!empty($filter_group_query['filter_group_id'])) { $filter_data['filter_group_id'] = $filter_group_query['filter_group_id']; } // group not exists - create else { $filter_group_data = array(); $filter_group_data['sort_order'] = 0; foreach ($languages as $language) { $filter_group_data['filter_group_description'][$language['language_id']] = !empty($filter_group_ml[$language['language_id']]) ? $filter_group_ml[$language['language_id']] : $filter_group; } $this->db->query("INSERT INTO `" . DB_PREFIX . "filter_group` SET sort_order = '" . (int)$filter_group_data['sort_order'] . "'"); $filter_data['filter_group_id'] = $this->db->getLastId(); foreach ($languages as $language) { $this->db->query("INSERT INTO " . DB_PREFIX . "filter_group_description SET filter_group_id = '" . (int)$filter_data['filter_group_id'] . "', language_id = '" . (int)$language['language_id'] . "', name = '" . $this->db->escape($filter_group_data['filter_group_description'][$language['language_id']]) . "'"); } } // create filter foreach ($languages as $language) { $filter_data['filter_description'][$language['language_id']] = !empty($filter_name_ml[$language['language_id']]) ? $filter_name_ml[$language['language_id']] : $filter_name; } $this->db->query("INSERT INTO " . DB_PREFIX . "filter SET filter_group_id = '" . (int)$filter_data['filter_group_id'] . "', sort_order = 0"); $filter_id = $this->db->getLastId(); foreach ($languages as $language) { $this->db->query("INSERT INTO " . DB_PREFIX . "filter_description SET filter_id = '" . (int)$filter_id . "', language_id = '" . (int)$language['language_id'] . "', filter_group_id = '" . (int)$filter_data['filter_group_id'] . "', name = '" . $this->db->escape($filter_data['filter_description'][$language['language_id']]) . "'"); } } // format values for product - only if not empty value if (@trim($filter_name)) { $return_values[] = $filter_id; } } return array_unique($return_values); } public function attributeHandler($field, $config, $line) { $attributes_array = $return_values = $values_array = $header_keys = array(); if (empty($config['columns'][$field]) && !empty($config['attribute_fields'])) { $values_array[] = ''; $config['columns'][$field] = array(); } else if (empty($config['columns'][$field])) { return $values_array; } foreach ((array) $config['columns'][$field] as $key => $value) { if (is_string($value) && strpos($value, '</table>') !== false) { $dom = new DOMDocument; @$dom->loadHTML($value); foreach ($dom->getElementsByTagName('tr') as $tr) { $td = array(); foreach ($tr->getElementsByTagName('td') as $node) { $td[] = @trim(preg_replace('/\s+/u', ' ', strip_tags($node->nodeValue)), " \t"); } if (count($td) == 1) { $values_array[] = array( 'group' => 'Default', 'name' => 'Attribute', 'value' => $td[0], ); } else if (count($td) == 2) { $values_array[] = array( 'group' => 'Default', 'name' => $td[0], 'value' => $td[1], ); } else if (count($td) == 3) { $values_array[] = array( 'group' => $td[0], 'name' => $td[1], 'value' => $td[2], ); } } } else if (is_string($value) && strpos($value, '</li>') !== false) { $dom = new DOMDocument; @$dom->loadHTML($value); foreach ($dom->getElementsByTagName('li') as $node) { $values_array[] = $node->nodeValue; } } else if (is_array($value)) { $values_array = array_merge($values_array, $value); foreach($value as $v) { $header_keys[] = $key; } } else if ($value && !empty($config['multiple_separator'])) { $value = explode(@html_entity_decode($config['multiple_separator'], ENT_QUOTES, 'UTF-8'), $value); $values_array = array_merge($values_array, $value); foreach($value as $v) { $header_keys[] = $key; } // } else if ($value == '' && !empty($config['attribute_fields']['value'][$this->config->get('config_language_id')])) { } else { $values_array = array_merge($values_array, (array) $value); //$values_array[$key] = $value; $header_keys[] = $key; } } //$values_array = array_filter($values_array); // do not filter, else it make the count wrong (for headers) $this->load->model('localisation/language'); $languages = $this->model_localisation_language->getLanguages(); if (!empty($config['extra_fields'])) { $extraFields = array_flip(explode(',', $config['extra_fields'])); } else { $extraFields = array(); } // foreach ($values_array as $current_key => &$value) { //for ($i = 0; $i <= count($values_array); $i++) { for ($i = 0; $i < count($values_array); ++$i) { $current_key = $i; if (!isset($values_array[$i])) continue; $value = $values_array[$i]; if (isset($header_keys[$current_key])) { $header_key = $header_keys[$current_key]; } else { $header_key = 0; } // csv advanced values if ((!is_scalar($values_array[$i]) || $values_array[$i] == '') && !in_array($this->filetype, array('xml', 'json')) && !empty($config['attribute_fields'])) { foreach ($config['attribute_fields'] as $attrFieldKey => $attribute_fields) { foreach (array('group', 'name', 'value') as $attribute_type) { if (!isset(${'multi_attribute_'.$attribute_type.'_ml'})) { ${'multi_attribute_'.$attribute_type.'_ml'} = array(); } foreach ($languages as $language) { if (!empty($attribute_fields[$attribute_type][$language['language_id']])) { // use . or [current] to have main attribute value if (($attribute_fields[$attribute_type][$language['language_id']] == '[current]' || $attribute_fields[$attribute_type][$language['language_id']] == '.' || $attribute_fields[$attribute_type][$language['language_id']] == '') && is_string($value)) { ${'attribute_'.$attribute_type.'_ml'}[$language['language_id']] = $value; // use [attributes] to ... } else if ($attribute_fields[$attribute_type][$language['language_id']] == '[attributes]') { if ($attribute_type == 'name') { foreach ($value as $k => $v) { if (!$v) continue; if (!strpos($k, '@')) { @$remove_key = $k.'@'; } $values_array[] = $attribute_fields['group'][$language['language_id']].':'.str_replace('@', '', strstr($k, '@')).':'.$v; } continue 2; } // if array of values process each one } else if (isset($line[$attribute_fields[$attribute_type][$language['language_id']]]) && is_array($line[$attribute_fields[$attribute_type][$language['language_id']]])) { // if we are in value or the value parameter is array then process other fields same way if ($attribute_type == 'value' || is_array($line[$attribute_fields['value'][$language['language_id']]])) { foreach ($line[$attribute_fields[$attribute_type][$language['language_id']]] as $k => $v) { ${'multi_attribute_'.$attribute_type.'_ml'}[$language['language_id']][$attrFieldKey.$k] = $v; } } else { // group or name refers to an array, try to get key corresponding to current value key if (isset($line[$attribute_fields[$attribute_type][$language['language_id']]][$current_key])) { ${'attribute_'.$attribute_type.'_ml'}[$language['language_id']][$current_key] = $line[$attribute_fields[$attribute_type][$language['language_id']]][$current_key]; } } // use @ to ... } else if (strpos($attribute_fields[$attribute_type][$language['language_id']], '@')) { if (isset($line[$attribute_fields[$attribute_type][$language['language_id']]]) && is_array($line[$attribute_fields[$attribute_type][$language['language_id']]])) { ${'attribute_'.$attribute_type.'_ml'}[$language['language_id']] = $line[$attribute_fields[$attribute_type][$language['language_id']]][$current_key]; } else if (isset($line[$attribute_fields[$attribute_type][$language['language_id']]])) { ${'attribute_'.$attribute_type.'_ml'}[$language['language_id']] = $line[$attribute_fields[$attribute_type][$language['language_id']]]; } // get path } else { if ($attribute_type == 'value' && strpos($attribute_fields['value'][$language['language_id']], '+')) { foreach (explode('+', $attribute_fields[$attribute_type][$language['language_id']]) as $k => $vals) { foreach (explode('~', $vals) as $v) { if (substr($v, 0, 1) == "'" && substr($v, -1) == "'") { $resVal = substr($v, 1, -1); } else { $resVal = $this->getArrayPath(is_array($value) ? $value : $line, $v); } if ($resVal !== '') { if (!isset(${'multi_attribute_'.$attribute_type.'_ml'}[$language['language_id']][$attrFieldKey.$k])) { ${'multi_attribute_'.$attribute_type.'_ml'}[$language['language_id']][$attrFieldKey.$k] = ''; } ${'multi_attribute_'.$attribute_type.'_ml'}[$language['language_id']][$attrFieldKey.$k] .= $resVal; } } if (isset(${'multi_attribute_'.$attribute_type.'_ml'}[$language['language_id']][$attrFieldKey.$k]) && @trim(${'multi_attribute_'.$attribute_type.'_ml'}[$language['language_id']][$attrFieldKey.$k]) == '') { unset(${'multi_attribute_'.$attribute_type.'_ml'}[$language['language_id']][$attrFieldKey.$k]); } } } else { //${'attribute_'.$attribute_type.'_ml'}[$language['language_id']] = $this->getArrayPath(is_array($value) ? $value : $line, $attribute_fields[$attribute_type][$language['language_id']]); ${'multi_attribute_'.$attribute_type.'_ml'}[$language['language_id']][$attrFieldKey] = ''; //${'attribute_'.$attribute_type.'_ml'}[$language['language_id']] = ''; // use ~ to combine multiple values in one foreach (explode('~', $attribute_fields[$attribute_type][$language['language_id']]) as $k => $v) { $resVal = $this->getArrayPath(is_array($value) ? $value : $line, $v); //${'attribute_'.$attribute_type.'_ml'}[$language['language_id']] .= $resVal; ${'multi_attribute_'.$attribute_type.'_ml'}[$language['language_id']][$attrFieldKey] .= $resVal; } } } } else { if ($attribute_type == 'group') { ${'multi_attribute_'.$attribute_type.'_ml'}[$language['language_id']][$attrFieldKey] = !empty($config['attribute_fields_default'][$attrFieldKey][$attribute_type][$language['language_id']]) ? $config['attribute_fields_default'][$attrFieldKey][$attribute_type][$language['language_id']] : 'Default'; } else { ${'multi_attribute_'.$attribute_type.'_ml'}[$language['language_id']][$attrFieldKey] = isset($config['attribute_fields_default'][$attrFieldKey][$attribute_type][$language['language_id']]) ? $config['attribute_fields_default'][$attrFieldKey][$attribute_type][$language['language_id']] : ''; } } } if (!empty(${'attribute_'.$attribute_type.'_ml'})) { ${'attribute_'.$attribute_type} = reset(${'attribute_'.$attribute_type.'_ml'}); } // set defaults if empty if (empty(${'attribute_'.$attribute_type})) { foreach ($languages as $language) { if (!empty($config['attribute_fields_default'][$attribute_type][$language['language_id']])) { if ($attribute_type == 'group') { ${'attribute_'.$attribute_type.'_ml'}[$language['language_id']] = isset($config['attribute_fields_default'][$attribute_type][$language['language_id']]) ? $config['attribute_fields_default'][$attribute_type][$language['language_id']] : 'Default'; } else { ${'attribute_'.$attribute_type.'_ml'}[$language['language_id']] = isset($config['attribute_fields_default'][$attribute_type][$language['language_id']]) ? $config['attribute_fields_default'][$attribute_type][$language['language_id']] : ''; } } } if (!empty(${'attribute_'.$attribute_type.'_ml'})) { ${'attribute_'.$attribute_type} = reset(${'attribute_'.$attribute_type.'_ml'}); } else { ${'attribute_'.$attribute_type} = ($attribute_type == 'group') ? 'Default' : ''; } } } } // xml advanced values } else if ((!is_scalar($values_array[$i]) || $values_array[$i] == '') && in_array($this->filetype, array('xml', 'json')) && !empty($config['attribute_fields']['value'][$this->config->get('config_language_id')])) { foreach (array('group', 'name', 'value') as $attribute_type) { ${'multi_attribute_'.$attribute_type.'_ml'} = array(); foreach ($languages as $language) { if (!empty($config['attribute_fields'][$attribute_type][$language['language_id']])) { // use . or [current] to have main attribute value if (($config['attribute_fields'][$attribute_type][$language['language_id']] == '[current]' || $config['attribute_fields'][$attribute_type][$language['language_id']] == '.' || $config['attribute_fields'][$attribute_type][$language['language_id']] == '') && is_string($value)) { ${'attribute_'.$attribute_type.'_ml'}[$language['language_id']] = $value; // use [attributes] to ... } else if ($config['attribute_fields'][$attribute_type][$language['language_id']] == '[attributes]') { if ($attribute_type == 'name') { foreach ($value as $k => $v) { if (!$v) continue; if (!strpos($k, '@')) { @$remove_key = $k.'@'; } $values_array[] = $config['attribute_fields']['group'][$language['language_id']].':'.str_replace('@', '', strstr($k, '@')).':'.$v; } continue 2; } // if array of values process each one } else if (isset($line[$config['attribute_fields'][$attribute_type][$language['language_id']]]) && is_array($line[$config['attribute_fields'][$attribute_type][$language['language_id']]])) { // if we are in value or the value parameter is array then process other fields same way if ($attribute_type == 'value' || is_array($line[$config['attribute_fields']['value'][$language['language_id']]])) { foreach ($line[$config['attribute_fields'][$attribute_type][$language['language_id']]] as $k => $v) { ${'multi_attribute_'.$attribute_type.'_ml'}[$language['language_id']][$k] = $v; } } else { // group or name refers to an array, try to get key corresponding to current value key if (isset($line[$config['attribute_fields'][$attribute_type][$language['language_id']]][$current_key])) { ${'attribute_'.$attribute_type.'_ml'}[$language['language_id']][$current_key] = $line[$config['attribute_fields'][$attribute_type][$language['language_id']]][$current_key]; } } // if array of values process each one [extra field mode] } else if (isset($extraFields[$config['attribute_fields'][$attribute_type][$language['language_id']]]) && isset($line['__extra_field_'.$extraFields[$config['attribute_fields'][$attribute_type][$language['language_id']]]]) && is_array($line['__extra_field_'.$extraFields[$config['attribute_fields'][$attribute_type][$language['language_id']]]])) { // if we are in value or the value parameter is array then process other fields same way if ($attribute_type == 'value' || is_array($line['__extra_field_'.$extraFields[$config['attribute_fields'][$attribute_type][$language['language_id']]]])) { foreach ($line['__extra_field_'.$extraFields[$config['attribute_fields'][$attribute_type][$language['language_id']]]] as $k => $v) { ${'multi_attribute_'.$attribute_type.'_ml'}[$language['language_id']][$k] = $v; } } else { // group or name refers to an array, try to get key corresponding to current value key if (isset($line['__extra_field_'.$extraFields[$config['attribute_fields'][$attribute_type][$language['language_id']]]][$current_key])) { ${'attribute_'.$attribute_type.'_ml'}[$language['language_id']][$current_key] = $line['__extra_field_'.$extraFields[$config['attribute_fields'][$attribute_type][$language['language_id']]]][$current_key]; } } // use @ to ... } else if (strpos($config['attribute_fields'][$attribute_type][$language['language_id']], '@')) { if (isset($line[$config['attribute_fields'][$attribute_type][$language['language_id']]]) && is_array($line[$config['attribute_fields'][$attribute_type][$language['language_id']]])) { ${'attribute_'.$attribute_type.'_ml'}[$language['language_id']] = $line[$config['attribute_fields'][$attribute_type][$language['language_id']]][$current_key]; } else if (isset($line[$config['attribute_fields'][$attribute_type][$language['language_id']]])) { ${'attribute_'.$attribute_type.'_ml'}[$language['language_id']] = $line[$config['attribute_fields'][$attribute_type][$language['language_id']]]; } // get path } else { if ($attribute_type == 'value' && strpos($config['attribute_fields']['value'][$language['language_id']], '+')) { foreach (explode('+', $config['attribute_fields'][$attribute_type][$language['language_id']]) as $k => $vals) { foreach (explode('~', $vals) as $v) { if (substr($v, 0, 1) == "'" && substr($v, -1) == "'") { $resVal = substr($v, 1, -1); } else { $resVal = $this->getArrayPath(is_array($value) ? $value : $line, $v); } if ($resVal !== '') { if (!isset(${'multi_attribute_'.$attribute_type.'_ml'}[$language['language_id']][$k])) { ${'multi_attribute_'.$attribute_type.'_ml'}[$language['language_id']][$k] = ''; } ${'multi_attribute_'.$attribute_type.'_ml'}[$language['language_id']][$k] .= $resVal; } } if (isset(${'multi_attribute_'.$attribute_type.'_ml'}[$language['language_id']][$k]) && @trim(${'multi_attribute_'.$attribute_type.'_ml'}[$language['language_id']][$k]) == '') { unset(${'multi_attribute_'.$attribute_type.'_ml'}[$language['language_id']][$k]); } } } else { //${'attribute_'.$attribute_type.'_ml'}[$language['language_id']] = $this->getArrayPath(is_array($value) ? $value : $line, $config['attribute_fields'][$attribute_type][$language['language_id']]); ${'attribute_'.$attribute_type.'_ml'}[$language['language_id']] = ''; // use ~ to combine multiple values in one foreach (explode('~', $config['attribute_fields'][$attribute_type][$language['language_id']]) as $k => $v) { $resVal = $this->getArrayPath(is_array($value) ? $value : $line, $v); if (is_array($resVal)) { $resVal = implode(', ', $resVal); } ${'attribute_'.$attribute_type.'_ml'}[$language['language_id']] .= $resVal; } } } } } if (!empty(${'attribute_'.$attribute_type.'_ml'})) { ${'attribute_'.$attribute_type} = reset(${'attribute_'.$attribute_type.'_ml'}); } // set defaults if empty if (empty(${'attribute_'.$attribute_type})) { foreach ($languages as $language) { if (!empty($config['attribute_fields_default'][$attribute_type][$language['language_id']])) { if ($attribute_type == 'group') { ${'attribute_'.$attribute_type.'_ml'}[$language['language_id']] = isset($config['attribute_fields_default'][$attribute_type][$language['language_id']]) ? $config['attribute_fields_default'][$attribute_type][$language['language_id']] : 'Default'; } else { ${'attribute_'.$attribute_type.'_ml'}[$language['language_id']] = isset($config['attribute_fields_default'][$attribute_type][$language['language_id']]) ? $config['attribute_fields_default'][$attribute_type][$language['language_id']] : ''; } } } if (!empty(${'attribute_'.$attribute_type.'_ml'})) { ${'attribute_'.$attribute_type} = reset(${'attribute_'.$attribute_type.'_ml'}); } else { ${'attribute_'.$attribute_type} = ($attribute_type == 'group') ? 'Default' : ''; } } } } else if (is_array($value)) { $attribute_group = isset($value['group']) ? $value['group'] : 'Default'; $attribute_name = isset($value['name']) ? $value['name'] : 'Attribute'; $attribute_value = isset($value['value']) ? $value['value'] : ''; } else if (is_scalar($value)) { if (strpos($value, ':') !== false) { $values = explode(':', $value); } if (!isset($values)) { // get column header $column_headers = (array) json_decode(base64_decode($config['column_headers'])); //if ($this->filetype == 'xml' && if (isset($config['columns_bindings'][$field][$header_key]) && !empty($column_headers[ $config['columns_bindings'][$field][$header_key] ])) { $attribute_group = 'Default'; if ($this->filetype == 'xml') { $attribute_name = basename($column_headers[ $config['columns_bindings'][$field][$header_key] ]); } else { $attribute_name = $column_headers[ $config['columns_bindings'][$field][$header_key] ]; } if (strpos($attribute_name, ':')) { $attrData = explode(':', $attribute_name); if (isset($attrData[2])) { $attribute_group = $attrData[1]; $attribute_name = $attrData[2]; } else { $attribute_name = $attrData[1]; } } $attribute_value = $value; } else { $attribute_group = 'Default'; $attribute_name = 'Attribute'; $attribute_value = $value; } // get default names to see if there is any custom binding foreach (array('group', 'name', 'value') as $attribute_type) { if (isset($config['attribute_fields_default'][$attribute_type]) && !empty(array_filter($config['attribute_fields_default'][$attribute_type]))) { foreach ($languages as $language) { if (!empty($config['attribute_fields_default'][$attribute_type][$language['language_id']])) { $custom_data = explode('|', $config['attribute_fields_default'][$attribute_type][$language['language_id']]); if (!empty($custom_data[$header_key])) { ${'attribute_'.$attribute_type.'_ml'}[$language['language_id']] = $custom_data[$header_key]; } else if (!empty($custom_data[0])) { ${'attribute_'.$attribute_type.'_ml'}[$language['language_id']] = $custom_data[0]; } else { ${'attribute_'.$attribute_type.'_ml'}[$language['language_id']] = ${'attribute_'.$attribute_type}; } } } if (!empty(${'attribute_'.$attribute_type.'_ml'})) { ${'attribute_'.$attribute_type} = reset(${'attribute_'.$attribute_type.'_ml'}); } else { ${'attribute_'.$attribute_type} = ($attribute_type == 'group') ? 'Default' : ''; } } } } else if (!empty($config['attr_mode']) || count($values) > 3) { preg_match('/(.+?):(.+)/', $value, $values); $attribute_group = 'Default'; $attribute_name = $values[1]; $attribute_value = $values[2]; } else if (count($values) == 2) { $attribute_group = 'Default'; $attribute_name = $values[0]; $attribute_value = $values[1]; } else if (count($values) == 3) { $attribute_group = $values[0] ? $values[0] : 'Default'; $attribute_name = $values[1]; $attribute_value = $values[2]; } else { // too much parts ? continue; } } else { continue; } $attr_array = array(); foreach (array('group', 'name', 'value') as $attribute_type) { $attr_array['attribute_'.$attribute_type] = isset(${'attribute_'.$attribute_type}) ? ${'attribute_'.$attribute_type} : ''; $attr_array['attribute_'.$attribute_type.'_ml'] = isset(${'attribute_'.$attribute_type.'_ml'}) ? ${'attribute_'.$attribute_type.'_ml'} : ''; } if (!empty($multi_attribute_value_ml) && is_array($multi_attribute_value_ml)) { foreach (reset($multi_attribute_value_ml) as $k => $multiAttr) { foreach (array('group', 'name', 'value') as $sub_type) { $attr_array['attribute_'.$sub_type.'_ml'] = array(); foreach ($languages as $language) { if (isset(${'multi_attribute_'.$sub_type.'_ml'}[$language['language_id']][$k])) { $attr_array['attribute_'.$sub_type.'_ml'][$language['language_id']] = ${'multi_attribute_'.$sub_type.'_ml'}[$language['language_id']][$k]; } } if (reset($attr_array['attribute_'.$sub_type.'_ml']) !== false) { $attr_array['attribute_'.$sub_type] = reset($attr_array['attribute_'.$sub_type.'_ml']); } } $attributes_array[] = $attr_array; } } else { $attributes_array[] = $attr_array; } } /* // attribute group binding switch ($attribute_name) { case 'size_for_cloth': $attribute_group = 'Group 1'; break; case 'color_for_cloth': $attribute_group = 'Group 2'; break; } // attribute name binding switch ($attribute_name) { case 'size_for_cloth': $attribute_name = 'size'; break; case 'color_for_cloth': $attribute_name = 'color'; break; } */ // combine duplicates if (true) { foreach ($attributes_array as $current_key => &$attr) { foreach ($attributes_array as $subkey => $subAttr) { if ($subkey != $current_key && $attr['attribute_group'] == $subAttr['attribute_group'] && $attr['attribute_name'] == $subAttr['attribute_name'] && $attr['attribute_value'] != $subAttr['attribute_value']) { $attributes_array[$current_key]['attribute_value'] = $attr['attribute_value'] . ', ' . $subAttr['attribute_value']; if (is_array($attr['attribute_value_ml'])) { foreach ($attr['attribute_value_ml'] as $language_id => &$attrValMl) { if (isset($subAttr['attribute_value_ml'][$language_id])) { $attrValMl = $attrValMl . ', ' . $subAttr['attribute_value_ml'][$language_id]; } } } unset($attributes_array[$subkey]); } } } } foreach ($attributes_array as $current_key => $attributeValues) { foreach ($attributeValues as $attName => $attVal) { ${$attName} = $attVal; } if (!empty($config['filters_from_attributes'])) { $config['columns']['product_filter'][] = $attribute_name .':'. $attribute_value; } if ($attribute_group == '' || $attribute_name == '' || $attribute_value == '') { continue; } if ($this->simulation) { if (@trim($attribute_value)) { if (is_numeric($attribute_name)) { $attrExists = $this->db->query("SELECT attribute_id, name FROM " . DB_PREFIX . "attribute_description WHERE attribute_id = '" . $this->db->escape($attribute_name) . "'")->row; if (empty($attrExists['attribute_id'])) { $this->tool->log(array( 'row' => $this->session->data['obui_current_line'], 'status' => 'error', 'title' => $this->language->get('warning'), 'msg' => 'Attribute ID not found: '.$attribute_name, )); continue; } } else { $attrExists = $this->db->query("SELECT attribute_id, name FROM " . DB_PREFIX . "attribute_description WHERE name = '" . $this->db->escape($attribute_name) . "'")->row; } if (!empty($attrExists['attribute_id'])) { $attribute_name = $attrExists['name']; } $return_values[] = $attribute_group .' <b>></b> '. $attribute_name .' <b>></b> '. $attribute_value; } continue; } if (is_numeric($attribute_name)) { $attrExists = $this->db->query("SELECT attribute_id FROM " . DB_PREFIX . "attribute_description WHERE attribute_id = '" . $this->db->escape($attribute_name) . "'")->row; } else { $attrExists = $this->db->query("SELECT attribute_id FROM " . DB_PREFIX . "attribute_description WHERE name = '" . $this->db->escape($attribute_name) . "'")->row; } // attribute exists ? if (!empty($attrExists['attribute_id'])) { $attribute_id = $attrExists['attribute_id']; $checkAttrTable = true; } // not exists and is numeric - trigger error else if (is_numeric($attribute_name)) { $this->tool->log(array( 'row' => $this->session->data['obui_current_line'], 'status' => 'error', 'title' => $this->language->get('warning'), 'msg' => 'Attribute ID not found: '.$attribute_name, )); } // not exists - create else { $attr_data = array(); $attr_data['sort_order'] = 1; $attr_group = $this->db->query("SELECT attribute_group_id FROM " . DB_PREFIX . "attribute_group_description WHERE name = '" . $this->db->escape($attribute_group) . "'")->row; // group exists - get id if (!empty($attr_group['attribute_group_id'])) { $attr_data['attribute_group_id'] = $attr_group['attribute_group_id']; } // group not exists - create else { $attr_group_data = array(); $attr_group_data['sort_order'] = 1; foreach ($languages as $language) { $attr_group_data['attribute_group_description'][$language['language_id']]['name'] = !empty($attribute_group_ml[$language['language_id']]) ? $attribute_group_ml[$language['language_id']] : $attribute_group; } if (version_compare(VERSION, '2', '>=')) { $this->load->model('catalog/attribute_group'); $attr_data['attribute_group_id'] = $this->model_catalog_attribute_group->addAttributeGroup($this->request->clean($attr_group_data)); } else { $this->load->model('gkd_import/attribute'); $attr_data['attribute_group_id'] = $this->model_gkd_import_attribute->addAttributeGroup($this->request->clean($attr_group_data)); } } // create attribute foreach ($languages as $language) { $attr_data['attribute_description'][$language['language_id']]['name'] = !empty($attribute_name_ml[$language['language_id']]) ? $attribute_name_ml[$language['language_id']] : $attribute_name; } if (version_compare(VERSION, '2', '>=')) { $this->load->model('catalog/attribute'); $attribute_id = $this->model_catalog_attribute->addAttribute($attr_data); } else { $this->load->model('gkd_import/attribute'); $attribute_id = $this->model_gkd_import_attribute->addAttribute($this->request->clean($attr_data)); } } if (!empty($checkAttrTable)) { // check if corresponding attribute table exists, create it if not if (!empty($attribute_id)) { $attrExists = $this->db->query("SELECT attribute_id FROM " . DB_PREFIX . "attribute WHERE attribute_id = '" . (int) $attribute_id . "'")->row; } if (empty($attrExists['attribute_id'])) { // check for attr group $attr_group = $this->db->query("SELECT attribute_group_id FROM " . DB_PREFIX . "attribute_group_description WHERE name = '" . $this->db->escape($attribute_group) . "'")->row; // group exists - get id if (!empty($attr_group['attribute_group_id'])) { $attr_data['attribute_group_id'] = $attr_group['attribute_group_id']; } // group not exists - create else { $attr_group_data = array(); $attr_group_data['sort_order'] = 1; foreach ($languages as $language) { $attr_group_data['attribute_group_description'][$language['language_id']]['name'] = !empty($attribute_group_ml[$language['language_id']]) ? $attribute_group_ml[$language['language_id']] : $attribute_group; } if (version_compare(VERSION, '2', '>=')) { $this->load->model('catalog/attribute_group'); $attr_data['attribute_group_id'] = $this->model_catalog_attribute_group->addAttributeGroup($this->request->clean($attr_group_data)); } else { $this->load->model('gkd_import/attribute'); $attr_data['attribute_group_id'] = $this->model_gkd_import_attribute->addAttributeGroup($this->request->clean($attr_group_data)); } } $this->db->query("INSERT INTO " . DB_PREFIX . "attribute SET attribute_id = '" . (int) $attr['attribute_id'] . "', attribute_group_id = '" . (int) $attr_data['attribute_group_id'] . "', sort_order = 0"); } } // format values for product - only if not empty value if (@trim($attribute_value)) { $return_values[$current_key]['attribute_id'] = $attribute_id; foreach ($languages as $language) { $return_values[$current_key]['product_attribute_description'][$language['language_id']]['text'] = !empty($attribute_value_ml[$language['language_id']]) ? $attribute_value_ml[$language['language_id']] : $attribute_value; } } /* $value = array( 'attribute_id' => $attribute_id, ); foreach ($languages as $language) { $value['product_attribute_description'][$language['language_id']]['text'] = !empty($attribute_value_ml[$language['code']]) ? $attribute_value_ml[$language['code']] : $attribute_value; } */ } return $return_values; } public function attributeHandler_old($field, $config, $line) { $return_values = $values_array = $header_keys = array(); if (empty($config['columns'][$field])) { return $values_array; } foreach ((array) $config['columns'][$field] as $key => $value) { if (is_string($value) && strpos($value, '</li>') !== false) { $dom = new DOMDocument; @$dom->loadHTML($value); foreach ($dom->getElementsByTagName('li') as $node) { $values_array[] = $node->nodeValue; } } else if (is_array($value)) { $values_array = array_merge($values_array, $value); foreach($value as $v) { $header_keys[] = $key; } } else if (!empty($config['multiple_separator'])) { $value = explode(@html_entity_decode($config['multiple_separator'], ENT_QUOTES, 'UTF-8'), $value); $values_array = array_merge($values_array, $value); foreach($value as $v) { $header_keys[] = $key; } } else { $values_array[$key] = $value; $header_keys[] = $key; } } //$values_array = array_filter($values_array); // do not filter, else it make the count wrong (for headers) $this->load->model('localisation/language'); $languages = $this->model_localisation_language->getLanguages(); // foreach ($values_array as $current_key => &$value) { //for ($i = 0; $i <= count($values_array); $i++) { for($i = 0; $i < count($values_array); ++$i) { $current_key = $i; if (!isset($values_array[$i])) continue; $value = $values_array[$i]; if (isset($header_keys[$current_key])) { $header_key = $header_keys[$current_key]; } // xml advanced values if (!is_string($value) && $this->filetype == 'xml' && !empty($config['attribute_fields']['value'][$this->config->get('config_language_id')])) { foreach (array('group', 'name', 'value') as $attribute_type) { foreach ($languages as $language) { if (!empty($config['attribute_fields'][$attribute_type][$language['language_id']])) { if ($config['attribute_fields'][$attribute_type][$language['language_id']] == '.') { ${'attribute_'.$attribute_type.'_ml'}[$language['language_id']] = $value; } else if ($config['attribute_fields'][$attribute_type][$language['language_id']] == '[attributes]') { if ($attribute_type == 'name') { foreach ($value as $k => $v) { if (!$v) continue; if (!strpos($k, '@')) { @$remove_key = $k.'@'; } $values_array[] = $config['attribute_fields']['group'][$language['language_id']].':'.str_replace('@', '', strstr($k, '@')).':'.$v; } continue 2; } } else if (strpos($config['attribute_fields'][$attribute_type][$language['language_id']], '@')) { if (isset($line[$config['attribute_fields'][$attribute_type][$language['language_id']]]) && is_array($line[$config['attribute_fields'][$attribute_type][$language['language_id']]])) { ${'attribute_'.$attribute_type.'_ml'}[$language['language_id']] = $line[$config['attribute_fields'][$attribute_type][$language['language_id']]][$current_key]; } else { ${'attribute_'.$attribute_type.'_ml'}[$language['language_id']] = $line[$config['attribute_fields'][$attribute_type][$language['language_id']]]; } } else { ${'attribute_'.$attribute_type.'_ml'}[$language['language_id']] = $this->getArrayPath($value, $config['attribute_fields'][$attribute_type][$language['language_id']]); } } } if (!empty(${'attribute_'.$attribute_type.'_ml'})) { ${'attribute_'.$attribute_type} = reset(${'attribute_'.$attribute_type.'_ml'}); } // set defaults if empty if (empty(${'attribute_'.$attribute_type})) { foreach ($languages as $language) { if (!empty($config['attribute_fields_default'][$attribute_type][$language['language_id']])) { if ($attribute_type == 'group') { ${'attribute_'.$attribute_type.'_ml'}[$language['language_id']] = isset($config['attribute_fields_default'][$attribute_type][$language['language_id']]) ? $config['attribute_fields_default'][$attribute_type][$language['language_id']] : 'Default'; } else { ${'attribute_'.$attribute_type.'_ml'}[$language['language_id']] = isset($config['attribute_fields_default'][$attribute_type][$language['language_id']]) ? $config['attribute_fields_default'][$attribute_type][$language['language_id']] : ''; } } } if (!empty(${'attribute_'.$attribute_type.'_ml'})) { ${'attribute_'.$attribute_type} = reset(${'attribute_'.$attribute_type.'_ml'}); } else { ${'attribute_'.$attribute_type} = ($attribute_type == 'group') ? 'Default' : ''; } } } } else if (is_array($value)) { $attribute_group = isset($value['group']) ? $value['group'] : 'Default'; $attribute_name = isset($value['name']) ? $value['name'] : 'Attribute'; $attribute_value = isset($value['value']) ? $value['value'] : ''; } else if (is_scalar($value)) { if (strpos($value, ':') !== false) { $values = explode(':', $value); } if (!isset($values)) { // get column header $column_headers = (array) json_decode(base64_decode($config['column_headers'])); //if ($this->filetype == 'xml' && if (isset($config['columns_bindings'][$field][$header_key]) && !empty($column_headers[ $config['columns_bindings'][$field][$header_key] ])) { $attribute_group = 'Default'; if ($this->filetype == 'xml') { $attribute_name = basename($column_headers[ $config['columns_bindings'][$field][$header_key] ]); } else { $attribute_name = $column_headers[ $config['columns_bindings'][$field][$header_key] ]; } $attribute_value = $value; } else { $attribute_group = 'Default'; $attribute_name = 'Attribute'; $attribute_value = $value; } } else if (isset($values) && count($values) == 2) { $attribute_group = 'Default'; $attribute_name = $values[0]; $attribute_value = $values[1]; } else if (count($values) == 3) { $attribute_group = $values[0] ? $values[0] : 'Default'; $attribute_name = $values[1]; $attribute_value = $values[2]; } else { // too much parts ? continue; } } else { continue; } /* // attribute group binding switch ($attribute_name) { case 'size_for_cloth': $attribute_group = 'Group 1'; break; case 'color_for_cloth': $attribute_group = 'Group 2'; break; } // attribute name binding switch ($attribute_name) { case 'size_for_cloth': $attribute_name = 'size'; break; case 'color_for_cloth': $attribute_name = 'color'; break; } */ if (!empty($config['filters_from_attributes'])) { $config['columns']['product_filter'][] = $attribute_name .':'. $attribute_value; } if ($this->simulation) { if (@trim($attribute_value)) { $return_values[] = $attribute_group .' <b>></b> '. $attribute_name .' <b>></b> '. $attribute_value; } continue; } $attr = $this->db->query("SELECT attribute_id FROM " . DB_PREFIX . "attribute_description WHERE name = '" . $this->db->escape($attribute_name) . "'")->row; // attribute exists ? if (!empty($attr['attribute_id'])) { $attribute_id = $attr['attribute_id']; } // not exists - create else { $attr_data = array(); $attr_data['sort_order'] = 1; $attr_group = $this->db->query("SELECT attribute_group_id FROM " . DB_PREFIX . "attribute_group_description WHERE name = '" . $this->db->escape($attribute_group) . "'")->row; // group exists - get id if (!empty($attr_group['attribute_group_id'])) { $attr_data['attribute_group_id'] = $attr_group['attribute_group_id']; } // group not exists - create else { $attr_group_data = array(); $attr_group_data['sort_order'] = 1; foreach ($languages as $language) { $attr_group_data['attribute_group_description'][$language['language_id']]['name'] = !empty($attribute_group_ml[$language['language_id']]) ? $attribute_group_ml[$language['language_id']] : $attribute_group; } if (version_compare(VERSION, '2', '>=')) { $this->load->model('catalog/attribute_group'); $attr_data['attribute_group_id'] = $this->model_catalog_attribute_group->addAttributeGroup($this->request->clean($attr_group_data)); } else { $this->load->model('gkd_import/attribute'); $attr_data['attribute_group_id'] = $this->model_gkd_import_attribute->addAttributeGroup($this->request->clean($attr_group_data)); } } // create attribute foreach ($languages as $language) { $attr_data['attribute_description'][$language['language_id']]['name'] = !empty($attribute_name_ml[$language['language_id']]) ? $attribute_name_ml[$language['language_id']] : $attribute_name; } if (version_compare(VERSION, '2', '>=')) { $this->load->model('catalog/attribute'); $attribute_id = $this->model_catalog_attribute->addAttribute($attr_data); } else { $this->load->model('gkd_import/attribute'); $attribute_id = $this->model_gkd_import_attribute->addAttribute($this->request->clean($attr_data)); } } // format values for product - only if not empty value if (@trim($attribute_value)) { $return_values[$current_key]['attribute_id'] = $attribute_id; foreach ($languages as $language) { $return_values[$current_key]['product_attribute_description'][$language['language_id']]['text'] = !empty($attribute_value_ml[$language['language_id']]) ? $attribute_value_ml[$language['language_id']] : $attribute_value; } } /* $value = array( 'attribute_id' => $attribute_id, ); foreach ($languages as $language) { $value['product_attribute_description'][$language['language_id']]['text'] = !empty($attribute_value_ml[$language['code']]) ? $attribute_value_ml[$language['code']] : $attribute_value; } */ } return $return_values; } public function imageHandler($field, $config, $multiple = false, $item_id = NULL, $get_path = false, $main_image = false) { $image_array = array(); if (empty($config['columns'][$field])) { if ($multiple) { return $image_array; } else { return ''; } } $sort_order = 0; foreach ((array) $config['columns'][$field] as $images) { if (!empty($config['multiple_separator']) && is_string($images)) { $images = explode(@html_entity_decode($config['multiple_separator'], ENT_QUOTES, 'UTF-8'), $images); } if (is_array($main_image)) { $main_image = array_shift($main_image); } if ($multiple) { $images = (array) $images; } if ($multiple && isset($images[0]) && $main_image == $images[0]) { array_shift($images); } foreach ((array) $images as $image) { if (is_array($image)) continue; $image = @trim($image); if ($config['image_download'] && $image) { // if (substr($image, 0, 2) == '//') { // $image = 'http:' . $image; // } // add http if image starts by www. if (substr($image, 0, 4) == 'www.') { $image = 'http://'.$image; } if (substr($image, 0, 2) == '//') { $image = 'https:'.$image; } if (!empty($config['image_http_auth'])) { $image = str_replace(array('http://', 'https://'), array('http://'.$config['image_http_auth'].'@', 'https://'.$config['image_http_auth'].'@'), $image); } //$file_info = pathinfo(parse_url(trim($image), PHP_URL_PATH)); $image = urldecode($image); //$file_info = pathinfo($this->tool->mb_parse_url(trim($image), PHP_URL_PATH)); $file_info = pathinfo(parse_url(@trim($image), PHP_URL_PATH)); if (!empty($file_info['extension'])) { $file_info['extension'] = strtolower($file_info['extension']); } if (!empty($config['image_name_param'])) { parse_str(parse_url($image, PHP_URL_QUERY), $query_params); if (!empty($query_params[$config['image_name_param']])) { $file_info = pathinfo($query_params[$config['image_name_param']]); } } if (!isset($file_info['dirname'])) { $file_info['dirname'] = ''; } // if no extension, get it by mime if (empty($file_info['extension']) || !in_array(strtolower($file_info['extension']), array('gif', 'jpg', 'jpeg', 'png', 'webp'))) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, @trim($image)); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_NOBODY, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0'); $res = curl_exec($ch); $contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE); switch($contentType) { case 'image/bmp': $file_info['extension'] = 'bmp'; break; case 'image/gif': $file_info['extension'] = 'gif'; break; case 'image/jpeg': $file_info['extension'] = 'jpg'; break; case 'image/jpeg;': $file_info['extension'] = 'jpg'; break; case 'image/pipeg': $file_info['extension'] = 'jfif'; break; case 'image/tiff': $file_info['extension'] = 'tif'; break; case 'image/png': $file_info['extension'] = 'png'; break; case 'image/png;': $file_info['extension'] = 'png'; break; case 'image/webp': $file_info['extension'] = 'webp'; break; default: $file_info['extension'] = ''; } preg_match('/filename=[\'\"]?([^\"]+)/', $res, $match); if (!empty($match[1])) { $headerFileInfo = pathinfo($match[1]); if (!empty($headerFileInfo['filename'])) { $file_info['filename'] = $headerFileInfo['filename']; if (!empty($headerFileInfo['extension'])) { $file_info['extension'] = $headerFileInfo['extension']; } } else { $file_info['filename'] = $match[1]; if (empty($file_info['extension'])) { $file_info['extension'] = pathinfo($match[1], PATHINFO_EXTENSION); } } } curl_close($ch); } // sanitize filename //$file_info['filename'] = preg_replace('/[^A-Za-z0-9_\s\.-~]/', '', $file_info['filename']); if (substr_count($file_info['dirname'], 'http')) { // incorrect array extract if (!$multiple) { return ''; } else { continue; } } if (!in_array(strtolower($file_info['extension']), array('gif', 'jpg', 'jpeg', 'png', 'webp'))) { $this->tool->log(array( 'row' => $this->session->data['obui_current_line'], 'status' => 'error', 'title' => $this->language->get('warning'), 'msg' => $this->language->get('warning_incorrect_image_format') . ' ' . str_replace(' ', '%20', $image), )); if (!$multiple) { return ''; } else { continue; } } if ($this->simulation && !$get_path) { if (!$multiple) { /* Now handled before if (!in_array(strtolower($file_info['extension']), array('gif', 'jpg', 'jpeg', 'png'))) { return array('error_format', $image); }*/ return $image; } else { /* Now handled before if (!in_array(strtolower($file_info['extension']), array('gif', 'jpg', 'jpeg', 'png'))) { $image_array[] = 'error_format'; continue; }*/ $image_array[] = $image; continue; } } // detect if image is on actual server if (!in_array(substr($image, 0, 4), array('http', 'ftp:'))) { $filename = @trim($image); if (!$multiple) { return $filename; } else { if (!empty($filename)) { $image_array[] = array( 'image' => $filename, 'sort_order' => $sort_order++, ); } continue; } } if (version_compare(VERSION, '2', '>=')) { $path = 'catalog/'; //$http_path = HTTP_CATALOG . 'image/catalog/'; } else { $path = 'data/'; //$http_path = HTTP_CATALOG . 'image/data/'; } if (substr($config['image_location'], 0, 4) != 'http') { if (@trim($config['image_location'], '/\\')) { $path .= @trim($config['image_location'], '/\\') . '/'; } } // sanitize dirname if (!empty($file_info['dirname'])) { $dirParts = explode('/', $file_info['dirname']); foreach ($dirParts as &$dirPart) { //$dirPart = urldecode(urldecode($dirPart)); if (empty($config['image_sanitize'])) { $dirPart = $this->tool->urlify($dirPart, null, true, true); } else if ($config['image_sanitize'] == 'safe') { $dirPart = $this->tool->urlify($dirPart, null, true, false); } else if ($config['image_sanitize'] == 'lcase') { $dirPart = strtolower($dirPart); } } $file_info['dirname'] = implode('/', $dirParts); } if ($config['image_keep_path'] && @trim($file_info['dirname'], '/\\')) { $path .= @trim($file_info['dirname'], '/\\') . '/'; if (!empty($config['image_remove_path'])) { $path = str_replace($config['image_remove_path'], '', $path); } } //$path = urldecode($path); if (!is_dir(DIR_IMAGE . $path)) { mkdir(DIR_IMAGE . $path, 0777, true); } // sanitize filename if (!empty($file_info['filename'])) { //$file_info['filename'] = urldecode(urldecode($file_info['filename'])); if (empty($config['image_sanitize'])) { $file_info['filename'] = $this->tool->urlify($file_info['filename'], null, true, true); } else if ($config['image_sanitize'] == 'safe') { $file_info['filename'] = $this->tool->urlify($file_info['filename'], null, true, false); } else if ($config['image_sanitize'] == 'lcase') { $file_info['filename'] = strtolower($file_info['filename']); } } //$filename = $path . urldecode($file_info['filename']) . '.' . $file_info['extension']; $filename = $path . $file_info['filename'] . '.' . $file_info['extension']; if ((!$item_id && $this->config->get('mlseo_insertautoimgname')) || ($item_id && $this->config->get('mlseo_editautoimgname'))) { $this->load->model('tool/seo_package'); $seo_image_name = $this->model_tool_seo_package->transformProduct($this->config->get('mlseo_product_image_name_pattern'), $this->config->get('config_language_id'), $config['columns']); $seoPath = pathinfo($filename); if (!empty($seoPath['filename'])) { $seoFilename = $this->model_tool_seo_package->filter_seo($seo_image_name, 'image', '', ''); $filename = $seoPath['dirname'] . '/' . $seoFilename . '.' . $seoPath['extension']; /* do not rename it, will be done after: if (file_exists(DIR_IMAGE . $filename)) { $x = 1; while (file_exists(DIR_IMAGE . $filename)) { $filename = $seoPath['dirname'] . '/' . $seoFilename . '-' . $x . '.' . $seoPath['extension']; $x++; } }*/ } } if ($this->simulation && $get_path) { return $filename; } if ($config['image_exists'] == 'rename') { $x = 1; while (file_exists(DIR_IMAGE . $filename)) { $filename = $path . $file_info['filename'] . '-' . $x++ . '.' . $file_info['extension']; } } else if ($config['image_exists'] == 'keep' && file_exists(DIR_IMAGE . $filename)) { // image skipped if (!$multiple) { return $filename; } else { $image_array[] = array( 'image' => $filename, 'sort_order' => $sort_order++, ); continue; } } // copy image, replace space chars for compatibility with copy() // if (!@copy(trim(str_replace(' ', '%20', $image)), DIR_IMAGE . $filename)) { $copyError = $this->tool->copy_image(@trim($image), DIR_IMAGE . $filename); if ($copyError !== true) { if (empty($config['image_not_exists'])) { $this->tool->log(array( 'row' => $this->session->data['obui_current_line'], 'status' => 'error', 'title' => $this->language->get('warning'), 'msg' => $copyError, )); } else { throw new GkdSkipException($copyError); } $filename = ''; } } else { // get direct value $filename = @trim($image); $path = ''; if (substr($config['image_location'], 0, 4) != 'http') { if (@trim($config['image_location'], '/\\')) { $path = @trim($config['image_location'], '/\\') . '/'; } } $filename = !empty($filename) ? $path.$filename : ''; // throw error if image is not url and image not exists if (substr($config['image_location'], 0, 4) != 'http' && !empty($filename) && substr($filename, 0, 4) != 'http' && !is_file(DIR_IMAGE . $filename)) { if (empty($config['image_not_exists'])) { $this->tool->log(array( 'row' => $this->session->data['obui_current_line'], 'status' => 'error', 'title' => $this->language->get('warning'), 'msg' => 'The following image has not been found: ' . DIR_IMAGE . $filename, )); } else { throw new GkdSkipException('The following image has not been found: ' . DIR_IMAGE . $filename); } } if ($this->simulation) { if (!$multiple) { return $filename; } else { if (!empty($filename)) { $image_array[] = $filename; } continue; } } } // one field only, directly return first value if (!$multiple) { return $filename; } if (!empty($filename)) { $image_array[] = array( 'image' => $filename, 'sort_order' => $sort_order++, ); } } } return $image_array; } public function downloadHandler($field, $config) { $downloadArray = array(); if (empty($config['columns'][$field])) { return array(); } $sort_order = 0; $filenames = array(); foreach ((array) $config['columns'][$field] as $k => $downloads) { if (!empty($config['multiple_separator']) && is_string($downloads)) { $downloads = explode(@html_entity_decode($config['multiple_separator'], ENT_QUOTES, 'UTF-8'), $downloads); } foreach ((array) $downloads as $download) { if ((!is_scalar($download) || $download == '') && in_array($this->filetype, array('xml', 'json')) && !empty($config['download_fields']['value'])) { if (!empty($config['download_fields']['value'])) { $download = $this->getArrayPath(is_array($download) ? $download : $line, $config['download_fields']['value']); } /* foreach (array('name') as $download_type) { // to terminate foreach ($languages as $language) { ${'download_'.$download_type.'_ml'} = array(); if (!empty($config['download_fields'][$download_type][$language['language_id']])) { // use . or [current] to have main download value if (($config['download_fields'][$download_type][$language['language_id']] == '[current]' || $config['download_fields'][$download_type][$language['language_id']] == '.' || $config['download_fields'][$download_type][$language['language_id']] == '') && is_string($value)) { ${'download_'.$download_type.'_ml'}[$language['language_id']] = $value; // use [attributes] to ... } else if ($config['download_fields'][$download_type][$language['language_id']] == '[attributes]') { if ($download_type == 'name') { foreach ($value as $k => $v) { if (!$v) continue; if (!strpos($k, '@')) { $remove_key = $k.'@'; } $values_array[] = $config['download_fields']['group'][$language['language_id']].':'.str_replace('@', '', strstr($k, '@')).':'.$v; } continue 2; } // if array of values process each one } else if (isset($line[$config['download_fields'][$download_type][$language['language_id']]]) && is_array($line[$config['download_fields'][$download_type][$language['language_id']]])) { // if we are in value or the value parameter is array then process other fields same way if ($download_type == 'value' || is_array($line[$config['download_fields']['value'][$language['language_id']]])) { foreach ($line[$config['download_fields'][$download_type][$language['language_id']]] as $k => $v) { ${'multi_download_'.$download_type.'_ml'}[$language['language_id']][$k] = $v; } } else { // group or name refers to an array, try to get key corresponding to current value key if (isset($line[$config['download_fields'][$download_type][$language['language_id']]][$current_key])) { ${'download_'.$download_type.'_ml'}[$language['language_id']][$current_key] = $line[$config['download_fields'][$download_type][$language['language_id']]][$current_key]; } } // use @ to ... } else if (strpos($config['download_fields'][$download_type][$language['language_id']], '@')) { if (isset($line[$config['download_fields'][$download_type][$language['language_id']]]) && is_array($line[$config['download_fields'][$download_type][$language['language_id']]])) { ${'download_'.$download_type.'_ml'}[$language['language_id']] = $line[$config['download_fields'][$download_type][$language['language_id']]][$current_key]; } else if (isset($line[$config['download_fields'][$download_type][$language['language_id']]])) { ${'download_'.$download_type.'_ml'}[$language['language_id']] = $line[$config['download_fields'][$download_type][$language['language_id']]]; } // get path } else { if ($download_type == 'value' && strpos($config['download_fields']['value'][$language['language_id']], '+')) { foreach (explode('+', $config['download_fields'][$download_type][$language['language_id']]) as $k => $vals) { foreach (explode('~', $vals) as $v) { if (substr($v, 0, 1) == "'" && substr($v, -1) == "'") { $resVal = substr($v, 1, -1); } else { $resVal = $this->getArrayPath(is_array($value) ? $value : $line, $v); } if ($resVal !== '') { if (!isset(${'multi_download_'.$download_type.'_ml'}[$language['language_id']][$k])) { ${'multi_download_'.$download_type.'_ml'}[$language['language_id']][$k] = ''; } ${'multi_download_'.$download_type.'_ml'}[$language['language_id']][$k] .= $resVal; } } if (isset(${'multi_download_'.$download_type.'_ml'}[$language['language_id']][$k]) && trim(${'multi_download_'.$download_type.'_ml'}[$language['language_id']][$k]) == '') { unset(${'multi_download_'.$download_type.'_ml'}[$language['language_id']][$k]); } } } else { //${'download_'.$download_type.'_ml'}[$language['language_id']] = $this->getArrayPath(is_array($value) ? $value : $line, $config['download_fields'][$download_type][$language['language_id']]); ${'download_'.$download_type.'_ml'}[$language['language_id']] = ''; // use ~ to combine multiple values in one foreach (explode('~', $config['download_fields'][$download_type][$language['language_id']]) as $k => $v) { $resVal = $this->getArrayPath(is_array($value) ? $value : $line, $v); ${'download_'.$download_type.'_ml'}[$language['language_id']] .= $resVal; } } } } } if (!empty(${'download_'.$download_type.'_ml'})) { ${'download_'.$download_type} = reset(${'download_'.$download_type.'_ml'}); } // set defaults if empty if (empty(${'download_'.$download_type})) { foreach ($languages as $language) { if (!empty($config['download_fields_default'][$download_type][$language['language_id']])) { if ($download_type == 'group') { ${'download_'.$download_type.'_ml'}[$language['language_id']] = isset($config['download_fields_default'][$download_type][$language['language_id']]) ? $config['download_fields_default'][$download_type][$language['language_id']] : 'Default'; } else { ${'download_'.$download_type.'_ml'}[$language['language_id']] = isset($config['download_fields_default'][$download_type][$language['language_id']]) ? $config['download_fields_default'][$download_type][$language['language_id']] : ''; } } } if (!empty(${'download_'.$download_type.'_ml'})) { ${'download_'.$download_type} = reset(${'download_'.$download_type.'_ml'}); } else { ${'download_'.$download_type} = ''; } } } */ } $download = @trim($download); if ($download) { // add http if image starts by www. if (substr($download, 0, 4) == 'www.') { $download = 'http://'.$download; } $file_info = pathinfo(parse_url(@trim($download), PHP_URL_PATH)); // if no extension, get it by mime /* if (empty($file_info['extension'])) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, trim($download)); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_NOBODY, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_exec($ch); $contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE); curl_close($ch); switch($contentType) { case 'image/bmp': $file_info['extension'] = 'bmp'; break; case 'image/gif': $file_info['extension'] = 'gif'; break; case 'image/jpeg': $file_info['extension'] = 'jpg'; break; case 'image/pipeg': $file_info['extension'] = 'jfif'; break; case 'image/tiff': $file_info['extension'] = 'tif'; break; case 'image/png': $file_info['extension'] = 'png'; break; default: $file_info['extension'] = ''; } } */ if (substr_count($file_info['dirname'], 'http')) { // incorrect array extract continue; } // detect if file is on actual server if (substr($download, 0, 4) !== 'http') { $filename = @trim($download); if (!empty($filename)) { // @todo: get download ID by filename $downloadId = ''; if (!empty($downloadId)) { $downloadArray[] = $downloadId; } } continue; } if (empty($file_info['extension'])) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, @trim($download)); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_NOBODY, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $res = curl_exec($ch); $contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE); preg_match('/filename=[\'\"]?([^\"]+)/', $res, $match); if (!empty($match[1])) { $headerFileInfo = pathinfo($match[1]); if (!empty($headerFileInfo['filename'])) { $file_info['filename'] = $headerFileInfo['filename']; $file_info['extension'] = $headerFileInfo['extension']; } else { $file_info['filename'] = $match[1]; if (empty($file_info['extension'])) { $file_info['extension'] = pathinfo($match[1], PATHINFO_EXTENSION); } } } curl_close($ch); } $filename = urldecode($file_info['filename']) . '.' . $file_info['extension']; if ($this->simulation) { $downloadArray[] = $filename; continue; } // copy image, replace space chars for compatibility with copy() $filenameToken = $filename . '.' . token(32); $copyResult = $this->tool->copy_image(@trim(str_replace(' ', '%20', $download)), DIR_DOWNLOAD . $filenameToken); if ($copyResult !== true) { $this->tool->log(array( 'row' => $this->session->data['obui_current_line'], 'status' => 'error', 'title' => $this->language->get('warning'), 'msg' => $copyResult, )); $filename = ''; } else { $this->load->model('localisation/language'); $languages = $this->model_localisation_language->getLanguages(); $downloadData = array(); $downloadData['filename'] = $filenameToken; $downloadData['mask'] = $filename; foreach ($languages as $language) { $downloadData['download_description'][$language['language_id']]['name'] = $filename; } $this->load->model('catalog/download'); $downloadId = $this->model_catalog_download->addDownload($downloadData); } } if (!empty($downloadId)) { $downloadArray[] = $downloadId; } } } return $downloadArray; } public function publicDownloadHandler($field, $config) { $downloadArray = array(); if (empty($config['columns'][$field])) { return array(); } $sort_order = 0; $filenames = array(); foreach ((array) $config['columns'][$field] as $language_id => $sectionDownloads) { if (empty($sectionDownloads)) continue; foreach ($sectionDownloads as $k => $downloads) { if (!empty($config['multiple_separator']) && is_string($downloads)) { $downloads = explode(@html_entity_decode($config['multiple_separator'], ENT_QUOTES, 'UTF-8'), $downloads); } foreach ((array) $downloads as $download) { if ((!is_scalar($download) || $download == '') && in_array($this->filetype, array('xml', 'json')) && !empty($config['download_fields']['value'])) { if (!empty($config['download_fields']['value'])) { $download = $this->getArrayPath(is_array($download) ? $download : $line, $config['download_fields']['value']); } } $download = @trim($download); if ($download) { // add http if image starts by www. if (substr($download, 0, 4) == 'www.') { $download = 'http://'.$download; } $file_info = pathinfo(parse_url(@trim($download), PHP_URL_PATH)); // if no extension, get it by mime /* if (empty($file_info['extension'])) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, trim($download)); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_NOBODY, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_exec($ch); $contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE); curl_close($ch); switch($contentType) { case 'image/bmp': $file_info['extension'] = 'bmp'; break; case 'image/gif': $file_info['extension'] = 'gif'; break; case 'image/jpeg': $file_info['extension'] = 'jpg'; break; case 'image/pipeg': $file_info['extension'] = 'jfif'; break; case 'image/tiff': $file_info['extension'] = 'tif'; break; case 'image/png': $file_info['extension'] = 'png'; break; default: $file_info['extension'] = ''; } } */ if (substr_count($file_info['dirname'], 'http')) { // incorrect array extract continue; } // detect if file is on actual server if (substr($download, 0, 4) !== 'http') { $filename = @trim($download); if (!empty($filename)) { // @todo: get download ID by filename $downloadId = ''; if (is_file(DIR_SYSTEM.'../files/'.$download)) { $downloadArray[$language_id][] = $downloadId; } } continue; } if (empty($file_info['extension'])) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, @trim($download)); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_NOBODY, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $res = curl_exec($ch); $contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE); preg_match('/filename=[\'\"]?([^\"]+)/', $res, $match); if (!empty($match[1])) { $headerFileInfo = pathinfo($match[1]); if (!empty($headerFileInfo['filename'])) { $file_info['filename'] = $headerFileInfo['filename']; $file_info['extension'] = $headerFileInfo['extension']; } else { $file_info['filename'] = $match[1]; if (empty($file_info['extension'])) { $file_info['extension'] = pathinfo($match[1], PATHINFO_EXTENSION); } } } curl_close($ch); } $filename = urldecode($file_info['filename']) . '.' . $file_info['extension']; if ($this->simulation) { $downloadArray[$language_id][] = $filename; continue; } // copy file, replace space chars for compatibility with copy() if (!is_dir(DIR_SYSTEM.'../files/.tmp/')) { mkdir(DIR_SYSTEM.'../files/.tmp/'); } $copyResult = $this->tool->copy_image(@trim(str_replace(' ', '%20', $download)), DIR_SYSTEM.'../files/.tmp/' . $filename); if ($copyResult !== true) { $this->tool->log(array( 'row' => $this->session->data['obui_current_line'], 'status' => 'error', 'title' => $this->language->get('warning'), 'msg' => $copyResult, )); $filename = ''; } else { } } if (!empty($filename)) { $downloadArray[$language_id][] = $filename; } } } } return $downloadArray; } /* public function productGroupHandler($field, $config) { if (empty($config['columns'][$field])) { return array(); } $array_values = array(); foreach ((array) $config['columns'][$field] as $products) { if (!empty($config['multiple_separator'])) { $products = explode(@html_entity_decode($config['multiple_separator'], ENT_QUOTES, 'UTF-8'), $products); } foreach ((array) $products as $value) { if (!$value) { continue; } else { if (is_numeric($value)) { $array_values[] = $value; continue; } $value = $this->request->clean(trim($value)); $query = $this->db->query("SELECT product_group_id FROM " . DB_PREFIX . "product_group_description WHERE name = '" . $this->db->escape($value) . "'")->row; if (!empty($query['product_group_id'])) { $array_values[] = $query['product_group_id']; } } } } return $array_values; } */ public function orderStatusHandler($field, $config) { $this->load->model('gkd_import/order'); $value = $init_value = $config['columns'][$field]; if (is_numeric($value)) { // numeric, treat as status id if ($this->simulation) { $value = $this->model_gkd_import_order->getOrderStatusName($value); } } else if (is_string($value)) { // string, get status id $value = $this->model_gkd_import_order->getOrderStatusIdFromName($value); } if (!$value && isset($config['defaults']['order_status_id'])) { if ($this->simulation) { $value = '"'.$init_value . '" not found, set default: ' . $this->model_gkd_import_order->getOrderStatusName($config['defaults']['order_status_id']); } else { $value = $config['defaults']['order_status_id']; } } return $value; } public function booleanHandler($field, $config) { // handle '', '0', 0 if (empty($config['columns'][$field])) { return 0; } $value = $config['columns'][$field]; return $this->isBoolean($value); } public function isBoolean($value) { // handle numeric values if (is_numeric($value)) { if ($value > 0) { return 1; } else { return 0; } // handle textual values } else if (is_string($value)) { switch (strtolower($value)) { case 'disabled': case 'inactive': case 'false': case 'off': case 'no': case 'non': case 'na': case 'ne': case 'nu': case 'não': case 'nē': case 'nej': case 'nei': case 'nee': case 'nein': case 'nie': case 'όχι': case 'нет': case 'ні': case 'evet': case 'לא': case 'いいえ': case 'не': case '0': case 'n': return 0; break; case 'enabled': case 'active': case 'true': case 'on': case 'yes': case 'oui': case 'sí': case 'sì': case 'da': case 'sim': case 'taip': case 'jo': case 'да': case 'hayır': case 'tak': case 'так': case 'ναι': case 'はい': case 'ja': case 'jā': case 'כן': case '1': case 'y': return 1; break; } } // in case not catched return value return $value ? 1 : 0; } public function storeHandler($field, $config) { $return_values = $values_array = array(); if (empty($config['columns'][$field])) { return $values_array; } if (is_array($config['columns'][$field]) && count($config['columns'][$field]) == 1 && $config['columns'][$field][0] === '') { if (isset($config['defaults']['product_store'])) { return $config['defaults']['product_store']; } else { return array(); } } foreach ((array) $config['columns'][$field] as $value) { if (is_array($value)) { $values_array = array_merge($values_array, $value); } else if (!empty($config['multiple_separator'])) { $values_array = array_merge($values_array, explode(@html_entity_decode($config['multiple_separator'], ENT_QUOTES, 'UTF-8'), $value)); } else { $values_array[] = $value; } } if (empty($this->storeIdToName)) { $this->storeIdToName[0] = $this->config->get('config_name'); $this->load->model('setting/store'); $stores = $this->model_setting_store->getStores(); foreach ($stores as $storeItem) { $this->storeIdToName[$storeItem['store_id']] = $storeItem['name']; } } foreach ($values_array as $store) { if (is_numeric($store)) { $return_values[$store] = $store; } else if (array_search($store, $this->storeIdToName) !== false) { $return_values[$store] = array_search($store, $this->storeIdToName); } else { $this->tool->log(array( 'row' => $this->session->data['obui_current_line'], 'status' => 'error', 'title' => $this->language->get('warning'), 'msg' => sprintf($this->language->get('warning_store_not_found'), $store), )); } } if ($this->simulation) { foreach ($return_values as &$return_val) { if (isset($this->storeIdToName[(int) $return_val])) { $return_val = $this->storeIdToName[(int) $return_val]; } } } return $return_values; } public function layoutHandler($field, $config) { $return_values = $values_array = array(); if (empty($config['columns'][$field])) { return $values_array; } foreach ((array) $config['columns'][$field] as $value) { if (is_array($value)) { $values_array = array_merge($values_array, $value); } else if (!empty($config['multiple_separator'])) { $values_array = array_merge($values_array, explode(@html_entity_decode($config['multiple_separator'], ENT_QUOTES, 'UTF-8'), $value)); } else { $values_array[] = $value; } } if (empty($this->layoutIdToName)) { $this->load->model('design/layout'); $layouts = $this->model_design_layout->getLayouts(); $data['layouts'] = array('' => ''); foreach ($layouts as $layout) { $this->layoutIdToName[$layout['layout_id']] = $layout['name']; } } foreach ($values_array as $store_id => $val) { $return_values[$store_id] = ''; if ($val === '') { if (isset($config['defaults']['product_layout'][$store_id])) { $return_values[$store_id] = $config['defaults']['product_layout'][$store_id]; } } else if (is_numeric($val)) { $return_values[$store_id] = $val; } else if (array_search($val, $this->layoutIdToName) !== false) { $return_values[$store_id] = array_search($val, $this->layoutIdToName); } else { $this->tool->log(array( 'row' => $this->session->data['obui_current_line'], 'status' => 'error', 'title' => $this->language->get('warning'), 'msg' => sprintf($this->language->get('warning_layout_not_found'), $val), )); } } if ($this->simulation) { foreach ($return_values as &$return_val) { if (isset($this->layoutIdToName[(int) $return_val])) { $return_val = $this->layoutIdToName[(int) $return_val]; } } } return $return_values; } public function manufacturerHandler($config) { if (empty($config['columns']['manufacturer_id'])) { return ''; } if (is_numeric($config['columns']['manufacturer_id'])) { $query = $this->db->query("SELECT DISTINCT manufacturer_id, name FROM " . DB_PREFIX . "manufacturer WHERE manufacturer_id = '" . $this->db->escape($this->request->clean($config['columns']['manufacturer_id'])) . "'")->row; if ($this->simulation) { if (!empty($query['name'])) { if ($query['manufacturer_id'] && !empty($config['delete']) && $config['delete'] == 'missing_brand') { $this->session->data['obui_delete_brand'][] = $query['manufacturer_id']; } return '['.$query['manufacturer_id'].'] '.$query['name']; } else { return $this->language->get('not_found'); } } else { if (!empty($query['manufacturer_id']) && !empty($config['delete']) && $config['delete'] == 'missing_brand') { $this->session->data['obui_delete_brand'][] = $query['manufacturer_id']; } if (!empty($query['manufacturer_id'])) { return $query['manufacturer_id']; } } } if (!is_string($config['columns']['manufacturer_id'])) { return ''; } $query = $this->db->query("SELECT DISTINCT manufacturer_id, name FROM " . DB_PREFIX . "manufacturer WHERE name = '" . $this->db->escape($this->request->clean($config['columns']['manufacturer_id'])) . "'")->row; $this->load->model('localisation/language'); $languages = $this->model_localisation_language->getLanguages(); if (!empty($query['manufacturer_id'])) { if ($query['manufacturer_id'] && !empty($config['delete']) && $config['delete'] == 'missing_brand') { $this->session->data['obui_delete_brand'][] = $query['manufacturer_id']; } if ($this->simulation) { return '['.$query['manufacturer_id'].'] '.$query['name']; } else { return $query['manufacturer_id']; } } else if (!empty($config['manufacturer_create'])) { // manufacturer does not exists, create it ? $manufacturer_data = array( 'name' => $config['columns']['manufacturer_id'], 'sort_order' => 0, 'manufacturer_store' => isset($config['columns']['product_store']) ? $config['columns']['product_store'] : (isset($config['defaults']['product_store']) ? $config['defaults']['product_store'] : array(0)), 'keyword' => $this->tool->filter_seo($config['columns']['manufacturer_id']), ); $manufacturer_data['manufacturer_seo_url'] = array(); // for Complete SEO Package if ($this->config->get('mlseo_enabled')) { $stores = array(); if ($this->config->get('mlseo_multistore')) { $this->load->model('setting/store'); $stores = $this->model_setting_store->getStores(); } $stores[] = array( 'store_id' => 0, 'name' => 'default', ); foreach ($stores as $store) { foreach ($languages as $language) { $manufacturer_data['seo_manufacturer_description'][$store['store_id']][$language['language_id']] = array( 'name' => $config['columns']['manufacturer_id'], 'description' => '', 'seo_keyword' => '', 'seo_h1' => '', 'seo_h2' => '', 'seo_h3' => '', 'meta_title' => '', 'meta_description' => '', 'meta_keyword' => '', ); } } } // for other manufacturer data modules foreach ($languages as $language) { $manufacturer_data['manufacturer_description'][$language['language_id']] = array( 'name' => $config['columns']['manufacturer_id'], 'description' => '', 'meta_title' => $config['columns']['manufacturer_id'], 'meta_h1' => '', 'meta_description' => '', 'meta_keyword' => '', 'smp_h1_title' => '', ); } $this->load->model('catalog/manufacturer'); if (!$this->simulation) { $manufacturer_id = $this->model_catalog_manufacturer->addManufacturer($this->request->clean($manufacturer_data)); } else { return '['.$this->language->get('new').'] '.$config['columns']['manufacturer_id']; } return $manufacturer_id; } return ''; } public function parentCategoryHandler($field, $config, $ml_parent = array()) { if (empty($config['columns'][$field]) && empty($ml_parent)) { if ($this->simulation) { return $this->language->get('text_none'); } else { return 0; } } if (empty($config['columns'][$field]) && !empty($ml_parent['name'])) { $config['columns'][$field] = reset($ml_parent['name']); } $this->load->model('catalog/category'); $this->load->model('localisation/language'); $languages = $this->model_localisation_language->getLanguages(); $parent_id = 0; $simu_text = ''; if (!empty($config['subcategory_separator'])) { $subcategories = explode(@html_entity_decode($config['subcategory_separator'], ENT_QUOTES, 'UTF-8'), $config['columns'][$field]); if (!empty($ml_parent['name'])) { foreach($ml_parent['name'] as $lang_id => $val) { $subcategories_ml[$lang_id] = explode(@html_entity_decode($config['subcategory_separator'], ENT_QUOTES, 'UTF-8'), $ml_parent['name'][$lang_id]); } } if (!empty($ml_parent['seo_keyword'])) { foreach($ml_parent['seo_keyword'] as $lang_id => $val) { $subcategories_seo_ml[$lang_id] = explode(@html_entity_decode($config['subcategory_separator'], ENT_QUOTES, 'UTF-8'), $ml_parent['seo_keyword'][$lang_id]); } } } else { $subcategories = (array) $config['columns'][$field]; } $full_categories = $subcategories; $cat_name = array_pop($subcategories); if (!is_string($cat_name)) { //continue; } // detect cat id on top category if (isset($full_categories[0]) && ctype_digit($full_categories[0]) && $full_categories[0] > 0) { if ($this->simulation) { $query = $this->db->query("SELECT name, category_id FROM " . DB_PREFIX . "category_description WHERE category_id = '" . (int) $full_categories[0] . "'")->row; if (!empty($query['category_id'])) { $full_categories[0] = $query['name']; } } } if (is_numeric($cat_name)) { $parent_id = $cat_name; $simu_text = '[' . $cat_name . ']'; } else { $parent_name = $parent_lvl2_name = $parent_lvl3_name = false; if (count($subcategories)) { $parent_name = array_pop($subcategories); } if (count($subcategories)) { $parent_lvl2_name = array_pop($subcategories); } if (count($subcategories)) { $parent_lvl3_name = array_pop($subcategories); } // 2 parents levels detection, then 1, then 0 if (!empty($parent_lvl3_name)) { if (is_array($cat_name) || is_array($parent_name) || is_array($parent_lvl2_name) || is_array($parent_lvl3_name)) return 0; $query = $this->db->query("SELECT cd.name, c.category_id FROM " . DB_PREFIX . "category_description cd LEFT JOIN " . DB_PREFIX . "category c ON cd.category_id = c.category_id LEFT JOIN " . DB_PREFIX . "category_description pcd ON pcd.category_id = c.parent_id LEFT JOIN " . DB_PREFIX . "category pc ON pc.category_id = pcd.category_id LEFT JOIN " . DB_PREFIX . "category_description ppcd ON ppcd.category_id = pc.parent_id LEFT JOIN " . DB_PREFIX . "category ppc ON ppc.category_id = ppcd.category_id LEFT JOIN " . DB_PREFIX . "category_description pppcd ON pppcd.category_id = ppc.parent_id WHERE cd.name = '" . $this->db->escape(@trim($this->request->clean($cat_name))) . "' AND pcd.name = '" . $this->db->escape(@trim($this->request->clean($parent_name))) . "' AND ppcd.name = '" . $this->db->escape(@trim($this->request->clean($parent_lvl2_name))) . "' AND pppcd.name = '" . $this->db->escape(@trim($this->request->clean($parent_lvl3_name))) . "' GROUP BY cd.category_id")->rows; } else if (!empty($parent_lvl2_name)) { if (is_array($cat_name) || is_array($parent_name) || is_array($parent_lvl2_name)) return 0; $query = $this->db->query("SELECT cd.name, c.category_id FROM " . DB_PREFIX . "category_description cd LEFT JOIN " . DB_PREFIX . "category c ON cd.category_id = c.category_id LEFT JOIN " . DB_PREFIX . "category_description pcd ON pcd.category_id = c.parent_id LEFT JOIN " . DB_PREFIX . "category pc ON pc.category_id = pcd.category_id LEFT JOIN " . DB_PREFIX . "category_description ppcd ON ppcd.category_id = pc.parent_id WHERE cd.name = '" . $this->db->escape(@trim($this->request->clean($cat_name))) . "' AND pcd.name = '" . $this->db->escape(@trim($this->request->clean($parent_name))) . "' AND ppcd.name = '" . $this->db->escape(@trim($this->request->clean($parent_lvl2_name))) . "' GROUP BY cd.category_id")->rows; } else if (!empty($parent_name)) { if (is_array($cat_name) || is_array($parent_name)) return 0; $query = $this->db->query("SELECT cd.name, c.category_id FROM " . DB_PREFIX . "category_description cd LEFT JOIN " . DB_PREFIX . "category c ON cd.category_id = c.category_id LEFT JOIN " . DB_PREFIX . "category_description pcd ON pcd.category_id = c.parent_id WHERE cd.name = '" . $this->db->escape(@trim($this->request->clean($cat_name))) . "' AND pcd.name = '" . $this->db->escape(@trim($this->request->clean($parent_name))) . "' GROUP BY cd.category_id")->rows; } else { if (is_array($cat_name)) return 0; $query = $this->db->query("SELECT name, category_id FROM " . DB_PREFIX . "category_description WHERE name = '" . $this->db->escape(@trim($this->request->clean($cat_name))) . "' GROUP BY category_id")->rows; } if (count($query) === 1) { if ($this->simulation) { $simu_text = '['.$query[0]['category_id'].'] ' . implode(' <b>></b> ', $full_categories); } else { $parent_id = $query[0]['category_id']; } } else if (!empty($config['category_create'])) { // category does not exists, create it ? $this->load->model('catalog/category'); $parent_id = 0; $gkd_extra_fields = !empty($config['extra']) ? $config['extra'] : array(); $gkd_extra_desc_fields = !empty($config['extraml']) ? $config['extraml'] : array(); foreach ($full_categories as $key => $cat_name) { $cat_exists = $this->db->query("SELECT cd.category_id FROM " . DB_PREFIX . "category_description cd LEFT JOIN " . DB_PREFIX . "category c ON cd.category_id = c.category_id WHERE name = '" . $this->db->escape(@trim($this->request->clean($cat_name))) . "' AND c.parent_id = '".(int) $parent_id."'")->row; if (empty($cat_exists['category_id'])) { $cat_data = array( 'parent_id' => $parent_id, 'column' => 3, 'top' => 1, 'sort_order' => 0, 'category_store' => isset($config['columns']['product_store']) ? $config['columns']['product_store'] : (isset($config['defaults']['product_store']) ? $config['defaults']['product_store'] : array(0)), 'status' => 1, 'keyword' => $this->tool->urlify($cat_name), ); foreach ($gkd_extra_fields as $extra_field) { $cat_data[$extra_field] = isset($config['columns'][$extra_field]) ? $config['columns'][$extra_field] : ''; } $cat_data['category_seo_url'] = array(); foreach ($languages as $language) { if (!empty($subcategories_seo_ml[$language['language_id']][$key])) { $seo = $subcategories_seo_ml[$language['language_id']][$key]; } else if (!empty($subcategories_ml[$language['language_id']][$key])) { $seo = $this->tool->urlify($subcategories_ml[$language['language_id']][$key]); } else { $seo = $this->tool->urlify($cat_name); } $cat_data['category_description'][$language['language_id']] = array( 'name' => !empty($subcategories_ml[$language['language_id']][$key]) ? @trim($subcategories_ml[$language['language_id']][$key]) : @trim($cat_name), 'description' => '', 'meta_title' => !empty($subcategories_ml[$language['language_id']][$key]) ? @trim($subcategories_ml[$language['language_id']][$key]) : @trim($cat_name), 'meta_description' => '', 'meta_keyword' => '', 'seo_h1' => '', 'meta_h1' => '', 'custom_imgtitle' => '', 'custom_alt' => '', 'custom_h1' => '', 'custom_h2' => '', 'smp_h1_title' => '', 'seo_keyword' => $seo, ); foreach ($gkd_extra_desc_fields as $extra_field) { $cat_data['category_description'][$language['language_id']][$extra_field] = isset($config['columns']['product_description'][$language['language_id']][$extra_field]) ? $config['columns']['product_description'][$language['language_id']][$extra_field] : ''; } } // for Complete SEO Package if ($this->config->get('mlseo_enabled') && $this->config->get('mlseo_multistore')) { $this->load->model('setting/store'); $stores = $this->model_setting_store->getStores(); foreach ($stores as $store) { foreach ($languages as $language) { $cat_data['seo_category_description'][$store['store_id']][$language['language_id']] = array( 'name' => !empty($subcategories_ml[$language['language_id']][$key]) ? @trim($subcategories_ml[$language['language_id']][$key]) : @trim($cat_name), 'description' => '', 'seo_keyword' => '', 'seo_h1' => '', 'seo_h2' => '', 'seo_h3' => '', 'meta_title' => '', 'meta_description' => '', 'meta_keyword' => '', ); } } } if (!$this->simulation) { if (version_compare(VERSION, '2', '>=')) { $parent_id = $this->model_catalog_category->addCategory($this->request->clean($cat_data)); } else { $this->load->model('gkd_import/category'); $parent_id = $this->model_gkd_import_category->addCategory($this->request->clean($cat_data)); } } else { $simu_text .= $simu_text ? ' > ' : ''; $simu_text .= '['.$this->language->get('new').'] ' . @trim($cat_name); } } else { $parent_id = $cat_exists['category_id']; if ($this->simulation) { $simu_text .= $simu_text ? ' > ' : ''; $simu_text .= '['.$cat_exists['category_id'].'] ' . $cat_name; } } } } } return $this->simulation ? $simu_text : $parent_id; } public function categoryHandler($field, $config, $product_id, $force_parent_id = false, $ids_field = false) { $values = array(); if (!isset($config['columns'][$field])) { return $values; } // get current values if necessary if (!$this->simulation && !empty($config['category_insert_type']) && $config['category_insert_type'] == 'rm_add' && !in_array($product_id, $this->session->data['obui_processed_ids'])) { $this->db->query("DELETE FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int) $product_id. "'"); } if ((!empty($config['category_insert_type']) && $config['category_insert_type'] == 'update') || (!empty($config['category_insert_type']) && $config['category_insert_type'] == 'rm_add' && in_array($product_id, $this->session->data['obui_processed_ids']))) { $currentCats = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int) $product_id. "'")->rows; foreach ($currentCats as $currentCat) { $config['columns'][$field][] = $currentCat['category_id']; } } foreach ((array) $config['columns'][$field] as $key => $categories) { # custom_category_handler if (!$categories) { //continue; // do not skip to make possible to get subcategories in case main is empty } // add subcategories if (!empty($config['columns']['sub_'.$field][$key]) && is_string($categories)) { foreach ($config['columns']['sub_'.$field][$key] as $subcat) { $categories .= @html_entity_decode($config['subcategory_separator'], ENT_QUOTES, 'UTF-8') . $subcat; } } // handle category bindings if (is_scalar($categories) && !empty($config['col_binding'][md5($categories)])) { if (!empty($config['include_subcat'])) { $addCategories = array(); foreach ((array) $config['col_binding'][md5($categories)] as $colBindId) { $parent_query = $this->db->query("SELECT parent_id, category_id FROM " . DB_PREFIX . "category WHERE category_id = '" . (int) $colBindId. "'")->row; if ($config['include_subcat'] == 'parent') { if (!empty($parent_query['parent_id'])) { $addCategories[] = $parent_query['parent_id']; } } else if ($config['include_subcat'] == 'all') { while (!empty($parent_query['parent_id'])) { $addCategories[] = $parent_query['parent_id']; $parent_query = $this->db->query("SELECT parent_id, category_id FROM " . DB_PREFIX . "category WHERE category_id = '" . (int) $parent_query['parent_id']. "'")->row; } } $config['col_binding'][md5($categories)] = array_merge($config['col_binding'][md5($categories)], $addCategories); } } $categories = $config['col_binding'][md5($categories)]; if ($this->simulation) { foreach ((array) $categories as $colBindId) { $query = $this->db->query("SELECT cd.name, c.parent_id, c.category_id FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) WHERE c.category_id = '" . (int) $colBindId. "'")->row; if (!empty($query['category_id'])) { $cat_name = $query['name']; $cat_id = $query['category_id']; while (!empty($query['parent_id'])) { $query = $this->db->query("SELECT cd.name, c.parent_id, c.category_id FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) WHERE c.category_id = '" . (int) $query['parent_id']. "'")->row; if (!empty($query['name'])) { $cat_name = $query['name'] . ' <b>></b> ' . $cat_name; } } $values[] = '['.$cat_id.'] ' . $cat_name; } else { $this->session->data['obui_processed']['error']++; $this->tool->log(array( 'row' => $this->session->data['obui_current_line'], 'status' => 'error', 'title' => $this->language->get('warning'), 'msg' => $this->language->get('warning_category_id'), )); } } } else { $values = array_merge($categories, $values); } continue; } else if (isset($config['col_binding_mode']) && $config['col_binding_mode'] == '2') { throw new GkdSkipException($this->language->get('info_col_binding_skip')); continue; } else if (isset($config['col_binding_mode']) && $config['col_binding_mode'] == '1') { continue; } else if (isset($config['col_binding_mode']) && $config['col_binding_mode'] == '3') { continue; } if (is_string($categories) && !empty($config['category_separator']) && strpos($categories, $config['category_separator']) !== false) { $categories = explode(@html_entity_decode($config['category_separator'], ENT_QUOTES, 'UTF-8'), $categories); } else if (is_string($categories) && !empty($config['multiple_separator']) && strpos($categories, $config['multiple_separator']) !== false) { $categories = explode(@html_entity_decode($config['multiple_separator'], ENT_QUOTES, 'UTF-8'), $categories); } $this->load->model('localisation/language'); $languages = $this->model_localisation_language->getLanguages(); // xml fix if ($this->filetype == 'xml' && isset($categories['category']) && !isset($categories['category']['nameEn'])) { $categories = $categories['category']; } if (!empty($config['include_subcat'])) { $addCategories = array(); foreach ((array) $categories as $ckey => $category) { if (ctype_digit($category) && $category > 0) { $parent_query = $this->db->query("SELECT parent_id, category_id FROM " . DB_PREFIX . "category WHERE category_id = '" . (int) $category. "'")->row; if ($config['include_subcat'] == 'parent') { if (!empty($parent_query['parent_id'])) { $addCategories[] = $parent_query['parent_id']; } } else if ($config['include_subcat'] == 'all') { while (!empty($parent_query['parent_id'])) { $addCategories[] = $parent_query['parent_id']; $parent_query = $this->db->query("SELECT parent_id, category_id FROM " . DB_PREFIX . "category WHERE category_id = '" . (int) $parent_query['parent_id']. "'")->row; } } } else if (!empty($config['subcategory_separator']) && is_string($category)) { $category = html_entity_decode($category, ENT_QUOTES, 'UTF-8'); $subcategories = explode(@html_entity_decode($config['subcategory_separator'], ENT_QUOTES, 'UTF-8'), $category); $subcategories = array_map('trim', $subcategories); $subcategories = array_filter($subcategories); if ($config['include_subcat'] == 'parent') { array_pop($subcategories); $subcat = implode(@html_entity_decode($config['subcategory_separator'], ENT_QUOTES, 'UTF-8'), $subcategories); if ($subcat) { $addCategories[] = $subcat; } } else if ($config['include_subcat'] == 'all') { while ($subcategories) { array_pop($subcategories); $subcat = implode(@html_entity_decode($config['subcategory_separator'], ENT_QUOTES, 'UTF-8'), $subcategories); if ($subcat) { $addCategories[] = $subcat; } } } } } $categories = array_merge((array) $categories, $addCategories); } $categories = array_unique((array) $categories); foreach ($categories as $ckey => $category) { $full_categories_ml = array(); // xml fix if ($this->filetype == 'xml' && isset($category['nameEn'])) { foreach ($languages as $language) { $category_ml[$language['code']] = !empty($value['name'.ucfirst(substr($language['code'], 0, 2))]) ? $value['name'.ucfirst(substr($language['code'], 0, 2))] : ''; if (!empty($config['subcategory_separator'])) { $subcategories_ml[$language['code']] = explode(@html_entity_decode($config['subcategory_separator'], ENT_QUOTES, 'UTF-8'), $category_ml[$language['code']]); } else { $subcategories_ml[$language['code']] = (array) $category_ml[$language['code']]; } $full_categories_ml = $subcategories_ml; } $category = $category['nameEn']; } /* if (isset($category['nameEn'])) { $categoryFr = $category['nameFr']; if (!empty($config['subcategory_separator'])) { $subcategoriesFr = explode(@html_entity_decode($config['subcategory_separator'], ENT_QUOTES, 'UTF-8'), $categoryFr); } else { $subcategoriesFr = (array) $categoryFr; } $full_categoriesFr = $subcategoriesFr; $category = $category['nameEn']; } */ # else we treat as csv // direct cat id if (ctype_digit($category) && $category > 0) { if ($this->simulation) { $query = $this->db->query("SELECT name, category_id FROM " . DB_PREFIX . "category_description WHERE category_id = '" . (int) $category . "'")->row; if (!empty($query['category_id'])) { $values[] = '['.$query['category_id'].'] ' . $query['name']; } else { $this->session->data['obui_processed']['error']++; $this->tool->log(array( 'row' => $this->session->data['obui_current_line'], 'status' => 'error', 'title' => $this->language->get('warning'), 'msg' => $this->language->get('warning_category_id'), )); } } else { $values[] = $category; } continue; } if (!empty($config['subcategory_separator']) && is_string($category)) { $category = html_entity_decode($category, ENT_QUOTES, 'UTF-8'); $subcategories = explode(@html_entity_decode($config['subcategory_separator'], ENT_QUOTES, 'UTF-8'), $category); $subcategories = array_map('trim', $subcategories); $subcategories = array_filter($subcategories); } else { $subcategories = (array) $category; } $full_categories = $subcategories; $cat_name = array_pop($subcategories); if (!is_string($cat_name)) { continue; } // detect cat id on top category if (isset($full_categories[0]) && ctype_digit($full_categories[0]) && $full_categories[0] > 0) { if ($this->simulation) { $query = $this->db->query("SELECT name, category_id FROM " . DB_PREFIX . "category_description WHERE category_id = '" . (int) $full_categories[0] . "'")->row; if (!empty($query['category_id'])) { $full_categories[0] = $query['name']; } } } $parent_name = $parent_lvl2_name = $parent_lvl3_name = false; if (count($subcategories)) { $parent_name = array_pop($subcategories); } if (count($subcategories)) { $parent_lvl2_name = array_pop($subcategories); } if (count($subcategories)) { $parent_lvl3_name = array_pop($subcategories); } // 2 parents levels detection, then 1, then 0 if (!empty($parent_lvl3_name)) { if (is_array($cat_name) || is_array($parent_name) || is_array($parent_lvl2_name) || is_array($parent_lvl3_name)) continue; $query = $this->db->query("SELECT cd.name, c.category_id FROM " . DB_PREFIX . "category_description cd LEFT JOIN " . DB_PREFIX . "category c ON cd.category_id = c.category_id LEFT JOIN " . DB_PREFIX . "category_description pcd ON pcd.category_id = c.parent_id LEFT JOIN " . DB_PREFIX . "category pc ON pc.category_id = pcd.category_id LEFT JOIN " . DB_PREFIX . "category_description ppcd ON ppcd.category_id = pc.parent_id LEFT JOIN " . DB_PREFIX . "category ppc ON ppc.category_id = ppcd.category_id LEFT JOIN " . DB_PREFIX . "category_description pppcd ON pppcd.category_id = ppc.parent_id WHERE cd.name = '" . $this->db->escape(@trim($this->request->clean($cat_name))) . "' AND pcd.name = '" . $this->db->escape(@trim($this->request->clean($parent_name))) . "' AND ppcd.name = '" . $this->db->escape(@trim($this->request->clean($parent_lvl2_name))) . "' AND pppcd.name = '" . $this->db->escape(@trim($this->request->clean($parent_lvl3_name))) . "' GROUP BY cd.category_id")->rows; } else if (!empty($parent_lvl2_name)) { if (is_array($cat_name) || is_array($parent_name) || is_array($parent_lvl2_name)) continue; $query = $this->db->query("SELECT cd.name, c.category_id FROM " . DB_PREFIX . "category_description cd LEFT JOIN " . DB_PREFIX . "category c ON cd.category_id = c.category_id LEFT JOIN " . DB_PREFIX . "category_description pcd ON pcd.category_id = c.parent_id LEFT JOIN " . DB_PREFIX . "category pc ON pc.category_id = pcd.category_id LEFT JOIN " . DB_PREFIX . "category_description ppcd ON ppcd.category_id = pc.parent_id WHERE cd.name = '" . $this->db->escape(@trim($this->request->clean($cat_name))) . "' AND pcd.name = '" . $this->db->escape(@trim($this->request->clean($parent_name))) . "' AND ppcd.name = '" . $this->db->escape(@trim($this->request->clean($parent_lvl2_name))) . "' GROUP BY cd.category_id")->rows; } else if (!empty($parent_name)) { if (is_array($cat_name) || is_array($parent_name)) continue; $query = $this->db->query("SELECT cd.name, c.category_id FROM " . DB_PREFIX . "category_description cd LEFT JOIN " . DB_PREFIX . "category c ON cd.category_id = c.category_id LEFT JOIN " . DB_PREFIX . "category_description pcd ON pcd.category_id = c.parent_id WHERE cd.name = '" . $this->db->escape(@trim($this->request->clean($cat_name))) . "' AND pcd.name = '" . $this->db->escape(@trim($this->request->clean($parent_name))) . "' GROUP BY cd.category_id")->rows; } else { if (is_array($cat_name)) continue; $query = $this->db->query("SELECT cd.name, c.category_id FROM " . DB_PREFIX . "category_description cd LEFT JOIN " . DB_PREFIX . "category c ON cd.category_id = c.category_id WHERE cd.name = '" . $this->db->escape(@trim($this->request->clean($cat_name))) . "' OR c.code = '" . $this->db->escape(@trim($this->request->clean($cat_name))) . "' GROUP BY cd.category_id")->rows; } if (count($query) === 1) { if ($this->simulation) { if (count($full_categories) > 1) { $values[] = '['.$query[0]['category_id'].'] ' . implode(' <b>></b> ', $full_categories); } else { $values[] = '['.$query[0]['category_id'].'] ' . $query[0]['name']; } } else { $values[] = $query[0]['category_id']; } /* no more useful, filtered by query } else if (!empty($parent_name) && count($query) > 1) { foreach ($query as $row) { $parent_query = $this->db->query("SELECT name FROM " . DB_PREFIX . "category_description WHERE category_id = '" . (int) $row['category_id'] . "'")->row; if (!empty($parent_query['name']) && trim($parent_query['name']) == trim($this->request->clean($parent_name))) { if ($this->simulation) { $values[] = '['.$row['category_id'].'] ' . implode(' <b>></b> ', $full_categories); } else { $values[] = $row['category_id']; } } } */ } else if (!empty($config['category_create'])) { // category does not exists, create it ? $this->load->model('catalog/category'); $parent_id = 0; $gkd_extra_fields = !empty($config['extra']) ? $config['extra'] : array(); $gkd_extra_desc_fields = !empty($config['extraml']) ? $config['extraml'] : array(); foreach ($full_categories as $cat_name) { $cat_name_ml = array(); if ($force_parent_id) { $parent_id = $force_parent_id; } // xml fix foreach ($full_categories_ml as $lang_id => $cat) { $cat_name_ml[$lang_id] = @trim(array_shift($cat)); } /* if (isset($full_categoriesFr)) { $cat_name_ml['fr-fr'] = trim(array_shift($full_categoriesFr)); }*/ if ($ids_field && !empty($config['columns'][$ids_field][$key][$ckey])) { $current_cat_id = $config['columns'][$ids_field][$key][$ckey]; $cat_exists = $this->db->query("SELECT cd.category_id FROM " . DB_PREFIX . "category_description cd LEFT JOIN " . DB_PREFIX . "category c ON cd.category_id = c.category_id WHERE c.category_id = '".(int) $current_cat_id."' AND c.parent_id = '".(int) $parent_id."'")->row; } else { $cat_exists = $this->db->query("SELECT cd.category_id FROM " . DB_PREFIX . "category_description cd LEFT JOIN " . DB_PREFIX . "category c ON cd.category_id = c.category_id WHERE name = '" . $this->db->escape(@trim($this->request->clean($cat_name))) . "' AND c.parent_id = '".(int) $parent_id."'")->row; } if (empty($cat_exists['category_id'])) { $cat_data = array( 'parent_id' => $parent_id, 'column' => 3, 'top' => 1, 'sort_order' => 0, 'category_store' => isset($config['columns']['product_store']) ? $config['columns']['product_store'] : (isset($config['defaults']['product_store']) ? $config['defaults']['product_store'] : array(0)), 'status' => 1, 'noindex' => '', 'keyword' => $this->tool->urlify($cat_name), ); if (!empty($current_cat_id)) { $cat_data['category_id'] = $current_cat_id; } foreach ($gkd_extra_fields as $extra_field) { $cat_data[$extra_field] = isset($config['columns'][$extra_field]) ? $config['columns'][$extra_field] : ''; } $cat_data['category_seo_url'] = array(); foreach ($languages as $language) { $cat_data['category_description'][$language['language_id']] = array( 'name' => !empty($cat_name_ml[$language['code']]) ? $cat_name_ml[$language['code']] : @trim($cat_name), 'description' => '', 'meta_title' => !empty($cat_name_ml[$language['code']]) ? $cat_name_ml[$language['code']] : @trim($cat_name), 'meta_description' => '', 'meta_keyword' => '', 'seo_h1' => '', 'meta_h1' => '', 'custom_imgtitle' => '', 'custom_alt' => '', 'custom_h1' => '', 'custom_h2' => '', 'smp_h1_title' => '', 'tag' => '', 'seo_keyword' => !empty($cat_name_ml[$language['code']]) ? $this->tool->urlify($cat_name_ml[$language['code']]) : $this->tool->urlify($cat_name), ); foreach ($gkd_extra_desc_fields as $extra_field) { $cat_data['category_description'][$language['language_id']][$extra_field] = isset($config['columns']['product_description'][$language['language_id']][$extra_field]) ? $config['columns']['product_description'][$language['language_id']][$extra_field] : ''; } } // for Complete SEO Package if ($this->config->get('mlseo_enabled') && $this->config->get('mlseo_multistore')) { $this->load->model('setting/store'); $stores = $this->model_setting_store->getStores(); foreach ($stores as $store) { foreach ($languages as $language) { $cat_data['seo_category_description'][$store['store_id']][$language['language_id']] = array( 'name' => !empty($cat_name_ml[$language['code']]) ? $cat_name_ml[$language['code']] : @trim($cat_name), 'description' => '', 'seo_keyword' => '', 'seo_h1' => '', 'seo_h2' => '', 'seo_h3' => '', 'meta_title' => '', 'meta_description' => '', 'meta_keyword' => '', ); } } } if (!$this->simulation) { if (version_compare(VERSION, '2', '>=')) { $parent_id = $this->model_catalog_category->addCategory($this->request->clean($cat_data)); } else { $this->load->model('gkd_import/category'); $parent_id = $this->model_gkd_import_category->addCategory($this->request->clean($cat_data)); } } } else { $parent_id = $cat_exists['category_id']; } } // last id is assigned category if ($this->simulation) { if (!empty($current_cat_id)) { $values[] = '['.$this->language->get('new').'] [' . $current_cat_id . '] ' . implode(' <b>></b> ', $full_categories); } else { $values[] = '['.$this->language->get('new').'] ' . implode(' <b>></b> ', $full_categories); } } else { $values[] = $parent_id; } } } } if (empty($values) && isset($config['col_binding_mode']) && $config['col_binding_mode'] == '3') { throw new GkdSkipException($this->language->get('info_col_binding_skip_empty')); } return array_unique($values); } public function customerCustomFieldsHandler($custom_field_id, $value, $config) { $return_values = $values_array = array(); // Get Custom Fields if (version_compare(VERSION, '2', '>=')) { if (version_compare(VERSION, '2.2', '>=')) { $this->load->model('customer/custom_field'); $custom_field = $this->model_customer_custom_field->getCustomField($custom_field_id); } else { $this->load->model('sale/custom_field'); $custom_field = $this->model_sale_custom_field->getCustomField($custom_field_id); } } if (in_array($custom_field['type'], array('radio', 'select'))) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "custom_field_value cfv LEFT JOIN " . DB_PREFIX . "custom_field_value_description cfvd ON (cfv.custom_field_value_id = cfvd.custom_field_value_id) WHERE cfvd.name = '" . $this->db->escape($value) . "'")->row; if (!empty($query['custom_field_value_id'])) { $return_values = $query['custom_field_value_id']; } } else if (in_array($custom_field['type'], array('checkbox'))) { foreach ((array) $value as $val) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "custom_field_value cfv LEFT JOIN " . DB_PREFIX . "custom_field_value_description cfvd ON (cfv.custom_field_value_id = cfvd.custom_field_value_id) WHERE cfvd.name = '" . $this->db->escape($value) . "'")->row; if (!empty($query['custom_field_value_id'])) { $return_values[] = $query['custom_field_value_id']; } } } else { $return_values = $value; } if ($this->simulation) { return $custom_field['name'] . ' <b>></b> ' . implode(', ', (array) $return_values); } else { return $return_values; } } public function relatedHandler($field, $config) { $return_values = $values_array = array(); if (empty($config['columns'][$field])) { return $values_array; } if (count($config['columns'][$field]) == 1 && $config['columns'][$field][0] === '') { return array(); } foreach ((array) $config['columns'][$field] as $value) { if (is_array($value)) { $values_array = array_merge($values_array, $value); } else if (!empty($config['multiple_separator'])) { $values_array = array_merge($values_array, explode(@html_entity_decode($config['multiple_separator'], ENT_QUOTES, 'UTF-8'), $value)); } else { $values_array[] = $value; } } foreach ($values_array as $value) { $found = false; if (is_string($value) && $value != '') { // string, try to find product by name, model, sku, ean, upc $query = $this->db->query("SELECT p.product_id, pd.name FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) WHERE pd.name = '".$this->db->escape($value)."' OR p.model = '".$this->db->escape($value)."' OR p.sku = '".$this->db->escape($value)."' OR p.ean = '".$this->db->escape($value)."' OR p.upc = '".$this->db->escape($value)."'")->rows; if (!empty($query)) { foreach ($query as $related) { if (isset($related['product_id'])) { if ($this->simulation) { $return_values[$related['product_id']] = '['.$related['product_id'].'] ' . $related['name']; } else { $return_values[$related['product_id']] = $related['product_id']; } } } $found = true; } } if (!$found && is_numeric($value)) { // numeric, consider it is ID if ($this->simulation) { $query = $this->db->query("SELECT name FROM " . DB_PREFIX . "product_description WHERE product_id = '".(int) $value."'")->row; if (isset($query['name'])) { $return_values[] = '['.$value.'] ' . $query['name']; $found = true; } else { $return_values[] = '['.$value.'] ' . 'Not found, set this as the related product_id'; $found = 'force_id'; } } else { $return_values[] = $value; } } if (!$found && $this->simulation) { $this->tool->log(array( 'row' => $this->session->data['obui_current_line'], 'status' => 'error', 'title' => $this->language->get('warning'), 'msg' => 'The value "'.$value.'" has not been found as related product', )); $return_values[] = '['.$value.'] Not found'; } } return $return_values; } public function currencyHandler($field, $config) { $value = $config['columns'][$field]; if (is_numeric($value)) { // numeric, treat as status id if ($this->simulation) { $value = $this->getOrderStatusName($value); } } else if (is_string($value)) { // string, get status id $value = $this->getOrderStatusIdFromName($value); } return $value; } private $tax_classes = NULL; public function taxClassHandler($field, $config) { $value = $config['columns'][$field]; // no binding and default value enabled: return default directly if ($config['columns_bindings'][$field] == '' && $config['defaults'][$field]) { if ($this->simulation) { if (!isset($this->tax_classes[$config['defaults'][$field]])) { $tax_class = $this->db->query( "SELECT tax_class_id, title FROM " . DB_PREFIX . "tax_class WHERE tax_class_id = '".(int) $config['defaults'][$field]."'")->row; $this->tax_classes[$tax_class['tax_class_id']] = $tax_class['title']; } return $this->tax_classes[$config['defaults'][$field]]; } else { return $config['defaults'][$field]; } } if (!$value) return 0; // try to detect by title, id, or rate if ($value) { if (!isset($this->tax_classes)) { $this->tax_classes = $this->db->query( "SELECT tc.tax_class_id, tc.title, r.rate FROM " . DB_PREFIX . "tax_class tc LEFT JOIN " . DB_PREFIX . "tax_rule tr ON (tc.tax_class_id = tr.tax_class_id) LEFT JOIN " . DB_PREFIX . "tax_rate r ON (tr.tax_rate_id = r.tax_rate_id) WHERE r.type = 'P'")->rows; } foreach ($this->tax_classes as $tax_class) { if ($value == $tax_class['title']) { return $this->simulation ? $tax_class['title'] : $tax_class['tax_class_id']; } else if ($value == $tax_class['tax_class_id']) { return $this->simulation ? $tax_class['title'] : $tax_class['tax_class_id']; } else if ($value == $tax_class['rate']) { return $this->simulation ? $tax_class['title'] : $tax_class['tax_class_id']; } } } return 0; } public function loadCustomerGroups() { if (!$this->customer_groups) { $query = $this->db->query("SELECT customer_group_id FROM " . DB_PREFIX . "customer_group")->rows; foreach ($query as $cg) { $this->customer_groups[] = $cg['customer_group_id']; } } } protected function filterEmptyPrice($val) { return isset($val['price']) && !empty($val['price']); } public function getArrayPath($val, $path, $string_only = true) { if (!is_null($path) && is_array($val) && array_key_exists($path, $val)) { $val = $val[$path]; } else if (strpos($path, '/')) { $arrItems = explode('/', $path); //$arrItems = explode('/', str_replace('[0]/', '/0/', $path)); //$initKey = array_shift($arrItems); if (is_array($val)) { foreach ($arrItems as $arrItem) { array_shift($arrItems); // get array data with * if (!is_null($arrItem) && is_array($val) && $arrItem == '*') { $arrayVal = array(); foreach($val as $val) { foreach ($arrItems as $arrItem) { if (!is_null($arrItem) && is_array($val) && array_key_exists($arrItem, $val)) { $arrayVal[] = $val[$arrItem]; } else if (isset($val[0]) && is_array($val[0]) && !is_null($arrItem) && array_key_exists($arrItem, $val[0])) { $arrayVal[] = $val[0][$arrItem]; } } } return $arrayVal; // get normal data } else if (!is_null($arrItem) && is_array($val) && array_key_exists($arrItem, $val)) { $val = $val[$arrItem]; } else if (isset($val[0]) && is_array($val[0]) && !is_null($arrItem) && array_key_exists($arrItem, $val[0])) { $val = $val[0][$arrItem]; } else { return ''; } } } } else { $val = ''; } if ($string_only && !is_scalar($val)) { return ''; } return $val; } }
💾 Kaydet
İptal
📝 Yeniden Adlandır
İptal
Kaydet
🔐 Dosya İzinleri (chmod)
İzin Değeri:
Hızlı Seçim:
777
755
644
600
777
= Herkes okur/yazar/çalıştırır
755
= Sahip tam, diğerleri okur/çalıştırır
644
= Sahip okur/yazar, diğerleri okur
600
= Sadece sahip okur/yazar
İptal
Uygula