Exemple #1
0
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;
         }
     }
 }
Exemple #6
0
 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);
 }