function fn_delete_feature($feature_id)
{
    $feature_type = db_get_field("SELECT feature_type FROM ?:product_features WHERE feature_id = ?i", $feature_id);
    if ($feature_type == 'G') {
        $fids = db_get_fields("SELECT feature_id FROM ?:product_features WHERE parent_id = ?i", $feature_id);
        if (!empty($fids)) {
            foreach ($fids as $fid) {
                fn_delete_feature($fid);
            }
        }
    }
    db_query("DELETE FROM ?:product_features WHERE feature_id = ?i", $feature_id);
    db_query("DELETE FROM ?:product_features_descriptions WHERE feature_id = ?i", $feature_id);
    db_query("DELETE FROM ?:product_features_values WHERE feature_id = ?i", $feature_id);
    $v_ids = db_get_fields("SELECT variant_id FROM ?:product_feature_variants WHERE feature_id = ?i", $feature_id);
    // Delete variant images
    foreach ($v_ids as $v_id) {
        fn_delete_image_pairs($v_id, 'feature_variant');
    }
    db_query("DELETE FROM ?:product_feature_variants WHERE feature_id = ?i", $feature_id);
    db_query("DELETE FROM ?:product_feature_variant_descriptions WHERE variant_id IN (?n)", $v_ids);
    $filter_ids = db_get_fields("SELECT filter_id FROM ?:product_filters WHERE feature_id = ?i", $feature_id);
    foreach ($filter_ids as $_filter_id) {
        fn_delete_product_filter($_filter_id);
    }
}
function fn_delete_company($company_id)
{
    if (empty($company_id)) {
        return false;
    }
    if (fn_allowed_for('MULTIVENDOR')) {
        // Do not delete vendor if there're any orders associated with this company
        if (db_get_field("SELECT COUNT(*) FROM ?:orders WHERE company_id = ?i", $company_id)) {
            fn_set_notification('W', __('warning'), __('unable_delete_vendor_orders_exists'), '', 'company_has_orders');
            return false;
        }
    }
    fn_set_hook('delete_company_pre', $company_id);
    $result = db_query("DELETE FROM ?:companies WHERE company_id = ?i", $company_id);
    // deleting categories
    $cat_ids = db_get_fields("SELECT category_id FROM ?:categories WHERE company_id = ?i", $company_id);
    foreach ($cat_ids as $cat_id) {
        fn_delete_category($cat_id, false);
    }
    // deleting products
    $product_ids = db_get_fields("SELECT product_id FROM ?:products WHERE company_id = ?i", $company_id);
    foreach ($product_ids as $product_id) {
        fn_delete_product($product_id);
    }
    // deleting shipping
    $shipping_ids = db_get_fields("SELECT shipping_id FROM ?:shippings WHERE company_id = ?i", $company_id);
    foreach ($shipping_ids as $shipping_id) {
        fn_delete_shipping($shipping_id);
    }
    if (fn_allowed_for('ULTIMATE')) {
        // deleting layouts
        $layouts = Layout::instance($company_id)->getList();
        foreach ($layouts as $layout_id => $layout) {
            Layout::instance($company_id)->delete($layout_id);
        }
    }
    $blocks = Block::instance($company_id)->getAllUnique();
    foreach ($blocks as $block) {
        Block::instance($company_id)->remove($block['block_id']);
    }
    $product_tabs = ProductTabs::instance($company_id)->getList();
    foreach ($product_tabs as $product_tab) {
        ProductTabs::instance($company_id)->delete($product_tab['tab_id'], true);
    }
    $_menus = Menu::getList(db_quote(" AND company_id = ?i", $company_id));
    foreach ($_menus as $menu) {
        Menu::delete($menu['menu_id']);
    }
    db_query("DELETE FROM ?:company_descriptions WHERE company_id = ?i", $company_id);
    // deleting product_options
    $option_ids = db_get_fields("SELECT option_id FROM ?:product_options WHERE company_id = ?i", $company_id);
    foreach ($option_ids as $option_id) {
        fn_delete_product_option($option_id);
    }
    // deleting company admins and users
    if (Registry::get('settings.Stores.share_users') != 'Y') {
        $users_condition = db_quote(' OR company_id = ?i', $company_id);
    } else {
        $users_condition = '';
        // Unassign users from deleted company
        db_query('UPDATE ?:users SET company_id = 0 WHERE company_id = ?i', $company_id);
    }
    $user_ids = db_get_fields("SELECT user_id FROM ?:users WHERE company_id = ?i AND user_type = ?s ?p", $company_id, 'V', $users_condition);
    foreach ($user_ids as $user_id) {
        fn_delete_user($user_id);
    }
    // deleting pages
    $page_ids = db_get_fields("SELECT page_id FROM ?:pages WHERE company_id = ?i", $company_id);
    foreach ($page_ids as $page_id) {
        fn_delete_page($page_id);
    }
    // deleting promotions
    $promotion_ids = db_get_fields("SELECT promotion_id FROM ?:promotions WHERE company_id = ?i", $company_id);
    fn_delete_promotions($promotion_ids);
    // deleting features
    $feature_ids = db_get_fields("SELECT feature_id FROM ?:product_features WHERE company_id = ?i", $company_id);
    foreach ($feature_ids as $feature_id) {
        fn_delete_feature($feature_id);
    }
    // deleting logos
    $types = fn_get_logo_types();
    foreach ($types as $type => $data) {
        fn_delete_logo($type, $company_id);
    }
    $payment_ids = db_get_fields('SELECT payment_id FROM ?:payments WHERE company_id = ?i', $company_id);
    foreach ($payment_ids as $payment_id) {
        fn_delete_payment($payment_id);
    }
    // Delete sitemap sections and links
    $params = array('company_id' => $company_id);
    $section_ids = fn_get_sitemap_sections($params);
    fn_delete_sitemap_sections(array_keys($section_ids));
    fn_set_hook('delete_company', $company_id, $result);
    return $result;
}
Example #3
0
function fn_google_export_remove_additional_google_categories()
{
    $available_langs = array_keys(fn_google_export_available_categories());
    foreach ($available_langs as $lang) {
        $feature_id = db_get_field("SELECT feature_id FROM ?:product_features_descriptions WHERE description = 'Google product category ({$lang})' AND lang_code = ?s", DEFAULT_LANGUAGE);
        if (!empty($feature_id)) {
            fn_delete_feature($feature_id);
        }
    }
}
Example #4
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);
        }
    }
}
Example #5
0
    }
    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;
    }
    if ($mode == 'delete') {
        if (!empty($_REQUEST['feature_id'])) {
            fn_delete_feature($_REQUEST['feature_id']);
        }
    }
    return array(CONTROLLER_STATUS_OK, 'product_features.manage');
}
if ($mode == 'update') {
    $selected_section = empty($_REQUEST['selected_section']) ? 'detailed' : $_REQUEST['selected_section'];
    $feature = fn_get_product_feature_data($_REQUEST['feature_id'], false, false, DESCR_SL);
    Registry::get('view')->assign('feature', $feature);
    list($group_features) = fn_get_product_features(array('feature_types' => ProductFeatures::GROUP), 0, DESCR_SL);
    Registry::get('view')->assign('group_features', $group_features);
    if (fn_allowed_for('ULTIMATE') && !Registry::get('runtime.company_id')) {
        Registry::get('view')->assign('picker_selected_companies', fn_ult_get_controller_shared_companies($_REQUEST['feature_id']));
    }
    $params = array('feature_id' => $feature['feature_id'], 'feature_type' => $feature['feature_type'], 'get_images' => true, 'page' => !empty($_REQUEST['page']) ? $_REQUEST['page'] : 1, 'items_per_page' => !empty($_REQUEST['items_per_page']) ? $_REQUEST['items_per_page'] : Registry::get('settings.Appearance.admin_elements_per_page'));
    list($variants, $search) = fn_get_product_feature_variants($params, Registry::get('settings.Appearance.admin_elements_per_page'), DESCR_SL);
/**
 * Removes product feature
 *
 * @param int $feature_id Feature identifier
 * @return boolean Always true
 */
function fn_delete_feature($feature_id)
{
    $feature_deleted = true;
    if (fn_allowed_for('ULTIMATE')) {
        if (!fn_check_company_id('product_features', 'feature_id', $feature_id)) {
            fn_company_access_denied_notification();
            return false;
        }
    }
    /**
     * Adds additional actions before product feature deleting
     *
     * @param int $feature_id Feature identifier
     */
    fn_set_hook('delete_feature_pre', $feature_id);
    $feature_type = db_get_field("SELECT feature_type FROM ?:product_features WHERE feature_id = ?i", $feature_id);
    fn_set_hook('delete_product_feature', $feature_id, $feature_type);
    if ($feature_type == 'G') {
        $fids = db_get_fields("SELECT feature_id FROM ?:product_features WHERE parent_id = ?i", $feature_id);
        if (!empty($fids)) {
            foreach ($fids as $fid) {
                fn_delete_feature($fid);
            }
        }
    }
    $affected_rows = db_query("DELETE FROM ?:product_features WHERE feature_id = ?i", $feature_id);
    db_query("DELETE FROM ?:product_features_descriptions WHERE feature_id = ?i", $feature_id);
    if ($affected_rows == 0) {
        fn_set_notification('E', __('error'), __('object_not_found', array('[object]' => __('feature'))), '', '404');
        $feature_deleted = false;
    }
    $variant_ids = fn_delete_product_feature_variants($feature_id);
    if (!fn_allowed_for('ULTIMATE:FREE')) {
        $filter_ids = db_get_fields("SELECT filter_id FROM ?:product_filters WHERE feature_id = ?i", $feature_id);
        foreach ($filter_ids as $_filter_id) {
            fn_delete_product_filter($_filter_id);
        }
    }
    /**
     * Adds additional actions after product feature deleting
     *
     * @param int   $feature_id  Deleted feature identifier
     * @param array $variant_ids Deleted feature variants
     */
    fn_set_hook('delete_feature_post', $feature_id, $variant_ids);
    return $feature_deleted;
}
 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;
         }
     }
 }
Example #8
0
 public function delete($id)
 {
     $data = array();
     $status = Response::STATUS_NOT_FOUND;
     if (fn_delete_feature($id)) {
         $status = Response::STATUS_OK;
         $data['message'] = 'Ok';
     }
     return array('status' => $status, 'data' => $data);
 }
Example #9
0
 public function delete($id)
 {
     $data = array();
     $status = Response::STATUS_NOT_FOUND;
     if (fn_delete_feature($id)) {
         $status = Response::STATUS_NO_CONTENT;
     }
     return array('status' => $status, 'data' => $data);
 }