function fn_import_feature_variant($data, $options, &$processed_data, &$skip_record) { static $features; $skip_record = true; $variant = reset($data); if (empty($variant['Feature name'])) { return false; } $langs = array_keys($data); $main_lang = reset($langs); array_walk($variant, 'fn_trim_helper'); if (!empty($variant['Feature group'])) { $feature_group = fn_exim_get_feature_data_by_name($variant['Feature group'], ''); $variant['parent_id'] = $feature_group['feature_id']; } else { $variant['Feature group'] = ''; $variant['parent_id'] = 0; } $feature = fn_exim_get_feature_data_by_name($variant['Feature name'], $variant['Feature group']); if (empty($feature)) { $processed_data['S']++; return false; } $feature_id = $feature['feature_id']; $company_id = $feature['company_id']; if (Registry::get('runtime.company_id') && Registry::get('runtime.company_id') != $company_id) { $processed_data['S']++; return false; } if (!isset($features)) { list($features) = fn_get_product_features(array('plain' => true), 0, $main_lang); } if (!empty($feature_id)) { if (isset($variant['variant_id'])) { $variant_id = db_get_field('SELECT variant_id FROM ?:product_feature_variants WHERE variant_id = ?i', $variant['variant_id']); } if (empty($variant_id)) { $join = db_quote('INNER JOIN ?:product_feature_variants fv ON fv.variant_id = fvd.variant_id'); $variant_id = db_get_field("SELECT fvd.variant_id FROM ?:product_feature_variant_descriptions AS fvd {$join} WHERE variant = ?s AND feature_id = ?i", $variant['variant'], $feature_id); } $new_variant_id = fn_update_product_feature_variant($feature_id, $features[$feature_id]['feature_type'], $variant, $main_lang); if ($variant_id == $new_variant_id) { $processed_data['E']++; } else { $processed_data['N']++; $variant_id = $new_variant_id; } foreach ($data as $lang_code => $variant) { fn_update_product_feature_variant($feature_id, $features[$feature_id]['feature_type'], $variant, $lang_code); } if (!empty($variant['image_id'])) { fn_import_images($options['images_path'], $variant['image_id'], '', 0, 'V', $variant_id, 'feature_variant'); } } return $variant_id; }
/** * Updates product feature variants * * @param int $feature_id Feature identifier * @param array $feature_data Feature data * @param string $lang_code 2-letters language code * * @return array $variant_ids Feature variants identifier */ function fn_update_product_feature_variants($feature_id, &$feature_data, $lang_code = DESCR_SL) { $variant_ids = array(); if (!empty($feature_data['variants'])) { foreach ($feature_data['variants'] as $key => $variant) { $variant_id = fn_update_product_feature_variant($feature_id, $feature_data['feature_type'], $variant); $variant_ids[$key] = $variant_id; $feature_data['variants'][$key]['variant_id'] = $variant_id; // for addons } if (!empty($variant_ids)) { fn_attach_image_pairs('variant_image', 'feature_variant', 0, $lang_code, $variant_ids); fn_attach_image_pairs('feature_variant_extra', 'feature_variant_extra', 0, $lang_code, $variant_ids); } if (!empty($feature_data['original_var_ids'])) { $original_variant_ids = explode(',', $feature_data['original_var_ids']); $deleted_variants = array_diff($original_variant_ids, $variant_ids); fn_delete_product_feature_variants(0, $deleted_variants); } } }