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;
}
Ejemplo n.º 2
0
/**
 * 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);
        }
    }
}