function fn_exim_1c_import_features($classifier_data, $company_id, $cml) { $settings_1c = Registry::get('addons.rus_exim_1c'); if (isset($classifier_data->{$cml}['properties']->{$cml}['property'])) { $features_1c = array(); $promo_text = trim($settings_1c['exim_1c_property_product']); $shipping_params = fn_exim_1c_get_shipping_params(); $features_list = fn_explode("\n", $settings_1c['exim_1c_features_list']); $deny_or_allow_list = $settings_1c['exim_1c_deny_or_allow']; foreach ($classifier_data->{$cml}['properties']->{$cml}['property'] as $_feature) { $_variants = array(); if ($deny_or_allow_list != 'not_used') { if ($deny_or_allow_list == 'do_not_import') { if (in_array(strval($_feature->{$cml}['name']), $features_list)) { continue; } } else { if (!in_array(strval($_feature->{$cml}['name']), $features_list)) { continue; } } } $feature_data = array(); $id = db_get_field("SELECT feature_id FROM ?:product_features WHERE external_id = ?s", strval($_feature->{$cml}['id'])); $new_feature = false; $feature_id = $id; if (empty($id)) { $new_feature = true; $feature_id = 0; } $feature_id = !empty($id) ? $id : 0; $feature_data = fn_exim_1c_get_feature(strval($_feature->{$cml}['name']), $feature_id, strval($_feature->{$cml}['id']), $company_id, $settings_1c); if (fn_exim_1c_feature_display_shipping_param(strval($_feature->{$cml}['name']), $shipping_params)) { if ($promo_text != strval($_feature->{$cml}['name'])) { $feature_id = fn_update_product_feature($feature_data, $feature_id); if ($new_feature) { db_query("INSERT INTO ?:ult_objects_sharing VALUES ({$company_id}, {$feature_id}, 'product_features')"); } } else { fn_delete_feature($feature_id); } } $count = 0; if (!empty($_feature->{$cml}['variants_values'])) { $_feature_data = $_feature->{$cml}['variants_values']->{$cml}['directory']; foreach ($_feature_data as $_variant) { $_variants[$count]['id'] = strval($_variant->{$cml}['id_value']); $_variants[$count]['value'] = strval($_variant->{$cml}['value']); $count++; } } $features_1c[strval($_feature->{$cml}['id'])]['id'] = $feature_id; $features_1c[strval($_feature->{$cml}['id'])]['name'] = strval($_feature->{$cml}['name']); if (!empty($_variants)) { $features_1c[strval($_feature->{$cml}['id'])]['variants'] = $_variants; } } if (Registry::isExist('rus_exim_1c.features_1c')) { $_features_1c = Registry::get('rus_exim_1c.features_1c'); $features_1c = fn_array_merge($_features_1c, $features_1c); Registry::set('rus_exim_1c.features_1c', $features_1c); } else { Registry::set('rus_exim_1c.features_1c', $features_1c); } } }
**************************************************************************** * PLEASE READ THE FULL TEXT OF THE SOFTWARE LICENSE AGREEMENT IN THE * * "copyright.txt" FILE PROVIDED WITH THIS DISTRIBUTION PACKAGE. * ****************************************************************************/ use Tygh\Registry; use Tygh\Enum\ProductFeatures; if (!defined('BOOTSTRAP')) { die('Access denied'); } fn_define('KEEP_UPLOADED_FILES', true); fn_define('NEW_FEATURE_GROUP_ID', 'OG'); if ($_SERVER['REQUEST_METHOD'] == 'POST') { fn_trusted_vars('feature_data'); // Update features if ($mode == 'update') { $feature_id = fn_update_product_feature($_REQUEST['feature_data'], $_REQUEST['feature_id'], DESCR_SL); if ($_REQUEST['feature_data']['feature_type'] == ProductFeatures::EXTENDED) { return array(CONTROLLER_STATUS_OK, 'product_features.update?feature_id=' . $feature_id); } } if ($mode == 'update_status') { fn_tools_update_status($_REQUEST); if (!empty($_REQUEST['status']) && $_REQUEST['status'] == 'D') { $filter_ids = db_get_fields("SELECT filter_id FROM ?:product_filters WHERE feature_id = ?i AND status = 'A'", $_REQUEST['id']); if (!empty($filter_ids)) { db_query("UPDATE ?:product_filters SET status = 'D' WHERE filter_id IN (?n)", $filter_ids); $filter_names_array = db_get_fields("SELECT filter FROM ?:product_filter_descriptions WHERE filter_id IN (?n) AND lang_code = ?s", $filter_ids, DESCR_SL); fn_set_notification('W', __('warning'), __('text_product_filters_were_disabled', array('[url]' => fn_url('product_filters.manage'), '[filters_list]' => implode(', ', $filter_names_array)))); } } exit;
function fn_import_feature($data, &$processed_data, &$skip_record, $category_delimiter = '///') { static $new_groups = array(); $skip_record = true; $feature = reset($data); $langs = array_keys($data); $main_lang = reset($langs); if (Registry::get('runtime.company_id')) { $company_id = Registry::get('runtime.company_id'); } else { if (!empty($feature['company'])) { $company_id = fn_get_company_id_by_name($feature['company']); } else { $company_id = isset($feature['company_id']) ? $feature['company_id'] : Registry::get('runtime.company_id'); } } if (!empty($feature['feature_id'])) { $feature_id = db_get_field('SELECT ?:product_features.feature_id FROM ?:product_features WHERE feature_id = ?i', $feature['feature_id']); } $parent_id = fn_exim_get_product_feature_group_id($feature['parent_id'], $company_id, $new_groups, $main_lang); if (empty($feature_id)) { $condition = db_quote("WHERE description = ?s AND lang_code = ?s AND feature_type = ?s", $feature['description'], $main_lang, $feature['feature_type']); $condition .= db_quote(" AND parent_id = ?i", $parent_id); $feature_id = db_get_field('SELECT ?:product_features.feature_id FROM ?:product_features_descriptions ' . 'LEFT JOIN ?:product_features ON ?:product_features.feature_id = ?:product_features_descriptions.feature_id ' . $condition); } unset($feature['feature_id']); $feature['company_id'] = $company_id; $feature['parent_id'] = $parent_id; $feature['variants'] = array(); if (!empty($feature['Variants'])) { $variants = str_getcsv($feature['Variants'], ',', "'"); array_walk($variants, 'fn_trim_helper'); list($origin_variants) = fn_get_product_feature_variants(array('feature_id' => $feature_id), 0, $main_lang); $feature['original_var_ids'] = implode(',', array_keys($origin_variants)); foreach ($variants as $variant) { $feature['variants'][]['variant'] = $variant; } } $skip = false; if (empty($feature_id)) { $feature_id = fn_update_product_feature($feature, 0, $main_lang); $processed_data['N']++; fn_set_progress('echo', __('updating') . ' features <b>' . $feature_id . '</b>. ', false); } else { if (!fn_check_company_id('product_features', 'feature_id', $feature_id)) { $processed_data['S']++; $skip = true; } else { // Convert categories from Names to C_IDS: Electronics,Processors -> 3,45 $_data = $feature; $_data['categories_path'] = fn_exim_get_features_convert_category_path($feature, $main_lang, $category_delimiter); fn_update_product_feature($_data, $feature_id, $main_lang); if (in_array($feature_id, $new_groups)) { $processed_data['N']++; } else { $processed_data['E']++; fn_set_progress('echo', __('creating') . ' features <b>' . $feature_id . '</b>. ', false); } } } if (!$skip) { fn_exim_set_product_feature_categories($feature_id, $feature, $main_lang, $category_delimiter); foreach ($data as $lang_code => $feature_data) { unset($feature_data['feature_id']); db_query('UPDATE ?:product_features_descriptions SET ?u WHERE feature_id = ?i AND lang_code = ?s', $feature_data, $feature_id, $lang_code); } if (fn_allowed_for('ULTIMATE')) { if (!empty($company_id)) { fn_exim_update_share_feature($feature_id, $company_id); } } } return $feature_id; }
/** * If feature group exists return it id, else create such groups for all available langs * * @param string $group Group name * @param int $company_id Company identifier * @param string $lang_code 2-letter language code * * @return integer ID of group */ function fn_exim_check_feature_group($group, $company_id, $lang_code) { $group_id = db_get_field("SELECT feature_id FROM ?:product_features_descriptions WHERE description = ?s AND lang_code = ?s LIMIT 1", $group, $lang_code); if (empty($group_id)) { $group_data = array('feature_id' => 0, 'description' => $group, 'lang_code' => $lang_code, 'feature_type' => 'G', 'company_id' => $company_id, 'status' => 'A'); $group_id = fn_update_product_feature($group_data, 0, $lang_code); } if (fn_allowed_for('ULTIMATE')) { fn_exim_update_share_feature($group_id, $company_id); } return $group_id; }
public static function importFeaturesFile($data_features, $import_params) { $cml = self::$cml; $features_import = array(); if (isset($data_features->{$cml}['property'])) { $promo_text = trim(self::$s_commerceml['exim_1c_property_product']); $shipping_params = self::getShippingFeatures(); $features_list = fn_explode("\n", self::$s_commerceml['exim_1c_features_list']); $deny_or_allow_list = self::$s_commerceml['exim_1c_deny_or_allow']; $company_id = self::$company_id; foreach ($data_features->{$cml}['property'] as $_feature) { $_variants = array(); $feature_data = array(); $feature_name = strval($_feature->{$cml}['name']); if ($deny_or_allow_list == 'do_not_import') { if (in_array($feature_name, $features_list)) { self::addMessageLog("Feature is not added (do not import): " . $feature_name); continue; } } elseif ($deny_or_allow_list == 'import_only') { if (!in_array($feature_name, $features_list)) { self::addMessageLog("Feature is not added (import only): " . $feature_name); continue; } } $feature_id = db_get_field("SELECT feature_id FROM ?:product_features WHERE external_id = ?s", strval($_feature->{$cml}['id'])); $new_feature = false; if (empty($feature_id)) { $new_feature = true; $feature_id = 0; } $feature_data = self::dataFeatures($feature_name, $feature_id, strval($_feature->{$cml}['type_field']), strval($_feature->{$cml}['id']), $import_params); if (self::displayFeatures($feature_name, $shipping_params)) { if ($promo_text != $feature_name) { $feature_id = fn_update_product_feature($feature_data, $feature_id); self::addMessageLog("Feature is added: " . $feature_name); if ($new_feature) { db_query("INSERT INTO ?:ult_objects_sharing VALUES ({$company_id}, {$feature_id}, 'product_features')"); } } else { fn_delete_feature($feature_id); $feature_id = 0; } } else { fn_delete_feature($feature_id); $feature_id = 0; } if (!empty($_feature->{$cml}['variants_values'])) { $_feature_data = $_feature->{$cml}['variants_values']->{$cml}['directory']; foreach ($_feature_data as $_variant) { $_variants[strval($_variant->{$cml}['id_value'])]['id'] = strval($_variant->{$cml}['id_value']); $_variants[strval($_variant->{$cml}['id_value'])]['value'] = strval($_variant->{$cml}['value']); } } $features_import[strval($_feature->{$cml}['id'])]['id'] = $feature_id; $features_import[strval($_feature->{$cml}['id'])]['name'] = $feature_name; $features_import[strval($_feature->{$cml}['id'])]['type'] = $feature_data['feature_type']; if (!empty($_variants)) { $features_import[strval($_feature->{$cml}['id'])]['variants'] = $_variants; } } } $feature_data = array(); if (self::$s_commerceml['exim_1c_used_brand'] == 'field_brand') { $company_id = self::$company_id; $feature_id = db_get_field("SELECT feature_id FROM ?:product_features WHERE external_id = ?s AND company_id = ?i", "brand1c", $company_id); $new_feature = false; if (empty($feature_id)) { $new_feature = true; $feature_id = 0; } $feature_data = self::dataFeatures($cml['brand'], $feature_id, ProductFeatures::EXTENDED, "brand1c", $import_params); $_feature_id = fn_update_product_feature($feature_data, $feature_id); self::addMessageLog("Feature brand is added"); if ($feature_id == 0) { db_query("INSERT INTO ?:ult_objects_sharing VALUES ({$company_id}, {$_feature_id}, 'product_features')"); } $features_import['brand1c']['id'] = !empty($feature_id) ? $feature_id : $_feature_id; $features_import['brand1c']['name'] = $cml['brand']; } if (!empty($features_import)) { if (!empty($features_commerceml)) { $_features_commerceml = self::$features_commerceml; self::$features_commerceml = fn_array_merge($_features_commerceml, $features_import); } else { self::$features_commerceml = $features_import; } } }
public function update($id, $params) { fn_define('NEW_FEATURE_GROUP_ID', 'OG'); $status = Response::STATUS_BAD_REQUEST; $data = array(); unset($params['feature_id']); if (!empty($params['variants'])) { list($variants) = fn_get_product_feature_variants(array('feature_id' => $id)); $params['original_var_ids'] = implode(',', array_keys($variants)); } $lang_code = $this->safeGet($params, 'lang_code', DEFAULT_LANGUAGE); $feature_id = fn_update_product_feature($params, $id, $lang_code); if ($feature_id) { $status = Response::STATUS_OK; $data = array('feature_id' => $feature_id); } return array('status' => $status, 'data' => $data); }